forked from github/server
Merge branch 'develop' of github.com:ennorehling/eressea into develop
This commit is contained in:
commit
a2c963beb0
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"calendar" : {
|
||||||
|
"months" : [
|
||||||
|
{ "storm" : 60, "season" : 2 },
|
||||||
|
{ "storm" : 10, "season" : 2 },
|
||||||
|
|
||||||
|
{ "storm" : 60, "season" : 3 },
|
||||||
|
{ "storm" : 10, "season" : 3 },
|
||||||
|
|
||||||
|
{ "storm" : 60, "season" : 0 },
|
||||||
|
{ "storm" : 80, "season" : 0 },
|
||||||
|
|
||||||
|
{ "storm" : 50, "season" : 1 },
|
||||||
|
{ "storm" : 30, "season" : 1 },
|
||||||
|
{ "storm" : 60, "season" : 1 }
|
||||||
|
],
|
||||||
|
"weeks" : [
|
||||||
|
"firstweek", "secondweek", "thirdweek"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"include": [
|
"include": [
|
||||||
"keywords.json",
|
"keywords.json",
|
||||||
|
"calendar.json",
|
||||||
"prefixes.json",
|
"prefixes.json",
|
||||||
"e2/terrains.json"
|
"e2/terrains.json"
|
||||||
],
|
],
|
||||||
|
@ -22,6 +23,7 @@
|
||||||
"hunger.long": true,
|
"hunger.long": true,
|
||||||
"init_spells": 0,
|
"init_spells": 0,
|
||||||
"game.era": 2,
|
"game.era": 2,
|
||||||
|
"game.start": 184,
|
||||||
"rules.reserve.twophase": true,
|
"rules.reserve.twophase": true,
|
||||||
"rules.give.max_men": -1,
|
"rules.give.max_men": -1,
|
||||||
"rules.check_overload": false,
|
"rules.check_overload": false,
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
<xi:include href="config://game/familiars.xml"/>
|
<xi:include href="config://game/familiars.xml"/>
|
||||||
<xi:include href="config://game/artrewards.xml"/>
|
<xi:include href="config://game/artrewards.xml"/>
|
||||||
<xi:include href="config://game/buildings.xml"/>
|
<xi:include href="config://game/buildings.xml"/>
|
||||||
<xi:include href="config://core/calendar.xml"/>
|
|
||||||
<calendar name="secondage" newyear="month_1" start="184"/>
|
|
||||||
<xi:include href="config://game/equipment.xml"/>
|
<xi:include href="config://game/equipment.xml"/>
|
||||||
<xi:include href="config://game/items.xml"/>
|
<xi:include href="config://game/items.xml"/>
|
||||||
<xi:include href="config://game/spells.xml"/>
|
<xi:include href="config://game/spells.xml"/>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"include": [
|
"include": [
|
||||||
"keywords.json",
|
"keywords.json",
|
||||||
|
"calendar.json",
|
||||||
"prefixes.json",
|
"prefixes.json",
|
||||||
"e3/terrains.json"
|
"e3/terrains.json"
|
||||||
],
|
],
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
"study.expensivemigrants": true,
|
"study.expensivemigrants": true,
|
||||||
"study.speedup": 2,
|
"study.speedup": 2,
|
||||||
"game.era": 3,
|
"game.era": 3,
|
||||||
|
"game.start": 1,
|
||||||
"rules.reserve.twophase": true,
|
"rules.reserve.twophase": true,
|
||||||
"rules.owners.force_leave": false,
|
"rules.owners.force_leave": false,
|
||||||
"rules.wage.function": 2,
|
"rules.wage.function": 2,
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
<xi:include href="config://game/ships.xml"/>
|
<xi:include href="config://game/ships.xml"/>
|
||||||
<xi:include href="config://game/shipnames.xml"/>
|
<xi:include href="config://game/shipnames.xml"/>
|
||||||
<xi:include href="config://core/calendar.xml"/>
|
|
||||||
<xi:include href="config://game/items.xml" />
|
<xi:include href="config://game/items.xml" />
|
||||||
<xi:include href="config://game/races.xml"/>
|
<xi:include href="config://game/races.xml"/>
|
||||||
<xi:include href="config://game/buildings.xml"/>
|
<xi:include href="config://game/buildings.xml"/>
|
||||||
|
@ -21,8 +20,6 @@
|
||||||
<xi:include href="config://game/armor.xml" />
|
<xi:include href="config://game/armor.xml" />
|
||||||
<xi:include href="config://game/resources.xml" />
|
<xi:include href="config://game/resources.xml" />
|
||||||
|
|
||||||
<calendar name="thirdage" newyear="month_1" start="1"/>
|
|
||||||
|
|
||||||
<xi:include href="config://default/names-undead.xml"/>
|
<xi:include href="config://default/names-undead.xml"/>
|
||||||
<xi:include href="config://default/names-skeletons.xml"/>
|
<xi:include href="config://default/names-skeletons.xml"/>
|
||||||
<xi:include href="config://default/names-zombies.xml"/>
|
<xi:include href="config://default/names-zombies.xml"/>
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<calendar name="secondage" newyear="month_1">
|
|
||||||
<season name="winter">
|
|
||||||
<month name="month_4" storm="50" />
|
|
||||||
<month name="month_5" storm="30" />
|
|
||||||
<month name="month_6" storm="60" />
|
|
||||||
</season>
|
|
||||||
<season name="spring">
|
|
||||||
<month name="month_7" storm="60" />
|
|
||||||
<month name="month_8" storm="10" />
|
|
||||||
</season>
|
|
||||||
<season name="summer">
|
|
||||||
<month name="month_9" storm="60" />
|
|
||||||
<month name="month_1" storm="10" />
|
|
||||||
</season>
|
|
||||||
<season name="fall">
|
|
||||||
<month name="month_2" storm="60" />
|
|
||||||
<month name="month_3" storm="80" />
|
|
||||||
</season>
|
|
||||||
<week name="firstweek" />
|
|
||||||
<week name="secondweek" />
|
|
||||||
<week name="thirdweek" />
|
|
||||||
</calendar>
|
|
|
@ -6523,13 +6523,17 @@
|
||||||
<text locale="de">Sonnenfeuer</text>
|
<text locale="de">Sonnenfeuer</text>
|
||||||
<text locale="en">sunfire</text>
|
<text locale="en">sunfire</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="secondage">
|
<string name="age_1">
|
||||||
|
<text locale="de">neuer Zeitrechnung</text>
|
||||||
|
<text locale="en">of the new age</text>
|
||||||
|
</string>
|
||||||
|
<string name="age_2">
|
||||||
<text locale="de">des zweiten Zeitalters</text>
|
<text locale="de">des zweiten Zeitalters</text>
|
||||||
<text locale="en">the second age</text>
|
<text locale="en">the second age</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="newage">
|
<string name="age_3">
|
||||||
<text locale="de">neuer Zeitrechnung</text>
|
<text locale="de">des dritten Zeitalters</text>
|
||||||
<text locale="en">of the new age</text>
|
<text locale="en">the third age</text>
|
||||||
</string>
|
</string>
|
||||||
</namespace>
|
</namespace>
|
||||||
|
|
||||||
|
|
|
@ -38,12 +38,6 @@
|
||||||
<text locale="en">adamantium plates</text>
|
<text locale="en">adamantium plates</text>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<!--Fort-Ausbaustufen -->
|
|
||||||
<string name="calendar::thirdage">
|
|
||||||
<text locale="de">des dritten Zeitalters</text>
|
|
||||||
<text locale="en">the third age</text>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
<string name="packice">
|
<string name="packice">
|
||||||
<text locale="de">Packeis</text>
|
<text locale="de">Packeis</text>
|
||||||
<text locale="en">fast ice</text>
|
<text locale="en">fast ice</text>
|
||||||
|
@ -87,6 +81,7 @@
|
||||||
<text locale="en">repeating crossbows</text>
|
<text locale="en">repeating crossbows</text>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
|
<!--Fort-Ausbaustufen -->
|
||||||
<string name="scaffolding">
|
<string name="scaffolding">
|
||||||
<text locale="de">Gerüst</text>
|
<text locale="de">Gerüst</text>
|
||||||
<text locale="en">scaffolding</text>
|
<text locale="en">scaffolding</text>
|
||||||
|
@ -103,6 +98,7 @@
|
||||||
<text locale="de">Wache</text>
|
<text locale="de">Wache</text>
|
||||||
<text locale="en">watch</text>
|
<text locale="en">watch</text>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<string name="market">
|
<string name="market">
|
||||||
<text locale="de">Marktplatz</text>
|
<text locale="de">Marktplatz</text>
|
||||||
<text locale="en">marketplace</text>
|
<text locale="en">marketplace</text>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
local function is_winter(turn)
|
local function is_winter(turn)
|
||||||
local season = get_season(turn)
|
local season = get_season(turn)
|
||||||
return season == "calendar::winter"
|
return season == "winter"
|
||||||
end
|
end
|
||||||
|
|
||||||
local function is_spring(turn)
|
local function is_spring(turn)
|
||||||
local season = get_season(turn)
|
local season = get_season(turn)
|
||||||
return season == "calendar::spring"
|
return season == "spring"
|
||||||
end
|
end
|
||||||
|
|
||||||
local function freeze(r, chance)
|
local function freeze(r, chance)
|
||||||
|
|
|
@ -38,6 +38,7 @@ function ponnuki.init()
|
||||||
u.name = "Ponnuki"
|
u.name = "Ponnuki"
|
||||||
u.info = "Go, Ponnuki, Go!"
|
u.info = "Go, Ponnuki, Go!"
|
||||||
u.race_name = "Ritter von Go"
|
u.race_name = "Ritter von Go"
|
||||||
|
u.status = 5 -- FLIEHE
|
||||||
print(u:show())
|
print(u:show())
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|
|
@ -87,7 +87,7 @@ local self = {}
|
||||||
function self.update()
|
function self.update()
|
||||||
local turn = get_turn()
|
local turn = get_turn()
|
||||||
local season = get_season(turn)
|
local season = get_season(turn)
|
||||||
if season == "calendar::winter" then
|
if season == "winter" then
|
||||||
eressea.log.debug("it is " .. season .. ", the christmas trees do their magic")
|
eressea.log.debug("it is " .. season .. ", the christmas trees do their magic")
|
||||||
local msg = message.create("xmastree_effect")
|
local msg = message.create("xmastree_effect")
|
||||||
for r in regions() do
|
for r in regions() do
|
||||||
|
@ -103,7 +103,7 @@ function self.update()
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local prevseason = get_season(turn-1)
|
local prevseason = get_season(turn-1)
|
||||||
if prevseason == "calendar::winter" then
|
if prevseason == "winter" then
|
||||||
-- we celebrate knut and kick out the trees.
|
-- we celebrate knut and kick out the trees.
|
||||||
for r in regions() do
|
for r in regions() do
|
||||||
if r:get_key("xm06") then
|
if r:get_key("xm06") then
|
||||||
|
|
|
@ -11,8 +11,8 @@ function setup()
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_calendar()
|
function test_calendar()
|
||||||
assert_equal(get_season(1011), "calendar::winter")
|
assert_equal("winter", get_season(1011))
|
||||||
assert_equal(get_season(1012), "calendar::spring")
|
assert_equal("spring", get_season(1012))
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_herbalism()
|
function test_herbalism()
|
||||||
|
|
|
@ -38,7 +38,7 @@ function teardown()
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_calendar()
|
function test_calendar()
|
||||||
assert_equal(get_season(396), "calendar::winter")
|
assert_equal("winter", get_season(396))
|
||||||
end
|
end
|
||||||
|
|
||||||
function disable_test_bug_1738_build_castle_e3()
|
function disable_test_bug_1738_build_castle_e3()
|
||||||
|
|
|
@ -197,42 +197,42 @@ target_link_libraries(convert
|
||||||
)
|
)
|
||||||
|
|
||||||
set(TESTS_SRC
|
set(TESTS_SRC
|
||||||
monsters.test.c
|
|
||||||
names.test.c
|
|
||||||
donations.test.c
|
|
||||||
wormhole.test.c
|
|
||||||
alchemy.test.c
|
|
||||||
guard.test.c
|
|
||||||
test_eressea.c
|
test_eressea.c
|
||||||
tests.c
|
tests.c
|
||||||
|
alchemy.test.c
|
||||||
battle.test.c
|
battle.test.c
|
||||||
vortex.test.c
|
calendar.test.c
|
||||||
tests.test.c
|
|
||||||
volcano.test.c
|
|
||||||
reports.test.c
|
|
||||||
creport.test.c
|
creport.test.c
|
||||||
report.test.c
|
|
||||||
summary.test.c
|
|
||||||
travelthru.test.c
|
|
||||||
direction.test.c
|
direction.test.c
|
||||||
|
donations.test.c
|
||||||
economy.test.c
|
economy.test.c
|
||||||
|
give.test.c
|
||||||
|
guard.test.c
|
||||||
json.test.c
|
json.test.c
|
||||||
keyword.test.c
|
keyword.test.c
|
||||||
give.test.c
|
|
||||||
laws.test.c
|
laws.test.c
|
||||||
lighthouse.test.c
|
lighthouse.test.c
|
||||||
magic.test.c
|
magic.test.c
|
||||||
market.test.c
|
market.test.c
|
||||||
monsters.test.c
|
monsters.test.c
|
||||||
move.test.c
|
move.test.c
|
||||||
|
names.test.c
|
||||||
piracy.test.c
|
piracy.test.c
|
||||||
prefix.test.c
|
prefix.test.c
|
||||||
renumber.test.c
|
renumber.test.c
|
||||||
|
reports.test.c
|
||||||
|
report.test.c
|
||||||
|
summary.test.c
|
||||||
skill.test.c
|
skill.test.c
|
||||||
spells.test.c
|
spells.test.c
|
||||||
spy.test.c
|
spy.test.c
|
||||||
study.test.c
|
study.test.c
|
||||||
|
tests.test.c
|
||||||
|
travelthru.test.c
|
||||||
upkeep.test.c
|
upkeep.test.c
|
||||||
|
volcano.test.c
|
||||||
|
vortex.test.c
|
||||||
|
wormhole.test.c
|
||||||
spells/flyingship.test.c
|
spells/flyingship.test.c
|
||||||
spells/magicresistance.test.c
|
spells/magicresistance.test.c
|
||||||
triggers/shock.test.c
|
triggers/shock.test.c
|
||||||
|
|
|
@ -921,7 +921,7 @@ static int init_data(const char *filename, const char *catalog)
|
||||||
if (l) {
|
if (l) {
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
if (turn < 0) {
|
if (turn <= 0) {
|
||||||
turn = first_turn();
|
turn = first_turn();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,20 +1,35 @@
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include "calendar.h"
|
#include "calendar.h"
|
||||||
|
#include "move.h" /* storms */
|
||||||
|
|
||||||
#include <kernel/config.h>
|
#include <kernel/config.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
int first_month = 0;
|
int first_month = 0;
|
||||||
int weeks_per_month = 4;
|
int weeks_per_month = 3;
|
||||||
int months_per_year = 12;
|
int months_per_year = 12;
|
||||||
char **seasonnames = NULL;
|
const char *seasonnames[CALENDAR_SEASONS] = { "winter", "spring", "summer", "fall" };
|
||||||
char **weeknames = NULL;
|
char **weeknames = NULL;
|
||||||
char **weeknames2 = NULL;
|
char **weeknames2 = NULL;
|
||||||
char **monthnames = NULL;
|
|
||||||
int *month_season = NULL;
|
int *month_season = NULL;
|
||||||
char *agename = NULL;
|
|
||||||
int seasons = 0;
|
const char *calendar_month(int index)
|
||||||
|
{
|
||||||
|
static char result[20];
|
||||||
|
snprintf(result, sizeof(result), "month_%d", index + 1);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *calendar_era(void)
|
||||||
|
{
|
||||||
|
static char result[20];
|
||||||
|
int era = config_get_int("game.era", 1);
|
||||||
|
snprintf(result, sizeof(result), "age_%d", era);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
int first_turn(void)
|
int first_turn(void)
|
||||||
{
|
{
|
||||||
|
@ -27,8 +42,7 @@ const gamedate *get_gamedate(int turn, gamedate * gd)
|
||||||
int t = turn - first_turn();
|
int t = turn - first_turn();
|
||||||
|
|
||||||
assert(gd);
|
assert(gd);
|
||||||
if (t < 0)
|
assert(t>=0);
|
||||||
t = turn;
|
|
||||||
|
|
||||||
gd->week = t % weeks_per_month; /* 0 - weeks_per_month-1 */
|
gd->week = t % weeks_per_month; /* 0 - weeks_per_month-1 */
|
||||||
gd->month = (t / weeks_per_month + first_month) % months_per_year; /* 0 - months_per_year-1 */
|
gd->month = (t / weeks_per_month + first_month) % months_per_year; /* 0 - months_per_year-1 */
|
||||||
|
@ -41,36 +55,23 @@ void calendar_cleanup(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
free(agename);
|
|
||||||
|
|
||||||
if (seasonnames) {
|
|
||||||
for (i = 0; i != seasons; ++i) {
|
|
||||||
free(seasonnames[i]);
|
|
||||||
}
|
|
||||||
free(seasonnames);
|
|
||||||
seasonnames = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (monthnames) {
|
|
||||||
for (i = 0; i != months_per_year; ++i) {
|
|
||||||
free(monthnames[i]);
|
|
||||||
}
|
|
||||||
free(storms);
|
|
||||||
storms = 0;
|
|
||||||
free(month_season);
|
|
||||||
month_season = 0;
|
|
||||||
free(monthnames);
|
|
||||||
monthnames = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i != weeks_per_month; ++i) {
|
for (i = 0; i != weeks_per_month; ++i) {
|
||||||
if (weeknames)
|
if (weeknames)
|
||||||
free(weeknames[i]);
|
free(weeknames[i]);
|
||||||
if (weeknames2)
|
if (weeknames2)
|
||||||
free(weeknames2[i]);
|
free(weeknames2[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(storms);
|
||||||
|
storms = 0;
|
||||||
|
free(month_season);
|
||||||
|
month_season = 0;
|
||||||
free(weeknames);
|
free(weeknames);
|
||||||
weeknames = 0;
|
weeknames = 0;
|
||||||
free(weeknames2);
|
free(weeknames2);
|
||||||
weeknames2 = 0;
|
weeknames2 = 0;
|
||||||
|
|
||||||
|
first_month = 0;
|
||||||
|
weeks_per_month = 3;
|
||||||
|
months_per_year = 12;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,17 +11,12 @@ extern "C" {
|
||||||
SEASON_SUMMER,
|
SEASON_SUMMER,
|
||||||
SEASON_AUTUMN
|
SEASON_AUTUMN
|
||||||
};
|
};
|
||||||
|
#define CALENDAR_SEASONS 4
|
||||||
extern char *agename;
|
extern const char *seasonnames[CALENDAR_SEASONS];
|
||||||
extern int first_month;
|
|
||||||
|
|
||||||
extern int seasons;
|
|
||||||
extern char **seasonnames;
|
|
||||||
|
|
||||||
extern int months_per_year;
|
extern int months_per_year;
|
||||||
extern char **monthnames;
|
|
||||||
extern int *month_season;
|
extern int *month_season;
|
||||||
extern int *storms; /* in movement.c */
|
extern int first_month;
|
||||||
|
|
||||||
extern char **weeknames;
|
extern char **weeknames;
|
||||||
extern char **weeknames2;
|
extern char **weeknames2;
|
||||||
|
@ -36,6 +31,8 @@ extern "C" {
|
||||||
|
|
||||||
const gamedate *get_gamedate(int turn, gamedate * gd);
|
const gamedate *get_gamedate(int turn, gamedate * gd);
|
||||||
void calendar_cleanup(void);
|
void calendar_cleanup(void);
|
||||||
|
const char *calendar_month(int index);
|
||||||
|
const char *calendar_era(void);
|
||||||
int first_turn(void);
|
int first_turn(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
#include <platform.h>
|
||||||
|
|
||||||
|
#include "calendar.h"
|
||||||
|
|
||||||
|
#include <kernel/config.h>
|
||||||
|
|
||||||
|
#include <CuTest.h>
|
||||||
|
#include "tests.h"
|
||||||
|
|
||||||
|
static void test_calendar_config(CuTest * tc)
|
||||||
|
{
|
||||||
|
gamedate gd;
|
||||||
|
|
||||||
|
test_setup();
|
||||||
|
get_gamedate(0, &gd);
|
||||||
|
CuAssertIntEquals(tc, 0, first_turn());
|
||||||
|
config_set_int("game.start", 42);
|
||||||
|
CuAssertIntEquals(tc, 42, first_turn());
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_calendar(CuTest * tc)
|
||||||
|
{
|
||||||
|
gamedate gd;
|
||||||
|
|
||||||
|
test_setup();
|
||||||
|
get_gamedate(0, &gd);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.week);
|
||||||
|
|
||||||
|
get_gamedate(1, &gd);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.week);
|
||||||
|
|
||||||
|
get_gamedate(weeks_per_month, &gd);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.week);
|
||||||
|
|
||||||
|
get_gamedate(weeks_per_month*months_per_year, &gd);
|
||||||
|
CuAssertIntEquals(tc, 2, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.week);
|
||||||
|
|
||||||
|
config_set_int("game.start", 42);
|
||||||
|
get_gamedate(42, &gd);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.week);
|
||||||
|
|
||||||
|
first_month = 2;
|
||||||
|
get_gamedate(42, &gd);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 2, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.week);
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_calendar_season(CuTest * tc)
|
||||||
|
{
|
||||||
|
gamedate gd;
|
||||||
|
|
||||||
|
test_setup();
|
||||||
|
month_season = calloc(months_per_year, sizeof(int));
|
||||||
|
|
||||||
|
get_gamedate(0, &gd);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 0, gd.week);
|
||||||
|
|
||||||
|
month_season[1] = 1;
|
||||||
|
get_gamedate(weeks_per_month + 1, &gd);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.year);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.season);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.month);
|
||||||
|
CuAssertIntEquals(tc, 1, gd.week);
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
CuSuite *get_calendar_suite(void)
|
||||||
|
{
|
||||||
|
CuSuite *suite = CuSuiteNew();
|
||||||
|
SUITE_ADD_TEST(suite, test_calendar_config);
|
||||||
|
SUITE_ADD_TEST(suite, test_calendar);
|
||||||
|
SUITE_ADD_TEST(suite, test_calendar_season);
|
||||||
|
return suite;
|
||||||
|
}
|
|
@ -96,7 +96,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
struct settings global;
|
struct settings global;
|
||||||
|
|
||||||
bool lomem = false;
|
bool lomem = false;
|
||||||
int turn = -1;
|
int turn = 0;
|
||||||
|
|
||||||
const char *parameters[MAXPARAMS] = {
|
const char *parameters[MAXPARAMS] = {
|
||||||
"LOCALE",
|
"LOCALE",
|
||||||
|
@ -782,11 +782,18 @@ void config_set_from(const dictionary *d, const char *valid_keys[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void config_set(const char *key, const char *value) {
|
void config_set(const char *key, const char *value)
|
||||||
|
{
|
||||||
++config_cache_key;
|
++config_cache_key;
|
||||||
set_param(&configuration, key, value);
|
set_param(&configuration, key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void config_set_int(const char *key, int value)
|
||||||
|
{
|
||||||
|
++config_cache_key;
|
||||||
|
set_param(&configuration, key, itoa10(value));
|
||||||
|
}
|
||||||
|
|
||||||
const char *config_get(const char *key) {
|
const char *config_get(const char *key) {
|
||||||
return get_param(configuration, key);
|
return get_param(configuration, key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,6 +121,7 @@ extern "C" {
|
||||||
void free_params(struct param **pp);
|
void free_params(struct param **pp);
|
||||||
|
|
||||||
void config_set(const char *key, const char *value);
|
void config_set(const char *key, const char *value);
|
||||||
|
void config_set_int(const char *key, int value);
|
||||||
void config_set_from(const struct _dictionary_ *d, const char *keys[]);
|
void config_set_from(const struct _dictionary_ *d, const char *keys[]);
|
||||||
const char *config_get(const char *key);
|
const char *config_get(const char *key);
|
||||||
int config_get_int(const char *key, int def);
|
int config_get_int(const char *key, int def);
|
||||||
|
|
|
@ -33,6 +33,8 @@ without prior permission by the authors of Eressea.
|
||||||
|
|
||||||
/* game modules */
|
/* game modules */
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
|
#include "move.h"
|
||||||
|
#include "calendar.h"
|
||||||
|
|
||||||
/* util includes */
|
/* util includes */
|
||||||
#include <util/attrib.h>
|
#include <util/attrib.h>
|
||||||
|
@ -684,6 +686,74 @@ static void json_direction(cJSON *json, struct locale *lang) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void json_calendar(cJSON *json) {
|
||||||
|
cJSON *child;
|
||||||
|
if (json->type != cJSON_Object) {
|
||||||
|
log_error("calendar is not an object: %d", json->type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (child = json->child; child; child = child->next) {
|
||||||
|
if (strcmp(child->string, "start") == 0) {
|
||||||
|
config_set_int("game.start", child->valueint);
|
||||||
|
}
|
||||||
|
else if (strcmp(child->string, "weeks") == 0) {
|
||||||
|
cJSON *entry;
|
||||||
|
int i;
|
||||||
|
if (child->type != cJSON_Array) {
|
||||||
|
log_error("calendar.weeks is not an array: %d", json->type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
weeks_per_month = cJSON_GetArraySize(child);
|
||||||
|
free(weeknames);
|
||||||
|
weeknames = malloc(sizeof(char *) * weeks_per_month);
|
||||||
|
for (i = 0, entry = child->child; entry; entry = entry->next, ++i) {
|
||||||
|
if (entry->type == cJSON_String) {
|
||||||
|
weeknames[i] = strdup(entry->valuestring);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log_error("calendar.weeks[%d] is not a string: %d", i, json->type);
|
||||||
|
free(weeknames);
|
||||||
|
weeknames = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert(i == weeks_per_month);
|
||||||
|
free(weeknames2);
|
||||||
|
weeknames2 = malloc(sizeof(char *) * weeks_per_month);
|
||||||
|
for (i = 0; i != weeks_per_month; ++i) {
|
||||||
|
weeknames2[i] = malloc(strlen(weeknames[i]) + 3);
|
||||||
|
sprintf(weeknames2[i], "%s_d", weeknames[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(child->string, "months") == 0) {
|
||||||
|
cJSON *jmonth;
|
||||||
|
int i;
|
||||||
|
if (child->type != cJSON_Array) {
|
||||||
|
log_error("calendar.seasons is not an array: %d", json->type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
free(month_season);
|
||||||
|
month_season = NULL;
|
||||||
|
free(storms);
|
||||||
|
months_per_year = cJSON_GetArraySize(child);
|
||||||
|
storms = malloc(sizeof(int) * months_per_year);
|
||||||
|
month_season = malloc(sizeof(int) * months_per_year);
|
||||||
|
for (i = 0, jmonth = child->child; jmonth; jmonth = jmonth->next, ++i) {
|
||||||
|
if (jmonth->type == cJSON_Object) {
|
||||||
|
storms[i] = cJSON_GetObjectItem(jmonth, "storm")->valueint;
|
||||||
|
month_season[i] = cJSON_GetObjectItem(jmonth, "season")->valueint;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log_error("calendar.months[%d] is not an object: %d", i, json->type);
|
||||||
|
free(storms);
|
||||||
|
storms = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void json_directions(cJSON *json) {
|
static void json_directions(cJSON *json) {
|
||||||
cJSON *child;
|
cJSON *child;
|
||||||
if (json->type != cJSON_Object) {
|
if (json->type != cJSON_Object) {
|
||||||
|
@ -890,6 +960,9 @@ void json_config(cJSON *json) {
|
||||||
else if (strcmp(child->string, "strings") == 0) {
|
else if (strcmp(child->string, "strings") == 0) {
|
||||||
json_strings(child);
|
json_strings(child);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(child->string, "calendar") == 0) {
|
||||||
|
json_calendar(child);
|
||||||
|
}
|
||||||
else if (strcmp(child->string, "directions") == 0) {
|
else if (strcmp(child->string, "directions") == 0) {
|
||||||
json_directions(child);
|
json_directions(child);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
#include "order.h"
|
#include "order.h"
|
||||||
#include "terrain.h"
|
#include "terrain.h"
|
||||||
|
|
||||||
|
#include "move.h"
|
||||||
|
#include "calendar.h"
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
|
|
||||||
#include "util/language.h"
|
#include "util/language.h"
|
||||||
|
@ -75,7 +77,7 @@ static void test_settings(CuTest * tc)
|
||||||
"\"float\" : 1.5 }}";
|
"\"float\" : 1.5 }}";
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
config_set("game.id", "42"); /* should not be replaced */
|
config_set("game.id", "42"); /* should not be replaced */
|
||||||
config_set("game.name", "Eressea"); /* should not be replaced */
|
config_set("game.name", "Eressea"); /* should not be replaced */
|
||||||
json_config(json);
|
json_config(json);
|
||||||
|
@ -99,7 +101,7 @@ static void test_prefixes(CuTest * tc)
|
||||||
"]}";
|
"]}";
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
json_config(json);
|
json_config(json);
|
||||||
CuAssertPtrNotNull(tc, race_prefixes);
|
CuAssertPtrNotNull(tc, race_prefixes);
|
||||||
CuAssertStrEquals(tc, "snow", race_prefixes[0]);
|
CuAssertStrEquals(tc, "snow", race_prefixes[0]);
|
||||||
|
@ -119,7 +121,7 @@ static void test_disable(CuTest * tc)
|
||||||
"]}";
|
"]}";
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
CuAssertTrue(tc, skill_enabled(SK_ALCHEMY));
|
CuAssertTrue(tc, skill_enabled(SK_ALCHEMY));
|
||||||
CuAssertTrue(tc, !keyword_disabled(K_BANNER));
|
CuAssertTrue(tc, !keyword_disabled(K_BANNER));
|
||||||
CuAssertTrue(tc, !keyword_disabled(K_PAY));
|
CuAssertTrue(tc, !keyword_disabled(K_PAY));
|
||||||
|
@ -135,6 +137,31 @@ static void test_disable(CuTest * tc)
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_calendar(CuTest * tc)
|
||||||
|
{
|
||||||
|
const char * data = "{\"calendar\": { "
|
||||||
|
"\"weeks\" : [ \"one\", \"two\", \"three\" ],"
|
||||||
|
"\"months\" : ["
|
||||||
|
"{ \"storm\" : 99, \"season\" : 1 },"
|
||||||
|
"{ \"storm\" : 22, \"season\" : 2 }"
|
||||||
|
"]"
|
||||||
|
"}}";
|
||||||
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
|
test_setup();
|
||||||
|
json_config(json);
|
||||||
|
CuAssertPtrNotNull(tc, storms);
|
||||||
|
CuAssertIntEquals(tc, 2, months_per_year);
|
||||||
|
CuAssertIntEquals(tc, 3, weeks_per_month);
|
||||||
|
CuAssertIntEquals(tc, 99, storms[0]);
|
||||||
|
CuAssertIntEquals(tc, 22, storms[1]);
|
||||||
|
CuAssertPtrNotNull(tc, month_season);
|
||||||
|
CuAssertIntEquals(tc, 1, month_season[0]);
|
||||||
|
CuAssertIntEquals(tc, 2, month_season[1]);
|
||||||
|
cJSON_Delete(json);
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
static void test_races(CuTest * tc)
|
static void test_races(CuTest * tc)
|
||||||
{
|
{
|
||||||
const char * data = "{\"races\": { \"orc\" : { "
|
const char * data = "{\"races\": { \"orc\" : { "
|
||||||
|
@ -155,7 +182,7 @@ static void test_races(CuTest * tc)
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
const struct race *rc;
|
const struct race *rc;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertPtrEquals(tc, 0, races);
|
CuAssertPtrEquals(tc, 0, races);
|
||||||
|
@ -189,7 +216,7 @@ static void test_findrace(CuTest *tc) {
|
||||||
const race *rc;
|
const race *rc;
|
||||||
|
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
test_cleanup();
|
test_setup();
|
||||||
lang = get_or_create_locale("de");
|
lang = get_or_create_locale("de");
|
||||||
CuAssertPtrEquals(tc, 0, (void *)findrace("Zwerg", lang));
|
CuAssertPtrEquals(tc, 0, (void *)findrace("Zwerg", lang));
|
||||||
|
|
||||||
|
@ -211,7 +238,7 @@ static void test_items(CuTest * tc)
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
const item_type * itype;
|
const item_type * itype;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertPtrEquals(tc, 0, it_find("axe"));
|
CuAssertPtrEquals(tc, 0, it_find("axe"));
|
||||||
|
@ -249,7 +276,7 @@ static void test_ships(CuTest * tc)
|
||||||
const ship_type *st;
|
const ship_type *st;
|
||||||
const terrain_type *ter;
|
const terrain_type *ter;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertPtrEquals(tc, 0, shiptypes);
|
CuAssertPtrEquals(tc, 0, shiptypes);
|
||||||
|
@ -286,7 +313,7 @@ static void test_castles(CuTest *tc) {
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
const building_type *bt;
|
const building_type *bt;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertPtrEquals(tc, 0, buildingtypes);
|
CuAssertPtrEquals(tc, 0, buildingtypes);
|
||||||
|
@ -311,7 +338,7 @@ static void test_spells(CuTest * tc)
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
const spell *sp;
|
const spell *sp;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertPtrEquals(tc, 0, find_spell("fireball"));
|
CuAssertPtrEquals(tc, 0, find_spell("fireball"));
|
||||||
|
|
||||||
|
@ -350,7 +377,7 @@ static void test_buildings(CuTest * tc)
|
||||||
cJSON *json = cJSON_Parse(building_data);
|
cJSON *json = cJSON_Parse(building_data);
|
||||||
const building_type *bt;
|
const building_type *bt;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertPtrEquals(tc, 0, buildingtypes);
|
CuAssertPtrEquals(tc, 0, buildingtypes);
|
||||||
|
@ -400,7 +427,7 @@ static void test_buildings_default(CuTest * tc)
|
||||||
const building_type *bt;
|
const building_type *bt;
|
||||||
building_type clone;
|
building_type clone;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
bt = bt_get_or_create("house");
|
bt = bt_get_or_create("house");
|
||||||
clone = *bt;
|
clone = *bt;
|
||||||
|
@ -425,7 +452,7 @@ static void test_ships_default(CuTest * tc)
|
||||||
const ship_type *st;
|
const ship_type *st;
|
||||||
ship_type clone;
|
ship_type clone;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
st = st_get_or_create("hodor");
|
st = st_get_or_create("hodor");
|
||||||
clone = *st;
|
clone = *st;
|
||||||
|
@ -446,7 +473,7 @@ static void test_configs(CuTest * tc)
|
||||||
FILE *F;
|
FILE *F;
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
|
|
||||||
F = fopen("test.json", "w");
|
F = fopen("test.json", "w");
|
||||||
fwrite(building_data, 1, strlen(building_data), F);
|
fwrite(building_data, 1, strlen(building_data), F);
|
||||||
|
@ -475,7 +502,7 @@ static void test_terrains(CuTest * tc)
|
||||||
|
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertPtrEquals(tc, 0, (void *)get_terrain("plain"));
|
CuAssertPtrEquals(tc, 0, (void *)get_terrain("plain"));
|
||||||
|
|
||||||
|
@ -511,7 +538,7 @@ static void test_directions(CuTest * tc)
|
||||||
|
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
lang = get_or_create_locale("de");
|
lang = get_or_create_locale("de");
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertIntEquals(tc, NODIRECTION, get_direction("ost", lang));
|
CuAssertIntEquals(tc, NODIRECTION, get_direction("ost", lang));
|
||||||
|
@ -533,7 +560,7 @@ static void test_skills(CuTest * tc)
|
||||||
|
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
lang = get_or_create_locale("de");
|
lang = get_or_create_locale("de");
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertIntEquals(tc, NOSKILL, get_skill("potato", lang));
|
CuAssertIntEquals(tc, NOSKILL, get_skill("potato", lang));
|
||||||
|
@ -558,7 +585,7 @@ static void test_keywords(CuTest * tc)
|
||||||
|
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
lang = get_or_create_locale("de");
|
lang = get_or_create_locale("de");
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
CuAssertIntEquals(tc, NOKEYWORD, get_keyword("potato", lang));
|
CuAssertIntEquals(tc, NOKEYWORD, get_keyword("potato", lang));
|
||||||
|
@ -583,7 +610,7 @@ static void test_strings(CuTest * tc)
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
CuAssertPtrNotNull(tc, json);
|
CuAssertPtrNotNull(tc, json);
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
lang = get_or_create_locale("de");
|
lang = get_or_create_locale("de");
|
||||||
CuAssertPtrNotNull(tc, lang);
|
CuAssertPtrNotNull(tc, lang);
|
||||||
CuAssertPtrEquals(tc, NULL, (void *)LOC(lang, "move"));
|
CuAssertPtrEquals(tc, NULL, (void *)LOC(lang, "move"));
|
||||||
|
@ -640,6 +667,7 @@ CuSuite *get_jsonconf_suite(void)
|
||||||
SUITE_ADD_TEST(suite, test_prefixes);
|
SUITE_ADD_TEST(suite, test_prefixes);
|
||||||
SUITE_ADD_TEST(suite, test_disable);
|
SUITE_ADD_TEST(suite, test_disable);
|
||||||
SUITE_ADD_TEST(suite, test_infinitive_from_config);
|
SUITE_ADD_TEST(suite, test_infinitive_from_config);
|
||||||
|
SUITE_ADD_TEST(suite, test_calendar);
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ without prior permission by the authors of Eressea.
|
||||||
#include "spellbook.h"
|
#include "spellbook.h"
|
||||||
#include "calendar.h"
|
#include "calendar.h"
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
|
#include "move.h"
|
||||||
|
|
||||||
#include "vortex.h"
|
#include "vortex.h"
|
||||||
|
|
||||||
|
@ -398,6 +399,7 @@ static int parse_buildings(xmlDocPtr doc)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static int parse_calendar(xmlDocPtr doc)
|
static int parse_calendar(xmlDocPtr doc)
|
||||||
{
|
{
|
||||||
xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
|
xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
|
||||||
|
@ -523,7 +525,7 @@ static int parse_calendar(xmlDocPtr doc)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
static int parse_ships(xmlDocPtr doc)
|
static int parse_ships(xmlDocPtr doc)
|
||||||
{
|
{
|
||||||
xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
|
xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
|
||||||
|
@ -1869,7 +1871,6 @@ static int parse_strings(xmlDocPtr doc)
|
||||||
void register_xmlreader(void)
|
void register_xmlreader(void)
|
||||||
{
|
{
|
||||||
xml_register_callback(parse_races);
|
xml_register_callback(parse_races);
|
||||||
xml_register_callback(parse_calendar);
|
|
||||||
xml_register_callback(parse_resources);
|
xml_register_callback(parse_resources);
|
||||||
|
|
||||||
xml_register_callback(parse_buildings); /* requires resources */
|
xml_register_callback(parse_buildings); /* requires resources */
|
||||||
|
|
|
@ -4183,6 +4183,7 @@ static void reset_game(void)
|
||||||
|
|
||||||
void turn_begin(void)
|
void turn_begin(void)
|
||||||
{
|
{
|
||||||
|
assert(turn >= 0);
|
||||||
++turn;
|
++turn;
|
||||||
reset_game();
|
reset_game();
|
||||||
}
|
}
|
||||||
|
|
|
@ -748,10 +748,6 @@ void plan_monsters(faction * f)
|
||||||
produceexp(u, SK_PERCEPTION, u->number);
|
produceexp(u, SK_PERCEPTION, u->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (u->status > ST_BEHIND) {
|
|
||||||
setstatus(u, ST_FIGHT);
|
|
||||||
/* all monsters fight */
|
|
||||||
}
|
|
||||||
if (attacking && (!r->land || is_guard(u))) {
|
if (attacking && (!r->land || is_guard(u))) {
|
||||||
monster_attacks(u, true, false);
|
monster_attacks(u, true, false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ extern "C" {
|
||||||
struct order;
|
struct order;
|
||||||
|
|
||||||
extern struct attrib_type at_shiptrail;
|
extern struct attrib_type at_shiptrail;
|
||||||
|
extern int *storms;
|
||||||
|
|
||||||
/* die Zahlen sind genau äquivalent zu den race Flags */
|
/* die Zahlen sind genau äquivalent zu den race Flags */
|
||||||
#define MV_CANNOTMOVE (1<<5)
|
#define MV_CANNOTMOVE (1<<5)
|
||||||
|
|
|
@ -123,13 +123,15 @@ static char *gamedate_season(const struct locale *lang)
|
||||||
static char buf[256]; /* FIXME: static return value */
|
static char buf[256]; /* FIXME: static return value */
|
||||||
gamedate gd;
|
gamedate gd;
|
||||||
|
|
||||||
|
assert(weeknames);
|
||||||
|
|
||||||
get_gamedate(turn, &gd);
|
get_gamedate(turn, &gd);
|
||||||
|
|
||||||
sprintf(buf, (const char *)LOC(lang, "nr_calendar_season"),
|
sprintf(buf, (const char *)LOC(lang, "nr_calendar_season"),
|
||||||
LOC(lang, weeknames[gd.week]),
|
LOC(lang, mkname("calendar", weeknames[gd.week])),
|
||||||
LOC(lang, monthnames[gd.month]),
|
LOC(lang, mkname("calendar", calendar_month(gd.month))),
|
||||||
gd.year,
|
gd.year,
|
||||||
agename ? LOC(lang, agename) : "", LOC(lang, seasonnames[gd.season]));
|
LOC(lang, mkname("calendar", calendar_era())), LOC(lang, mkname("calendar", seasonnames[gd.season])));
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,13 +151,12 @@ static char *gamedate2(const struct locale *lang)
|
||||||
if (weeknames2) {
|
if (weeknames2) {
|
||||||
week = weeknames2[gd.week];
|
week = weeknames2[gd.week];
|
||||||
}
|
}
|
||||||
if (monthnames) {
|
month = calendar_month(gd.month);
|
||||||
month = monthnames[gd.month];
|
|
||||||
}
|
|
||||||
sprintf(buf, "in %s des Monats %s im Jahre %d %s.",
|
sprintf(buf, "in %s des Monats %s im Jahre %d %s.",
|
||||||
LOC(lang, week),
|
LOC(lang, mkname("calendar", week)),
|
||||||
LOC(lang, month),
|
LOC(lang, mkname("calendar", month)),
|
||||||
gd.year, agename ? LOC(lang, agename) : "");
|
gd.year,
|
||||||
|
LOC(lang, mkname("calendar", calendar_era())));
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,35 +116,36 @@ int RunAllTests(int argc, char *argv[])
|
||||||
ADD_SUITE(ally);
|
ADD_SUITE(ally);
|
||||||
ADD_SUITE(messages);
|
ADD_SUITE(messages);
|
||||||
/* gamecode */
|
/* gamecode */
|
||||||
ADD_SUITE(guard);
|
|
||||||
ADD_SUITE(report);
|
|
||||||
ADD_SUITE(creport);
|
|
||||||
ADD_SUITE(summary);
|
|
||||||
ADD_SUITE(names);
|
|
||||||
ADD_SUITE(battle);
|
ADD_SUITE(battle);
|
||||||
ADD_SUITE(volcano);
|
ADD_SUITE(calendar);
|
||||||
|
ADD_SUITE(creport);
|
||||||
ADD_SUITE(donations);
|
ADD_SUITE(donations);
|
||||||
ADD_SUITE(travelthru);
|
|
||||||
ADD_SUITE(economy);
|
ADD_SUITE(economy);
|
||||||
ADD_SUITE(flyingship);
|
ADD_SUITE(flyingship);
|
||||||
ADD_SUITE(give);
|
ADD_SUITE(give);
|
||||||
|
ADD_SUITE(guard);
|
||||||
|
ADD_SUITE(key);
|
||||||
ADD_SUITE(laws);
|
ADD_SUITE(laws);
|
||||||
ADD_SUITE(lighthouse);
|
ADD_SUITE(lighthouse);
|
||||||
ADD_SUITE(market);
|
ADD_SUITE(market);
|
||||||
ADD_SUITE(monsters);
|
ADD_SUITE(monsters);
|
||||||
ADD_SUITE(move);
|
ADD_SUITE(move);
|
||||||
|
ADD_SUITE(names);
|
||||||
|
ADD_SUITE(otherfaction);
|
||||||
ADD_SUITE(piracy);
|
ADD_SUITE(piracy);
|
||||||
ADD_SUITE(prefix);
|
ADD_SUITE(prefix);
|
||||||
ADD_SUITE(renumber);
|
ADD_SUITE(renumber);
|
||||||
ADD_SUITE(key);
|
ADD_SUITE(report);
|
||||||
|
ADD_SUITE(shock);
|
||||||
|
ADD_SUITE(spy);
|
||||||
ADD_SUITE(stealth);
|
ADD_SUITE(stealth);
|
||||||
ADD_SUITE(otherfaction);
|
ADD_SUITE(study);
|
||||||
|
ADD_SUITE(summary);
|
||||||
|
ADD_SUITE(travelthru);
|
||||||
ADD_SUITE(upkeep);
|
ADD_SUITE(upkeep);
|
||||||
|
ADD_SUITE(volcano);
|
||||||
ADD_SUITE(vortex);
|
ADD_SUITE(vortex);
|
||||||
ADD_SUITE(wormhole);
|
ADD_SUITE(wormhole);
|
||||||
ADD_SUITE(spy);
|
|
||||||
ADD_SUITE(study);
|
|
||||||
ADD_SUITE(shock);
|
|
||||||
|
|
||||||
if (suites) {
|
if (suites) {
|
||||||
CuSuite *summary = CuSuiteNew();
|
CuSuite *summary = CuSuiteNew();
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "keyword.h"
|
#include "keyword.h"
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
#include "reports.h"
|
#include "reports.h"
|
||||||
|
#include "calendar.h"
|
||||||
|
|
||||||
#include <kernel/config.h>
|
#include <kernel/config.h>
|
||||||
#include <kernel/alliance.h>
|
#include <kernel/alliance.h>
|
||||||
|
@ -192,7 +193,7 @@ void test_log_stderr(int flags) {
|
||||||
|
|
||||||
static void test_reset(void) {
|
static void test_reset(void) {
|
||||||
int i;
|
int i;
|
||||||
turn = 0;
|
turn = 1;
|
||||||
default_locale = 0;
|
default_locale = 0;
|
||||||
|
|
||||||
if (errno) {
|
if (errno) {
|
||||||
|
@ -206,6 +207,7 @@ static void test_reset(void) {
|
||||||
free_resources();
|
free_resources();
|
||||||
free_config();
|
free_config();
|
||||||
default_locale = 0;
|
default_locale = 0;
|
||||||
|
calendar_cleanup();
|
||||||
close_orders();
|
close_orders();
|
||||||
free_locales();
|
free_locales();
|
||||||
free_spells();
|
free_spells();
|
||||||
|
|
Loading…
Reference in New Issue