mourning, better.

This commit is contained in:
Enno Rehling 2009-07-25 08:30:50 +00:00
parent a7463d57a6
commit d173ba6218
7 changed files with 23 additions and 6 deletions

View File

@ -1185,7 +1185,7 @@ cr_output_region(FILE * F, report_context * ctx, seen_region * sr)
if (production(r)) { if (production(r)) {
int p_wage = wage(r, NULL, NULL, turn+1); int p_wage = wage(r, NULL, NULL, turn+1);
fprintf(F, "%d;Lohn\n", p_wage); fprintf(F, "%d;Lohn\n", p_wage);
if (owner_change(r)==turn) { if (is_mourning(r, turn+1)) {
fputs("1;mourning\n", F); fputs("1;mourning\n", F);
} }
} }

View File

@ -967,7 +967,7 @@ describe(FILE * F, const seen_region * sr, faction * f)
bytes = (int)strlcpy(bufp, LOC(f->locale, n==1?"peasant":"peasant_p"), size); bytes = (int)strlcpy(bufp, LOC(f->locale, n==1?"peasant":"peasant_p"), size);
} }
if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER();
if (owner_change(r)==turn) { if (is_mourning(r, turn+1)) {
bytes = (int)strlcpy(bufp, LOC(f->locale, "nr_mourning"), size); bytes = (int)strlcpy(bufp, LOC(f->locale, "nr_mourning"), size);
if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER();
} }

View File

@ -2683,7 +2683,7 @@ default_wage(const region *r, const faction * f, const race * rc, int in_turn)
} }
#endif /* KARMA_MODULE */ #endif /* KARMA_MODULE */
} else { } else {
if (owner_change(r) == in_turn-1) { if (is_mourning(r, in_turn)) {
wage = 10; wage = 10;
} else if (fval(r->terrain, SEA_REGION)) { } else if (fval(r->terrain, SEA_REGION)) {
wage = 11; wage = 11;

View File

@ -1457,14 +1457,15 @@ region_set_owner(struct region * r, struct faction * owner, int turn)
if (!r->land->ownership) { if (!r->land->ownership) {
r->land->ownership = malloc(sizeof(region_owner)); r->land->ownership = malloc(sizeof(region_owner));
region_set_morale(r, MORALE_DEFAULT, turn); region_set_morale(r, MORALE_DEFAULT, turn);
r->land->ownership->since_turn = -turn;
r->land->ownership->owner = NULL; r->land->ownership->owner = NULL;
r->land->ownership->flags = 0;
} else if (r->land->ownership->owner) { } else if (r->land->ownership->owner) {
region_set_morale(r, MORALE_TAKEOVER, turn); region_set_morale(r, MORALE_TAKEOVER, turn);
r->land->ownership->since_turn = turn; r->land->ownership->flags |= OWNER_MOURNING;
} else { } else {
r->land->ownership->since_turn = -turn; r->land->ownership->flags &= ~OWNER_MOURNING;
} }
r->land->ownership->since_turn = turn;
assert(r->land->ownership->owner != owner); assert(r->land->ownership->owner != owner);
r->land->ownership->owner = owner; r->land->ownership->owner = owner;
} }
@ -1529,3 +1530,9 @@ int owner_change(const region * r)
} }
return -1; return -1;
} }
boolean is_mourning(const region * r, int in_turn)
{
int change = owner_change(r);
return (change==in_turn-1 && (r->land->ownership->flags&OWNER_MOURNING));
}

View File

@ -67,10 +67,12 @@ struct item;
#define MORALE_TAKEOVER 0 /* Morale of peasants after they lose their lord */ #define MORALE_TAKEOVER 0 /* Morale of peasants after they lose their lord */
#define MORALE_COOLDOWN 2 /* minimum cooldown before a morale change occurs */ #define MORALE_COOLDOWN 2 /* minimum cooldown before a morale change occurs */
#define OWNER_MOURNING 0x01
typedef struct region_owner { typedef struct region_owner {
struct faction * owner; struct faction * owner;
int since_turn; /* turn the region changed owners */ int since_turn; /* turn the region changed owners */
int morale_turn; /* turn when morale has changed most recently */ int morale_turn; /* turn when morale has changed most recently */
unsigned int flags;
} region_owner; } region_owner;
typedef struct demand { typedef struct demand {
@ -275,6 +277,7 @@ void region_setinfo(struct region * self, const char * name);
int region_getresource(const struct region * r, const struct resource_type * rtype); int region_getresource(const struct region * r, const struct resource_type * rtype);
void region_setresource(struct region * r, const struct resource_type * rtype, int value); void region_setresource(struct region * r, const struct resource_type * rtype, int value);
int owner_change(const region * r); int owner_change(const region * r);
boolean is_mourning(const region * r, int in_turn);
extern const struct item_type * r_luxury(struct region * r); extern const struct item_type * r_luxury(struct region * r);
extern void get_neighbours(const struct region * r, struct region ** list); extern void get_neighbours(const struct region * r, struct region ** list);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -602,6 +602,7 @@ write_owner(struct storage * store, region_owner *owner)
if (owner) { if (owner) {
store->w_int(store, owner->since_turn); store->w_int(store, owner->since_turn);
store->w_int(store, owner->morale_turn); store->w_int(store, owner->morale_turn);
store->w_int(store, owner->flags);
write_faction_reference(owner->owner, store); write_faction_reference(owner->owner, store);
} else { } else {
store->w_int(store, -1); store->w_int(store, -1);
@ -616,6 +617,11 @@ read_owner(struct storage * store, region_owner **powner)
region_owner * owner = malloc(sizeof(region_owner)); region_owner * owner = malloc(sizeof(region_owner));
owner->since_turn = since_turn; owner->since_turn = since_turn;
owner->morale_turn = store->r_int(store); owner->morale_turn = store->r_int(store);
if (store->version>=MOURNING_VERSION) {
owner->flags = store->r_int(store);
} else {
owner->flags = 0;
}
read_reference(&owner->owner, store, read_faction_reference, resolve_faction); read_reference(&owner->owner, store, read_faction_reference, resolve_faction);
*powner = owner; *powner = owner;
} else { } else {

View File

@ -63,6 +63,7 @@
#define REGIONOWNER_VERSION 333 /* regions have owners and morale */ #define REGIONOWNER_VERSION 333 /* regions have owners and morale */
#define ALLIANCELEADER_VERSION 333 /* alliances have a leader */ #define ALLIANCELEADER_VERSION 333 /* alliances have a leader */
#define CURSEFLOAT_VERSION 334 /* all curse-effects are float */ #define CURSEFLOAT_VERSION 334 /* all curse-effects are float */
#define MOURNING_VERSION 335 /* mourning peasants */
#define MIN_VERSION CURSETYPE_VERSION /* minimal datafile we support */ #define MIN_VERSION CURSETYPE_VERSION /* minimal datafile we support */
#define RELEASE_VERSION CURSEFLOAT_VERSION /* current datafile */ #define RELEASE_VERSION CURSEFLOAT_VERSION /* current datafile */