Mehr const, weniger Warnungen.

Bugfix für spelllist_add (aufsteigend sortiert)
This commit is contained in:
Enno Rehling 2005-10-08 15:44:40 +00:00
parent 1771a81c52
commit 2602a8db67
4 changed files with 50 additions and 42 deletions

View File

@ -1403,7 +1403,7 @@ fighters(battle *b, fighter *af, int minrow, int maxrow, int mask)
} }
static void static void
report_failed_spell(battle * b, unit * mage, spell * sp) report_failed_spell(battle * b, unit * mage, const spell * sp)
{ {
message * m = msg_message("battle::spell_failed", "unit spell", mage, sp); message * m = msg_message("battle::spell_failed", "unit spell", mage, sp);
message_all(b, m); message_all(b, m);
@ -1414,7 +1414,6 @@ void
do_combatmagic(battle *b, combatmagic_t was) do_combatmagic(battle *b, combatmagic_t was)
{ {
void **fi; void **fi;
spell *sp;
region *r = b->region; region *r = b->region;
castorder *co; castorder *co;
castorder *cll[MAX_SPELLRANK]; castorder *cll[MAX_SPELLRANK];
@ -1435,6 +1434,7 @@ do_combatmagic(battle *b, combatmagic_t was)
level = eff_skill(mage, SK_MAGIC, r); level = eff_skill(mage, SK_MAGIC, r);
if (level > 0) { if (level > 0) {
double power; double power;
const spell *sp;
const struct locale * lang = mage->faction->locale; const struct locale * lang = mage->faction->locale;
char cmd[128]; char cmd[128];
order * ord; order * ord;
@ -1489,7 +1489,7 @@ do_combatmagic(battle *b, combatmagic_t was)
for (spellrank = 0; spellrank < MAX_SPELLRANK; spellrank++) { for (spellrank = 0; spellrank < MAX_SPELLRANK; spellrank++) {
for (co = cll[spellrank]; co; co = co->next) { for (co = cll[spellrank]; co; co = co->next) {
fighter * fig = (fighter*)co->magician; fighter * fig = (fighter*)co->magician;
spell * sp = co->sp; const spell * sp = co->sp;
int level = co->level; int level = co->level;
double power = co->force; double power = co->force;
@ -1508,7 +1508,7 @@ do_combatmagic(battle *b, combatmagic_t was)
static void static void
do_combatspell(troop at, int row) do_combatspell(troop at, int row)
{ {
spell *sp; const spell *sp;
fighter *fi = at.fighter; fighter *fi = at.fighter;
unit *mage = fi->unit; unit *mage = fi->unit;
battle *b = fi->side->battle; battle *b = fi->side->battle;

View File

@ -717,12 +717,10 @@ countspells(unit *u, int step)
* Parameter count ist dabei die Anzahl der bereits gezauberten Sprüche * Parameter count ist dabei die Anzahl der bereits gezauberten Sprüche
*/ */
int int
spellcost(unit *u, spell * sp) spellcost(unit *u, const spell * sp)
{ {
int k, aura = 0; int k, aura = 0;
int count; int count = countspells(u, 0);
count = countspells(u,0);
for (k = 0; k < MAXINGREDIENT; k++) { for (k = 0; k < MAXINGREDIENT; k++) {
if (sp->komponenten[k][0] == R_AURA) { if (sp->komponenten[k][0] == R_AURA) {
@ -741,7 +739,7 @@ spellcost(unit *u, spell * sp)
* niedrigstwertigen und sollte von den beiden anderen Typen * niedrigstwertigen und sollte von den beiden anderen Typen
* überschrieben werden */ * überschrieben werden */
static int static int
spl_costtyp(spell * sp) spl_costtyp(const spell * sp)
{ {
int k; int k;
int costtyp = SPC_FIX; int costtyp = SPC_FIX;
@ -769,7 +767,7 @@ spl_costtyp(spell * sp)
* generiert werden. * generiert werden.
* */ * */
int int
eff_spelllevel(unit *u, spell * sp, int cast_level, int range) eff_spelllevel(unit *u, const spell * sp, int cast_level, int range)
{ {
int k; int k;
int maxlevel; int maxlevel;
@ -824,7 +822,7 @@ eff_spelllevel(unit *u, spell * sp, int cast_level, int range)
* multipliziert. * multipliziert.
*/ */
void void
pay_spell(unit * u, spell * sp, int cast_level, int range) pay_spell(unit * u, const spell * sp, int cast_level, int range)
{ {
int k; int k;
int resuse; int resuse;
@ -891,7 +889,7 @@ knowsspell(const region * r, const unit * u, const spell * sp)
*/ */
boolean boolean
cancast(unit * u, spell * sp, int level, int range, struct order * ord) cancast(unit * u, const spell * sp, int level, int range, struct order * ord)
{ {
int k; int k;
resource_t res; resource_t res;
@ -968,7 +966,7 @@ cancast(unit * u, spell * sp, int level, int range, struct order * ord)
*/ */
double double
spellpower(region * r, unit * u, spell * sp, int cast_level, struct order * ord) spellpower(region * r, unit * u, const spell * sp, int cast_level, struct order * ord)
{ {
curse * c; curse * c;
double force = cast_level; double force = cast_level;
@ -1202,7 +1200,7 @@ is_magic_resistant(unit *magician, unit *target, int resist_bonus)
*/ */
boolean boolean
fumble(region * r, unit * u, spell * sp, int cast_grade) fumble(region * r, unit * u, const spell * sp, int cast_grade)
{ {
/* X ergibt Zahl zwischen 1 und 0, je kleiner, desto besser der Magier. /* X ergibt Zahl zwischen 1 und 0, je kleiner, desto besser der Magier.
* 0,5*40-20=0, dh wenn der Magier doppelt so gut ist, wie der Spruch * 0,5*40-20=0, dh wenn der Magier doppelt so gut ist, wie der Spruch
@ -1261,7 +1259,7 @@ do_fumble(castorder *co)
curse * c; curse * c;
region * r = co->rt; region * r = co->rt;
unit * u = (unit*)co->magician; unit * u = (unit*)co->magician;
spell * sp = co->sp; const spell *sp = co->sp;
int level = co->level; int level = co->level;
int duration; int duration;
variant effect; variant effect;
@ -1523,7 +1521,7 @@ static int
verify_targets(castorder *co) verify_targets(castorder *co)
{ {
unit *mage = (unit *)co->magician; unit *mage = (unit *)co->magician;
spell *sp = co->sp; const spell *sp = co->sp;
region *target_r = co->rt; region *target_r = co->rt;
spellparameter *sa = co->par; spellparameter *sa = co->par;
int failed = 0; int failed = 0;
@ -1969,7 +1967,7 @@ add_spellparameter(region *target_r, unit *u, const char *syntax, char ** param,
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
castorder * castorder *
new_castorder(void *u, unit *u2, spell *sp, region *r, int lev, new_castorder(void *u, unit *u2, const spell *sp, region *r, int lev,
double force, int range, struct order * ord, spellparameter *p) double force, int range, struct order * ord, spellparameter *p)
{ {
castorder *corder; castorder *corder;
@ -2646,7 +2644,7 @@ magic(void)
int verify, cast_level = co->level; int verify, cast_level = co->level;
boolean fumbled = false; boolean fumbled = false;
unit * u = (unit *)co->magician; unit * u = (unit *)co->magician;
spell * sp = co->sp; const spell *sp = co->sp;
region * target_r = co->rt; region * target_r = co->rt;
/* reichen die Komponenten nicht, wird der Level reduziert. */ /* reichen die Komponenten nicht, wird der Level reduziert. */
@ -2746,7 +2744,7 @@ magic(void)
} }
const char * const char *
spell_info(const struct spell * sp, const struct locale * lang) spell_info(const spell * sp, const struct locale * lang)
{ {
if (sp->info==NULL) { if (sp->info==NULL) {
return LOC(lang, mkname("spellinfo", sp->sname)); return LOC(lang, mkname("spellinfo", sp->sname));
@ -2755,7 +2753,7 @@ spell_info(const struct spell * sp, const struct locale * lang)
} }
const char * const char *
spell_name(const struct spell * sp, const struct locale * lang) spell_name(const spell * sp, const struct locale * lang)
{ {
if (sp->info==NULL) { if (sp->info==NULL) {
return LOC(lang, mkname("spell", sp->sname)); return LOC(lang, mkname("spell", sp->sname));
@ -2766,7 +2764,20 @@ spell_name(const struct spell * sp, const struct locale * lang)
void void
spelllist_add(spell_list ** lspells, spell * sp) spelllist_add(spell_list ** lspells, spell * sp)
{ {
spell_list * entry = malloc(sizeof(spell_list)); spell_list * entry;
while (*lspells) {
spell_list * slist = *lspells;
if (slist->data->id==sp->id) {
if (slist->data==sp) {
log_error(("trying to add spell '%s' to a list twice.\n", sp->sname));
return;
}
}
if (slist->data->id>sp->id) break;
lspells = &slist->next;
}
entry = malloc(sizeof(spell_list));
entry->data = sp; entry->data = sp;
entry->next = *lspells; entry->next = *lspells;
*lspells = entry; *lspells = entry;

View File

@ -127,7 +127,7 @@ typedef struct castorder {
void *magician; /* Magier (kann vom Typ struct unit oder fighter sein) */ void *magician; /* Magier (kann vom Typ struct unit oder fighter sein) */
struct unit *familiar; /* Vertrauter, gesetzt, wenn der Spruch durch struct unit *familiar; /* Vertrauter, gesetzt, wenn der Spruch durch
den Vertrauten gezaubert wird */ den Vertrauten gezaubert wird */
struct spell *sp; /* Spruch */ const struct spell *sp; /* Spruch */
int level; /* gewünschte Stufe oder Stufe des Magiers */ int level; /* gewünschte Stufe oder Stufe des Magiers */
double force; /* Stärke des Zaubers */ double force; /* Stärke des Zaubers */
struct region *rt; /* Zielregion des Spruchs */ struct region *rt; /* Zielregion des Spruchs */
@ -141,7 +141,7 @@ typedef void (*spell_f) (void*);
/* normale zauber: */ /* normale zauber: */
typedef int (*nspell_f)(castorder*); typedef int (*nspell_f)(castorder*);
/* kampfzauber: */ /* kampfzauber: */
typedef int (*cspell_f) (struct fighter*, int, double, struct spell * sp); typedef int (*cspell_f) (struct fighter*, int, double, const struct spell * sp);
/* zauber-patzer: */ /* zauber-patzer: */
typedef void (*pspell_f) (castorder *); typedef void (*pspell_f) (castorder *);
@ -306,13 +306,13 @@ int change_maxspellpoints(struct unit * u, int csp);
/* verändert die maximalen Magiepunkte einer Einheit */ /* verändert die maximalen Magiepunkte einer Einheit */
/* Zaubern */ /* Zaubern */
extern double spellpower(struct region *r, struct unit *u, spell *spruch, int cast_level, struct order * ord); extern double spellpower(struct region *r, struct unit *u, const spell *sp, int cast_level, struct order * ord);
/* ermittelt die Stärke eines Spruchs */ /* ermittelt die Stärke eines Spruchs */
boolean fumble (struct region *r, struct unit *u, spell *spruch, int cast_level); boolean fumble (struct region *r, struct unit *u, const spell *sp, int cast_level);
/* true, wenn der Zauber misslingt, bei false gelingt der Zauber */ /* true, wenn der Zauber misslingt, bei false gelingt der Zauber */
/* */ /* */
castorder *new_castorder(void *u, struct unit *familiar, spell *sp, struct region *r, castorder *new_castorder(void *u, struct unit *familiar, const spell *sp, struct region *r,
int lev, double force, int distance, struct order * ord, spellparameter *p); int lev, double force, int distance, struct order * ord, spellparameter *p);
/* Zwischenspreicher für Zauberbefehle, notwendig für Prioritäten */ /* Zwischenspreicher für Zauberbefehle, notwendig für Prioritäten */
void add_castorder(castorder **cll, castorder *co); void add_castorder(castorder **cll, castorder *co);
@ -324,18 +324,18 @@ void free_castorders(castorder *co);
int countspells(struct unit *u, int step); int countspells(struct unit *u, int step);
/* erhöht den Counter für Zaubersprüche um 'step' und gibt die neue /* erhöht den Counter für Zaubersprüche um 'step' und gibt die neue
* Anzahl der gezauberten Sprüche zurück. */ * Anzahl der gezauberten Sprüche zurück. */
int spellcost(struct unit *u, spell *spruch); int spellcost(struct unit *u, const spell *sp);
/* gibt die für diesen Spruch derzeit notwendigen Magiepunkte auf der /* gibt die für diesen Spruch derzeit notwendigen Magiepunkte auf der
* geringstmöglichen Stufe zurück, schon um den Faktor der bereits * geringstmöglichen Stufe zurück, schon um den Faktor der bereits
* zuvor gezauberten Sprüche erhöht */ * zuvor gezauberten Sprüche erhöht */
boolean cancast (struct unit *u, spell *spruch, int eff_stufe, int distance, struct order * ord); boolean cancast (struct unit *u, const spell *spruch, int eff_stufe, int distance, struct order * ord);
/* true, wenn Einheit alle Komponenten des Zaubers (incl. MP) für die /* true, wenn Einheit alle Komponenten des Zaubers (incl. MP) für die
* geringstmögliche Stufe hat und den Spruch beherrscht */ * geringstmögliche Stufe hat und den Spruch beherrscht */
void pay_spell(struct unit *u, spell *spruch, int eff_stufe, int distance); void pay_spell(struct unit *u, const spell *sp, int eff_stufe, int distance);
/* zieht die Komponenten des Zaubers aus dem Inventory der Einheit /* zieht die Komponenten des Zaubers aus dem Inventory der Einheit
* ab. Die effektive Stufe des gezauberten Spruchs ist wichtig für * ab. Die effektive Stufe des gezauberten Spruchs ist wichtig für
* die korrekte Bestimmung der Magiepunktkosten */ * die korrekte Bestimmung der Magiepunktkosten */
int eff_spelllevel(struct unit *u, spell * sp, int cast_level, int distance); int eff_spelllevel(struct unit *u, const spell * sp, int cast_level, int distance);
/* ermittelt die effektive Stufe des Zaubers. Dabei ist cast_level /* ermittelt die effektive Stufe des Zaubers. Dabei ist cast_level
* die gewünschte maximale Stufe (im Normalfall Stufe des Magiers, * die gewünschte maximale Stufe (im Normalfall Stufe des Magiers,
* bei Farcasting Stufe*2^Entfernung) */ * bei Farcasting Stufe*2^Entfernung) */

View File

@ -4248,7 +4248,7 @@ sp_migranten(castorder *co)
unit *mage = (unit *)co->magician; unit *mage = (unit *)co->magician;
int cast_level = co->level; int cast_level = co->level;
spellparameter *pa = co->par; spellparameter *pa = co->par;
spell *sp = co->sp; const spell *sp = co->sp;
/* wenn kein Ziel gefunden, Zauber abbrechen */ /* wenn kein Ziel gefunden, Zauber abbrechen */
if(pa->param[0]->flag == TARGET_NOTFOUND) return 0; if(pa->param[0]->flag == TARGET_NOTFOUND) return 0;
@ -4553,7 +4553,7 @@ sp_pump(castorder *co)
unit *mage = (unit *)co->magician; unit *mage = (unit *)co->magician;
spellparameter *pa = co->par; spellparameter *pa = co->par;
int cast_level = co->level; int cast_level = co->level;
spell *sp = co->sp; const spell *sp = co->sp;
/* wenn kein Ziel gefunden, Zauber abbrechen */ /* wenn kein Ziel gefunden, Zauber abbrechen */
if(pa->param[0]->flag == TARGET_NOTFOUND) return 0; if(pa->param[0]->flag == TARGET_NOTFOUND) return 0;
@ -4623,7 +4623,7 @@ sp_seduce(castorder *co)
unit *mage = (unit *)co->magician; unit *mage = (unit *)co->magician;
spellparameter *pa = co->par; spellparameter *pa = co->par;
int cast_level = co->level; int cast_level = co->level;
spell *sp = co->sp; const spell *sp = co->sp;
double force = co->force; double force = co->force;
/* wenn kein Ziel gefunden, Zauber abbrechen */ /* wenn kein Ziel gefunden, Zauber abbrechen */
@ -4706,7 +4706,7 @@ sp_calm_monster(castorder *co)
spellparameter *pa = co->par; spellparameter *pa = co->par;
int cast_level = co->level; int cast_level = co->level;
double force = co->force; double force = co->force;
spell *sp = co->sp; const spell *sp = co->sp;
variant effect; variant effect;
/* wenn kein Ziel gefunden, Zauber abbrechen */ /* wenn kein Ziel gefunden, Zauber abbrechen */
@ -5700,7 +5700,7 @@ sp_enterastral(castorder *co)
int cast_level = co->level; int cast_level = co->level;
double power = co->force; double power = co->force;
spellparameter *pa = co->par; spellparameter *pa = co->par;
spell *sp = co->sp; const spell *sp = co->sp;
switch(getplaneid(r)) { switch(getplaneid(r)) {
case 0: case 0:
@ -5815,7 +5815,7 @@ sp_pullastral(castorder *co)
int cast_level = co->level; int cast_level = co->level;
double power = co->force; double power = co->force;
spellparameter *pa = co->par; spellparameter *pa = co->par;
spell *sp = co->sp; const spell *sp = co->sp;
switch (getplaneid(r)) { switch (getplaneid(r)) {
case 1: case 1:
@ -6483,7 +6483,7 @@ sp_permtransfer(castorder *co)
unit *mage = (unit *)co->magician; unit *mage = (unit *)co->magician;
int cast_level = co->level; int cast_level = co->level;
spellparameter *pa = co->par; spellparameter *pa = co->par;
spell *sp = co->sp; const spell *sp = co->sp;
/* wenn kein Ziel gefunden, Zauber abbrechen */ /* wenn kein Ziel gefunden, Zauber abbrechen */
if(pa->param[0]->flag == TARGET_NOTFOUND) return 0; if(pa->param[0]->flag == TARGET_NOTFOUND) return 0;
@ -6533,7 +6533,7 @@ sp_movecastle(castorder *co)
unit *mage = (unit *)co->magician; unit *mage = (unit *)co->magician;
int cast_level = co->level; int cast_level = co->level;
spellparameter *pa = co->par; spellparameter *pa = co->par;
spell *sp = co->sp; const spell *sp = co->sp;
/* wenn kein Ziel gefunden, Zauber abbrechen */ /* wenn kein Ziel gefunden, Zauber abbrechen */
if(pa->param[0]->flag == TARGET_NOTFOUND) return 0; if(pa->param[0]->flag == TARGET_NOTFOUND) return 0;
@ -7492,13 +7492,10 @@ spell_list * spells = NULL;
void void
register_spell(spell * sp) register_spell(spell * sp)
{ {
spell_list * slist = malloc(sizeof(spell_list));
slist->next = spells;
slist->data = sp;
if (sp->id==0) { if (sp->id==0) {
sp->id = hashstring(sp->sname); sp->id = hashstring(sp->sname);
} }
spells = slist; spelllist_add(&spells, sp);
} }
/** versucht einen Spruch über gebiet + bame zu identifizieren. /** versucht einen Spruch über gebiet + bame zu identifizieren.