Skip to content

Commit

Permalink
Eternal Season
Browse files Browse the repository at this point in the history
Adds a world option to permanently set the current season to the initial season.
  • Loading branch information
wito committed Oct 20, 2015
1 parent 1fbcb79 commit aed457f
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/calendar.cpp
Expand Up @@ -9,6 +9,8 @@ int calendar::cached_season_length = 14;

calendar calendar::start;
calendar calendar::turn;
season_type calendar::initial_season;
bool calendar::eternal_season = false;

// Internal constants, not part of the calendar interface.
// Times for sunrise, sunset at equinoxes
Expand Down Expand Up @@ -392,7 +394,12 @@ void calendar::sync()
{
const int sl = season_length();
year = turn_number / DAYS(sl * 4);
season = season_type(turn_number / DAYS(sl) % 4);

if (eternal_season)
season = initial_season;
else
season = season_type(turn_number / DAYS(sl) % 4);

day = turn_number / DAYS(1) % sl;
hour = turn_number / HOURS(1) % 24;
minute = turn_number / MINUTES(1) % 60;
Expand Down
2 changes: 2 additions & 0 deletions src/calendar.h
Expand Up @@ -157,5 +157,7 @@ class calendar

static calendar start;
static calendar turn;
static season_type initial_season;
static bool eternal_season;
};
#endif
9 changes: 9 additions & 0 deletions src/game.cpp
Expand Up @@ -14553,17 +14553,26 @@ void game::start_calendar()
}
} else {
if( ACTIVE_WORLD_OPTIONS["INITIAL_SEASON"].getValue() == "spring" ) {
calendar::initial_season = SPRING;
; // Do nothing.
} else if( ACTIVE_WORLD_OPTIONS["INITIAL_SEASON"].getValue() == "summer") {
calendar::initial_season = SUMMER;
calendar::start += DAYS((int)ACTIVE_WORLD_OPTIONS["SEASON_LENGTH"]);
} else if( ACTIVE_WORLD_OPTIONS["INITIAL_SEASON"].getValue() == "autumn" ) {
calendar::initial_season = AUTUMN;
calendar::start += DAYS((int)ACTIVE_WORLD_OPTIONS["SEASON_LENGTH"] * 2);
} else {
calendar::initial_season = WINTER;
calendar::start += DAYS((int)ACTIVE_WORLD_OPTIONS["SEASON_LENGTH"] * 3);
}
}
calendar::turn = calendar::start;

if ( ACTIVE_WORLD_OPTIONS["ETERNAL_SEASON"] ) {
calendar::eternal_season = true;
}
}

void game::add_artifact_messages(std::vector<art_effect_passive> effects)
{
int net_str = 0, net_dex = 0, net_per = 0, net_int = 0, net_speed = 0;
Expand Down
5 changes: 5 additions & 0 deletions src/options.cpp
Expand Up @@ -1077,6 +1077,11 @@ void init_options()
0, 1000, 100
);

OPTIONS["ETERNAL_SEASON"] = cOpt("world_default", _("Eternal season"),
_("Keep the initial season for ever."),
false
);

mOptionsSort["world_default"]++;

OPTIONS["STATIC_SPAWN"] = cOpt("world_default", _("Static spawn"),
Expand Down
4 changes: 4 additions & 0 deletions src/savegame.cpp
Expand Up @@ -66,6 +66,8 @@ void game::serialize(std::ofstream & fout) {
// basic game state information.
json.member("turn", (int)calendar::turn);
json.member("calendar_start", (int)calendar::start);
json.member("initial_season", (int)calendar::initial_season);
json.member("eternal_season", calendar::eternal_season);
json.member( "last_target", (int)last_target );
json.member( "run_mode", (int)safe_mode );
json.member( "mostseen", mostseen );
Expand Down Expand Up @@ -175,6 +177,8 @@ void game::unserialize(std::ifstream & fin)

data.read("turn",tmpturn);
data.read("calendar_start",tmpcalstart);
calendar::initial_season = (season_type)data.get_int("initial_season",(int)SPRING);
calendar::eternal_season = data.get_bool("eternal_season", false);
data.read("last_target",tmptar);
data.read("run_mode", tmprun);
data.read("mostseen", mostseen);
Expand Down

0 comments on commit aed457f

Please sign in to comment.