forked from github/server
"Todeswolke läßt sich nicht bannen" at_deathcloud kann weg. curse_type kriegt eine age() funktion, so dass der effekt von deathclouds mit normalen "curse" attributen gemacht werden kann.
This commit is contained in:
parent
41af35a411
commit
a421c1a31d
|
@ -109,13 +109,19 @@ int
|
||||||
curse_age(attrib * a)
|
curse_age(attrib * a)
|
||||||
{
|
{
|
||||||
curse * c = (curse*)a->data.v;
|
curse * c = (curse*)a->data.v;
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
if (c->flag & CURSE_NOAGE) {
|
if (c->type->age) {
|
||||||
|
result = c->type->age(c);
|
||||||
|
}
|
||||||
|
if (result!=0) {
|
||||||
|
c->duration = 0;
|
||||||
|
} else if (c->flag & CURSE_NOAGE) {
|
||||||
c->duration = 1;
|
c->duration = 1;
|
||||||
} else {
|
} else {
|
||||||
c->duration = max(0, c->duration-1);
|
c->duration = max(0, c->duration-1);
|
||||||
}
|
}
|
||||||
return (c->duration);
|
return c->duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -227,6 +227,7 @@ typedef struct curse_type {
|
||||||
int (*read)(FILE * F, curse * c);
|
int (*read)(FILE * F, curse * c);
|
||||||
int (*write)(FILE * F, const curse * c);
|
int (*write)(FILE * F, const curse * c);
|
||||||
int (*cansee)(const struct faction*, const void*, typ_t, curse *, int);
|
int (*cansee)(const struct faction*, const void*, typ_t, curse *, int);
|
||||||
|
int (*age)(curse *);
|
||||||
} curse_type;
|
} curse_type;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,6 @@ void magic(void);
|
||||||
|
|
||||||
void regeneration_magiepunkte(void);
|
void regeneration_magiepunkte(void);
|
||||||
|
|
||||||
extern attrib_type at_deathcloud;
|
|
||||||
extern attrib_type at_seenspell;
|
extern attrib_type at_seenspell;
|
||||||
extern attrib_type at_mage;
|
extern attrib_type at_mage;
|
||||||
extern attrib_type at_familiarmage;
|
extern attrib_type at_familiarmage;
|
||||||
|
|
|
@ -3182,35 +3182,10 @@ sp_unholypower(castorder *co)
|
||||||
* (FARCASTING | REGIONSPELL | TESTRESISTANCE)
|
* (FARCASTING | REGIONSPELL | TESTRESISTANCE)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct curse_type ct_deathcloud = {
|
|
||||||
"deathcloud", CURSETYP_REGION, 0, NO_MERGE, NULL, cinfo_region,
|
|
||||||
};
|
|
||||||
|
|
||||||
static curse *
|
|
||||||
mk_deathcloud(unit * mage, region * r, double force, int duration)
|
|
||||||
{
|
|
||||||
variant effect;
|
|
||||||
curse * c;
|
|
||||||
|
|
||||||
effect.f = (float)force/2;
|
|
||||||
c = create_curse(mage, &r->attribs, &ct_deathcloud, force, duration, effect, 0);
|
|
||||||
c->data.v = r;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
dc_finalize(struct attrib * a)
|
|
||||||
{
|
|
||||||
curse * c = (curse*)a->data.v;
|
|
||||||
c->data.v = NULL;
|
|
||||||
destroy_curse(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dc_age(struct attrib * a)
|
dc_age(struct curse * c)
|
||||||
/* age returns 0 if the attribute needs to be removed, !=0 otherwise */
|
/* age returns 0 if the attribute needs to be removed, !=0 otherwise */
|
||||||
{
|
{
|
||||||
curse * c = (curse*)a->data.v;
|
|
||||||
region * r = (region*)c->data.v;
|
region * r = (region*)c->data.v;
|
||||||
unit ** up = &r->units;
|
unit ** up = &r->units;
|
||||||
unit * mage = c->magician;
|
unit * mage = c->magician;
|
||||||
|
@ -3251,14 +3226,25 @@ dc_age(struct attrib * a)
|
||||||
"mage region", mage, r));
|
"mage region", mage, r));
|
||||||
}
|
}
|
||||||
|
|
||||||
return --c->duration;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct curse_type ct_deathcloud = {
|
||||||
attrib_type at_deathcloud = {
|
"deathcloud", CURSETYP_REGION, 0, NO_MERGE, NULL, cinfo_region, NULL, NULL, NULL, NULL, dc_age
|
||||||
"curse_dc", curse_init, curse_done, dc_age, curse_write, curse_read, ATF_CURSE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static curse *
|
||||||
|
mk_deathcloud(unit * mage, region * r, double force, int duration)
|
||||||
|
{
|
||||||
|
variant effect;
|
||||||
|
curse * c;
|
||||||
|
|
||||||
|
effect.f = (float)force/2;
|
||||||
|
c = create_curse(mage, &r->attribs, &ct_deathcloud, force, duration, effect, 0);
|
||||||
|
c->data.v = r;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
#define COMPAT_DEATHCLOUD
|
#define COMPAT_DEATHCLOUD
|
||||||
#ifdef COMPAT_DEATHCLOUD
|
#ifdef COMPAT_DEATHCLOUD
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Reference in New Issue