use getters/setters to access unit::race

This commit is contained in:
Enno Rehling 2013-05-02 03:50:24 +02:00
parent 3d7be88bad
commit b4b8c49934
9 changed files with 66 additions and 62 deletions

4
.gitignore vendored
View File

@ -12,3 +12,7 @@ ipch/
src/Release/ src/Release/
game-e3/data/ game-e3/data/
game-e3/reports/ game-e3/reports/
game-e3/*.log*
game-e2/data
game-e2/reports/
game-e2/*.log*

@ -1 +1 @@
Subproject commit 79feb5723c075a45a1a94ed286c87993314ce8da Subproject commit efc7373fb9f9171caa226f06ebca75b1b8425548

View File

@ -67,7 +67,7 @@ static int fix_familiars(struct lua_State *L)
free(mage->spellbook); free(mage->spellbook);
mage->spellbook = 0; mage->spellbook = 0;
snprintf(buffer, sizeof(buffer), "%s_familiar", u->race->_name[0]); snprintf(buffer, sizeof(buffer), "%s_familiar", u_race(u)->_name[0]);
eq = get_equipment(buffer); eq = get_equipment(buffer);
if (eq) { if (eq) {
equip_unit_mask(u, eq, EQUIP_SPELLS); equip_unit_mask(u, eq, EQUIP_SPELLS);

View File

@ -164,7 +164,7 @@ static order *get_money_for_dragon(region * r, unit * u, int wanted)
/* falls genug geld in der region ist, treiben wir steuern ein. */ /* falls genug geld in der region ist, treiben wir steuern ein. */
if (rmoney(r) >= wanted) { if (rmoney(r) >= wanted) {
/* 5% chance, dass der drache aus einer laune raus attackiert */ /* 5% chance, dass der drache aus einer laune raus attackiert */
if (chance(1.0 - u->race->aggression)) { if (chance(1.0 - u_race(u)->aggression)) {
return create_order(K_TAX, default_locale, NULL); return create_order(K_TAX, default_locale, NULL);
} }
} }
@ -251,7 +251,7 @@ static bool room_for_race_in_region(region * r, const race * rc)
int c = 0; int c = 0;
for (u = r->units; u; u = u->next) { for (u = r->units; u; u = u->next) {
if (u->race == rc) if (u_race(u) == rc)
c += u->number; c += u->number;
} }
@ -274,7 +274,7 @@ static direction_t random_neighbour(region * r, unit * u)
for (i = 0; i != MAXDIRECTIONS; i++) { for (i = 0; i != MAXDIRECTIONS; i++) {
rc = next[i]; rc = next[i];
if (rc && can_survive(u, rc)) { if (rc && can_survive(u, rc)) {
if (room_for_race_in_region(rc, u->race)) { if (room_for_race_in_region(rc, u_race(u))) {
c++; c++;
} }
c2++; c2++;
@ -302,7 +302,7 @@ static direction_t random_neighbour(region * r, unit * u)
if (rc && can_survive(u, rc)) { if (rc && can_survive(u, rc)) {
if (c2 == 0) { if (c2 == 0) {
c++; c++;
} else if (room_for_race_in_region(rc, u->race)) { } else if (room_for_race_in_region(rc, u_race(u))) {
c++; c++;
} }
if (c == rr) if (c == rr)
@ -361,7 +361,7 @@ static order *monster_move(region * r, unit * u)
if (monster_is_waiting(u)) { if (monster_is_waiting(u)) {
return NULL; return NULL;
} }
switch (old_race(u->race)) { switch (old_race(u_race(u))) {
case RC_FIREDRAGON: case RC_FIREDRAGON:
case RC_DRAGON: case RC_DRAGON:
case RC_WYRM: case RC_WYRM:
@ -390,7 +390,7 @@ static int dragon_affinity_value(region * r, unit * u)
{ {
int m = all_money(r, u->faction); int m = all_money(r, u->faction);
if (u->race == new_race[RC_FIREDRAGON]) { if (u_race(u) == new_race[RC_FIREDRAGON]) {
return (int)(normalvariate(m, m / 2)); return (int)(normalvariate(m, m / 2));
} else { } else {
return (int)(normalvariate(m, m / 4)); return (int)(normalvariate(m, m / 4));
@ -483,7 +483,7 @@ static order *monster_seeks_target(region * r, unit * u)
* derzeit gibt es nur den alp * derzeit gibt es nur den alp
*/ */
switch (old_race(u->race)) { switch (old_race(u_race(u))) {
case RC_ALP: case RC_ALP:
target = alp_target(u); target = alp_target(u);
break; break;
@ -498,7 +498,7 @@ static order *monster_seeks_target(region * r, unit * u)
} }
if (r == target->region) { /* Wir haben ihn! */ if (r == target->region) { /* Wir haben ihn! */
if (u->race == new_race[RC_ALP]) { if (u_race(u) == new_race[RC_ALP]) {
alp_findet_opfer(u, r); alp_findet_opfer(u, r);
} else { } else {
assert(!"Seeker-Monster hat keine Aktion fuer Ziel"); assert(!"Seeker-Monster hat keine Aktion fuer Ziel");
@ -599,11 +599,11 @@ static bool check_overpopulated(unit * u)
int c = 0; int c = 0;
for (u2 = u->region->units; u2; u2 = u2->next) { for (u2 = u->region->units; u2; u2 = u2->next) {
if (u2->race == u->race && u != u2) if (u_race(u2) == u_race(u) && u != u2)
c += u2->number; c += u2->number;
} }
if (c > u->race->splitsize * 2) if (c > u_race(u)->splitsize * 2)
return true; return true;
return false; return false;
@ -654,7 +654,7 @@ static order *plan_dragon(unit * u)
} }
move |= chance(0.04); /* 4% chance to change your mind */ move |= chance(0.04); /* 4% chance to change your mind */
if (u->race == new_race[RC_WYRM] && !move) { if (u_race(u) == new_race[RC_WYRM] && !move) {
unit *u2; unit *u2;
for (u2 = r->units; u2; u2 = u2->next) { for (u2 = r->units; u2; u2 = u2->next) {
/* wyrme sind einzelgänger */ /* wyrme sind einzelgänger */
@ -662,7 +662,7 @@ static order *plan_dragon(unit * u)
/* we do not make room for newcomers, so we don't need to look at them */ /* we do not make room for newcomers, so we don't need to look at them */
break; break;
} }
if (u2 != u && u2->race == u->race && chance(0.5)) { if (u2 != u && u_race(u2) == u_race(u) && chance(0.5)) {
move = true; move = true;
break; break;
} }
@ -684,7 +684,7 @@ static order *plan_dragon(unit * u)
} }
if (tr != NULL) { if (tr != NULL) {
assert(long_order == NULL); assert(long_order == NULL);
switch (old_race(u->race)) { switch (old_race(u_race(u))) {
case RC_FIREDRAGON: case RC_FIREDRAGON:
long_order = make_movement_order(u, tr, 4, allowed_dragon); long_order = make_movement_order(u, tr, 4, allowed_dragon);
break; break;
@ -716,7 +716,7 @@ static order *plan_dragon(unit * u)
if (long_order == NULL) { if (long_order == NULL) {
/* money is gone, need a new target */ /* money is gone, need a new target */
set_new_dragon_target(u, u->region, DRAGON_RANGE); set_new_dragon_target(u, u->region, DRAGON_RANGE);
} else if (u->race != new_race[RC_FIREDRAGON]) { } else if (u_race(u) != new_race[RC_FIREDRAGON]) {
/* neue dracoiden! */ /* neue dracoiden! */
if (r->land && !fval(r->terrain, FORBIDDEN_REGION)) { if (r->land && !fval(r->terrain, FORBIDDEN_REGION)) {
int ra = 20 + rng_int() % 100; int ra = 20 + rng_int() % 100;
@ -729,7 +729,7 @@ static order *plan_dragon(unit * u)
if (long_order == NULL) { if (long_order == NULL) {
skill_t sk = SK_PERCEPTION; skill_t sk = SK_PERCEPTION;
/* study perception (or a random useful skill) */ /* study perception (or a random useful skill) */
while (!skill_enabled[sk] || u->race->bonus[sk] < -5) { while (!skill_enabled[sk] || u_race(u)->bonus[sk] < -5) {
sk = (skill_t) (rng_int() % MAXSKILLS); sk = (skill_t) (rng_int() % MAXSKILLS);
} }
long_order = create_order(K_STUDY, u->faction->locale, "'%s'", long_order = create_order(K_STUDY, u->faction->locale, "'%s'",
@ -808,7 +808,7 @@ void plan_monsters(faction * f)
if (u->region == (region *) ta->data.v) { if (u->region == (region *) ta->data.v) {
a_remove(&u->attribs, ta); a_remove(&u->attribs, ta);
} }
} else if (u->race->flags & RCF_MOVERANDOM) { } else if (u_race(u)->flags & RCF_MOVERANDOM) {
if (rng_int() % 100 < MOVECHANCE || check_overpopulated(u)) { if (rng_int() % 100 < MOVECHANCE || check_overpopulated(u)) {
long_order = monster_move(r, u); long_order = monster_move(r, u);
} }
@ -818,7 +818,7 @@ void plan_monsters(faction * f)
if (long_order == NULL) { if (long_order == NULL) {
/* Einheiten, die Waffenlosen Kampf lernen könnten, lernen es um /* Einheiten, die Waffenlosen Kampf lernen könnten, lernen es um
* zu bewachen: */ * zu bewachen: */
if (u->race->bonus[SK_WEAPONLESS] != -99) { if (u_race(u)->bonus[SK_WEAPONLESS] != -99) {
if (eff_skill(u, SK_WEAPONLESS, u->region) < 1) { if (eff_skill(u, SK_WEAPONLESS, u->region) < 1) {
long_order = long_order =
create_order(K_STUDY, f->locale, "'%s'", create_order(K_STUDY, f->locale, "'%s'",
@ -834,7 +834,7 @@ void plan_monsters(faction * f)
handle_event(u->attribs, "ai_move", u); handle_event(u->attribs, "ai_move", u);
} }
switch (old_race(u->race)) { switch (old_race(u_race(u))) {
case RC_SEASERPENT: case RC_SEASERPENT:
long_order = create_order(K_PIRACY, f->locale, NULL); long_order = create_order(K_PIRACY, f->locale, NULL);
break; break;
@ -849,7 +849,7 @@ void plan_monsters(faction * f)
long_order = plan_dragon(u); long_order = plan_dragon(u);
break; break;
default: default:
if (u->race->flags & RCF_LEARN) { if (u_race(u)->flags & RCF_LEARN) {
long_order = monster_learn(u); long_order = monster_learn(u);
} }
break; break;
@ -915,14 +915,14 @@ void spawn_dragons(void)
if (verbosity >= 2) { if (verbosity >= 2) {
log_printf(stdout, "%d %s in %s.\n", u->number, log_printf(stdout, "%d %s in %s.\n", u->number,
LOC(default_locale, LOC(default_locale,
rc_name(u->race, u->number != 1)), regionname(r, NULL)); rc_name(u_race(u), u->number != 1)), regionname(r, NULL));
} }
name_unit(u); name_unit(u);
/* add message to the region */ /* add message to the region */
ADDMSG(&r->msgs, ADDMSG(&r->msgs,
msg_message("sighting", "region race number", r, u->race, u->number)); msg_message("sighting", "region race number", r, u_race(u), u->number));
} }
} }
} }
@ -990,7 +990,7 @@ void spawn_undead(void)
if (verbosity >= 2) { if (verbosity >= 2) {
log_printf(stdout, "%d %s in %s.\n", u->number, log_printf(stdout, "%d %s in %s.\n", u->number,
LOC(default_locale, LOC(default_locale,
rc_name(u->race, u->number != 1)), regionname(r, NULL)); rc_name(u_race(u), u->number != 1)), regionname(r, NULL));
} }
{ {

View File

@ -31,7 +31,7 @@ void age_firedragon(unit * u)
{ {
if (u->number > 0 && rng_int() % 100 < age_chance(u->age, DRAGONAGE, 1)) { if (u->number > 0 && rng_int() % 100 < age_chance(u->age, DRAGONAGE, 1)) {
double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number);
u->race = new_race[RC_DRAGON]; u_setrace(u, new_race[RC_DRAGON]);
u->irace = NULL; u->irace = NULL;
scale_number(u, 1); scale_number(u, 1);
u->hp = (int)(unit_max_hp(u) * u->number * q); u->hp = (int)(unit_max_hp(u) * u->number * q);
@ -42,7 +42,7 @@ void age_dragon(unit * u)
{ {
if (u->number > 0 && rng_int() % 100 < age_chance(u->age, WYRMAGE, 1)) { if (u->number > 0 && rng_int() % 100 < age_chance(u->age, WYRMAGE, 1)) {
double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number);
u->race = new_race[RC_WYRM]; u_setrace(u, new_race[RC_WYRM]);
u->irace = NULL; u->irace = NULL;
u->hp = (int)(unit_max_hp(u) * u->number * q); u->hp = (int)(unit_max_hp(u) * u->number * q);
} }

View File

@ -40,7 +40,7 @@ static void oldfamiliars(unit * u)
char fname[64]; char fname[64];
/* these familiars have no special skills. /* these familiars have no special skills.
*/ */
snprintf(fname, sizeof(fname), "%s_familiar", u->race->_name[0]); snprintf(fname, sizeof(fname), "%s_familiar", u_race(u)->_name[0]);
create_mage(u, M_GRAY); create_mage(u, M_GRAY);
equip_unit(u, get_equipment(fname)); equip_unit(u, get_equipment(fname));
} }
@ -55,7 +55,7 @@ static void equip_newunits(const struct equipment *eq, struct unit *u)
{ {
struct region *r = u->region; struct region *r = u->region;
switch (old_race(u->race)) { switch (old_race(u_race(u))) {
case RC_ELF: case RC_ELF:
set_show_item(u->faction, I_FEENSTIEFEL); set_show_item(u->faction, I_FEENSTIEFEL);
break; break;

View File

@ -62,7 +62,7 @@ void age_skeleton(unit * u)
if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) { if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) {
int n = MAX(1, u->number / 2); int n = MAX(1, u->number / 2);
double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number);
u->race = new_race[RC_SKELETON_LORD]; u_setrace(u, new_race[RC_SKELETON_LORD]);
u->irace = NULL; u->irace = NULL;
scale_number(u, n); scale_number(u, n);
u->hp = (int)(unit_max_hp(u) * u->number * q); u->hp = (int)(unit_max_hp(u) * u->number * q);
@ -74,7 +74,7 @@ void age_zombie(unit * u)
if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) { if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) {
int n = MAX(1, u->number / 2); int n = MAX(1, u->number / 2);
double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number);
u->race = new_race[RC_ZOMBIE_LORD]; u_setrace(u, new_race[RC_ZOMBIE_LORD]);
u->irace = NULL; u->irace = NULL;
scale_number(u, n); scale_number(u, n);
u->hp = (int)(unit_max_hp(u) * u->number * q); u->hp = (int)(unit_max_hp(u) * u->number * q);
@ -86,7 +86,7 @@ void age_ghoul(unit * u)
if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) { if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) {
int n = MAX(1, u->number / 2); int n = MAX(1, u->number / 2);
double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number);
u->race = new_race[RC_GHOUL_LORD]; u_setrace(u, new_race[RC_GHOUL_LORD]);
u->irace = NULL; u->irace = NULL;
scale_number(u, n); scale_number(u, n);
u->hp = (int)(unit_max_hp(u) * u->number * q); u->hp = (int)(unit_max_hp(u) * u->number * q);

View File

@ -525,7 +525,7 @@ int sp_mindblast_temp(struct castorder * co)
continue; continue;
} }
if (humanoidrace(du->race) && force >= du->number) { if (humanoidrace(u_race(du)) && force >= du->number) {
if (!is_magic_resistant(mage, du, 0)) { if (!is_magic_resistant(mage, du, 0)) {
skill_t sk = random_skill(du, true); skill_t sk = random_skill(du, true);
if (sk != NOSKILL) { if (sk != NOSKILL) {
@ -591,7 +591,7 @@ int sp_mindblast(struct castorder * co)
continue; continue;
} }
if (humanoidrace(du->race) && force >= du->number) { if (humanoidrace(u_race(du)) && force >= du->number) {
if (!is_magic_resistant(mage, du, 0)) { if (!is_magic_resistant(mage, du, 0)) {
skill_t sk = random_skill(du, false); skill_t sk = random_skill(du, false);
if (sk != NOSKILL) { if (sk != NOSKILL) {
@ -815,7 +815,7 @@ int sp_shadowcall(struct castorder * co)
make_fighter(b, u, fi->side, is_attacker(fi)); make_fighter(b, u, fi->side, is_attacker(fi));
msg = msg =
msg_message("sp_shadowcall_effect", "mage amount race", mage, u->number, msg_message("sp_shadowcall_effect", "mage amount race", mage, u->number,
u->race); u_race(u));
message_all(b, msg); message_all(b, msg);
msg_release(msg); msg_release(msg);
return level; return level;
@ -980,7 +980,7 @@ int sp_chaosrow(struct castorder * co)
if (chance(power / n)) { if (chance(power / n)) {
int row = statusrow(df->status); int row = statusrow(df->status);
df->side->size[row] -= df->alive; df->side->size[row] -= df->alive;
if (df->unit->race->battle_flags & BF_NOBLOCK) { if (u_race(df->unit)->battle_flags & BF_NOBLOCK) {
df->side->nonblockers[row] -= df->alive; df->side->nonblockers[row] -= df->alive;
} }
row = FIRST_ROW + (rng_int() % (LAST_ROW - FIRST_ROW)); row = FIRST_ROW + (rng_int() % (LAST_ROW - FIRST_ROW));
@ -1002,7 +1002,7 @@ int sp_chaosrow(struct castorder * co)
} }
assert(statusrow(df->status) == row); assert(statusrow(df->status) == row);
df->side->size[row] += df->alive; df->side->size[row] += df->alive;
if (df->unit->race->battle_flags & BF_NOBLOCK) { if (u_race(df->unit)->battle_flags & BF_NOBLOCK) {
df->side->nonblockers[row] += df->alive; df->side->nonblockers[row] += df->alive;
} }
k += df->alive; k += df->alive;
@ -1074,7 +1074,7 @@ int sp_flee(struct castorder * co)
--force; --force;
++panik; ++panik;
} else if (!(df->person[n].flags & FL_COURAGE) } else if (!(df->person[n].flags & FL_COURAGE)
|| !fval(df->unit->race, RCF_UNDEAD)) { || !fval(u_race(df->unit), RCF_UNDEAD)) {
if (!is_magic_resistant(mage, df->unit, 0)) { if (!is_magic_resistant(mage, df->unit, 0)) {
df->person[n].flags |= FL_PANICED; df->person[n].flags |= FL_PANICED;
++panik; ++panik;
@ -1552,7 +1552,7 @@ int sp_reanimate(struct castorder * co)
while (healable--) { while (healable--) {
fighter *tf = select_corpse(b, fi); fighter *tf = select_corpse(b, fi);
if (tf != NULL && tf->side->casualties > 0 if (tf != NULL && tf->side->casualties > 0
&& tf->unit->race != new_race[RC_DAEMON] && u_race(tf->unit) != new_race[RC_DAEMON]
&& (chance(c))) { && (chance(c))) {
assert(tf->alive < tf->unit->number); 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ählen,
@ -1617,11 +1617,11 @@ static int heal_fighters(quicklist * fgs, int *power, bool heal_monsters)
break; break;
/* Untote kann man nicht heilen */ /* Untote kann man nicht heilen */
if (df->unit->number == 0 || fval(df->unit->race, RCF_NOHEAL)) if (df->unit->number == 0 || fval(u_race(df->unit), RCF_NOHEAL))
continue; continue;
/* wir heilen erstmal keine Monster */ /* wir heilen erstmal keine Monster */
if (heal_monsters || playerrace(df->unit->race)) { if (heal_monsters || playerrace(u_race(df->unit))) {
int n, hp = df->unit->hp / df->unit->number; int n, hp = df->unit->hp / df->unit->number;
int rest = df->unit->hp % df->unit->number; int rest = df->unit->hp % df->unit->number;
@ -1718,7 +1718,7 @@ int sp_undeadhero(struct castorder * co)
break; break;
/* keine Monster */ /* keine Monster */
if (!playerrace(du->race)) if (!playerrace(u_race(du)))
continue; continue;
if (df->alive + df->run.number < du->number) { if (df->alive + df->run.number < du->number) {

View File

@ -490,8 +490,8 @@ static const race *select_familiar(const race * magerace, magic_t magiegebiet)
static void make_familiar(unit * familiar, unit * mage) static void make_familiar(unit * familiar, unit * mage)
{ {
/* skills and spells: */ /* skills and spells: */
if (familiar->race->init_familiar != NULL) { if (u_race(familiar)->init_familiar != NULL) {
familiar->race->init_familiar(familiar); u_race(familiar)->init_familiar(familiar);
} else { } else {
log_error("could not perform initialization for familiar %s.\n", familiar->faction->race->_name[0]); log_error("could not perform initialization for familiar %s.\n", familiar->faction->race->_name[0]);
} }
@ -1636,7 +1636,7 @@ static int sp_great_drought(castorder * co)
rsetterrain(r, T_OCEAN); rsetterrain(r, T_OCEAN);
/* Einheiten duerfen hier auf keinen Fall geloescht werden! */ /* Einheiten duerfen hier auf keinen Fall geloescht werden! */
for (u = r->units; u; u = u->next) { for (u = r->units; u; u = u->next) {
if (u->race != new_race[RC_SPELL] && u->ship == 0) { if (u_race(u) != new_race[RC_SPELL] && u->ship == 0) {
set_number(u, 0); set_number(u, 0);
} }
} }
@ -2151,7 +2151,7 @@ static int sp_ironkeeper(castorder * co)
tkill)); tkill));
} }
msg = msg_message("summon_effect", "mage amount race", mage, 1, keeper->race); msg = msg_message("summon_effect", "mage amount race", mage, 1, u_race(keeper));
r_addmessage(r, NULL, msg); r_addmessage(r, NULL, msg);
msg_release(msg); msg_release(msg);
@ -2580,7 +2580,7 @@ static int sp_summondragon(castorder * co)
for (rl2 = rl; rl2; rl2 = rl2->next) { for (rl2 = rl; rl2; rl2 = rl2->next) {
region *r2 = rl2->data; region *r2 = rl2->data;
for (u = r2->units; u; u = u->next) { for (u = r2->units; u; u = u->next) {
if (u->race == new_race[RC_WYRM] || u->race == new_race[RC_DRAGON]) { if (u_race(u) == new_race[RC_WYRM] || u_race(u) == new_race[RC_DRAGON]) {
attrib *a = a_find(u->attribs, &at_targetregion); attrib *a = a_find(u->attribs, &at_targetregion);
if (!a) { if (!a) {
a = a_add(&u->attribs, make_targetregion(r)); a = a_add(&u->attribs, make_targetregion(r));
@ -2690,7 +2690,7 @@ static int sp_unholypower(castorder * co)
u = pa->param[i]->data.u; u = pa->param[i]->data.u;
switch (old_race(u->race)) { switch (old_race(u_race(u))) {
case RC_SKELETON: case RC_SKELETON:
target_race = new_race[RC_SKELETON_LORD]; target_race = new_race[RC_SKELETON_LORD];
break; break;
@ -2711,7 +2711,7 @@ static int sp_unholypower(castorder * co)
if (u->number <= n) { if (u->number <= n) {
n -= u->number; n -= u->number;
u->irace = NULL; u->irace = NULL;
u->race = target_race; u_setrace(u, target_race);
u->hp = unit_max_hp(u) * u->number - wounds; u->hp = unit_max_hp(u) * u->number - wounds;
ADDMSG(&r->msgs, msg_message("unholypower_effect", ADDMSG(&r->msgs, msg_message("unholypower_effect",
"mage target race", mage, u, target_race)); "mage target race", mage, u, target_race));
@ -3013,7 +3013,7 @@ static int sp_summonshadowlords(castorder * co)
set_level(u, SK_PERCEPTION, 5); set_level(u, SK_PERCEPTION, 5);
ADDMSG(&mage->faction->msgs, msg_message("summon_effect", "mage amount race", ADDMSG(&mage->faction->msgs, msg_message("summon_effect", "mage amount race",
mage, amount, u->race)); mage, amount, u_race(u)));
return cast_level; return cast_level;
} }
@ -3228,7 +3228,7 @@ static int sp_bloodsacrifice(castorder * co)
static void skill_summoned(unit * u, int level) static void skill_summoned(unit * u, int level)
{ {
if (level > 0) { if (level > 0) {
const race *rc = u->race; const race *rc = u_race(u);
skill_t sk; skill_t sk;
for (sk = 0; sk != MAXSKILLS; ++sk) { for (sk = 0; sk != MAXSKILLS; ++sk) {
if (rc->bonus[sk] > 0) { if (rc->bonus[sk] > 0) {
@ -3642,7 +3642,7 @@ static int sp_rallypeasantmob(castorder * co)
for (u = r->units; u; u = un) { for (u = r->units; u; u = un) {
un = u->next; un = u->next;
if (is_monsters(u->faction) && u->race == new_race[RC_PEASANT]) { if (is_monsters(u->faction) && u_race(u) == new_race[RC_PEASANT]) {
rsetpeasants(r, rpeasants(r) + u->number); rsetpeasants(r, rpeasants(r) + u->number);
rsetmoney(r, rmoney(r) + get_money(u)); rsetmoney(r, rmoney(r) + get_money(u));
set_money(u, 0); set_money(u, 0);
@ -3755,7 +3755,7 @@ static int sp_migranten(castorder * co)
target = pa->param[0]->data.u; /* Zieleinheit */ target = pa->param[0]->data.u; /* Zieleinheit */
/* Personen unserer Rasse koennen problemlos normal uebergeben werden */ /* Personen unserer Rasse koennen problemlos normal uebergeben werden */
if (target->race == mage->faction->race) { if (u_race(target) == mage->faction->race) {
/* u ist von unserer Art, das Ritual waere verschwendete Aura. */ /* u ist von unserer Art, das Ritual waere verschwendete Aura. */
ADDMSG(&mage->faction->msgs, msg_message("sp_migranten_fail1", ADDMSG(&mage->faction->msgs, msg_message("sp_migranten_fail1",
"unit region command target", mage, mage->region, co->order, target)); "unit region command target", mage, mage->region, co->order, target));
@ -3766,7 +3766,7 @@ static int sp_migranten(castorder * co)
} }
/* Keine Monstereinheiten */ /* Keine Monstereinheiten */
if (!playerrace(target->race)) { if (!playerrace(u_race(target))) {
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order, ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
"spellfail_nomonsters", "")); "spellfail_nomonsters", ""));
return 0; return 0;
@ -4036,7 +4036,7 @@ static int sp_pump(castorder * co)
target = pa->param[0]->data.u; /* Zieleinheit */ target = pa->param[0]->data.u; /* Zieleinheit */
if (fval(target->race, RCF_UNDEAD)) { if (fval(u_race(target), RCF_UNDEAD)) {
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order, ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
"error_not_on_undead", "")); "error_not_on_undead", ""));
return 0; return 0;
@ -4102,7 +4102,7 @@ static int sp_seduce(castorder * co)
target = pa->param[0]->data.u; /* Zieleinheit */ target = pa->param[0]->data.u; /* Zieleinheit */
if (fval(target->race, RCF_UNDEAD)) { if (fval(u_race(target), RCF_UNDEAD)) {
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order, ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
"spellfail_noundead", "")); "spellfail_noundead", ""));
return 0; return 0;
@ -4179,7 +4179,7 @@ static int sp_calm_monster(castorder * co)
target = pa->param[0]->data.u; /* Zieleinheit */ target = pa->param[0]->data.u; /* Zieleinheit */
if (fval(target->race, RCF_UNDEAD)) { if (fval(u_race(target), RCF_UNDEAD)) {
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order, ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
"spellfail_noundead", "")); "spellfail_noundead", ""));
return 0; return 0;
@ -4503,7 +4503,7 @@ int sp_illusionary_shapeshift(castorder * co)
return 0; return 0;
} }
irace = u_irace(u); irace = u_irace(u);
if (irace == u->race) { if (irace == u_race(u)) {
trigger *trestore = trigger_changerace(u, NULL, irace); trigger *trestore = trigger_changerace(u, NULL, irace);
add_trigger(&u->attribs, "timer", trigger_timeout((int)power + 2, add_trigger(&u->attribs, "timer", trigger_timeout((int)power + 2,
trestore)); trestore));
@ -4712,7 +4712,7 @@ int sp_dreamreading(castorder * co)
u = pa->param[0]->data.u; u = pa->param[0]->data.u;
/* Illusionen und Untote abfangen. */ /* Illusionen und Untote abfangen. */
if (fval(u->race, RCF_UNDEAD | RCF_ILLUSIONARY)) { if (fval(u_race(u), RCF_UNDEAD | RCF_ILLUSIONARY)) {
ADDMSG(&mage->faction->msgs, msg_unitnotfound(mage, co->order, ADDMSG(&mage->faction->msgs, msg_unitnotfound(mage, co->order,
pa->param[0])); pa->param[0]));
return 0; return 0;
@ -5521,7 +5521,7 @@ int sp_showastral(castorder * co)
region *r2 = rl2->data; region *r2 = rl2->data;
if (!is_cursed(r2->attribs, C_ASTRALBLOCK, 0)) { if (!is_cursed(r2->attribs, C_ASTRALBLOCK, 0)) {
for (u = r2->units; u; u = u->next) { for (u = r2->units; u; u = u->next) {
if (u->race != new_race[RC_SPECIAL] && u->race != new_race[RC_SPELL]) if (u_race(u) != new_race[RC_SPECIAL] && u_race(u) != new_race[RC_SPELL])
n++; n++;
} }
} }
@ -5541,7 +5541,7 @@ int sp_showastral(castorder * co)
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, C_ASTRALBLOCK, 0)) {
for (u = rl2->data->units; u; u = u->next) { for (u = rl2->data->units; u; u = u->next) {
if (u->race != new_race[RC_SPECIAL] && u->race != new_race[RC_SPELL]) { if (u_race(u) != new_race[RC_SPECIAL] && u_race(u) != new_race[RC_SPELL]) {
c++; c++;
scat(unitname(u)); scat(unitname(u));
scat(" ("); scat(" (");
@ -5551,7 +5551,7 @@ int sp_showastral(castorder * co)
} }
icat(u->number); icat(u->number);
scat(" "); scat(" ");
scat(LOC(mage->faction->locale, rc_name(u->race, u->number != 1))); scat(LOC(mage->faction->locale, rc_name(u_race(u), u->number != 1)));
scat(", Entfernung "); scat(", Entfernung ");
icat(distance(rl2->data, rt)); icat(distance(rl2->data, rt));
scat(")"); scat(")");
@ -5681,7 +5681,7 @@ int sp_disruptastral(castorder * co)
if (trl != NULL) { if (trl != NULL) {
for (u = r2->units; u; u = u->next) { for (u = r2->units; u; u = u->next) {
if (u->race != new_race[RC_SPELL]) { if (u_race(u) != new_race[RC_SPELL]) {
region_list *trl2 = trl; region_list *trl2 = trl;
region *tr; region *tr;
int c = rng_int() % inhab_regions; int c = rng_int() % inhab_regions;