forked from github/server
- neue Messages
kleine bugfixes in einzelnen messagedefinitionen - graph: corwin, vertex ist ein punkt, keine kante. Du meinst edge. - graph: Fehler bei markern, ein == statt einem =. - Kampf: ST_AGGRO, ST_CHICKEN Zwei neue Kampfstati, die das Fluchtverhalten beinnflußen.
This commit is contained in:
parent
1e51d0e9e2
commit
a02e94b8e5
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: targetregion.c,v 1.4 2001/02/04 11:18:26 corwin Exp $
|
||||
* $Id: targetregion.c,v 1.5 2001/04/13 14:39:50 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -32,7 +32,7 @@ read_targetregion(attrib * a, FILE * F)
|
|||
{
|
||||
if (global.data_version < BASE36IDS_VERSION) {
|
||||
a_readdefault(a, F);
|
||||
/* a->data.v = findregion(a->data.sa[0], a->data.sa[1]); */
|
||||
a->data.v = findregion(a->data.sa[0], a->data.sa[1]);
|
||||
} else {
|
||||
read_region_reference((region**)&a->data.v, F);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: economy.c,v 1.11 2001/04/12 17:21:42 enno Exp $
|
||||
* $Id: economy.c,v 1.12 2001/04/13 14:39:51 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -2416,9 +2416,8 @@ research(region *r, unit *u)
|
|||
|
||||
if (rht != NULL) {
|
||||
add_message(&u->faction->msgs, new_message(u->faction,
|
||||
"researchherb%u:unit%r:region%s:amount%s:herb", u, r,
|
||||
rough_amount(rherbs(r), 100), locale_string(u->faction->locale,
|
||||
resourcename(rht->itype->rtype, 1))));
|
||||
"researchherb%u:unit%r:region%s:amount%X:herb", u, r,
|
||||
rough_amount(rherbs(r), 100), rht->itype->rtype));
|
||||
} else {
|
||||
add_message(&u->faction->msgs, new_message(u->faction,
|
||||
"researchherb_none%u:unit%r:region", u, r));
|
||||
|
|
|
@ -1963,6 +1963,14 @@ instant_orders(void)
|
|||
u->status = ST_FLEE;
|
||||
break;
|
||||
|
||||
case P_CHICKEN:
|
||||
u->status = ST_CHICKEN;
|
||||
break;
|
||||
|
||||
case P_AGGRO:
|
||||
u->status = ST_AGGRO;
|
||||
break;
|
||||
|
||||
case P_VORNE:
|
||||
u->status = ST_FIGHT;
|
||||
break;
|
||||
|
@ -2179,99 +2187,6 @@ sinkships(void)
|
|||
#include "eressea.h"
|
||||
#include "build.h"
|
||||
|
||||
void
|
||||
reorder_owners(region * r)
|
||||
{
|
||||
unit ** up=&r->units, ** useek;
|
||||
building * b=NULL;
|
||||
ship * sh=NULL;
|
||||
#ifndef NDEBUG
|
||||
size_t len = listlen(r->units);
|
||||
#endif
|
||||
for (b = r->buildings;b;b=b->next) {
|
||||
unit ** ubegin = up;
|
||||
unit ** uend = up;
|
||||
|
||||
useek = up;
|
||||
while (*useek) {
|
||||
unit * u = *useek;
|
||||
if (u->building==b) {
|
||||
unit ** insert;
|
||||
if (fval(u, FL_OWNER)) {
|
||||
unit * nu = *ubegin;
|
||||
insert=ubegin;
|
||||
if (nu!=u && nu->building==u->building && fval(nu, FL_OWNER)) {
|
||||
log_error(("[reorder_owners] %s hat mehrere Besitzer mit FL_OWNER.\n", buildingname(nu->building)));
|
||||
freset(nu, FL_OWNER);
|
||||
}
|
||||
}
|
||||
else insert = uend;
|
||||
if (insert!=useek) {
|
||||
*useek = u->next; /* raus aus der liste */
|
||||
u->next = *insert;
|
||||
*insert = u;
|
||||
}
|
||||
if (insert==uend) uend=&u->next;
|
||||
}
|
||||
if (*useek==u) useek = &u->next;
|
||||
}
|
||||
up = uend;
|
||||
}
|
||||
|
||||
useek=up;
|
||||
while (*useek) {
|
||||
unit * u = *useek;
|
||||
assert(!u->building);
|
||||
if (u->ship==NULL) {
|
||||
if (fval(u, FL_OWNER)) {
|
||||
log_warning(("[reorder_owners] Einheit %s war Besitzer von nichts.\n", unitname(u)));
|
||||
freset(u, FL_OWNER);
|
||||
}
|
||||
if (useek!=up) {
|
||||
*useek = u->next; /* raus aus der liste */
|
||||
u->next = *up;
|
||||
*up = u;
|
||||
}
|
||||
up = &u->next;
|
||||
}
|
||||
if (*useek==u) useek = &u->next;
|
||||
}
|
||||
|
||||
for (sh = r->ships;sh;sh=sh->next) {
|
||||
unit ** ubegin = up;
|
||||
unit ** uend = up;
|
||||
|
||||
useek = up;
|
||||
while (*useek) {
|
||||
unit * u = *useek;
|
||||
if (u->ship==sh) {
|
||||
unit ** insert;
|
||||
if (fval(u, FL_OWNER)) {
|
||||
unit * nu = *ubegin;
|
||||
insert = ubegin;
|
||||
if (nu!=u && nu->ship==u->ship && fval(nu, FL_OWNER)) {
|
||||
log_error(("[reorder_owners] %s hat mehrere Besitzer mit FL_OWNER.\n", shipname(nu->ship)));
|
||||
freset(nu, FL_OWNER);
|
||||
}
|
||||
}
|
||||
else insert = uend;
|
||||
if (insert!=useek) {
|
||||
*useek = u->next; /* raus aus der liste */
|
||||
u->next = *insert;
|
||||
*insert = u;
|
||||
}
|
||||
if (insert==uend) uend=&u->next;
|
||||
}
|
||||
if (*useek==u) useek = &u->next;
|
||||
}
|
||||
up = uend;
|
||||
}
|
||||
#ifndef NDEBUG
|
||||
assert(len==listlen(r->units));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static attrib_type at_number = {
|
||||
"faction_renum",
|
||||
NULL, NULL, NULL, NULL, NULL,
|
||||
|
|
|
@ -1137,8 +1137,8 @@ randomevents(void)
|
|||
}
|
||||
if (c) {
|
||||
add_message(&u->faction->msgs, new_message(u->faction,
|
||||
"scunicorn%u:unit%i:amount%s:type",u,c,
|
||||
locale_string(u->faction->locale, resourcename(olditemtype[I_UNICORN]->rtype, c!=1?NMF_PLURAL:0))));
|
||||
"scunicorn%u:unit%i:amount%X:type",u,c,
|
||||
olditemtype[I_UNICORN]->rtype));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@ static attrib_type at_lmsstory = {
|
|||
des Attributs kein curse * ist */
|
||||
};
|
||||
|
||||
#if 0
|
||||
static int
|
||||
use_lmsreward(struct unit * u, const struct item_type * itype, const char * cmd)
|
||||
{
|
||||
|
@ -73,6 +74,7 @@ use_lmsreward(struct unit * u, const struct item_type * itype, const char * cmd)
|
|||
unused(cmd);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
static resource_type rt_lmsreward = {
|
||||
{ "lmsreward", "lmsrewards" },
|
||||
|
|
|
@ -443,6 +443,47 @@ tactics_bonus(troop at, troop dt, boolean attacking)
|
|||
}
|
||||
#endif /* NEW_TACTICS */
|
||||
|
||||
static int
|
||||
statusrow(int status)
|
||||
{
|
||||
switch (status) {
|
||||
case ST_AGGRO:
|
||||
case ST_FIGHT:
|
||||
return FIGHT_ROW;
|
||||
case ST_BEHIND:
|
||||
case ST_CHICKEN:
|
||||
return BEHIND_ROW;
|
||||
case ST_AVOID:
|
||||
return AVOID_ROW;
|
||||
case ST_FLEE:
|
||||
return FLEE_ROW;
|
||||
default:
|
||||
assert(!"unknown combatrow");
|
||||
}
|
||||
return FIGHT_ROW;
|
||||
}
|
||||
|
||||
static double
|
||||
hpflee(int status)
|
||||
/* if hp drop below this percentage, run away */
|
||||
{
|
||||
switch (status) {
|
||||
case ST_AGGRO:
|
||||
return 0.0;
|
||||
case ST_FIGHT:
|
||||
case ST_BEHIND:
|
||||
return 0.2;
|
||||
case ST_CHICKEN:
|
||||
case ST_AVOID:
|
||||
return 0.9;
|
||||
case ST_FLEE:
|
||||
return 1.0;
|
||||
default:
|
||||
assert(!"unknown combatrow");
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
int
|
||||
get_unitrow(fighter * af)
|
||||
{
|
||||
|
@ -455,7 +496,7 @@ get_unitrow(fighter * af)
|
|||
int line, result;
|
||||
int retreat = 0;
|
||||
int size[NUMROWS];
|
||||
int row = af->status + FIRST_ROW;
|
||||
int row = statusrow(af->status);
|
||||
int front = 0;
|
||||
size_t bsize;
|
||||
|
||||
|
@ -808,11 +849,11 @@ rmtroop(troop dt)
|
|||
df->person[dt.index] = df->person[df->alive - df->removed];
|
||||
df->person[df->alive - df->removed].hp = 0;
|
||||
--ds->size[SUM_ROW];
|
||||
--ds->size[df->status + FIRST_ROW];
|
||||
--ds->size[statusrow(df->status)];
|
||||
/* z.B. Schattenritter */
|
||||
if (race[df->unit->race].battle_flags & BF_NOBLOCK) {
|
||||
--ds->nonblockers[SUM_ROW];
|
||||
--ds->nonblockers[df->status + 1];
|
||||
--ds->nonblockers[statusrow(df->status)];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2838,10 +2879,10 @@ make_fighter(battle * b, unit * u, boolean attack)
|
|||
battlerecord(b, buf);
|
||||
}
|
||||
|
||||
s1->size[fig->status + FIGHT_ROW] += u->number;
|
||||
s1->size[statusrow(fig->status)] += u->number;
|
||||
s1->size[SUM_ROW] += u->number;
|
||||
if (race[u->race].battle_flags & BF_NOBLOCK) {
|
||||
s1->nonblockers[fig->status + FIGHT_ROW] += u->number;
|
||||
s1->nonblockers[statusrow(fig->status)] += u->number;
|
||||
#ifdef FAST_GETUNITROW
|
||||
b->nonblockers = true;
|
||||
#endif
|
||||
|
@ -3533,7 +3574,7 @@ do_battle(void)
|
|||
troop dt;
|
||||
int runners = 0;
|
||||
/* Flucht nicht bei mehr als 600 HP. Damit Wyrme tötbar bleiben. */
|
||||
int runhp = min(600,max(4, unit_max_hp(u)/5));
|
||||
int runhp = min(600, max(4, (int)(unit_max_hp(u)*hpflee(u->status))));
|
||||
side *side = fig->side;
|
||||
region *r = NULL;
|
||||
if (is_undead(u) || u->race == RC_SHADOWKNIGHT) continue;
|
||||
|
|
|
@ -123,6 +123,8 @@ const char *parameters[MAXPARAMS] =
|
|||
"ZAUBERBUCH",
|
||||
"PAUSE",
|
||||
"VORNE",
|
||||
"AGGRESSIV",
|
||||
"DEFENSIV",
|
||||
"STUFE",
|
||||
"HELFE",
|
||||
"FREMDES",
|
||||
|
@ -2560,3 +2562,95 @@ month(int offset)
|
|||
|
||||
return month;
|
||||
}
|
||||
|
||||
void
|
||||
reorder_owners(region * r)
|
||||
{
|
||||
unit ** up=&r->units, ** useek;
|
||||
building * b=NULL;
|
||||
ship * sh=NULL;
|
||||
#ifndef NDEBUG
|
||||
size_t len = listlen(r->units);
|
||||
#endif
|
||||
for (b = r->buildings;b;b=b->next) {
|
||||
unit ** ubegin = up;
|
||||
unit ** uend = up;
|
||||
|
||||
useek = up;
|
||||
while (*useek) {
|
||||
unit * u = *useek;
|
||||
if (u->building==b) {
|
||||
unit ** insert;
|
||||
if (fval(u, FL_OWNER)) {
|
||||
unit * nu = *ubegin;
|
||||
insert=ubegin;
|
||||
if (nu!=u && nu->building==u->building && fval(nu, FL_OWNER)) {
|
||||
log_error(("[reorder_owners] %s hat mehrere Besitzer mit FL_OWNER.\n", buildingname(nu->building)));
|
||||
freset(nu, FL_OWNER);
|
||||
}
|
||||
}
|
||||
else insert = uend;
|
||||
if (insert!=useek) {
|
||||
*useek = u->next; /* raus aus der liste */
|
||||
u->next = *insert;
|
||||
*insert = u;
|
||||
}
|
||||
if (insert==uend) uend=&u->next;
|
||||
}
|
||||
if (*useek==u) useek = &u->next;
|
||||
}
|
||||
up = uend;
|
||||
}
|
||||
|
||||
useek=up;
|
||||
while (*useek) {
|
||||
unit * u = *useek;
|
||||
assert(!u->building);
|
||||
if (u->ship==NULL) {
|
||||
if (fval(u, FL_OWNER)) {
|
||||
log_warning(("[reorder_owners] Einheit %s war Besitzer von nichts.\n", unitname(u)));
|
||||
freset(u, FL_OWNER);
|
||||
}
|
||||
if (useek!=up) {
|
||||
*useek = u->next; /* raus aus der liste */
|
||||
u->next = *up;
|
||||
*up = u;
|
||||
}
|
||||
up = &u->next;
|
||||
}
|
||||
if (*useek==u) useek = &u->next;
|
||||
}
|
||||
|
||||
for (sh = r->ships;sh;sh=sh->next) {
|
||||
unit ** ubegin = up;
|
||||
unit ** uend = up;
|
||||
|
||||
useek = up;
|
||||
while (*useek) {
|
||||
unit * u = *useek;
|
||||
if (u->ship==sh) {
|
||||
unit ** insert;
|
||||
if (fval(u, FL_OWNER)) {
|
||||
unit * nu = *ubegin;
|
||||
insert = ubegin;
|
||||
if (nu!=u && nu->ship==u->ship && fval(nu, FL_OWNER)) {
|
||||
log_error(("[reorder_owners] %s hat mehrere Besitzer mit FL_OWNER.\n", shipname(nu->ship)));
|
||||
freset(nu, FL_OWNER);
|
||||
}
|
||||
}
|
||||
else insert = uend;
|
||||
if (insert!=useek) {
|
||||
*useek = u->next; /* raus aus der liste */
|
||||
u->next = *insert;
|
||||
*insert = u;
|
||||
}
|
||||
if (insert==uend) uend=&u->next;
|
||||
}
|
||||
if (*useek==u) useek = &u->next;
|
||||
}
|
||||
up = uend;
|
||||
}
|
||||
#ifndef NDEBUG
|
||||
assert(len==listlen(r->units));
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -137,7 +137,7 @@ struct building_type;
|
|||
#define GLOBAL_ATTRIB_VERSION 196
|
||||
#define BASE36IDS_VERSION 197
|
||||
#define NEWSOURCE_VERSION 197
|
||||
#define NEWHASH_VERSION 198
|
||||
#define NEWSTATUS_VERSION 198
|
||||
#define LOCALE_VERSION 300 /* TODO */
|
||||
|
||||
/* globale settings des Spieles */
|
||||
|
@ -148,7 +148,7 @@ typedef struct settings {
|
|||
} settings;
|
||||
extern settings global;
|
||||
|
||||
#define RELEASE_VERSION NEWSOURCE_VERSION
|
||||
#define RELEASE_VERSION NEWSTATUS_VERSION
|
||||
#define ECHECK_VERSION "3.11"
|
||||
|
||||
/* changes from->to: 72->73: struct unit::lock entfernt.
|
||||
|
@ -421,16 +421,10 @@ extern const char *keywords[MAXKEYWORDS];
|
|||
|
||||
typedef int status_t;
|
||||
enum {
|
||||
ST_AGGRO,
|
||||
ST_FIGHT,
|
||||
ST_BEHIND,
|
||||
#ifdef MULTIROWS
|
||||
ST_BEHIND1,
|
||||
ST_BEHIND2,
|
||||
ST_BEHIND3,
|
||||
ST_BEHIND4,
|
||||
ST_BEHIND5,
|
||||
ST_BEHIND6,
|
||||
#endif
|
||||
ST_CHICKEN,
|
||||
ST_AVOID,
|
||||
ST_FLEE
|
||||
};
|
||||
|
@ -468,6 +462,8 @@ enum {
|
|||
P_ZAUBER,
|
||||
P_PAUSE,
|
||||
P_VORNE,
|
||||
P_AGGRO,
|
||||
P_CHICKEN,
|
||||
P_LEVEL,
|
||||
P_HELP,
|
||||
P_FOREIGN,
|
||||
|
@ -1115,6 +1111,8 @@ extern const char * resourcepath(void);
|
|||
extern void kernel_init(void);
|
||||
extern void kernel_done(void);
|
||||
|
||||
extern void reorder_owners(struct region * r);
|
||||
|
||||
#define FIRST_TURN 184
|
||||
|
||||
#include <log.h>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: item.c,v 1.15 2001/04/11 18:01:50 corwin Exp $
|
||||
* $Id: item.c,v 1.16 2001/04/13 14:39:55 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -2212,10 +2212,6 @@ rt_read(FILE * F)
|
|||
}
|
||||
}
|
||||
rt_register(rt);
|
||||
#ifndef NDEBUG
|
||||
if (global.data_version >= NEWHASH_VERSION)
|
||||
assert(rt->hashkey==hash);
|
||||
#endif
|
||||
return rt;
|
||||
}
|
||||
|
||||
|
|
|
@ -108,6 +108,10 @@ report_kampfstatus(const unit * u)
|
|||
case ST_FLEE:
|
||||
strcpy(fsbuf, ", flieht");
|
||||
break;
|
||||
|
||||
default:
|
||||
strcpy(fsbuf, ", unbekannt");
|
||||
break;
|
||||
}
|
||||
#ifdef NOAID
|
||||
if(fval(u, FL_NOAID)) strcat(fsbuf, ", bekommt keine Hilfe");
|
||||
|
|
|
@ -1296,6 +1296,15 @@ readgame(boolean backup)
|
|||
}
|
||||
}
|
||||
u->status = (status_t) ri(F);
|
||||
if (global.data_version < NEWSTATUS_VERSION) {
|
||||
switch (u->status) {
|
||||
case 0: u->status = ST_FIGHT; break;
|
||||
case 1: u->status = ST_BEHIND; break;
|
||||
case 2: u->status = ST_AVOID; break;
|
||||
case 3: u->status = ST_FLEE; break;
|
||||
default: assert(0);
|
||||
}
|
||||
}
|
||||
if (global.data_version <= 73) {
|
||||
if (ri(F)) {
|
||||
guard(u, GUARD_ALL);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: goodies.c,v 1.8 2001/04/12 17:21:45 enno Exp $
|
||||
* $Id: goodies.c,v 1.9 2001/04/13 14:39:55 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -105,3 +105,23 @@ set_string (char **s, const char *neu)
|
|||
*s = realloc(*s, strlen(neu) + 1);
|
||||
return strcpy(*s, neu);
|
||||
}
|
||||
|
||||
boolean
|
||||
locale_check(void)
|
||||
{
|
||||
int i, errorlevel = 0;
|
||||
unsigned char * umlaute = (unsigned char*)"äöüÄÖÜß";
|
||||
/* E: das prüft, ob umlaute funktionieren. Wenn äöü nicht mit isalpha() true sind, kriegen wir ärger. */
|
||||
for (i=0;i!=3;++i) {
|
||||
if (toupper(umlaute[i])!=(int)umlaute[i+3]) {
|
||||
++errorlevel;
|
||||
}
|
||||
}
|
||||
for (i=0;umlaute[i]!=0;++i) {
|
||||
if (!isalpha(umlaute[i]) || isspace(umlaute[i]) || iscntrl(umlaute[i])) {
|
||||
++errorlevel;
|
||||
}
|
||||
}
|
||||
if (errorlevel) return false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: goodies.h,v 1.4 2001/04/12 17:21:45 enno Exp $
|
||||
* $Id: goodies.h,v 1.5 2001/04/13 14:39:55 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -21,6 +21,7 @@ extern int *intlist_find(int *i_p, int i);
|
|||
extern unsigned int hashstring(const char* s);
|
||||
extern char *space_replace(char * str, char replace);
|
||||
extern const char *escape_string(const char * str, char * buffer, size_t len);
|
||||
extern boolean locale_check(void);
|
||||
/* grammar constants: */
|
||||
#define GR_PLURAL 0x01
|
||||
/* 0x02-0x08 left unused for individual use */
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
This program may not be used, modified or distributed
|
||||
without prior permission by the authors of Eressea.
|
||||
$Id: graph.c,v 1.1 2001/04/11 17:28:07 corwin Exp $
|
||||
*/
|
||||
|
||||
/* This is a very simple graph library. It is not optimized in any
|
||||
|
@ -21,57 +20,53 @@
|
|||
void
|
||||
graph_init(graph *g)
|
||||
{
|
||||
g->nodes = malloc(sizeof(vset));
|
||||
g->vertices = malloc(sizeof(vset));
|
||||
vset_init(g->nodes);
|
||||
vset_init(g->vertices);
|
||||
vset_init(&g->nodes);
|
||||
vset_init(&g->edges);
|
||||
}
|
||||
|
||||
void
|
||||
graph_free(graph *g)
|
||||
{
|
||||
vset_destroy(g->nodes);
|
||||
vset_destroy(g->vertices);
|
||||
free(g->nodes);
|
||||
free(g->vertices);
|
||||
vset_destroy(&g->nodes);
|
||||
vset_destroy(&g->edges);
|
||||
}
|
||||
|
||||
void
|
||||
graph_add_node(graph *g, node *n)
|
||||
{
|
||||
vset_add(g->nodes, n);
|
||||
vset_add(&g->nodes, n);
|
||||
}
|
||||
|
||||
void
|
||||
graph_add_vertex(graph *g, vertex *v)
|
||||
graph_add_edge(graph *g, edge *v)
|
||||
{
|
||||
vset_add(g->nodes, v);
|
||||
vset_add(&g->nodes, v);
|
||||
}
|
||||
|
||||
void
|
||||
graph_remove_node(graph *g, node *n)
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
for(i=0; i != g->vertices->size; ++i) {
|
||||
vertex *v = g->vertices->data[i];
|
||||
for(i=0; i != g->edges.size; ++i) {
|
||||
edge *v = g->edges.data[i];
|
||||
if(v->node1 == n || v->node2 == n) {
|
||||
vset_erase(g->nodes, v);
|
||||
vset_erase(&g->nodes, v);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
vset_erase(g->nodes, n);
|
||||
vset_erase(&g->nodes, n);
|
||||
}
|
||||
|
||||
node *
|
||||
graph_find_node(graph *g, void *object)
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
for(i=0; i != g->nodes->size; ++i) {
|
||||
node *node = g->nodes->data[i];
|
||||
for(i=0; i != g->nodes.size; ++i) {
|
||||
node *node = g->nodes.data[i];
|
||||
if(node->object == object) {
|
||||
return g->nodes->data[i];
|
||||
return g->nodes.data[i];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
@ -83,11 +78,11 @@ graph_find_node(graph *g, void *object)
|
|||
vset *
|
||||
graph_neighbours(graph *g, node *n)
|
||||
{
|
||||
int i;
|
||||
vset *vs = malloc(sizeof(vset));
|
||||
unsigned int i;
|
||||
vset * vs = malloc(sizeof(vs));
|
||||
vset_init(vs);
|
||||
for(i=0; i != g->vertices->size; ++i) {
|
||||
vertex *v = g->vertices->data[i];
|
||||
for(i=0; i != g->edges.size; ++i) {
|
||||
edge *v = g->edges.data[i];
|
||||
if(v->node1 == n && vset_count(vs, v->node2) == 0) {
|
||||
vset_add(vs, v->node2);
|
||||
} else if(v->node2 == n && vset_count(vs, v->node1) == 0) {
|
||||
|
@ -101,15 +96,15 @@ graph_neighbours(graph *g, node *n)
|
|||
void
|
||||
graph_resetmarkers(graph *g)
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
for(i=0; i != g->nodes->size; ++i) {
|
||||
node *node = g->nodes->data[i];
|
||||
for(i=0; i != g->nodes.size; ++i) {
|
||||
node *node = g->nodes.data[i];
|
||||
node->marker = 0;
|
||||
}
|
||||
for(i=0; i != g->vertices->size; ++i) {
|
||||
vertex *vertex = g->vertices->data[i];
|
||||
vertex->marker = 0;
|
||||
for(i=0; i != g->edges.size; ++i) {
|
||||
edge *edge = g->edges.data[i];
|
||||
edge->marker = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,32 +115,31 @@ vset *
|
|||
graph_connected_nodes(graph *g, node *n)
|
||||
{
|
||||
vset * vs = malloc(sizeof(vset));
|
||||
vset *s = malloc(sizeof(vset));
|
||||
vset s;
|
||||
|
||||
vset_init(vs);
|
||||
vset_init(s);
|
||||
vset_init(&s);
|
||||
graph_resetmarkers(g);
|
||||
vset_add(vs, n);
|
||||
n->marker = 1;
|
||||
vset_add(s, n);
|
||||
while(s->size > 0) {
|
||||
node *n = vset_pop(s);
|
||||
vset_add(&s, n);
|
||||
while(s.size > 0) {
|
||||
node *n = vset_pop(&s);
|
||||
vset *vs_nb = graph_neighbours(g, n);
|
||||
int i;
|
||||
unsigned int i;
|
||||
for(i=0; i != vs_nb->size; ++i) {
|
||||
node *nb = vs_nb->data[i];
|
||||
if(nb->marker == 0) {
|
||||
nb->marker == 1;
|
||||
nb->marker = 1;
|
||||
vset_add(vs, nb);
|
||||
vset_add(s, nb);
|
||||
vset_add(&s, nb);
|
||||
}
|
||||
}
|
||||
vset_destroy(vs_nb);
|
||||
free(vs_nb);
|
||||
}
|
||||
|
||||
vset_destroy(s);
|
||||
free(s);
|
||||
vset_destroy(&s);
|
||||
|
||||
return vs;
|
||||
}
|
||||
|
@ -157,19 +151,20 @@ vset *
|
|||
graph_disjunct_graphs(graph *g)
|
||||
{
|
||||
vset * dg = malloc(sizeof(vset));
|
||||
vset *nodes = malloc(sizeof(vset));
|
||||
vset nodes;
|
||||
|
||||
vset_init(nodes);
|
||||
vset_concat(nodes, g->nodes);
|
||||
vset_init(dg);
|
||||
vset_init(&nodes);
|
||||
vset_concat(&nodes, &g->nodes);
|
||||
|
||||
while(nodes->size > 0) {
|
||||
while(nodes.size > 0) {
|
||||
graph *gt = malloc(sizeof(graph));
|
||||
vset s;
|
||||
int i;
|
||||
unsigned int i;
|
||||
node *start;
|
||||
|
||||
graph_init(gt);
|
||||
start = vset_pop(nodes);
|
||||
start = vset_pop(&nodes);
|
||||
graph_resetmarkers(g);
|
||||
graph_add_node(gt, start);
|
||||
start->marker = 1;
|
||||
|
@ -182,7 +177,7 @@ graph_disjunct_graphs(graph *g)
|
|||
if(nb->marker == 0) {
|
||||
nb->marker = 1;
|
||||
graph_add_node(gt,nb);
|
||||
vset_erase(nodes,nb);
|
||||
vset_erase(&nodes,nb);
|
||||
vset_add(&s,nb);
|
||||
}
|
||||
}
|
||||
|
@ -191,18 +186,17 @@ graph_disjunct_graphs(graph *g)
|
|||
|
||||
vset_destroy(&s);
|
||||
|
||||
for(i=0;i != g->vertices->size; ++i) {
|
||||
vertex *v = g->vertices->data[i];
|
||||
if(vset_count(g->nodes, v->node1)) {
|
||||
graph_add_vertex(gt,v);
|
||||
for(i=0;i != g->edges.size; ++i) {
|
||||
edge *v = g->edges.data[i];
|
||||
if(vset_count(&g->nodes, v->node1)) {
|
||||
graph_add_edge(gt, v);
|
||||
}
|
||||
}
|
||||
|
||||
vset_add(dg, gt);
|
||||
}
|
||||
|
||||
vset_destroy(nodes);
|
||||
free(nodes);
|
||||
vset_destroy(&nodes);
|
||||
|
||||
return dg;
|
||||
}
|
||||
|
|
|
@ -8,26 +8,25 @@
|
|||
|
||||
This program may not be used, modified or distributed
|
||||
without prior permission by the authors of Eressea.
|
||||
$Id: graph.h,v 1.1 2001/04/11 17:28:07 corwin Exp $
|
||||
*/
|
||||
|
||||
#ifndef GRAPH_H
|
||||
#define GRAPH_H
|
||||
|
||||
typedef struct {
|
||||
typedef struct node {
|
||||
int marker;
|
||||
void *object;
|
||||
} node;
|
||||
|
||||
typedef struct {
|
||||
typedef struct edge {
|
||||
int marker;
|
||||
node *node1;
|
||||
node *node2;
|
||||
} vertex;
|
||||
} edge;
|
||||
|
||||
typedef struct {
|
||||
vset *nodes;
|
||||
vset *vertices;
|
||||
typedef struct graph {
|
||||
vset nodes;
|
||||
vset edges;
|
||||
} graph;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: language.c,v 1.5 2001/04/12 17:21:45 enno Exp $
|
||||
* $Id: language.c,v 1.6 2001/04/13 14:39:55 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -137,7 +137,7 @@ reverse_lookup(const locale * lang, const char * str)
|
|||
{
|
||||
int i;
|
||||
if (lang==NULL) lang = default_locale;
|
||||
assert(lang!=NULL);
|
||||
if (lang!=NULL) {
|
||||
for (i=0;i!=SMAXHASH;++i) {
|
||||
struct locale_string * ls;
|
||||
for (ls=lang->strings[i];ls;ls=ls->nexthash) {
|
||||
|
@ -145,5 +145,6 @@ reverse_lookup(const locale * lang, const char * str)
|
|||
if (strcasecmp(ls->str, str)==0) return ls->key;
|
||||
}
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
|
|
@ -421,6 +421,15 @@ eval_localize(opstack ** stack, const void * userdata) /* (string, locale) -> st
|
|||
unused(userdata);
|
||||
}
|
||||
|
||||
static void
|
||||
eval_locale(opstack ** stack, const void * userdata) /* (string) -> locale */
|
||||
{
|
||||
const char *c = opop(stack, const char *);
|
||||
const struct locale *lang = find_locale(c);
|
||||
opush(stack, lang);
|
||||
unused(userdata);
|
||||
}
|
||||
|
||||
void
|
||||
translation_init(void)
|
||||
{
|
||||
|
@ -429,6 +438,7 @@ translation_init(void)
|
|||
add_function("add", &eval_add);
|
||||
add_function("if", &eval_if);
|
||||
add_function("localize", &eval_localize);
|
||||
add_function("locale", &eval_locale);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: main.c,v 1.20 2001/04/12 17:21:46 enno Exp $
|
||||
* $Id: main.c,v 1.21 2001/04/13 14:39:55 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -44,6 +44,7 @@
|
|||
|
||||
/* gamecode includes */
|
||||
#include <creation.h>
|
||||
#include <goodies.h>
|
||||
#include <laws.h>
|
||||
|
||||
/* kernel includes */
|
||||
|
@ -59,7 +60,6 @@
|
|||
#include <region.h>
|
||||
#include <save.h>
|
||||
#include <ship.h>
|
||||
#include <time.h>
|
||||
#include <border.h>
|
||||
#include <region.h>
|
||||
#include <item.h>
|
||||
|
@ -73,6 +73,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <locale.h>
|
||||
|
||||
/**
|
||||
|
@ -91,6 +92,10 @@ extern boolean nobattle;
|
|||
extern boolean nobattledebug;
|
||||
static boolean printpotions;
|
||||
|
||||
extern void debug_messagetypes(FILE * out);
|
||||
extern void freeland(land_region * lr);
|
||||
extern void render_init(void);
|
||||
|
||||
#ifdef FUZZY_BASE36
|
||||
extern int fuzzy_hits;
|
||||
#endif /* FUZZY_BASE36 */
|
||||
|
@ -98,12 +103,13 @@ extern int fuzzy_hits;
|
|||
/**
|
||||
** global variables wthat we are exporting
|
||||
**/
|
||||
static char * orders = NULL;
|
||||
static int nowrite = 0;
|
||||
|
||||
struct settings global = {
|
||||
"Eressea", /* gamename */
|
||||
};
|
||||
|
||||
extern void render_init(void);
|
||||
|
||||
static void
|
||||
print_potions(FILE * F)
|
||||
{
|
||||
|
@ -118,10 +124,6 @@ print_potions(FILE * F)
|
|||
}
|
||||
}
|
||||
|
||||
static char * orders = NULL;
|
||||
static int nowrite = 0;
|
||||
extern void debug_messagetypes(FILE * out);
|
||||
|
||||
static void
|
||||
game_init(void)
|
||||
{
|
||||
|
@ -160,7 +162,7 @@ game_init(void)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
create_game(void)
|
||||
{
|
||||
assert(regions==NULL || !"game is initialized");
|
||||
|
@ -198,8 +200,6 @@ getgarbage(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
int quickleave = 0;
|
||||
|
||||
static void
|
||||
writepasswd(void)
|
||||
{
|
||||
|
@ -265,8 +265,6 @@ processturn(char *filename)
|
|||
return 0;
|
||||
}
|
||||
|
||||
extern void freeland(land_region * lr);
|
||||
|
||||
static void
|
||||
game_done(void)
|
||||
{
|
||||
|
@ -336,33 +334,6 @@ game_done(void)
|
|||
|
||||
#include "magic.h"
|
||||
|
||||
static boolean
|
||||
locale_check(void)
|
||||
{
|
||||
int i, errorlevel = 0;
|
||||
unsigned char * umlaute = (unsigned char*)"äöüÄÖÜß";
|
||||
/* E: das prüft, ob umlaute funktionieren. Wenn äöü nicht mit isalpha() true sind, kriegen wir ärger. */
|
||||
for (i=0;i!=3;++i) {
|
||||
if (toupper(umlaute[i])!=(int)umlaute[i+3]) {
|
||||
++errorlevel;
|
||||
fprintf(stderr, "error in locale[%d, %d]: toupper(%c)==%c\n", i, umlaute[i], umlaute[i], toupper(umlaute[i]));
|
||||
}
|
||||
}
|
||||
for (i=0;umlaute[i]!=0;++i) {
|
||||
if (!isalpha(umlaute[i]) || isspace(umlaute[i]) || iscntrl(umlaute[i])) {
|
||||
++errorlevel;
|
||||
if (!isalpha(umlaute[i]))
|
||||
fprintf(stderr, "error in locale[%d, %d]: !isalpha(%c)\n", i, umlaute[i], umlaute[i]);
|
||||
if (iscntrl(umlaute[i]))
|
||||
fprintf(stderr, "error in locale(%d, %d]: iscntrl(%c)\n", i, umlaute[i], umlaute[i]);
|
||||
if (isspace(umlaute[i]))
|
||||
fprintf(stderr, "error in locale[%d, %d]: isspace(%c)\n", i, umlaute[i], umlaute[i]);
|
||||
}
|
||||
}
|
||||
if (errorlevel) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
#if MALLOCDBG
|
||||
static void
|
||||
init_malloc_debug(void)
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "order.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
void
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: map_units.c,v 1.4 2001/02/18 10:06:10 enno Exp $
|
||||
* $Id: map_units.c,v 1.5 2001/04/13 14:39:56 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -831,6 +831,9 @@ mapper_spunit(dbllist ** SP, unit * u, int indent)
|
|||
case ST_FLEE:
|
||||
sncat(buf, ", flieht", BUFSIZE);
|
||||
break;
|
||||
default:
|
||||
sncat(buf, ", unbekannt", BUFSIZE);
|
||||
break;
|
||||
}
|
||||
|
||||
sncat(buf, " (", BUFSIZE); icat(u->hp/u->number); sncat(buf, " HP)", BUFSIZE);
|
||||
|
|
|
@ -3807,11 +3807,11 @@
|
|||
<arg name="ship" type="ship"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="damage" type="int"></arg>
|
||||
<arg name="sink" type="string"></arg>
|
||||
<arg name="sink" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"Die $ship($ship) fährt in den Mahlstrom von $region($region) und nimmt $int($damage) Schaden$sink."</text>
|
||||
<text>"Die $ship($ship) fährt in den Mahlstrom von $region($region) und nimmt $int($damage) Schaden$if($sink," und sinkt","")."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3820,11 +3820,11 @@
|
|||
<type>
|
||||
<arg name="ship" type="ship"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="sink" type="string"></arg>
|
||||
<arg name="sink" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"Die $ship($ship) wird in $region($region) von Stürmen abgetrieben$sink."</text>
|
||||
<text>"Die $ship($ship) wird in $region($region) von Stürmen abgetrieben$if($sink," und sinkt","")."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -4243,11 +4243,11 @@
|
|||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="amount" type="int"></arg>
|
||||
<arg name="type" type="string"></arg>
|
||||
<arg name="type" type="resource"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"$unit($unit) schließen sich $int($amount) $type an."</text>
|
||||
<text>"$unit($unit) $if($eq($amount,1),"schließt","schließen") sich $int($amount) $resource($type,$amount) an."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -4292,13 +4292,18 @@
|
|||
<message name="researchherb">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="amount" type="int"></arg>
|
||||
<arg name="amount" type="string"></arg>
|
||||
<arg name="herb" type="resource"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"$unit($unit) in $region($region) stellt fest, daß es hier $int($amount) $resource($herb,$amount) gibt."</text>
|
||||
<text>"$unit($unit) in $region($region) stellt fest, daß es hier $localize($amount,$locale("en")) $resource($herb,$amount) gibt."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($unit) discovers that $localize($amount,$locale("en")) $resource($herb,$amount) grow in $region($region)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -6390,11 +6395,16 @@
|
|||
<type>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="building" type="building"></arg>
|
||||
<arg name="opfer" type="unit"></arg>
|
||||
<arg name="opfer" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"In $region($region) stürzte $building($building) ein.$unit($opfer)"</text>
|
||||
<text>"In $region($region) stürzte $building($building) ein.$if($opfer," $int($opfer) Opfer sind zu beklagen.","")"</text>
|
||||
</nr>
|
||||
</locale>
|
||||
<locale name="en">
|
||||
<nr section="events">
|
||||
<text>"$building($building) in $region($region) collapses.$if($opfer," There are $int($opfer) caualties.","")"</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
|
|
@ -3091,11 +3091,11 @@
|
|||
<type>
|
||||
<arg name="ship" type="ship"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="sink" type="string"></arg>
|
||||
<arg name="sink" type="int"></arg>
|
||||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"The $ship($ship) in $region($region) drifts $sink in heavy storm."</text>
|
||||
<text>"The $ship($ship) in $region($region) drifts in heavy storm$if($sink," and sinks","")."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3705,7 +3705,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $region($region) is charmed with $spell, which will last for centuries."</text>
|
||||
<text>"$unit($mage) discovers that $region($region) is charmed with $spell, which will last for centuries."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3718,7 +3718,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $unit($unit) is charmed with $spell, which will last for centuries."</text>
|
||||
<text>"$unit($mage) discovers that $unit($unit) is charmed with $spell, which will last for centuries."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3731,7 +3731,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $building($building) is charmed with $spell, which will last for centuries."</text>
|
||||
<text>"$unit($mage) discovers that $building($building) is charmed with $spell, which will last for centuries."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3744,7 +3744,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $ship($ship) is charmed with $spell, which will last for centuries."</text>
|
||||
<text>"$unit($mage) discovers that $ship($ship) is charmed with $spell, which will last for centuries."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3758,7 +3758,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $region($region) is charmed with $spell, which will last for, about $int($months) more weeks."</text>
|
||||
<text>"$unit($mage) discovers that $region($region) is charmed with $spell, which will last for, about $int($months) more weeks."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3772,7 +3772,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $unit($unit) is charmed with $spell that willlast for about $int($months) more weeks."</text>
|
||||
<text>"$unit($mage) discovers that $unit($unit) is charmed with $spell that willlast for about $int($months) more weeks."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3786,7 +3786,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $building($building) is charmed with $spell, which will last for, about $int($months) more weeks."</text>
|
||||
<text>"$unit($mage) discovers that $building($building) is charmed with $spell, which will last for, about $int($months) more weeks."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3800,7 +3800,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($mage) found out that $ship($ship) is charmed with $spell, which will last for, about $int($months) more weeks."</text>
|
||||
<text>"$unit($mage) discovers that $ship($ship) is charmed with $spell, which will last for, about $int($months) more weeks."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
@ -3939,20 +3939,6 @@
|
|||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="researchherb">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="amount" type="int"></arg>
|
||||
<arg name="herb" type="resource"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
</type>
|
||||
<locale name="en">
|
||||
<nr section="none">
|
||||
<text>"$unit($unit) found out that $int($amount) $resource($herb,$amount) grow in $region($region)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="researchherb_none">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
|
|
|
@ -15,6 +15,14 @@ section_study;en;Learning and Teaching
|
|||
section_battle;en;Battles
|
||||
section_none;en;Miscellaneous
|
||||
|
||||
# Burgausbaustufen
|
||||
site;en;site
|
||||
fortification;en;fortification
|
||||
tower;en;tower
|
||||
castle;en;castle
|
||||
fortress;en;fortress
|
||||
citadel;en;citadel
|
||||
|
||||
# Items
|
||||
herb;en;herb
|
||||
herbbag;en;herbbag
|
||||
|
|
Loading…
Reference in New Issue