Merge pull request #604 from ennorehling/develop

remove old arena artifacts
This commit is contained in:
Enno Rehling 2016-11-13 19:19:22 +01:00 committed by GitHub
commit 3bc3d2aa89
6 changed files with 6 additions and 363 deletions

View File

@ -135,12 +135,6 @@
</item>
</resource>
<resource name="wand_of_tears">
<item notlost="yes" weight="0">
<function name="use" value="use_wand_of_tears"/>
</item>
</resource>
<resource name="catapultammo">
<item weight="1000">
<construction skill="quarrying" minskill="3">

View File

@ -235,11 +235,6 @@
einzige Vorteil ihrer geringen Größe ist, dass sie sich leichter
verstecken kann.</text>
</string>
<string name="wand_of_tears">
<text locale="de">Dieses magische Szepter, ein Geschenk Igjarjuks, sorgt für große
Verwirrung und Gedächtnisverlust. Syntax: BENUTZE "Szepter der
Tränen"</text>
</string>
<string name="speedsail">
<text locale="de">Setzt eine Einheit dieses Segel auf einem Schiff, so erhöht
sich dessen Reichweite permanent um 1 Region.</text>
@ -1614,14 +1609,6 @@
<string name="presspass_p">
<text locale="de">Akkreditionen des Xontormia-Expreß</text>
</string>
<string name="wand_of_tears">
<text locale="de">Szepter der Tränen</text>
<text locale="en">wand of tears</text>
</string>
<string name="wand_of_tears_p">
<text locale="de">Szepter der Tränen</text>
<text locale="en">wands of tears</text>
</string>
<string name="snowball">
<text locale="de">Schneeball</text>
<text locale="en">snowball</text>

View File

@ -1253,14 +1253,6 @@
<text locale="en">"$unit($unit) dies from poison damage taken in $region($region)."</text>
</message>
<message name="wand_of_tears_usage" section="events">
<type>
<arg name="unit" type="unit"/>
</type>
<text locale="de">"$unit($unit) schwenkt sein Szepter und sorgt für Verwirrung und Chaos in der Region."</text>
<text locale="en">"$unit($unit) waves their scepter and causes chaos and confusion in the region."</text>
</message>
<message name="find_manual" section="events">
<type>
<arg name="unit" type="unit"/>
@ -1573,20 +1565,6 @@
<text locale="de">"$unit($mage) konnte $int($amount) $if($eq($amount,1),"Bauer","Bauern") anwerben."</text>
<text locale="en">"$unit($mage) managed to recruit $int($amount) $if($eq($amount,1),"peasant","peasants")."</text>
</message>
<message name="wand_of_tears_effect" section="events">
<type>
<arg name="unit" type="unit"/>
</type>
<text locale="de">"Ein bohrender Schmerz durchzuckt $unit($unit), Verwirrung macht sich breit."</text>
<text locale="en">"Pain pulses through $unit($unit), confusion spreads."</text>
</message>
<message name="cryinpain" section="events">
<type>
<arg name="unit" type="unit"/>
</type>
<text locale="de">""AAAAAAAGHHHHHH!" - Ein Schrei durchzieht die Region, $unit($unit) windet sich vor Schmerz."</text>
<text locale="en">""AAAAAAAGHHHHHH!" - $unit($unit) screams and squirms with pain."</text>
</message>
<message name="error_giveeye" section="events">
<type>
@ -1598,14 +1576,6 @@
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - A higher power prevents $unit($unit) from giving the object away. 'IT IS YOURS MY CHILD. ONLY YOURS.'."</text>
</message>
<message name="praytoigjarjuk" section="events">
<type>
<arg name="unit" type="unit"/>
</type>
<text locale="de">"$unit($unit) sendet ein Stoßgebet an den Herrn der Schreie."</text>
<text locale="en">"$unit($unit) sends a prayer to the Lord of Screams."</text>
</message>
<message name="iceberg_melt" section="events">
<type>
<arg name="region" type="region"/>

View File

@ -2077,8 +2077,9 @@ int write_game(gamedata *data) {
int a_readint(attrib * a, void *owner, struct gamedata *data)
{
/* assert(sizeof(int)==sizeof(a->data)); */
READ_INT(data->store, &a->data.i);
int n;
READ_INT(data->store, &n);
if (a) a->data.i = n;
return AT_READ_OK;
}

View File

@ -38,6 +38,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <kernel/pool.h>
#include <kernel/race.h>
#include <kernel/region.h>
#include <kernel/save.h>
#include <kernel/terrain.h>
#include <kernel/terrainid.h>
#include <kernel/unit.h>
@ -70,11 +71,6 @@ plane *arena = NULL;
/* local vars */
#define CENTRAL_VOLCANO 1
#ifdef ARENA_CREATION
static unsigned int arena_id = 0;
static region *arena_center = NULL;
static int newarena = 0;
#endif
static region *tower_region[6];
static region *start_region[6];
@ -180,228 +176,6 @@ enter_arena(unit * u, const item_type * itype, int amount, order * ord)
move_unit(u, start_region[rng_int() % 6], NULL);
return 0;
}
/***
** Szepter der Tränen, Demo-Item
***/
static int
use_wand_of_tears(unit * user, const struct item_type *itype, int amount,
order * ord)
{
int n;
unused_arg(ord);
for (n = 0; n != amount; ++n) {
unit *u;
for (u = user->region->units; u; u = u->next) {
if (u->faction != user->faction) {
int i;
for (i = 0; i != u->skill_size; ++i) {
if (rng_int() % 3)
reduce_skill(u, u->skills + i, 1);
}
ADDMSG(&u->faction->msgs, msg_message("wand_of_tears_effect",
"unit", u));
}
}
}
ADDMSG(&user->region->msgs, msg_message("wand_of_tears_usage", "unit", user));
return 0;
}
/**
* Tempel der Schreie, Demo-Gebäude **/
static int age_hurting(attrib * a, void *owner)
{
building *b = (building *)a->data.v;
unit *u;
int active = 0;
assert(owner == b);
if (b == NULL)
return AT_AGE_REMOVE;
for (u = b->region->units; u; u = u->next) {
if (u->building == b) {
if (u->faction->magiegebiet == M_DRAIG) {
active++;
ADDMSG(&b->region->msgs, msg_message("praytoigjarjuk", "unit", u));
}
}
}
if (active)
for (u = b->region->units; u; u = u->next)
if (playerrace(u->faction->race)) {
int i;
if (u->faction->magiegebiet != M_DRAIG) {
for (i = 0; i != active; ++i)
u->hp = (u->hp + 1) / 2; /* make them suffer, but not die */
ADDMSG(&b->region->msgs, msg_message("cryinpain", "unit", u));
}
}
return AT_AGE_KEEP;
}
static void
write_hurting(const attrib * a, const void *owner, struct storage *store)
{
building *b = a->data.v;
WRITE_INT(store, b->no);
}
static int read_hurting(attrib * a, void *owner, struct gamedata *data)
{
int i;
READ_INT(data->store, &i);
a->data.v = (void *)findbuilding(i);
if (a->data.v == NULL) {
log_error("temple of pain is broken\n");
return AT_READ_FAIL;
}
return AT_READ_OK;
}
static attrib_type at_hurting = {
"hurting", NULL, NULL, age_hurting, write_hurting, read_hurting
};
#ifdef ARENA_CREATION
static void make_temple(region * r)
{
const building_type *btype = bt_find("temple");
building *b;
if (btype == NULL) {
log_error("could not find buildingtype 'temple'\n");
return;
}
b = r->buildings;
while (b != NULL && b->type != btype)
b = b->next;
if (b != NULL)
return; /* gibt schon einen */
b = new_building(btype, r, NULL);
b->size = btype->maxsize;
b->name = _strdup("Igjarjuk's Tempel der Schreie");
b->display =
_strdup
("Ein Schrein aus spitzen Knochen und lodernden Flammen, gewidmet dem Wyrm der Wyrme");
a_add(&b->attribs, a_new(&at_hurting))->data.v = b;
}
#endif
/**
* Initialisierung Türme */
#ifdef ARENA_CREATION
static void tower_init(void)
{
int i, first = newarena;
item_type *it_demonseye = it_find("demonseye");
item_type *it_griphonwing = it_find("griphonwing");
assert(it_griphonwing && it_demonseye);
for (i = 0; i != 6; ++i) {
region *r = tower_region[i] =
findregion(arena_center->x + delta_x[i] * 3,
arena_center->y + delta_y[i] * 3);
if (r) {
start_region[i] =
findregion(arena_center->x + delta_x[i] * 2,
arena_center->y + delta_y[i] * 2);
if (rterrain(r) != T_DESERT)
terraform(r, T_DESERT);
if (!r->buildings) {
building *b = new_building(bt_find("castle"), r, NULL);
b->size = 10;
if (i != 0) {
sprintf(buf, "Turm des %s",
LOC(default_locale, mkname("school", magic_school[i])));
} else
sprintf(buf, "Turm der Ahnungslosen");
set_string(&b->name, buf);
}
}
}
if (first && !arena_center->buildings) {
building *b = new_building(bt_find("castle"), arena_center, NULL);
attrib *a;
item *items;
i_add(&items, i_new(it_griphonwing, 1));
i_add(&items, i_new(it_demonseye, 1));
a = a_add(&b->attribs, make_giveitem(b, items));
b->size = 10;
set_string(&b->name, "Höhle des Greifen");
}
}
#endif
#ifdef ARENA_CREATION
static void guardian_faction(plane * pl, int id)
{
region *r;
faction *f = findfaction(id);
if (!f) {
f = calloc(1, sizeof(faction));
f->banner = _strdup("Sie dienen dem großen Wyrm");
f->passw = _strdup(itoa36(rng_int()));
set_email(&f->email, "igjarjuk@eressea.de");
f->name = _strdup("Igjarjuks Kundschafter");
f->race = get_race(RC_ILLUSION);
f->age = turn;
f->locale = get_locale("de");
f->options =
want(O_COMPRESS) | want(O_REPORT) | want(O_COMPUTER) | want(O_ADRESSEN) |
want(O_DEBUG);
f->no = id;
addlist(&factions, f);
fhash(f);
}
if (f->race != get_race(RC_ILLUSION)) {
assert(!"guardian id vergeben");
exit(0);
}
f->lastorders = turn;
f->alive = true;
for (r = regions; r; r = r->next)
if (getplane(r) == pl && rterrain(r) != T_FIREWALL) {
unit *u;
freset(r, RF_ENCOUNTER);
for (u = r->units; u; u = u->next) {
if (u->faction == f)
break;
}
if (u)
continue;
u = create_unit(r, f, 1, get_race(RC_GOBLIN), 0, NULL, NULL);
set_string(&u->name, "Igjarjuks Auge");
i_change(&u->items, it_find("roi"), 1);
set_order(&u->thisorder, NULL);
fset(u, UFL_ANON_FACTION);
set_money(u, 1000);
}
}
#endif
#define BLOCKSIZE 9
#ifdef ARENA_CREATION
static void block_create(int x1, int y1, char terrain)
{
int x, y;
for (x = 0; x != BLOCKSIZE; ++x) {
for (y = 0; y != BLOCKSIZE; ++y) {
region *r = new_region(x1 + x, y1 + y, 0);
terraform(r, terrain);
}
}
}
#endif
#ifdef CENTRAL_VOLCANO
static int caldera_handle(trigger * t, void *data)
@ -469,94 +243,11 @@ struct trigger_type tt_caldera = {
caldera_read
};
#ifdef ARENA_CREATION
static trigger *trigger_caldera(building * b)
{
trigger *t = t_new(&tt_caldera);
t->data.v = b;
return t;
}
#endif
#ifdef ARENA_CREATION
static void init_volcano(void)
{
building *b;
region *r = arena_center;
assert(arena_center);
if (rterrain(r) != T_DESERT)
return; /* been done before */
terraform(arena_center, T_VOLCANO_SMOKING);
b = new_building(bt_find("caldera"), r, NULL);
b->size = 1;
b->name = _strdup("Igjarjuk's Schlund");
b->display =
_strdup
("Feurige Lava fließt aus dem Krater des großen Vulkans. Alles wird von ihr verschlungen.");
add_trigger(&b->attribs, "timer", trigger_caldera(b));
tt_register(&tt_caldera);
}
#endif
#endif
#ifdef ARENA_CREATION
void create_arena(void)
{
int x;
arena_id = hashstring("arena");
arena = getplanebyid(arena_id);
if (arena != NULL)
return;
score(); /* ist wichtig, damit alle Parteien einen score haben, wenn sie durchs Tor wollen. */
guardian_faction(arena, 999);
if (arena)
arena_center = findregion(plane_center_x(arena), plane_center_y(arena));
if (!arena_center) {
newarena = 1;
arena =
create_new_plane(arena_id, "Arena", -10000, -10000, 0, BLOCKSIZE - 1,
PFL_LOWSTEALING | PFL_NORECRUITS | PFL_NOALLIANCES);
block_create(arena->minx, arena->miny, T_OCEAN);
arena_center = findregion(plane_center_x(arena), plane_center_y(arena));
for (x = 0; x != BLOCKSIZE; ++x) {
int y;
for (y = 0; y != BLOCKSIZE; ++y) {
region *r = findregion(arena->minx + x, arena->miny + y);
freset(r, RF_ENCOUNTER);
r->planep = arena;
switch (distance(r, arena_center)) {
case 4:
terraform(r, T_FIREWALL);
break;
case 0:
terraform(r, T_GLACIER);
break;
case 1:
terraform(r, T_SWAMP);
break;
case 2:
terraform(r, T_MOUNTAIN);
break;
}
}
}
}
make_temple(arena_center);
#ifdef CENTRAL_VOLCANO
init_volcano();
#else
if (arena_center->terrain != T_DESERT)
terraform(arena_center, T_DESERT);
#endif
rsetmoney(arena_center, 0);
rsetpeasants(arena_center, 0);
tower_init();
}
#endif
void register_arena(void)
{
at_register(&at_hurting);
register_item_use(use_wand_of_tears, "use_wand_of_tears");
at_deprecate("hurting", a_readint);
register_function((pf_generic)enter_arena, "enter_arena");
register_function((pf_generic)leave_arena, "leave_arena");
tt_register(&tt_caldera);

View File

@ -45,7 +45,7 @@ extern "C" {
void demon_skillchange(struct unit *u);
#define MAXTEACHERS 20
#define MAXTEACHERS 32
#define TEACHNUMBER 10
typedef struct teaching_info {
struct unit *teachers[MAXTEACHERS];