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
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_all(b, m);
@ -1414,7 +1414,6 @@ void
do_combatmagic(battle *b, combatmagic_t was)
{
void **fi;
spell *sp;
region *r = b->region;
castorder *co;
castorder *cll[MAX_SPELLRANK];
@ -1435,6 +1434,7 @@ do_combatmagic(battle *b, combatmagic_t was)
level = eff_skill(mage, SK_MAGIC, r);
if (level > 0) {
double power;
const spell *sp;
const struct locale * lang = mage->faction->locale;
char cmd[128];
order * ord;
@ -1489,7 +1489,7 @@ do_combatmagic(battle *b, combatmagic_t was)
for (spellrank = 0; spellrank < MAX_SPELLRANK; spellrank++) {
for (co = cll[spellrank]; co; co = co->next) {
fighter * fig = (fighter*)co->magician;
spell * sp = co->sp;
const spell * sp = co->sp;
int level = co->level;
double power = co->force;
@ -1508,7 +1508,7 @@ do_combatmagic(battle *b, combatmagic_t was)
static void
do_combatspell(troop at, int row)
{
spell *sp;
const spell *sp;
fighter *fi = at.fighter;
unit *mage = fi->unit;
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
*/
int
spellcost(unit *u, spell * sp)
spellcost(unit *u, const spell * sp)
{
int k, aura = 0;
int count;
count = countspells(u,0);
int count = countspells(u, 0);
for (k = 0; k < MAXINGREDIENT; k++) {
if (sp->komponenten[k][0] == R_AURA) {
@ -741,7 +739,7 @@ spellcost(unit *u, spell * sp)
* niedrigstwertigen und sollte von den beiden anderen Typen
* überschrieben werden */
static int
spl_costtyp(spell * sp)
spl_costtyp(const spell * sp)
{
int k;
int costtyp = SPC_FIX;
@ -769,7 +767,7 @@ spl_costtyp(spell * sp)
* generiert werden.
* */
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 maxlevel;
@ -824,7 +822,7 @@ eff_spelllevel(unit *u, spell * sp, int cast_level, int range)
* multipliziert.
*/
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 resuse;
@ -891,7 +889,7 @@ knowsspell(const region * r, const unit * u, const spell * sp)
*/
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;
resource_t res;
@ -968,7 +966,7 @@ cancast(unit * u, spell * sp, int level, int range, struct order * ord)
*/
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;
double force = cast_level;
@ -1202,7 +1200,7 @@ is_magic_resistant(unit *magician, unit *target, int resist_bonus)
*/
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.
* 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;
region * r = co->rt;
unit * u = (unit*)co->magician;
spell * sp = co->sp;
const spell *sp = co->sp;
int level = co->level;
int duration;
variant effect;
@ -1523,7 +1521,7 @@ static int
verify_targets(castorder *co)
{
unit *mage = (unit *)co->magician;
spell *sp = co->sp;
const spell *sp = co->sp;
region *target_r = co->rt;
spellparameter *sa = co->par;
int failed = 0;
@ -1969,7 +1967,7 @@ add_spellparameter(region *target_r, unit *u, const char *syntax, char ** param,
/* ------------------------------------------------------------- */
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)
{
castorder *corder;
@ -2646,7 +2644,7 @@ magic(void)
int verify, cast_level = co->level;
boolean fumbled = false;
unit * u = (unit *)co->magician;
spell * sp = co->sp;
const spell *sp = co->sp;
region * target_r = co->rt;
/* reichen die Komponenten nicht, wird der Level reduziert. */
@ -2746,7 +2744,7 @@ magic(void)
}
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) {
return LOC(lang, mkname("spellinfo", sp->sname));
@ -2755,7 +2753,7 @@ spell_info(const struct spell * sp, const struct locale * lang)
}
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) {
return LOC(lang, mkname("spell", sp->sname));
@ -2766,7 +2764,20 @@ spell_name(const struct spell * sp, const struct locale * lang)
void
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->next = *lspells;
*lspells = entry;

View File

@ -127,7 +127,7 @@ typedef struct castorder {
void *magician; /* Magier (kann vom Typ struct unit oder fighter sein) */
struct unit *familiar; /* Vertrauter, gesetzt, wenn der Spruch durch
den Vertrauten gezaubert wird */
struct spell *sp; /* Spruch */
const struct spell *sp; /* Spruch */
int level; /* gewünschte Stufe oder Stufe des Magiers */
double force; /* Stärke des Zaubers */
struct region *rt; /* Zielregion des Spruchs */
@ -141,7 +141,7 @@ typedef void (*spell_f) (void*);
/* normale zauber: */
typedef int (*nspell_f)(castorder*);
/* 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: */
typedef void (*pspell_f) (castorder *);
@ -306,13 +306,13 @@ int change_maxspellpoints(struct unit * u, int csp);
/* verändert die maximalen Magiepunkte einer Einheit */
/* 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 */
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 */
/* */
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);
/* Zwischenspreicher für Zauberbefehle, notwendig für Prioritäten */
void add_castorder(castorder **cll, castorder *co);
@ -324,18 +324,18 @@ void free_castorders(castorder *co);
int countspells(struct unit *u, int step);
/* erhöht den Counter für Zaubersprüche um 'step' und gibt die neue
* 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
* geringstmöglichen Stufe zurück, schon um den Faktor der bereits
* 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
* 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
* ab. Die effektive Stufe des gezauberten Spruchs ist wichtig für
* 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
* die gewünschte maximale Stufe (im Normalfall Stufe des Magiers,
* bei Farcasting Stufe*2^Entfernung) */

View File

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