forked from github/server
kill the old curses enum and oldcursename.
This commit is contained in:
parent
7985ebe511
commit
fc4bde47f6
|
@ -20,6 +20,8 @@ without prior permission by the authors of Eressea.
|
||||||
#define BUFFERSIZE 32768
|
#define BUFFERSIZE 32768
|
||||||
#define RESOURCECOMPAT
|
#define RESOURCECOMPAT
|
||||||
|
|
||||||
|
#include <spells/regioncurse.h>
|
||||||
|
|
||||||
/* modules include */
|
/* modules include */
|
||||||
#include <modules/score.h>
|
#include <modules/score.h>
|
||||||
|
|
||||||
|
@ -1361,7 +1363,7 @@ static void cr_output_region(FILE * F, report_context * ctx, region * r)
|
||||||
if (skill_enabled(SK_ENTERTAINMENT)) {
|
if (skill_enabled(SK_ENTERTAINMENT)) {
|
||||||
fprintf(F, "%d;Unterh\n", entertainmoney(r));
|
fprintf(F, "%d;Unterh\n", entertainmoney(r));
|
||||||
}
|
}
|
||||||
if (is_cursed(r->attribs, C_RIOT, 0)) {
|
if (is_cursed(r->attribs, &ct_riotzone)) {
|
||||||
fputs("0;Rekruten\n", F);
|
fputs("0;Rekruten\n", F);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1419,7 +1421,7 @@ static void cr_output_region(FILE * F, report_context * ctx, region * r)
|
||||||
cr_output_curses_compat(F, f, r, TYP_REGION);
|
cr_output_curses_compat(F, f, r, TYP_REGION);
|
||||||
cr_borders(r, f, r->seen.mode, F);
|
cr_borders(r, f, r->seen.mode, F);
|
||||||
if (r->seen.mode == seen_unit && is_astral(r)
|
if (r->seen.mode == seen_unit && is_astral(r)
|
||||||
&& !is_cursed(r->attribs, C_ASTRALBLOCK, 0)) {
|
&& !is_cursed(r->attribs, &ct_astralblock)) {
|
||||||
/* Sonderbehandlung Teleport-Ebene */
|
/* Sonderbehandlung Teleport-Ebene */
|
||||||
region_list *rl = astralregions(r, inhabitable);
|
region_list *rl = astralregions(r, inhabitable);
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <attributes/racename.h>
|
#include <attributes/racename.h>
|
||||||
#include <spells/buildingcurse.h>
|
#include <spells/buildingcurse.h>
|
||||||
#include <spells/regioncurse.h>
|
#include <spells/regioncurse.h>
|
||||||
|
#include <spells/unitcurse.h>
|
||||||
|
|
||||||
/* kernel includes */
|
/* kernel includes */
|
||||||
#include <kernel/ally.h>
|
#include <kernel/ally.h>
|
||||||
|
@ -118,14 +119,14 @@ int entertainmoney(const region * r)
|
||||||
{
|
{
|
||||||
double n;
|
double n;
|
||||||
|
|
||||||
if (is_cursed(r->attribs, C_DEPRESSION, 0)) {
|
if (is_cursed(r->attribs, &ct_depression)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
n = rmoney(r) / (double)ENTERTAINFRACTION;
|
n = rmoney(r) / (double)ENTERTAINFRACTION;
|
||||||
|
|
||||||
if (is_cursed(r->attribs, C_GENEROUS, 0)) {
|
if (is_cursed(r->attribs, &ct_generous)) {
|
||||||
n *= get_curseeffect(r->attribs, C_GENEROUS, 0);
|
n *= get_curseeffect(r->attribs, &ct_generous);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int)n;
|
return (int)n;
|
||||||
|
@ -502,7 +503,7 @@ static void recruit(unit * u, struct order *ord, request ** recruitorders)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_cursed(r->attribs, C_RIOT, 0)) {
|
if (is_cursed(r->attribs, &ct_riotzone)) {
|
||||||
/* Die Region befindet sich in Aufruhr */
|
/* Die Region befindet sich in Aufruhr */
|
||||||
cmistake(u, ord, 237, MSG_EVENT);
|
cmistake(u, ord, 237, MSG_EVENT);
|
||||||
return;
|
return;
|
||||||
|
@ -652,7 +653,7 @@ static int forget_cmd(unit * u, order * ord)
|
||||||
skill_t sk;
|
skill_t sk;
|
||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
if (is_cursed(u->attribs, C_SLAVE, 0)) {
|
if (is_cursed(u->attribs, &ct_slavery)) {
|
||||||
/* charmed units shouldn't be losing their skills */
|
/* charmed units shouldn't be losing their skills */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2589,7 +2590,7 @@ void entertain_cmd(unit * u, struct order *ord)
|
||||||
cmistake(u, ord, 69, MSG_INCOME);
|
cmistake(u, ord, 69, MSG_INCOME);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (is_cursed(r->attribs, C_DEPRESSION, 0)) {
|
if (is_cursed(r->attribs, &ct_depression)) {
|
||||||
cmistake(u, ord, 28, MSG_INCOME);
|
cmistake(u, ord, 28, MSG_INCOME);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -3028,7 +3029,7 @@ void produce(struct region *r)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (u_race(u) == rc_insect && r_insectstalled(r) &&
|
if (u_race(u) == rc_insect && r_insectstalled(r) &&
|
||||||
!is_cursed(u->attribs, C_KAELTESCHUTZ, 0))
|
!is_cursed(u->attribs, &ct_insectfur))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (fval(u, UFL_LONGACTION) && u->thisorder == NULL) {
|
if (fval(u, UFL_LONGACTION) && u->thisorder == NULL) {
|
||||||
|
|
14
src/give.c
14
src/give.c
|
@ -17,7 +17,12 @@
|
||||||
#include "economy.h"
|
#include "economy.h"
|
||||||
#include "laws.h"
|
#include "laws.h"
|
||||||
|
|
||||||
/* kernel includes */
|
#include <spells/unitcurse.h>
|
||||||
|
|
||||||
|
/* attributes includes */
|
||||||
|
#include <attributes/racename.h>
|
||||||
|
|
||||||
|
/* kernel includes */
|
||||||
#include <kernel/ally.h>
|
#include <kernel/ally.h>
|
||||||
#include <kernel/build.h>
|
#include <kernel/build.h>
|
||||||
#include <kernel/curse.h>
|
#include <kernel/curse.h>
|
||||||
|
@ -33,9 +38,6 @@
|
||||||
#include <kernel/terrain.h>
|
#include <kernel/terrain.h>
|
||||||
#include <kernel/unit.h>
|
#include <kernel/unit.h>
|
||||||
|
|
||||||
/* attributes includes */
|
|
||||||
#include <attributes/racename.h>
|
|
||||||
|
|
||||||
/* util includes */
|
/* util includes */
|
||||||
#include <util/attrib.h>
|
#include <util/attrib.h>
|
||||||
#include <util/base36.h>
|
#include <util/base36.h>
|
||||||
|
@ -286,7 +288,7 @@ static bool can_give_men(const unit *u, const unit *dst, order *ord, message **m
|
||||||
/* hungry people cannot be given away */
|
/* hungry people cannot be given away */
|
||||||
if (msg) *msg = msg_error(u, ord, 73);
|
if (msg) *msg = msg_error(u, ord, 73);
|
||||||
}
|
}
|
||||||
else if (fval(u, UFL_LOCKED) || is_cursed(u->attribs, C_SLAVE, 0)) {
|
else if (fval(u, UFL_LOCKED) || is_cursed(u->attribs, &ct_slavery)) {
|
||||||
if (msg) *msg = msg_error(u, ord, 74);
|
if (msg) *msg = msg_error(u, ord, 74);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -329,7 +331,7 @@ message * give_men(int n, unit * u, unit * u2, struct order *ord)
|
||||||
else if (unit_has_cursed_item(u2)) {
|
else if (unit_has_cursed_item(u2)) {
|
||||||
error = 78;
|
error = 78;
|
||||||
}
|
}
|
||||||
else if (fval(u2, UFL_LOCKED) || is_cursed(u2->attribs, C_SLAVE, 0)) {
|
else if (fval(u2, UFL_LOCKED) || is_cursed(u2->attribs, &ct_slavery)) {
|
||||||
error = 75;
|
error = 75;
|
||||||
}
|
}
|
||||||
else if (!ucontact(u2, u)) {
|
else if (!ucontact(u2, u)) {
|
||||||
|
|
|
@ -141,10 +141,11 @@ static int read_ccompat(const char *cursename, struct storage *store)
|
||||||
struct compat {
|
struct compat {
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *tokens;
|
const char *tokens;
|
||||||
} *seek, old_curses[] = { {
|
} *seek, old_curses[] = {
|
||||||
"disorientationzone", "" }, {
|
{ "disorientationzone", "" },
|
||||||
"shipdisorientation", "" }, {
|
{ "shipdisorientation", "" },
|
||||||
NULL, NULL } };
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
for (seek = old_curses; seek->name; ++seek) {
|
for (seek = old_curses; seek->name; ++seek) {
|
||||||
if (strcmp(seek->tokens, cursename) == 0) {
|
if (strcmp(seek->tokens, cursename) == 0) {
|
||||||
const char *p;
|
const char *p;
|
||||||
|
@ -290,7 +291,7 @@ void ct_register(const curse_type * ct)
|
||||||
unsigned int hash = tolower(ct->cname[0]) & 0xFF;
|
unsigned int hash = tolower(ct->cname[0]) & 0xFF;
|
||||||
selist **ctlp = cursetypes + hash;
|
selist **ctlp = cursetypes + hash;
|
||||||
|
|
||||||
assert(ct->age==NULL || (ct->flags&CURSE_NOAGE) == 0);
|
assert(ct->age == NULL || (ct->flags&CURSE_NOAGE) == 0);
|
||||||
assert((ct->flags&CURSE_ISNEW) == 0);
|
assert((ct->flags&CURSE_ISNEW) == 0);
|
||||||
selist_set_insert(ctlp, (void *)ct, NULL);
|
selist_set_insert(ctlp, (void *)ct, NULL);
|
||||||
}
|
}
|
||||||
|
@ -466,7 +467,7 @@ int curse_geteffect_int(const curse * c)
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
static void
|
static void
|
||||||
set_curseingmagician(struct unit *magician, struct attrib *ap_target,
|
set_curseingmagician(struct unit *magician, struct attrib *ap_target,
|
||||||
const curse_type * ct)
|
const curse_type * ct)
|
||||||
{
|
{
|
||||||
curse *c = get_curse(ap_target, ct);
|
curse *c = get_curse(ap_target, ct);
|
||||||
if (c) {
|
if (c) {
|
||||||
|
@ -723,51 +724,6 @@ bool is_cursed_with(const attrib * ap, const curse * c)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
|
||||||
/* cursedata */
|
|
||||||
/* ------------------------------------------------------------- */
|
|
||||||
|
|
||||||
static const char *oldnames[MAXCURSE] = {
|
|
||||||
/* OBS: when removing curses, remember to update read_ccompat() */
|
|
||||||
"fogtrap",
|
|
||||||
"antimagiczone",
|
|
||||||
"farvision",
|
|
||||||
"gbdream",
|
|
||||||
"auraboost",
|
|
||||||
"maelstrom",
|
|
||||||
"blessedharvest",
|
|
||||||
"drought",
|
|
||||||
"badlearn",
|
|
||||||
"stormwind",
|
|
||||||
"flyingship",
|
|
||||||
"nodrift",
|
|
||||||
"depression",
|
|
||||||
"magicwalls",
|
|
||||||
"strongwall",
|
|
||||||
"astralblock",
|
|
||||||
"generous",
|
|
||||||
"peacezone",
|
|
||||||
"magicstreet",
|
|
||||||
"magicrunes",
|
|
||||||
"badmagicresistancezone",
|
|
||||||
"goodmagicresistancezone",
|
|
||||||
"slavery",
|
|
||||||
"calmmonster",
|
|
||||||
"oldrace",
|
|
||||||
"fumble",
|
|
||||||
"riotzone",
|
|
||||||
"godcursezone",
|
|
||||||
"speed",
|
|
||||||
"orcish",
|
|
||||||
"magicboost",
|
|
||||||
"insectfur"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *oldcursename(int id)
|
|
||||||
{
|
|
||||||
return oldnames[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
message *cinfo_simple(const void *obj, objtype_t typ, const struct curse * c,
|
message *cinfo_simple(const void *obj, objtype_t typ, const struct curse * c,
|
||||||
int self)
|
int self)
|
||||||
|
|
|
@ -303,14 +303,13 @@ extern "C" {
|
||||||
bool curse_active(const struct curse *c);
|
bool curse_active(const struct curse *c);
|
||||||
|
|
||||||
/*** COMPATIBILITY MACROS. DO NOT USE FOR NEW CODE, REPLACE IN OLD CODE: */
|
/*** COMPATIBILITY MACROS. DO NOT USE FOR NEW CODE, REPLACE IN OLD CODE: */
|
||||||
const char *oldcursename(int id);
|
|
||||||
struct message *cinfo_simple(const void *obj, objtype_t typ,
|
struct message *cinfo_simple(const void *obj, objtype_t typ,
|
||||||
const struct curse *c, int self);
|
const struct curse *c, int self);
|
||||||
int curse_cansee(const struct curse *c, const struct faction *viewer, objtype_t typ, const void *obj, int self);
|
int curse_cansee(const struct curse *c, const struct faction *viewer, objtype_t typ, const void *obj, int self);
|
||||||
#define is_cursed(a, id, id2) \
|
#define is_cursed(a, ctype) \
|
||||||
(a && curse_active(get_curse(a, ct_find(oldcursename(id)))))
|
(a && curse_active(get_curse(a, ctype)))
|
||||||
#define get_curseeffect(a, id, id2) \
|
#define get_curseeffect(a, ctype) \
|
||||||
curse_geteffect(get_curse(a, ct_find(oldcursename(id))))
|
curse_geteffect(get_curse(a, ctype))
|
||||||
|
|
||||||
/* eressea-defined attribute-type flags */
|
/* eressea-defined attribute-type flags */
|
||||||
#define ATF_CURSE ATF_USER_DEFINED
|
#define ATF_CURSE ATF_USER_DEFINED
|
||||||
|
|
|
@ -33,6 +33,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include "terrain.h"
|
#include "terrain.h"
|
||||||
#include "unit.h"
|
#include "unit.h"
|
||||||
|
|
||||||
|
#include <spells/unitcurse.h>
|
||||||
|
#include <attributes/otherfaction.h>
|
||||||
|
|
||||||
/* util includes */
|
/* util includes */
|
||||||
#include <util/attrib.h>
|
#include <util/attrib.h>
|
||||||
#include <util/base36.h>
|
#include <util/base36.h>
|
||||||
|
@ -49,8 +52,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <util/rng.h>
|
#include <util/rng.h>
|
||||||
#include <util/variant.h>
|
#include <util/variant.h>
|
||||||
|
|
||||||
#include <attributes/otherfaction.h>
|
|
||||||
|
|
||||||
#include <selist.h>
|
#include <selist.h>
|
||||||
#include <storage.h>
|
#include <storage.h>
|
||||||
|
|
||||||
|
@ -730,7 +731,7 @@ int count_faction(const faction * f, int flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (flags&COUNT_MIGRANTS) {
|
else if (flags&COUNT_MIGRANTS) {
|
||||||
if (!is_cursed(u->attribs, C_SLAVE, 0)) {
|
if (!is_cursed(u->attribs, &ct_slavery)) {
|
||||||
n += x;
|
n += x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
src/laws.c
14
src/laws.c
|
@ -430,7 +430,7 @@ static void horses(region * r)
|
||||||
maxhorses = MAX(0, maxhorses);
|
maxhorses = MAX(0, maxhorses);
|
||||||
horses = rhorses(r);
|
horses = rhorses(r);
|
||||||
if (horses > 0) {
|
if (horses > 0) {
|
||||||
if (is_cursed(r->attribs, C_CURSED_BY_THE_GODS, 0)) {
|
if (is_cursed(r->attribs, &ct_godcursezone)) {
|
||||||
rsethorses(r, (int)(horses * 0.9));
|
rsethorses(r, (int)(horses * 0.9));
|
||||||
}
|
}
|
||||||
else if (maxhorses) {
|
else if (maxhorses) {
|
||||||
|
@ -583,7 +583,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season)
|
||||||
a_removeall(&r->attribs, &at_germs);
|
a_removeall(&r->attribs, &at_germs);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_cursed(r->attribs, C_CURSED_BY_THE_GODS, 0)) {
|
if (is_cursed(r->attribs, &ct_godcursezone)) {
|
||||||
rsettrees(r, 1, (int)(rtrees(r, 1) * 0.9));
|
rsettrees(r, 1, (int)(rtrees(r, 1) * 0.9));
|
||||||
rsettrees(r, 2, (int)(rtrees(r, 2) * 0.9));
|
rsettrees(r, 2, (int)(rtrees(r, 2) * 0.9));
|
||||||
return;
|
return;
|
||||||
|
@ -640,7 +640,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season)
|
||||||
}
|
}
|
||||||
else if (current_season == SEASON_SPRING) {
|
else if (current_season == SEASON_SPRING) {
|
||||||
|
|
||||||
if (is_cursed(r->attribs, C_CURSED_BY_THE_GODS, 0))
|
if (is_cursed(r->attribs, &ct_godcursezone))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* in at_germs merken uns die Zahl der Samen und Sprößlinge, die
|
/* in at_germs merken uns die Zahl der Samen und Sprößlinge, die
|
||||||
|
@ -2924,8 +2924,9 @@ static void ageing(void)
|
||||||
change_effect(u, oldpotiontype[P_BERSERK], -1 * MIN(u->number, i));
|
change_effect(u, oldpotiontype[P_BERSERK], -1 * MIN(u->number, i));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_cursed(u->attribs, C_OLDRACE, 0)) {
|
if (u->attribs) {
|
||||||
curse *c = get_curse(u->attribs, &ct_oldrace);
|
curse * c = get_curse(u->attribs, &ct_oldrace);
|
||||||
|
if (c && curse_active(c)) {
|
||||||
if (c->duration == 1 && !(c_flags(c) & CURSE_NOAGE)) {
|
if (c->duration == 1 && !(c_flags(c) & CURSE_NOAGE)) {
|
||||||
u_setrace(u, get_race(curse_geteffect_int(c)));
|
u_setrace(u, get_race(curse_geteffect_int(c)));
|
||||||
u->irace = NULL;
|
u->irace = NULL;
|
||||||
|
@ -2933,6 +2934,7 @@ static void ageing(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Borders */
|
/* Borders */
|
||||||
age_borders();
|
age_borders();
|
||||||
|
@ -3789,7 +3791,7 @@ void process(void)
|
||||||
}
|
}
|
||||||
else if (u_race(u) == get_race(RC_INSECT)
|
else if (u_race(u) == get_race(RC_INSECT)
|
||||||
&& r_insectstalled(r)
|
&& r_insectstalled(r)
|
||||||
&& !is_cursed(u->attribs, C_KAELTESCHUTZ, 0)) {
|
&& !is_cursed(u->attribs, &ct_insectfur)) {
|
||||||
ord = NULL;
|
ord = NULL;
|
||||||
}
|
}
|
||||||
else if (LongHunger(u)) {
|
else if (LongHunger(u)) {
|
||||||
|
|
14
src/magic.c
14
src/magic.c
|
@ -35,6 +35,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <triggers/clonedied.h>
|
#include <triggers/clonedied.h>
|
||||||
|
|
||||||
#include <spells/regioncurse.h>
|
#include <spells/regioncurse.h>
|
||||||
|
#include <spells/buildingcurse.h>
|
||||||
#include <spells/unitcurse.h>
|
#include <spells/unitcurse.h>
|
||||||
|
|
||||||
#include <kernel/ally.h>
|
#include <kernel/ally.h>
|
||||||
|
@ -699,7 +700,7 @@ int max_spellpoints(const region * r, const unit * u)
|
||||||
if (rtype && i_get(u->items, rtype->itype) > 0) {
|
if (rtype && i_get(u->items, rtype->itype) > 0) {
|
||||||
msp += use_item_aura(r, u);
|
msp += use_item_aura(r, u);
|
||||||
}
|
}
|
||||||
n = get_curseeffect(u->attribs, C_AURA, 0);
|
n = get_curseeffect(u->attribs, &ct_auraboost);
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
msp = (msp * n) / 100;
|
msp = (msp * n) / 100;
|
||||||
}
|
}
|
||||||
|
@ -1251,8 +1252,7 @@ target_resists_magic(unit * magician, void *obj, int objtyp, int t_bonus)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a) {
|
if (a) {
|
||||||
const struct curse_type *ct_resist = ct_find(oldcursename(C_RESIST_MAGIC));
|
curse * c = get_curse(a, &ct_magicrunes);
|
||||||
curse * c = get_curse(a, ct_resist);
|
|
||||||
int effect = curse_geteffect_int(c);
|
int effect = curse_geteffect_int(c);
|
||||||
prob = frac_add(prob, frac_make(effect, 100));
|
prob = frac_add(prob, frac_make(effect, 100));
|
||||||
}
|
}
|
||||||
|
@ -1320,10 +1320,10 @@ bool fumble(region * r, unit * u, const spell * sp, int cast_grade)
|
||||||
if (mage->magietyp == M_DRAIG) {
|
if (mage->magietyp == M_DRAIG) {
|
||||||
fumble_chance += CHAOSPATZERCHANCE;
|
fumble_chance += CHAOSPATZERCHANCE;
|
||||||
}
|
}
|
||||||
if (is_cursed(u->attribs, C_MBOOST, 0)) {
|
if (is_cursed(u->attribs, &ct_magicboost)) {
|
||||||
fumble_chance += CHAOSPATZERCHANCE;
|
fumble_chance += CHAOSPATZERCHANCE;
|
||||||
}
|
}
|
||||||
if (is_cursed(u->attribs, C_FUMBLE, 0)) {
|
if (is_cursed(u->attribs, &ct_fumble)) {
|
||||||
fumble_chance += CHAOSPATZERCHANCE;
|
fumble_chance += CHAOSPATZERCHANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1503,7 +1503,7 @@ void regenerate_aura(void)
|
||||||
reg_aura *= btype->auraregen;
|
reg_aura *= btype->auraregen;
|
||||||
|
|
||||||
/* Bonus/Malus durch Zauber */
|
/* Bonus/Malus durch Zauber */
|
||||||
mod = get_curseeffect(u->attribs, C_AURA, 0);
|
mod = get_curseeffect(u->attribs, &ct_auraboost);
|
||||||
if (mod > 0) {
|
if (mod > 0) {
|
||||||
reg_aura = (reg_aura * mod) / 100.0;
|
reg_aura = (reg_aura * mod) / 100.0;
|
||||||
}
|
}
|
||||||
|
@ -2795,7 +2795,7 @@ void magic(void)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (u_race(u) == rc_insect && r_insectstalled(r) &&
|
if (u_race(u) == rc_insect && r_insectstalled(r) &&
|
||||||
!is_cursed(u->attribs, C_KAELTESCHUTZ, 0))
|
!is_cursed(u->attribs, &ct_insectfur))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (fval(u, UFL_WERE | UFL_LONGACTION)) {
|
if (fval(u, UFL_WERE | UFL_LONGACTION)) {
|
||||||
|
|
|
@ -20,6 +20,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include "morale.h"
|
#include "morale.h"
|
||||||
|
|
||||||
|
#include <spells/regioncurse.h>
|
||||||
|
|
||||||
#include <kernel/config.h>
|
#include <kernel/config.h>
|
||||||
#include <kernel/curse.h>
|
#include <kernel/curse.h>
|
||||||
#include <kernel/region.h>
|
#include <kernel/region.h>
|
||||||
|
@ -53,7 +55,7 @@ void morale_update(region *r) {
|
||||||
if (stability > MORALE_COOLDOWN && r->land->ownership->owner
|
if (stability > MORALE_COOLDOWN && r->land->ownership->owner
|
||||||
&& morale < MORALE_MAX) {
|
&& morale < MORALE_MAX) {
|
||||||
double ch = popularity();
|
double ch = popularity();
|
||||||
if (is_cursed(r->attribs, C_GENEROUS, 0)) {
|
if (is_cursed(r->attribs, &ct_generous)) {
|
||||||
ch *= 1.2; /* 20% improvement */
|
ch *= 1.2; /* 20% improvement */
|
||||||
}
|
}
|
||||||
if (stability >= MORALE_AVERAGE * 2 || chance(ch)) {
|
if (stability >= MORALE_AVERAGE * 2 || chance(ch)) {
|
||||||
|
|
14
src/move.c
14
src/move.c
|
@ -34,6 +34,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <spells/flyingship.h>
|
#include <spells/flyingship.h>
|
||||||
#include <spells/unitcurse.h>
|
#include <spells/unitcurse.h>
|
||||||
#include <spells/regioncurse.h>
|
#include <spells/regioncurse.h>
|
||||||
|
#include <spells/shipcurse.h>
|
||||||
|
|
||||||
/* attributes includes */
|
/* attributes includes */
|
||||||
#include <attributes/follow.h>
|
#include <attributes/follow.h>
|
||||||
|
@ -673,7 +674,7 @@ static bool is_freezing(const unit * u)
|
||||||
{
|
{
|
||||||
if (u_race(u) != get_race(RC_INSECT))
|
if (u_race(u) != get_race(RC_INSECT))
|
||||||
return false;
|
return false;
|
||||||
if (is_cursed(u->attribs, C_KAELTESCHUTZ, 0))
|
if (is_cursed(u->attribs, &ct_insectfur))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -832,7 +833,7 @@ static void drifting_ships(region * r)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Schiff schon abgetrieben oder durch Zauber geschützt? */
|
/* Schiff schon abgetrieben oder durch Zauber geschützt? */
|
||||||
if (!drift || fval(sh, SF_DRIFTED) || is_cursed(sh->attribs, C_SHIP_NODRIFT, 0)) {
|
if (!drift || fval(sh, SF_DRIFTED) || is_cursed(sh->attribs, &ct_nodrift)) {
|
||||||
shp = &sh->next;
|
shp = &sh->next;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1803,7 +1804,7 @@ static void sail(unit * u, order * ord, region_list ** routep, bool drifting)
|
||||||
}
|
}
|
||||||
if (rng_int() % 10000 < stormchance * sh->type->storm
|
if (rng_int() % 10000 < stormchance * sh->type->storm
|
||||||
&& fval(current_point->terrain, SEA_REGION)) {
|
&& fval(current_point->terrain, SEA_REGION)) {
|
||||||
if (!is_cursed(sh->attribs, C_SHIP_NODRIFT, 0)) {
|
if (!is_cursed(sh->attribs, &ct_nodrift)) {
|
||||||
region *rnext = NULL;
|
region *rnext = NULL;
|
||||||
bool storm = true;
|
bool storm = true;
|
||||||
int d_offset = rng_int() % MAXDIRECTIONS;
|
int d_offset = rng_int() % MAXDIRECTIONS;
|
||||||
|
@ -1920,9 +1921,10 @@ static void sail(unit * u, order * ord, region_list ** routep, bool drifting)
|
||||||
last_point = current_point;
|
last_point = current_point;
|
||||||
current_point = next_point;
|
current_point = next_point;
|
||||||
|
|
||||||
if (!fval(current_point->terrain, SEA_REGION)
|
if (!fval(next_point->terrain, SEA_REGION)
|
||||||
&& !is_cursed(sh->attribs, C_SHIP_FLYING, 0))
|
&& !is_cursed(sh->attribs, &ct_flyingship)) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
token = getstrtoken();
|
token = getstrtoken();
|
||||||
error = movewhere(u, token, current_point, &next_point);
|
error = movewhere(u, token, current_point, &next_point);
|
||||||
if (error || next_point == NULL) {
|
if (error || next_point == NULL) {
|
||||||
|
@ -1958,7 +1960,7 @@ static void sail(unit * u, order * ord, region_list ** routep, bool drifting)
|
||||||
set_order(&u->thisorder, NULL);
|
set_order(&u->thisorder, NULL);
|
||||||
set_coast(sh, last_point, current_point);
|
set_coast(sh, last_point, current_point);
|
||||||
|
|
||||||
if (is_cursed(sh->attribs, C_SHIP_FLYING, 0)) {
|
if (is_cursed(sh->attribs, &ct_flyingship)) {
|
||||||
ADDMSG(&f->msgs, msg_message("shipfly", "ship from to", sh,
|
ADDMSG(&f->msgs, msg_message("shipfly", "ship from to", sh,
|
||||||
starting_point, current_point));
|
starting_point, current_point));
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,12 +27,13 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include "chaos.h"
|
#include "chaos.h"
|
||||||
#include "study.h"
|
#include "study.h"
|
||||||
|
|
||||||
|
#include <spells/unitcurse.h>
|
||||||
|
#include <spells/regioncurse.h>
|
||||||
|
|
||||||
/* attributes includes */
|
/* attributes includes */
|
||||||
#include <attributes/racename.h>
|
#include <attributes/racename.h>
|
||||||
#include <attributes/reduceproduction.h>
|
#include <attributes/reduceproduction.h>
|
||||||
|
|
||||||
#include <spells/unitcurse.h>
|
|
||||||
|
|
||||||
/* kernel includes */
|
/* kernel includes */
|
||||||
#include <kernel/building.h>
|
#include <kernel/building.h>
|
||||||
#include <kernel/curse.h>
|
#include <kernel/curse.h>
|
||||||
|
@ -651,7 +652,7 @@ static void godcurse(void)
|
||||||
region *r;
|
region *r;
|
||||||
|
|
||||||
for (r = regions; r; r = r->next) {
|
for (r = regions; r; r = r->next) {
|
||||||
if (is_cursed(r->attribs, C_CURSED_BY_THE_GODS, 0)) {
|
if (is_cursed(r->attribs, &ct_godcursezone)) {
|
||||||
unit *u;
|
unit *u;
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
skill *sv = u->skills;
|
skill *sv = u->skills;
|
||||||
|
|
|
@ -29,6 +29,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include "monsters.h"
|
#include "monsters.h"
|
||||||
#include "travelthru.h"
|
#include "travelthru.h"
|
||||||
|
|
||||||
|
#include <spells/regioncurse.h>
|
||||||
|
#include <spells/buildingcurse.h>
|
||||||
|
|
||||||
/* modules includes */
|
/* modules includes */
|
||||||
#include <modules/score.h>
|
#include <modules/score.h>
|
||||||
|
|
||||||
|
@ -46,8 +49,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include "calendar.h"
|
#include "calendar.h"
|
||||||
#include "teleport.h"
|
#include "teleport.h"
|
||||||
|
|
||||||
#include <spells/buildingcurse.h>
|
|
||||||
|
|
||||||
/* kernel includes */
|
/* kernel includes */
|
||||||
#include <kernel/ally.h>
|
#include <kernel/ally.h>
|
||||||
#include <kernel/connection.h>
|
#include <kernel/connection.h>
|
||||||
|
@ -1187,7 +1188,7 @@ void report_region(struct stream *out, const region * r, faction * f)
|
||||||
paragraph(out, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
|
|
||||||
if (r->seen.mode == seen_unit && is_astral(r) &&
|
if (r->seen.mode == seen_unit && is_astral(r) &&
|
||||||
!is_cursed(r->attribs, C_ASTRALBLOCK, 0)) {
|
!is_cursed(r->attribs, &ct_astralblock)) {
|
||||||
/* Sonderbehandlung Teleport-Ebene */
|
/* Sonderbehandlung Teleport-Ebene */
|
||||||
region_list *rl = astralregions(r, inhabitable);
|
region_list *rl = astralregions(r, inhabitable);
|
||||||
region_list *rl2;
|
region_list *rl2;
|
||||||
|
|
93
src/spells.c
93
src/spells.c
|
@ -1785,7 +1785,7 @@ static int sp_treewalkenter(castorder * co)
|
||||||
}
|
}
|
||||||
|
|
||||||
rt = r_standard_to_astral(r);
|
rt = r_standard_to_astral(r);
|
||||||
if (rt == NULL || is_cursed(rt->attribs, C_ASTRALBLOCK, 0)
|
if (rt == NULL || is_cursed(rt->attribs, &ct_astralblock)
|
||||||
|| fval(rt->terrain, FORBIDDEN_REGION)) {
|
|| fval(rt->terrain, FORBIDDEN_REGION)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_astralblock", ""));
|
"spellfail_astralblock", ""));
|
||||||
|
@ -1901,7 +1901,7 @@ static int sp_treewalkexit(castorder * co)
|
||||||
"spellfail_astralonly", ""));
|
"spellfail_astralonly", ""));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (is_cursed(r->attribs, C_ASTRALBLOCK, 0)) {
|
if (is_cursed(r->attribs, &ct_astralblock)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_astralblock", ""));
|
"spellfail_astralblock", ""));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2264,12 +2264,12 @@ static int sp_stormwinds(castorder * co)
|
||||||
sh = pa->param[n]->data.sh;
|
sh = pa->param[n]->data.sh;
|
||||||
|
|
||||||
/* mit C_SHIP_NODRIFT haben wir kein Problem */
|
/* mit C_SHIP_NODRIFT haben wir kein Problem */
|
||||||
if (is_cursed(sh->attribs, C_SHIP_FLYING, 0)) {
|
if (is_cursed(sh->attribs, &ct_flyingship)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"error_spell_on_flying_ship", "ship", sh))
|
"error_spell_on_flying_ship", "ship", sh))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (is_cursed(sh->attribs, C_SHIP_SPEEDUP, 0)) {
|
if (is_cursed(sh->attribs, &ct_shipspeedup)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"error_spell_on_ship_already", "ship", sh))
|
"error_spell_on_ship_already", "ship", sh))
|
||||||
continue;
|
continue;
|
||||||
|
@ -2338,7 +2338,7 @@ static int sp_earthquake(castorder * co)
|
||||||
while (*blist) {
|
while (*blist) {
|
||||||
building *burg = *blist;
|
building *burg = *blist;
|
||||||
|
|
||||||
if (burg->size != 0 && !is_cursed(burg->attribs, C_MAGICWALLS, 0)) {
|
if (burg->size != 0 && !is_cursed(burg->attribs, &ct_magicwalls)) {
|
||||||
/* Magieresistenz */
|
/* Magieresistenz */
|
||||||
if (!target_resists_magic(mage, burg, TYP_BUILDING, 0)) {
|
if (!target_resists_magic(mage, burg, TYP_BUILDING, 0)) {
|
||||||
kaputt = MIN(10 * cast_level, burg->size / 4);
|
kaputt = MIN(10 * cast_level, burg->size / 4);
|
||||||
|
@ -2798,7 +2798,7 @@ static int sp_unholypower(castorder * co)
|
||||||
* korrekt abgefangen wird. Besser (aber nicht gerade einfach)
|
* korrekt abgefangen wird. Besser (aber nicht gerade einfach)
|
||||||
* waere es, eine solche Konstruktion irgendwie zu kapseln. */
|
* waere es, eine solche Konstruktion irgendwie zu kapseln. */
|
||||||
if (fval(u, UFL_LOCKED) || fval(u, UFL_HUNGER)
|
if (fval(u, UFL_LOCKED) || fval(u, UFL_HUNGER)
|
||||||
|| is_cursed(u->attribs, C_SLAVE, 0)) {
|
|| is_cursed(u->attribs, &ct_slavery)) {
|
||||||
cmistake(mage, co->order, 74, MSG_MAGIC);
|
cmistake(mage, co->order, 74, MSG_MAGIC);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -3186,7 +3186,7 @@ static int sp_chaossuction(castorder * co)
|
||||||
cmistake(mage, co->order, 216, MSG_MAGIC);
|
cmistake(mage, co->order, 216, MSG_MAGIC);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (is_cursed(rt->attribs, C_ASTRALBLOCK, 0)) {
|
else if (is_cursed(rt->attribs, &ct_astralblock)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_astralblock", ""));
|
"spellfail_astralblock", ""));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3233,7 +3233,7 @@ static int sp_magicboost(castorder * co)
|
||||||
trigger *tsummon;
|
trigger *tsummon;
|
||||||
|
|
||||||
/* fehler, wenn schon ein boost */
|
/* fehler, wenn schon ein boost */
|
||||||
if (is_cursed(mage->attribs, C_MBOOST, 0)) {
|
if (is_cursed(mage->attribs, &ct_magicboost)) {
|
||||||
report_failure(mage, co->order);
|
report_failure(mage, co->order);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3748,7 +3748,7 @@ static int sp_rallypeasantmob(castorder * co)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c = get_curse(r->attribs, ct_find(oldcursename(C_RIOT)));
|
c = get_curse(r->attribs, &ct_riotzone);
|
||||||
if (c != NULL) {
|
if (c != NULL) {
|
||||||
remove_curse(&r->attribs, c);
|
remove_curse(&r->attribs, c);
|
||||||
}
|
}
|
||||||
|
@ -3964,7 +3964,7 @@ static int sp_generous(castorder * co)
|
||||||
double effect;
|
double effect;
|
||||||
message *msg[2] = { NULL, NULL };
|
message *msg[2] = { NULL, NULL };
|
||||||
|
|
||||||
if (is_cursed(r->attribs, C_DEPRESSION, 0)) {
|
if (is_cursed(r->attribs, &ct_depression)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_generous", ""));
|
"spellfail_generous", ""));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -4662,7 +4662,29 @@ int sp_analysedream(castorder * co)
|
||||||
return cast_level;
|
return cast_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sp_gbdreams(castorder * co, const char *curse_name, int effect);
|
static int sp_gbdreams(castorder * co, int effect)
|
||||||
|
{
|
||||||
|
int duration;
|
||||||
|
unit *mage = co->magician.u;
|
||||||
|
int cast_level = co->level;
|
||||||
|
double power = co->force;
|
||||||
|
region *r = co_get_region(co);
|
||||||
|
|
||||||
|
/* wirkt erst in der Folgerunde, soll mindestens eine Runde wirken,
|
||||||
|
* also duration+2 */
|
||||||
|
duration = (int)MAX(1, power / 2); /* Stufe 1 macht sonst mist */
|
||||||
|
duration = 2 + rng_int() % duration;
|
||||||
|
|
||||||
|
/* Nichts machen als ein entsprechendes Attribut in die Region legen. */
|
||||||
|
create_curse(mage, &r->attribs, &ct_gbdream, power, duration, effect, 0);
|
||||||
|
|
||||||
|
/* Erfolg melden */
|
||||||
|
ADDMSG(&mage->faction->msgs, msg_message("regionmagic_effect",
|
||||||
|
"unit region command", mage, mage->region, co->order));
|
||||||
|
|
||||||
|
return cast_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
/* Name: Schlechte Traeume
|
/* Name: Schlechte Traeume
|
||||||
|
@ -4679,7 +4701,7 @@ static int sp_gbdreams(castorder * co, const char *curse_name, int effect);
|
||||||
* */
|
* */
|
||||||
int sp_baddreams(castorder * co)
|
int sp_baddreams(castorder * co)
|
||||||
{
|
{
|
||||||
return sp_gbdreams(co, "gbdream", -1);
|
return sp_gbdreams(co, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
|
@ -4696,30 +4718,7 @@ int sp_baddreams(castorder * co)
|
||||||
*/
|
*/
|
||||||
int sp_gooddreams(castorder * co)
|
int sp_gooddreams(castorder * co)
|
||||||
{
|
{
|
||||||
return sp_gbdreams(co, "gbdream", 1);
|
return sp_gbdreams(co, 1);
|
||||||
}
|
|
||||||
|
|
||||||
static int sp_gbdreams(castorder * co, const char *curse_name, int effect)
|
|
||||||
{
|
|
||||||
int duration;
|
|
||||||
unit *mage = co->magician.u;
|
|
||||||
int cast_level = co->level;
|
|
||||||
double power = co->force;
|
|
||||||
region *r = co_get_region(co);
|
|
||||||
|
|
||||||
/* wirkt erst in der Folgerunde, soll mindestens eine Runde wirken,
|
|
||||||
* also duration+2 */
|
|
||||||
duration = (int)MAX(1, power / 2); /* Stufe 1 macht sonst mist */
|
|
||||||
duration = 2 + rng_int() % duration;
|
|
||||||
|
|
||||||
/* Nichts machen als ein entsprechendes Attribut in die Region legen. */
|
|
||||||
create_curse(mage, &r->attribs, ct_find(curse_name), power, duration, effect, 0);
|
|
||||||
|
|
||||||
/* Erfolg melden */
|
|
||||||
ADDMSG(&mage->faction->msgs, msg_message("regionmagic_effect",
|
|
||||||
"unit region command", mage, mage->region, co->order));
|
|
||||||
|
|
||||||
return cast_level;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
|
@ -5075,8 +5074,8 @@ int sp_enterastral(castorder * co)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_cursed(rt->attribs, C_ASTRALBLOCK, 0)
|
if (is_cursed(rt->attribs, &ct_astralblock)
|
||||||
|| is_cursed(ro->attribs, C_ASTRALBLOCK, 0)) {
|
|| is_cursed(ro->attribs, &ct_astralblock)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_astralblock", ""));
|
"spellfail_astralblock", ""));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5202,8 +5201,8 @@ int sp_pullastral(castorder * co)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_cursed(rt->attribs, C_ASTRALBLOCK, 0)
|
if (is_cursed(rt->attribs, &ct_astralblock)
|
||||||
|| is_cursed(ro->attribs, C_ASTRALBLOCK, 0)) {
|
|| is_cursed(ro->attribs, &ct_astralblock)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_astralblock", ""));
|
"spellfail_astralblock", ""));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5346,8 +5345,8 @@ int sp_leaveastral(castorder * co)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ro == NULL || is_cursed(ro->attribs, C_ASTRALBLOCK, 0)
|
if (ro == NULL || is_cursed(ro->attribs, &ct_astralblock)
|
||||||
|| is_cursed(rt->attribs, C_ASTRALBLOCK, 0)) {
|
|| is_cursed(rt->attribs, &ct_astralblock)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_astralblock", ""));
|
"spellfail_astralblock", ""));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5486,7 +5485,7 @@ int sp_fetchastral(castorder * co)
|
||||||
ro = u->region;
|
ro = u->region;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_cursed(ro->attribs, C_ASTRALBLOCK, 0)) {
|
if (is_cursed(ro->attribs, &ct_astralblock)) {
|
||||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||||
"spellfail_astralblock", ""));
|
"spellfail_astralblock", ""));
|
||||||
continue;
|
continue;
|
||||||
|
@ -5599,7 +5598,7 @@ int sp_showastral(castorder * co)
|
||||||
|
|
||||||
for (rl2 = rl; rl2; rl2 = rl2->next) {
|
for (rl2 = rl; rl2; rl2 = rl2->next) {
|
||||||
region *r2 = rl2->data;
|
region *r2 = rl2->data;
|
||||||
if (!is_cursed(r2->attribs, C_ASTRALBLOCK, 0)) {
|
if (!is_cursed(r2->attribs, &ct_astralblock)) {
|
||||||
for (u = r2->units; u; u = u->next) {
|
for (u = r2->units; u; u = u->next) {
|
||||||
if (u_race(u) != get_race(RC_SPECIAL) && u_race(u) != get_race(RC_SPELL))
|
if (u_race(u) != get_race(RC_SPECIAL) && u_race(u) != get_race(RC_SPELL))
|
||||||
n++;
|
n++;
|
||||||
|
@ -5619,7 +5618,7 @@ int sp_showastral(castorder * co)
|
||||||
"Nebel zu erkennen sind ", unitname(mage));
|
"Nebel zu erkennen sind ", unitname(mage));
|
||||||
|
|
||||||
for (rl2 = rl; rl2; rl2 = rl2->next) {
|
for (rl2 = rl; rl2; rl2 = rl2->next) {
|
||||||
if (!is_cursed(rl2->data->attribs, C_ASTRALBLOCK, 0)) {
|
if (!is_cursed(rl2->data->attribs, &ct_astralblock)) {
|
||||||
for (u = rl2->data->units; u; u = u->next) {
|
for (u = rl2->data->units; u; u = u->next) {
|
||||||
if (u_race(u) != get_race(RC_SPECIAL) && u_race(u) != get_race(RC_SPELL)) {
|
if (u_race(u) != get_race(RC_SPECIAL) && u_race(u) != get_race(RC_SPELL)) {
|
||||||
c++;
|
c++;
|
||||||
|
@ -5677,7 +5676,7 @@ int sp_viewreality(castorder * co)
|
||||||
/* Irgendwann mal auf Curses u/o Attribut umstellen. */
|
/* Irgendwann mal auf Curses u/o Attribut umstellen. */
|
||||||
for (rl2 = rl; rl2; rl2 = rl2->next) {
|
for (rl2 = rl; rl2; rl2 = rl2->next) {
|
||||||
region *rt = rl2->data;
|
region *rt = rl2->data;
|
||||||
if (!is_cursed(rt->attribs, C_ASTRALBLOCK, 0)) {
|
if (!is_cursed(rt->attribs, &ct_astralblock)) {
|
||||||
u =
|
u =
|
||||||
create_unit(rt, mage->faction, 1, get_race(RC_SPELL), 0,
|
create_unit(rt, mage->faction, 1, get_race(RC_SPELL), 0,
|
||||||
"spell/viewreality", NULL);
|
"spell/viewreality", NULL);
|
||||||
|
@ -5735,7 +5734,7 @@ int sp_disruptastral(castorder * co)
|
||||||
int inhab_regions = 0;
|
int inhab_regions = 0;
|
||||||
region_list *trl = NULL;
|
region_list *trl = NULL;
|
||||||
|
|
||||||
if (is_cursed(r2->attribs, C_ASTRALBLOCK, 0))
|
if (is_cursed(r2->attribs, &ct_astralblock))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (r2->units != NULL) {
|
if (r2->units != NULL) {
|
||||||
|
|
|
@ -66,11 +66,11 @@ int sp_flying_ship(castorder * co)
|
||||||
|
|
||||||
cno = levitate_ship(sh, mage, power, 1);
|
cno = levitate_ship(sh, mage, power, 1);
|
||||||
if (cno == 0) {
|
if (cno == 0) {
|
||||||
if (is_cursed(sh->attribs, C_SHIP_FLYING, 0)) {
|
if (is_cursed(sh->attribs, &ct_flyingship)) {
|
||||||
/* Auf dem Schiff befindet liegt bereits so ein Zauber. */
|
/* Auf dem Schiff befindet liegt bereits so ein Zauber. */
|
||||||
cmistake(mage, co->order, 211, MSG_MAGIC);
|
cmistake(mage, co->order, 211, MSG_MAGIC);
|
||||||
}
|
}
|
||||||
else if (is_cursed(sh->attribs, C_SHIP_SPEEDUP, 0)) {
|
else if (is_cursed(sh->attribs, &ct_shipspeedup)) {
|
||||||
/* Es ist zu gefaehrlich, ein sturmgepeitschtes Schiff fliegen zu lassen. */
|
/* Es ist zu gefaehrlich, ein sturmgepeitschtes Schiff fliegen zu lassen. */
|
||||||
cmistake(mage, co->order, 210, MSG_MAGIC);
|
cmistake(mage, co->order, 210, MSG_MAGIC);
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ static int flyingship_age(curse * c)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct curse_type ct_flyingship = { "flyingship",
|
const struct curse_type ct_flyingship = { "flyingship",
|
||||||
CURSETYP_NORM, 0, NO_MERGE, cinfo_ship, NULL, flyingship_read,
|
CURSETYP_NORM, 0, NO_MERGE, cinfo_ship, NULL, flyingship_read,
|
||||||
flyingship_write, NULL, flyingship_age
|
flyingship_write, NULL, flyingship_age
|
||||||
};
|
};
|
||||||
|
@ -153,7 +153,7 @@ static curse *shipcurse_flyingship(ship * sh, unit * mage, double power, int dur
|
||||||
if (curse_active(get_curse(sh->attribs, &ct_flyingship))) {
|
if (curse_active(get_curse(sh->attribs, &ct_flyingship))) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (is_cursed(sh->attribs, C_SHIP_SPEEDUP, 0)) {
|
if (is_cursed(sh->attribs, &ct_shipspeedup)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,9 @@ extern "C" {
|
||||||
struct castorder;
|
struct castorder;
|
||||||
struct ship;
|
struct ship;
|
||||||
struct unit;
|
struct unit;
|
||||||
|
struct curse_type;
|
||||||
|
|
||||||
|
extern const struct curse_type ct_flyingship;
|
||||||
|
|
||||||
int sp_flying_ship(struct castorder * co);
|
int sp_flying_ship(struct castorder * co);
|
||||||
|
|
||||||
|
|
|
@ -764,7 +764,7 @@ int study_cmd(unit * u, order * ord)
|
||||||
teach->value += u->number * 10;
|
teach->value += u->number * 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_cursed(r->attribs, C_BADLEARN, 0)) {
|
if (is_cursed(r->attribs, &ct_badlearn)) {
|
||||||
teach->value -= u->number * 10;
|
teach->value -= u->number * 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue