diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b0c9969a..d712fded2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 3.13) +include_directories (${CMAKE_CURRENT_SOURCE_DIR}) + set(CMAKE_C_STANDARD 99) if (WIN32) file(TO_CMAKE_PATH "${CMAKE_MODULE_PATH}" CMAKE_MODULE_PATH ) diff --git a/src/alchemy.c b/src/alchemy.c index a8b7f342b..9ebe14455 100644 --- a/src/alchemy.c +++ b/src/alchemy.c @@ -22,7 +22,7 @@ #include "util/message.h" #include -#include +#include #include diff --git a/src/attributes/attributes.c b/src/attributes/attributes.c index e214c8655..70e5effae 100644 --- a/src/attributes/attributes.c +++ b/src/attributes/attributes.c @@ -36,7 +36,8 @@ #include #include -#include +#include + #include typedef struct obs_data { diff --git a/src/attributes/dict.c b/src/attributes/dict.c index dda8abf03..618bf7daa 100644 --- a/src/attributes/dict.c +++ b/src/attributes/dict.c @@ -2,21 +2,22 @@ #include "key.h" /* kernel includes */ +#include #include #include +#include #include #include #include /* util includes */ -#include #include #include -#include #include -#include -#include +#include + +#include /* stdc includes */ #include diff --git a/src/attributes/follow.c b/src/attributes/follow.c index 2f8afc746..7818f7b53 100644 --- a/src/attributes/follow.c +++ b/src/attributes/follow.c @@ -1,12 +1,12 @@ #include "follow.h" -#include - #include #include +#include + #include -#include +#include static int read_follow(variant * var, void *owner, gamedata *data) { diff --git a/src/attributes/hate.c b/src/attributes/hate.c index c1a723696..8de926e52 100644 --- a/src/attributes/hate.c +++ b/src/attributes/hate.c @@ -1,13 +1,13 @@ #include "hate.h" -#include - #include #include +#include + #include #include -#include +#include static int verify_hate(attrib * a, void *owner) { diff --git a/src/attributes/key.c b/src/attributes/key.c index 55d1d88e2..c08a144e3 100644 --- a/src/attributes/key.c +++ b/src/attributes/key.c @@ -5,8 +5,10 @@ #include #include + #include -#include + +#include #include #include diff --git a/src/attributes/movement.c b/src/attributes/movement.c index 439b56d54..c84772ad5 100644 --- a/src/attributes/movement.c +++ b/src/attributes/movement.c @@ -2,7 +2,7 @@ #include -#include +#include #include #include diff --git a/src/attributes/otherfaction.c b/src/attributes/otherfaction.c index 15881db59..af20d5d5c 100644 --- a/src/attributes/otherfaction.c +++ b/src/attributes/otherfaction.c @@ -6,9 +6,10 @@ #include #include +#include + #include #include // for true, false -#include /* * simple attributes that do not yet have their own file diff --git a/src/attributes/racename.c b/src/attributes/racename.c index 83df6cb3c..31631f36a 100644 --- a/src/attributes/racename.c +++ b/src/attributes/racename.c @@ -2,7 +2,7 @@ #include -#include +#include /* libc includes */ #include diff --git a/src/attributes/raceprefix.c b/src/attributes/raceprefix.c index 62e704f64..9b0363084 100644 --- a/src/attributes/raceprefix.c +++ b/src/attributes/raceprefix.c @@ -2,7 +2,7 @@ #include -#include +#include #include #include diff --git a/src/attributes/seenspell.c b/src/attributes/seenspell.c index f79fe47f8..e3660f603 100644 --- a/src/attributes/seenspell.c +++ b/src/attributes/seenspell.c @@ -1,3 +1,5 @@ +#include "seenspell.h" + #include #include #include @@ -6,10 +8,10 @@ #include #include -#include "seenspell.h" -#include -#include +#include + +#include #include #include diff --git a/src/attributes/targetregion.c b/src/attributes/targetregion.c index fcea49c56..9fe9dc2f3 100644 --- a/src/attributes/targetregion.c +++ b/src/attributes/targetregion.c @@ -1,12 +1,13 @@ #include "targetregion.h" -#include #include #include +#include + #include -#include +#include static void write_targetregion(const variant *var, const void *owner, struct storage *store) diff --git a/src/battle.c b/src/battle.c index dbbc0dc1f..be364c33b 100644 --- a/src/battle.c +++ b/src/battle.c @@ -59,7 +59,7 @@ #include "util/rand.h" #include "util/rng.h" -#include +#include #include #include diff --git a/src/battle.test.c b/src/battle.test.c index 47c173295..bbc2ba589 100644 --- a/src/battle.test.c +++ b/src/battle.test.c @@ -34,6 +34,7 @@ #include "util/rand.h" #include "util/variant.h" +#include #include #include @@ -41,7 +42,6 @@ #include #include #include // for abort, calloc -#include #include "tests.h" diff --git a/src/bind_config.c b/src/bind_config.c index 94fe643dc..4818d8dd2 100644 --- a/src/bind_config.c +++ b/src/bind_config.c @@ -14,7 +14,7 @@ #include #include -#include +#include #include diff --git a/src/bind_region.c b/src/bind_region.c index c80eb7efd..4750580f9 100644 --- a/src/bind_region.c +++ b/src/bind_region.c @@ -24,11 +24,11 @@ #include #include -#include - #include #include +#include + #include #include #include diff --git a/src/bind_storage.c b/src/bind_storage.c index b64beaa8a..b39f5f573 100644 --- a/src/bind_storage.c +++ b/src/bind_storage.c @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include diff --git a/src/bind_unit.c b/src/bind_unit.c index bc755b3e6..642160266 100644 --- a/src/bind_unit.c +++ b/src/bind_unit.c @@ -40,7 +40,7 @@ #include // for OP_Parser, OrderParserStruct #include -#include +#include #include diff --git a/src/creport.c b/src/creport.c index d4c4bd76d..48a0d0d19 100644 --- a/src/creport.c +++ b/src/creport.c @@ -69,10 +69,10 @@ static char g_bigbuf[BUFFERSIZE]; #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include diff --git a/src/crimport.c b/src/crimport.c index e5f82a268..3210be8a8 100644 --- a/src/crimport.c +++ b/src/crimport.c @@ -36,9 +36,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include diff --git a/src/defaults.c b/src/defaults.c index b4f64adc7..c66cec68a 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -63,10 +63,10 @@ #include #include -#include -#include +#include #include +#include /* libc includes */ #include @@ -79,7 +79,7 @@ #include /** - - Die alten Befehle nicht beim Befehle laden löschen, sondern in u->defaults befördern + - Die alten Befehle nicht beim Befehle laden l�schen, sondern in u->defaults bef�rdern - Dann (hier) beim setzen des langen Befehls wegschmeissen, es sei denn es ist ein K_MOVE, - im Falle von K_MOVE eine Variante von update_defaults machen, nur lange Befehle behalten. */ diff --git a/src/eressea.c b/src/eressea.c index 405cf4091..9ae3988e5 100644 --- a/src/eressea.c +++ b/src/eressea.c @@ -52,7 +52,7 @@ #include "vortex.h" #include "wormhole.h" -#include +#include #include #include diff --git a/src/exparse.c b/src/exparse.c index 2a8b17b3d..bfb08de0a 100644 --- a/src/exparse.c +++ b/src/exparse.c @@ -22,7 +22,7 @@ #include "util/crmessage.h" #include "util/nrmessage.h" -#include +#include #include #include diff --git a/src/gamedb.c b/src/gamedb.c index 47059486b..8d332e84c 100644 --- a/src/gamedb.c +++ b/src/gamedb.c @@ -5,7 +5,7 @@ #include "kernel/faction.h" #include "kernel/db/driver.h" -#include +#include static int generate_factions(void *data, db_faction *results, int nresults) { diff --git a/src/helpers.c b/src/helpers.c index 3656290e1..ee8072bcf 100644 --- a/src/helpers.c +++ b/src/helpers.c @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include diff --git a/src/jsonconf.c b/src/jsonconf.c index 3137a79cb..75c4bdf70 100644 --- a/src/jsonconf.c +++ b/src/jsonconf.c @@ -39,7 +39,7 @@ #include "util/path.h" #include "util/pofile.h" -#include +#include /* external libraries */ #include diff --git a/src/kernel/alliance.c b/src/kernel/alliance.c index 5b56410ae..e09a5eaa6 100644 --- a/src/kernel/alliance.c +++ b/src/kernel/alliance.c @@ -1,6 +1,7 @@ #include "alliance.h" -/* kernel includes */ +/* other kernel includes */ +#include "attrib.h" #include "calendar.h" #include "config.h" #include "building.h" @@ -14,7 +15,6 @@ #include /* util includes */ -#include #include #include #include @@ -22,8 +22,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/kernel/ally.c b/src/kernel/ally.c index 8feeb2d13..10c229cc9 100644 --- a/src/kernel/ally.c +++ b/src/kernel/ally.c @@ -4,17 +4,18 @@ #include "config.h" #include "ally.h" +#include "attrib.h" #include "unit.h" #include "region.h" +#include "gamedata.h" #include "group.h" #include "faction.h" #include "objtypes.h" -#include -#include -#include -#include +#include + +#include #include diff --git a/src/kernel/attrib.c b/src/kernel/attrib.c index f199f3326..181f58692 100644 --- a/src/kernel/attrib.c +++ b/src/kernel/attrib.c @@ -4,9 +4,10 @@ #include #include -#include -#include -#include +#include + +#include +#include #include diff --git a/src/kernel/attrib.test.c b/src/kernel/attrib.test.c index 0d4a7db2b..52a83fe43 100644 --- a/src/kernel/attrib.test.c +++ b/src/kernel/attrib.test.c @@ -3,10 +3,11 @@ #include #include // for variant -#include -#include -#include // for stream, stream_i -#include +#include +#include +#include // for stream, stream_i + +#include #include #include diff --git a/src/kernel/build.c b/src/kernel/build.c index e10ecd3f8..5762e6565 100644 --- a/src/kernel/build.c +++ b/src/kernel/build.c @@ -40,7 +40,7 @@ #include #include -#include +#include /* from libc */ #include diff --git a/src/kernel/building.c b/src/kernel/building.c index c373a3497..9e1671648 100644 --- a/src/kernel/building.c +++ b/src/kernel/building.c @@ -1,27 +1,27 @@ -#include #include "building.h" #include #include /* kernel includes */ +#include "attrib.h" +#include "config.h" #include "curse.h" -#include "item.h" -#include "unit.h" +#include "event.h" #include "faction.h" +#include "gamedata.h" +#include "item.h" +#include "lighthouse.h" +#include "messages.h" +#include "order.h" #include "race.h" #include "region.h" #include "skill.h" #include "study.h" #include "terrain.h" -#include "lighthouse.h" +#include "unit.h" /* util includes */ -#include -#include -#include -#include -#include #include #include @@ -34,9 +34,10 @@ #include // #include "util/variant.h" // IWYU pragma: keep -#include -#include -#include +#include + +#include +#include #include @@ -1026,7 +1027,7 @@ default_wage(const region * r, const race * rc) else { wage = wagetable[esize][2]; if (rule_blessed_harvest() & HARVEST_WORK) { - /* Geändert in E3 */ + /* Ge�ndert in E3 */ wage += harvest_effect(r); } } diff --git a/src/kernel/building.test.c b/src/kernel/building.test.c index 98fd9a763..d2aa90a59 100644 --- a/src/kernel/building.test.c +++ b/src/kernel/building.test.c @@ -10,7 +10,7 @@ #include // IWYU pragma: keep -#include +#include #include diff --git a/src/kernel/calendar.c b/src/kernel/calendar.c index 2a16b2370..b3c3aed62 100644 --- a/src/kernel/calendar.c +++ b/src/kernel/calendar.c @@ -8,6 +8,7 @@ #include #include +int *storms; int turn = 0; int first_month = 0; int weeks_per_month = 3; @@ -44,6 +45,20 @@ int first_turn(void) return config_get_int("game.start", 0); } +int storm_factor(int month) +{ + static int config; + static int fixed; + + if (config_changed(&config)) { + fixed = config_get_int("rules.calendar.stormchance", 0); + } + if (fixed > 0) { + return fixed; + } + return storms ? storms[month] : 0; +} + const gamedate *get_gamedate(int turn_now, gamedate * gd) { int weeks_per_year = months_per_year * weeks_per_month; diff --git a/src/kernel/calendar.h b/src/kernel/calendar.h index 80cd79c5d..012f1a8df 100644 --- a/src/kernel/calendar.h +++ b/src/kernel/calendar.h @@ -34,5 +34,8 @@ void calendar_cleanup(void); const char* calendar_month(int index); const char* calendar_era(void); int first_turn(void); +int storm_factor(int month); + +extern int *storms; #endif diff --git a/src/kernel/calendar.test.c b/src/kernel/calendar.test.c index 2f2af7b05..10dc4f3bb 100644 --- a/src/kernel/calendar.test.c +++ b/src/kernel/calendar.test.c @@ -65,6 +65,18 @@ static void test_calendar(CuTest * tc) test_teardown(); } +static void test_storm_chance(CuTest * tc) +{ + test_setup(); + CuAssertIntEquals(tc, 0, storm_factor(0)); + storms = malloc(12 * sizeof(int)); + storms[0] = 40; + CuAssertIntEquals(tc, 40, storm_factor(0)); + config_set_int("rules.calendar.stormchance", 100); + CuAssertIntEquals(tc, 100, storm_factor(0)); + test_teardown(); +} + static void test_calendar_season(CuTest * tc) { test_setup(); @@ -118,6 +130,7 @@ 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_storm_chance); SUITE_ADD_TEST(suite, test_calendar_season); SUITE_ADD_TEST(suite, test_gamedate); return suite; diff --git a/src/kernel/config.c b/src/kernel/config.c index e1485fae4..b0bb6ee45 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -49,7 +49,7 @@ /* external libraries */ #include #include -#include +#include /* libc includes */ #include diff --git a/src/kernel/connection.c b/src/kernel/connection.c index 8a6740c78..71bd78490 100644 --- a/src/kernel/connection.c +++ b/src/kernel/connection.c @@ -17,8 +17,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/kernel/curse.c b/src/kernel/curse.c index 4142fc4ee..12c632d1e 100644 --- a/src/kernel/curse.c +++ b/src/kernel/curse.c @@ -28,8 +28,8 @@ #include #include -#include -#include +#include +#include #include diff --git a/src/kernel/curse.test.c b/src/kernel/curse.test.c index c97331b46..baba489aa 100644 --- a/src/kernel/curse.test.c +++ b/src/kernel/curse.test.c @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include diff --git a/src/kernel/equipment.c b/src/kernel/equipment.c index f3f094b7f..669e5b101 100644 --- a/src/kernel/equipment.c +++ b/src/kernel/equipment.c @@ -15,7 +15,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/kernel/event.c b/src/kernel/event.c index 051c6ac10..bf5f5ede9 100644 --- a/src/kernel/event.c +++ b/src/kernel/event.c @@ -5,8 +5,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/kernel/faction.c b/src/kernel/faction.c index 4a5a49de0..7e7a521b3 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -44,8 +44,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/kernel/gamedata.c b/src/kernel/gamedata.c index 1079dc716..1f3f34204 100644 --- a/src/kernel/gamedata.c +++ b/src/kernel/gamedata.c @@ -5,7 +5,7 @@ #include -#include +#include #include #include #include diff --git a/src/kernel/group.c b/src/kernel/group.c index 4e0feb16e..896fa1ef0 100755 --- a/src/kernel/group.c +++ b/src/kernel/group.c @@ -19,8 +19,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/kernel/group.test.c b/src/kernel/group.test.c index 77afa2cd6..2cd8f4fd8 100644 --- a/src/kernel/group.test.c +++ b/src/kernel/group.test.c @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include diff --git a/src/kernel/item.c b/src/kernel/item.c index c4bcf8e04..8aa2ef749 100644 --- a/src/kernel/item.c +++ b/src/kernel/item.c @@ -31,8 +31,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/kernel/order.c b/src/kernel/order.c index 2ab526247..db4e50960 100644 --- a/src/kernel/order.c +++ b/src/kernel/order.c @@ -16,7 +16,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/kernel/plane.c b/src/kernel/plane.c index 441288e6f..6197b6378 100644 --- a/src/kernel/plane.c +++ b/src/kernel/plane.c @@ -10,8 +10,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/kernel/race.c b/src/kernel/race.c index 9c9f011a5..ce40ad235 100644 --- a/src/kernel/race.c +++ b/src/kernel/race.c @@ -29,8 +29,8 @@ #include #include -#include -#include +#include +#include /* attrib includes */ #include diff --git a/src/kernel/region.c b/src/kernel/region.c index 5b5ceee01..acc2f5783 100644 --- a/src/kernel/region.c +++ b/src/kernel/region.c @@ -34,8 +34,8 @@ #include -#include -#include +#include +#include #include diff --git a/src/kernel/save.c b/src/kernel/save.c index 958ac4039..f931d68b7 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -68,9 +68,9 @@ #include #include #include -#include +#include #include -#include +#include #include @@ -1045,7 +1045,7 @@ static char * getpasswd(int fno) { return NULL; } -static void read_password(gamedata *data, faction *f) { +void read_password(gamedata *data, faction *f) { char name[128]; READ_STR(data->store, name, sizeof(name)); if (name[0] == '$' && data->version == BADCRYPT_VERSION) { @@ -1063,18 +1063,10 @@ static void read_password(gamedata *data, faction *f) { } } -void _test_read_password(gamedata *data, faction *f) { - read_password(data, f); -} - -static void write_password(gamedata *data, const faction *f) { +void write_password(gamedata *data, const faction *f) { WRITE_TOK(data->store, faction_getpassword(f)); } -void _test_write_password(gamedata *data, const faction *f) { - write_password(data, f); -} - faction *read_faction(gamedata * data) { int planes, n; diff --git a/src/kernel/save.h b/src/kernel/save.h index b9a5bda79..8b5f2633e 100644 --- a/src/kernel/save.h +++ b/src/kernel/save.h @@ -42,8 +42,7 @@ struct ship *read_ship(struct gamedata *data); int write_game(struct gamedata *data); int read_game(struct gamedata *data); -/* test-only functions that give access to internal implementation details (BAD) */ -void _test_write_password(struct gamedata *data, const struct faction *f); -void _test_read_password(struct gamedata *data, struct faction *f); +void write_password(struct gamedata *data, const struct faction *f); +void read_password(struct gamedata *data, struct faction *f); void fix_shadows(void); diff --git a/src/kernel/save.test.c b/src/kernel/save.test.c index b839317f0..201474ff2 100644 --- a/src/kernel/save.test.c +++ b/src/kernel/save.test.c @@ -29,9 +29,9 @@ #include #include -#include +#include #include -#include +#include #include #include @@ -383,9 +383,9 @@ static void test_read_password(CuTest *tc) { faction_setpassword(f, password_hash("secret", PASSWORD_DEFAULT)); mstream_init(&data.strm); gamedata_init(&data, &store, RELEASE_VERSION); - _test_write_password(&data, f); + write_password(&data, f); data.strm.api->rewind(data.strm.handle); - _test_read_password(&data, f); + read_password(&data, f); mstream_done(&data.strm); gamedata_done(&data); CuAssertTrue(tc, checkpasswd(f, "secret")); @@ -413,10 +413,10 @@ static void test_read_password_external(CuTest *tc) { WRITE_TOK(data.store, "$brokenhash"); data.strm.api->rewind(data.strm.handle); data.version = NOCRYPT_VERSION; - _test_read_password(&data, f); + read_password(&data, f); CuAssertTrue(tc, checkpasswd(f, "newpassword")); data.version = BADCRYPT_VERSION; - _test_read_password(&data, f); + read_password(&data, f); CuAssertTrue(tc, checkpasswd(f, "secret")); F = fopen(pwfile, "wt"); if (F) { @@ -424,7 +424,7 @@ static void test_read_password_external(CuTest *tc) { fclose(F); } CuAssertTrue(tc, checkpasswd(f, "secret")); - _test_read_password(&data, f); + read_password(&data, f); CuAssertTrue(tc, checkpasswd(f, "pwfile")); mstream_done(&data.strm); gamedata_done(&data); diff --git a/src/kernel/ship.c b/src/kernel/ship.c index 5f732aafb..bf41e7b16 100644 --- a/src/kernel/ship.c +++ b/src/kernel/ship.c @@ -33,8 +33,8 @@ #include #include -#include -#include +#include +#include #include @@ -613,8 +613,8 @@ const char *ship_getname(const ship * sh) } int ship_damage_percent(const ship *sh) { - /* Schaden muss granularer sein als Größe, deshalb ist er skaliert - * DAMAGE_SCALE ist der Faktor zwischen 1 Schadenspunkt und 1 Größenpunkt. + /* Schaden muss granularer sein als Gr��e, deshalb ist er skaliert + * DAMAGE_SCALE ist der Faktor zwischen 1 Schadenspunkt und 1 Gr��enpunkt. */ if (sh->damage > 0) { double d = (sh->damage * 100.) / ((double)DAMAGE_SCALE * sh->size); diff --git a/src/kernel/spell.c b/src/kernel/spell.c index c35d34d5a..a6f4a8f2e 100644 --- a/src/kernel/spell.c +++ b/src/kernel/spell.c @@ -7,7 +7,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/kernel/spellbook.c b/src/kernel/spellbook.c index 99f2a0637..2fabcde9e 100644 --- a/src/kernel/spellbook.c +++ b/src/kernel/spellbook.c @@ -10,8 +10,8 @@ #include #include -#include -#include +#include +#include #include #include diff --git a/src/kernel/terrain.c b/src/kernel/terrain.c index 68d2d778d..2e49b82d3 100644 --- a/src/kernel/terrain.c +++ b/src/kernel/terrain.c @@ -14,7 +14,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/kernel/unit.c b/src/kernel/unit.c index 953486564..5815a4000 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -46,8 +46,8 @@ #include #include -#include -#include +#include +#include #include diff --git a/src/laws.c b/src/laws.c index 8fdff23f5..19c5dce2c 100644 --- a/src/laws.c +++ b/src/laws.c @@ -89,10 +89,10 @@ #include #include -#include -#include -#include +#include +#include +#include #include /* libc includes */ diff --git a/src/listbox.c b/src/listbox.c index fd67af1e4..bf9aaf658 100644 --- a/src/listbox.c +++ b/src/listbox.c @@ -1,6 +1,6 @@ #include "listbox.h" -#include +#include #include diff --git a/src/magic.c b/src/magic.c index b5a04d6c7..a5e139686 100644 --- a/src/magic.c +++ b/src/magic.c @@ -62,10 +62,11 @@ #include #include -#include -#include -#include -#include +#include + +#include +#include +#include #include diff --git a/src/magic.test.c b/src/magic.test.c index d078fb330..a5eaf8f90 100644 --- a/src/magic.test.c +++ b/src/magic.test.c @@ -35,8 +35,9 @@ #include #include -#include -#include +#include +#include + #include #include diff --git a/src/modules/autoseed.c b/src/modules/autoseed.c index 0dd37df5c..4fd846da5 100644 --- a/src/modules/autoseed.c +++ b/src/modules/autoseed.c @@ -30,7 +30,7 @@ #include #include -#include +#include #include diff --git a/src/modules/gmcmd.c b/src/modules/gmcmd.c index df564e41e..bb3b6aa34 100644 --- a/src/modules/gmcmd.c +++ b/src/modules/gmcmd.c @@ -23,7 +23,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/modules/museum.c b/src/modules/museum.c index a392dcbba..97ec5b5c2 100644 --- a/src/modules/museum.c +++ b/src/modules/museum.c @@ -26,8 +26,8 @@ #include #include -#include -#include +#include +#include /* libc includes */ #include diff --git a/src/modules/xmas.c b/src/modules/xmas.c index d9e80c18e..4abbd7da0 100644 --- a/src/modules/xmas.c +++ b/src/modules/xmas.c @@ -19,7 +19,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/monsters.c b/src/monsters.c index c04b198de..dc5bbed25 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -50,7 +50,7 @@ #include "spells/regioncurse.h" -#include +#include #include diff --git a/src/move.c b/src/move.c index b88e5bced..f5b5dcd73 100644 --- a/src/move.c +++ b/src/move.c @@ -60,8 +60,9 @@ #include #include -#include -#include +#include +#include + #include /* libc includes */ @@ -73,8 +74,6 @@ #include #include -int *storms; - typedef struct traveldir { int no; direction_t dir; @@ -1880,7 +1879,7 @@ bool can_takeoff(const ship * sh, const region * from, const region * to) return true; } -void harbour_taxes(region *r, unit *captain, unit *harbourmaster) +static void harbour_taxes(region *r, unit *captain, unit *harbourmaster) { item *itm; item *trans = NULL; @@ -1919,7 +1918,33 @@ void harbour_taxes(region *r, unit *captain, unit *harbourmaster) } } -static void sail(unit * u, order * ord, bool drifting) +region * storm_redirect(const region *current_point, const region *next_point) +{ + int d_offset = rng_int() % MAXDIRECTIONS; + region *rnext = NULL; + /* Sturm nur, wenn naechste Region Hochsee ist. */ + for (direction_t d = 0; d != MAXDIRECTIONS; ++d) { + direction_t dnext = (direction_t)((d + d_offset) % MAXDIRECTIONS); + region *rn = rconnect(current_point, dnext); + + if (rn != NULL) { + if (!fval(rn->terrain, SEA_REGION)) { + rnext = NULL; + break; + } + if (fval(rn->terrain, FORBIDDEN_REGION)) { + // do we even *have* forbidden sea regions? + continue; + } + if (rn != next_point) { + rnext = rn; + } + } + } + return rnext; +} + +void sail(unit * u, order * ord, bool drifting) { region_list *route = NULL; region *starting_point = u->region; @@ -1984,7 +2009,7 @@ static void sail(unit * u, order * ord, bool drifting) int stormyness; gamedate date; get_gamedate(turn, &date); - stormyness = storms ? storms[date.month] * 5 : 0; + stormyness = storm_factor(date.month) * 5; /* storms should be the first thing we do. */ stormchance = stormyness / shipspeed(sh, u); @@ -1999,27 +2024,8 @@ static void sail(unit * u, order * ord, bool drifting) if (stormchance && rng_int() % 10000 < stormchance * sh->type->storm && fval(current_point->terrain, SEA_REGION)) { if (!is_cursed(sh->attribs, &ct_nodrift)) { - region *rnext = NULL; - bool storm = true; - int d_offset = rng_int() % MAXDIRECTIONS; - direction_t d; - /* Sturm nur, wenn naechste Region Hochsee ist. */ - for (d = 0; d != MAXDIRECTIONS; ++d) { - direction_t dnext = (direction_t)((d + d_offset) % MAXDIRECTIONS); - region *rn = rconnect(current_point, dnext); - - if (rn != NULL) { - if (fval(rn->terrain, FORBIDDEN_REGION)) - continue; - if (!fval(rn->terrain, SEA_REGION)) { - storm = false; - break; - } - if (rn != next_point) - rnext = rn; - } - } - if (storm && rnext != NULL) { + region *rnext = storm_redirect(current_point, next_point); + if (rnext != NULL) { ADDMSG(&f->msgs, msg_message("storm", "ship region sink", sh, next_point, ship_damage_percent(sh) >= 100)); diff --git a/src/move.h b/src/move.h index 8df5f03c1..b6b078049 100644 --- a/src/move.h +++ b/src/move.h @@ -14,7 +14,6 @@ struct unit; struct item; extern struct attrib_type at_shiptrail; -extern int *storms; /* Bewegungsweiten: */ #define BP_WALKING 4 @@ -57,9 +56,11 @@ struct unit *owner_buildingtyp(const struct region *r, bool move_blocked(const struct unit *u, const struct region *src, const struct region *dest); bool can_takeoff(const struct ship * sh, const struct region * from, const struct region * to); +void sail(struct unit * u, struct order * ord, bool drifting); void move_cmd(struct unit * u, struct order * ord); void move_cmd_ex(struct unit * u, struct order * ord, const char *directions); int follow_ship(struct unit * u, struct order * ord); +struct region * storm_redirect(const struct region *src, const struct region *dst); #define SA_HARBOUR_ALLOWED 1 #define SA_ALLOWED 0 diff --git a/src/move.test.c b/src/move.test.c index 64090ec0f..d2f9908f2 100644 --- a/src/move.test.c +++ b/src/move.test.c @@ -881,6 +881,86 @@ static void test_follow_ship_msg(CuTest * tc) { test_teardown(); } +static void test_storms(CuTest *tc) { + ship *sh; + unit *u; + faction *f; + region *r, *r2; + const char *dir; + ship_type * stype; + + test_setup(); + stype = test_create_shiptype("bucket"); + stype->storm = 100; + stype->cargo = 100000; + u = test_create_unit(f = test_create_faction(), r = test_create_ocean(0,0)); + test_set_skill(u, SK_SAILING, stype->sumskill, 0); + test_create_ocean(1,0); + r2 = test_create_ocean(2,0); + u_set_ship(u, sh = test_create_ship(r, stype)); + dir = LOC(f->locale, directions[D_EAST]); + u->thisorder = create_order(K_MOVE, f->locale, "%s %s", dir, dir); + + config_set_int("rules.ship.storms", 0); + init_order(u->thisorder, f->locale); + sail(u, u->thisorder, true); + CuAssertPtrEquals(tc, r2, sh->region); + CuAssertPtrEquals(tc, r2, u->region); + + move_ship(sh, r2, r, NULL); + config_set_int("rules.ship.storms", 1); + config_set_int("rules.calendar.stormchance", 100); + init_order(u->thisorder, f->locale); + sail(u, u->thisorder, true); + CuAssertPtrEquals(tc, sh->region, u->region); + CuAssertPtrNotNull(tc, test_find_faction_message(f, "storm")); + CuAssertTrue(tc, sh->damage != 0); + + test_teardown(); +} + +static void test_storm_redirect(CuTest *tc) { + region *r, *r1, *r2; + terrain_type *t_fire; + + /* drift into an adjacent ocean, but not the original destination */ + test_setup(); + r = test_create_ocean(0, 0); + r1 = test_create_ocean(0, 1); + r2 = test_create_ocean(1, 0); + + CuAssertPtrEquals(tc, r2, storm_redirect(r, r1)); + + /* do not drift if there is an adjacent non-ocean */ + r = test_create_ocean(10, 0); + r1 = test_create_ocean(10, 1); + r2 = test_create_ocean(11, 0); + test_create_plain(10, -1); // protects from storm + + CuAssertPtrEquals(tc, NULL, storm_redirect(r, r1)); + + /* bug 3119: do not drift if there is an adjacent firewall */ + t_fire = test_create_terrain("firewall", FORBIDDEN_REGION); + r = test_create_ocean(20, 0); + r1 = test_create_ocean(20, 1); + r2 = test_create_ocean(21, 0); + test_create_region(20, -1, t_fire); + + CuAssertPtrEquals(tc, NULL, storm_redirect(r, r1)); + + // we do not ave forbidden oceans, do we? but if we did, + // they would surely not count as coasts. + t_fire = test_create_terrain("deepsea", FORBIDDEN_REGION|SEA_REGION); + r = test_create_ocean(20, 0); + r1 = test_create_ocean(20, 1); + r2 = test_create_ocean(21, 0); + test_create_region(20, -1, t_fire); + + CuAssertPtrEquals(tc, r2, storm_redirect(r, r1)); + + test_teardown(); +} + static void test_drifting_ships(CuTest *tc) { ship *sh; ship_type * stype; @@ -1603,6 +1683,9 @@ CuSuite *get_move_suite(void) SUITE_ADD_TEST(suite, test_follow_bad_target); SUITE_ADD_TEST(suite, test_follow_unit_self); SUITE_ADD_TEST(suite, test_follow_ship_msg); + + SUITE_ADD_TEST(suite, test_storms); + SUITE_ADD_TEST(suite, test_storm_redirect); SUITE_ADD_TEST(suite, test_drifting_ships); SUITE_ADD_TEST(suite, test_drift_target); SUITE_ADD_TEST(suite, test_drift_reason); diff --git a/src/names.c b/src/names.c index 3cabc3440..6410b8c9a 100644 --- a/src/names.c +++ b/src/names.c @@ -21,7 +21,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/orderfile.test.c b/src/orderfile.test.c index 3e5dd68bf..ebd32fe73 100644 --- a/src/orderfile.test.c +++ b/src/orderfile.test.c @@ -15,9 +15,10 @@ #include #include +#include + #include #include -#include #include #include diff --git a/src/prefix.c b/src/prefix.c index 88e67a4db..c89ab3044 100644 --- a/src/prefix.c +++ b/src/prefix.c @@ -2,7 +2,7 @@ #include -#include +#include #include #include diff --git a/src/report.c b/src/report.c index 38babddb2..ee7b8d069 100644 --- a/src/report.c +++ b/src/report.c @@ -70,11 +70,12 @@ #include "util/param.h" #include -#include -#include -#include -#include -#include +#include +#include + +#include +#include +#include #include diff --git a/src/report.test.c b/src/report.test.c index ff956a625..33c069745 100644 --- a/src/report.test.c +++ b/src/report.test.c @@ -18,9 +18,10 @@ #include "util/param.h" #include -#include -#include -#include +#include +#include + +#include #include #include diff --git a/src/reports.c b/src/reports.c index 619e9dfad..ced8cf748 100644 --- a/src/reports.c +++ b/src/reports.c @@ -61,9 +61,10 @@ #include "util/password.h" #include "util/translation.h" -#include -#include -#include +#include + +#include +#include #include #include diff --git a/src/spells.c b/src/spells.c index b6077294d..c950eb605 100644 --- a/src/spells.c +++ b/src/spells.c @@ -75,9 +75,11 @@ #include #include +#include + +#include + #include -#include -#include /* libc includes */ #include diff --git a/src/spells.test.c b/src/spells.test.c index dad2e75f0..7cac9a2e2 100644 --- a/src/spells.test.c +++ b/src/spells.test.c @@ -44,7 +44,8 @@ #include #include -#include +#include + #include #include diff --git a/src/spells/borders.c b/src/spells/borders.c index 93062dbbf..c5605dd7b 100644 --- a/src/spells/borders.c +++ b/src/spells/borders.c @@ -20,7 +20,7 @@ #include "util/rng.h" #include "util/resolve.h" -#include +#include #include #include diff --git a/src/spells/charming.c b/src/spells/charming.c index 2e93f442c..02674c2b4 100644 --- a/src/spells/charming.c +++ b/src/spells/charming.c @@ -20,7 +20,7 @@ #include #include -#include +#include #include diff --git a/src/spells/charming.test.c b/src/spells/charming.test.c index b37017810..e3a339fd0 100644 --- a/src/spells/charming.test.c +++ b/src/spells/charming.test.c @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include diff --git a/src/spells/firewall.c b/src/spells/firewall.c index da621bdaa..c021e26a3 100644 --- a/src/spells/firewall.c +++ b/src/spells/firewall.c @@ -14,7 +14,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/spells/flyingship.c b/src/spells/flyingship.c index b576cee94..919187b3a 100644 --- a/src/spells/flyingship.c +++ b/src/spells/flyingship.c @@ -15,7 +15,7 @@ #include -#include +#include /* libc includes */ #include diff --git a/src/spells/shipcurse.c b/src/spells/shipcurse.c index 15863cb71..0905b82cd 100644 --- a/src/spells/shipcurse.c +++ b/src/spells/shipcurse.c @@ -15,7 +15,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/spells/unitcurse.c b/src/spells/unitcurse.c index ed70c770b..61543aa84 100644 --- a/src/spells/unitcurse.c +++ b/src/spells/unitcurse.c @@ -19,7 +19,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/spy.c b/src/spy.c index 2aa06adc0..93d2124e2 100644 --- a/src/spy.c +++ b/src/spy.c @@ -33,7 +33,7 @@ #include #include -#include +#include #include diff --git a/src/study.c b/src/study.c index f47799e42..8e768aa85 100644 --- a/src/study.c +++ b/src/study.c @@ -39,7 +39,7 @@ #include #include -#include +#include #include diff --git a/src/test_eressea.c b/src/test_eressea.c index ac3ff0c05..22d8c9c10 100644 --- a/src/test_eressea.c +++ b/src/test_eressea.c @@ -4,7 +4,7 @@ #include "util/stats.h" #include "util/password.h" -#include +#include #include diff --git a/src/tests.c b/src/tests.c index ad0866b20..03737e38d 100644 --- a/src/tests.c +++ b/src/tests.c @@ -42,7 +42,7 @@ #include "util/stats.h" #include "util/variant.h" // for variant, VAR_VOIDPTR, VAR_INT -#include +#include #include #include diff --git a/src/triggers/changerace.c b/src/triggers/changerace.c index 03e122fef..abee22c48 100644 --- a/src/triggers/changerace.c +++ b/src/triggers/changerace.c @@ -15,7 +15,7 @@ #include #include -#include +#include /* ansi includes */ #include diff --git a/src/triggers/clonedied.c b/src/triggers/clonedied.c index f28c03db9..5a6bd1e36 100644 --- a/src/triggers/clonedied.c +++ b/src/triggers/clonedied.c @@ -15,7 +15,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/triggers/createcurse.c b/src/triggers/createcurse.c index 4a41ff94c..3dc161e2d 100644 --- a/src/triggers/createcurse.c +++ b/src/triggers/createcurse.c @@ -13,7 +13,7 @@ #include #include -#include +#include /* ansi includes */ #include diff --git a/src/triggers/createunit.c b/src/triggers/createunit.c index ba72ba83b..64fdae449 100644 --- a/src/triggers/createunit.c +++ b/src/triggers/createunit.c @@ -15,7 +15,7 @@ #include #include -#include +#include /* ansi includes */ #include diff --git a/src/triggers/gate.c b/src/triggers/gate.c index fa1b07800..29055051c 100644 --- a/src/triggers/gate.c +++ b/src/triggers/gate.c @@ -13,7 +13,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/triggers/giveitem.c b/src/triggers/giveitem.c index a0173c636..062890b57 100644 --- a/src/triggers/giveitem.c +++ b/src/triggers/giveitem.c @@ -13,7 +13,7 @@ #include #include -#include +#include /* ansi includes */ #include diff --git a/src/triggers/killunit.c b/src/triggers/killunit.c index 262110ee3..63a5600fe 100644 --- a/src/triggers/killunit.c +++ b/src/triggers/killunit.c @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include diff --git a/src/triggers/shock.c b/src/triggers/shock.c index b41bf29e4..460886a1c 100644 --- a/src/triggers/shock.c +++ b/src/triggers/shock.c @@ -21,7 +21,7 @@ #include #include -#include +#include #include /* libc includes */ diff --git a/src/triggers/timeout.c b/src/triggers/timeout.c index 3c5273916..163f37ae1 100644 --- a/src/triggers/timeout.c +++ b/src/triggers/timeout.c @@ -7,7 +7,7 @@ #include #include -#include +#include #include #include diff --git a/src/triggers/triggers.c b/src/triggers/triggers.c index 7e972c704..c193f60b0 100644 --- a/src/triggers/triggers.c +++ b/src/triggers/triggers.c @@ -16,7 +16,7 @@ #include #include -#include +#include /* libc includes */ #include diff --git a/src/util/aliases.c b/src/util/aliases.c index bec4dabcd..331afbd4e 100644 --- a/src/util/aliases.c +++ b/src/util/aliases.c @@ -1,6 +1,6 @@ #include "aliases.h" -#include +#include #include #include diff --git a/src/util/param.c b/src/util/param.c index 245832a48..04304f365 100644 --- a/src/util/param.c +++ b/src/util/param.c @@ -8,7 +8,7 @@ #include "umlaut.h" #include -#include +#include #include #include diff --git a/src/vortex.c b/src/vortex.c index 385cddae3..5d9fc832d 100644 --- a/src/vortex.c +++ b/src/vortex.c @@ -10,8 +10,8 @@ #include "util/umlaut.h" #include "util/variant.h" -#include -#include +#include +#include #include #include diff --git a/src/wormhole.c b/src/wormhole.c index c266430d8..36ae0d4a4 100644 --- a/src/wormhole.c +++ b/src/wormhole.c @@ -19,8 +19,9 @@ #include #include -#include -#include +#include + +#include /* libc includes */ #include