Merge branch 'develop' of github.com:ennorehling/eressea into develop

This commit is contained in:
Enno Rehling 2020-05-23 11:11:07 +02:00
commit 386dd07623
5 changed files with 82 additions and 21 deletions

View file

@ -3890,7 +3890,7 @@ msgstr "Ent"
msgctxt "iteminfo" msgctxt "iteminfo"
msgid "dwarfspoil" msgid "dwarfspoil"
msgstr "Beim Barte des Proheten! Ach nein, Zwergen. Irgendetwas riecht hier ranzig." msgstr "Beim Barte des Propheten! Ach nein, Zwergen. Irgendetwas riecht hier ranzig."
msgctxt "race" msgctxt "race"
msgid "clone" msgid "clone"
@ -6320,3 +6320,44 @@ msgctxt "race"
msgid "wolf" msgid "wolf"
msgstr "Wolf" msgstr "Wolf"
msgctxt "iteminfo"
msgid "elfspoil"
msgstr "Die Ohren sind spitz und beinahe trapezförmig. Wie kann
damit hören?"
msgctxt "iteminfo"
msgid "goblinspoil"
msgstr "Die Fratze des kleinen Kopfs wirkt beinahe etwas kindlich
zierlich, aber dennoch liegt etwas Listiges darin."
msgctxt "iteminfo"
msgid "halflingspoil"
msgstr "Die Sohle des behaarten Fußes ist deutlich dicker, beinahe
wie ein Huf."
msgctxt "iteminfo"
msgid "aquarianspoil"
msgstr "Die kleine, türkisfarbene Schuppe glänzt in der Sonne. Dennoch ist sie erstaunlich hart."
msgctxt "iteminfo"
msgid "humanspoil"
msgstr "Ob blond oder braun, ob kurz oder lang, du hast ein Büschel Haare mit einem Stück Haut in der Hand."
msgctxt "iteminfo"
msgid "catspoil"
msgstr "Wie ein kleines Seil aus weichem Fell."
msgctxt "iteminfo"
msgid "insectspoil"
msgstr "Das am Kopf der meisten Gliederfüßer auftretende,
gegliederte Extremitätenpaar, das mit Sensillen (Tastsinn, Geruchssinn)
ausgestattet ist."
msgctxt "iteminfo"
msgid "orcspoil"
msgstr "Große, spitze Zähne. Ob sie früher einem Ork oder doch einem Wildschwein gehörten ist nicht so leicht zu unterscheiden."
msgctxt "iteminfo"
msgid "demonspoil"
msgstr "Eine giftige und grüne Flüssigkeit in einer kleinen Phiole,
keine humanoide Rasse außer Dämonen wagt damit in Kontakt zu kommen."

View file

@ -84,10 +84,10 @@ static void chaos(region * r)
if (!(r->terrain->flags & SEA_REGION)) { if (!(r->terrain->flags & SEA_REGION)) {
unit *u = random_unit(r); unit *u = random_unit(r);
if (u && !undeadrace(u_race(u))) { if (u && !undeadrace(u_race(u))) {
ADDMSG(&u->faction->msgs, msg_message("chaos_disease", "unit", u)); if (join_monsters(u)) {
u_setfaction(u, get_monsters()); ADDMSG(&u->faction->msgs, msg_message("chaos_disease", "unit", u));
u_freeorders(u); u_setrace(u, get_race(RC_GHOUL));
u_setrace(u, get_race(RC_GHOUL)); }
} }
} }
break; break;

View file

@ -290,10 +290,10 @@ static int forget_cmd(unit * u, order * ord)
else { else {
unit *ufam = get_familiar(u); unit *ufam = get_familiar(u);
if (ufam) { if (ufam) {
a_removeall(&ufam->attribs, NULL); if (join_monsters(ufam)) {
u_setfaction(ufam, get_monsters()); a_removeall(&ufam->attribs, NULL);
u_freeorders(ufam); unit_convert_race(ufam, NULL, "ghost");
unit_convert_race(ufam, NULL, "ghost"); }
} }
a_removeall(&u->attribs, &at_mage); a_removeall(&u->attribs, &at_mage);
a_removeall(&u->attribs, &at_familiar); a_removeall(&u->attribs, &at_familiar);

View file

@ -43,9 +43,10 @@
#include <util/strings.h> #include <util/strings.h>
/* attributes includes */ /* attributes includes */
#include <attributes/targetregion.h>
#include <attributes/otherfaction.h>
#include <attributes/hate.h> #include <attributes/hate.h>
#include <attributes/otherfaction.h>
#include <attributes/stealth.h>
#include <attributes/targetregion.h>
#include <spells/regioncurse.h> #include <spells/regioncurse.h>
@ -179,6 +180,23 @@ static order *monster_attack(unit * u, const unit * target)
return create_order(K_ATTACK, u->faction->locale, "%i", target->no); return create_order(K_ATTACK, u->faction->locale, "%i", target->no);
} }
bool join_monsters(unit *u) {
static faction *monsters = NULL;
if (monsters == NULL) {
monsters = get_monsters();
if (monsters == NULL) {
return false;
}
}
u_setfaction(u, monsters);
u->status = ST_FIGHT;
a_removeall(&u->attribs, &at_otherfaction);
u->flags &= ~UFL_ANON_FACTION;
u_seteffstealth(u, -1);
u_freeorders(u);
return true;
}
void monsters_desert(struct faction *monsters) void monsters_desert(struct faction *monsters)
{ {
region *r; region *r;
@ -193,10 +211,10 @@ void monsters_desert(struct faction *monsters)
if (fval(u, UFL_ISNEW)) if (fval(u, UFL_ISNEW))
continue; continue;
if (rng_int() % 100 < 5) { if (rng_int() % 100 < 5) {
ADDMSG(&u->faction->msgs, msg_message("desertion", if (join_monsters(u)) {
"unit region", u, r)); ADDMSG(&u->faction->msgs, msg_message("desertion",
u_setfaction(u, monsters); "unit region", u, r));
u_freeorders(u); }
} }
} }
} }
@ -1175,10 +1193,11 @@ void monster_kills_peasants(unit * u)
void make_zombie(unit * u) void make_zombie(unit * u)
{ {
u_setfaction(u, get_monsters()); if (join_monsters(u)) {
u_freeorders(u); u_freeorders(u);
scale_number(u, 1); scale_number(u, 1);
u->hp = unit_max_hp(u) * u->number; u->hp = unit_max_hp(u) * u->number;
u_setrace(u, get_race(RC_ZOMBIE)); u_setrace(u, get_race(RC_ZOMBIE));
u->irace = NULL; u->irace = NULL;
}
} }

View file

@ -23,6 +23,7 @@ extern "C" {
void spawn_undead(void); void spawn_undead(void);
void plan_monsters(struct faction *f); void plan_monsters(struct faction *f);
bool join_monsters(struct unit *u);
#ifdef __cplusplus #ifdef __cplusplus
} }