summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/date.cpp5
-rw-r--r--src/date_func.h5
-rw-r--r--src/date_type.h4
-rw-r--r--src/newgrf.cpp8
4 files changed, 13 insertions, 9 deletions
diff --git a/src/date.cpp b/src/date.cpp
index 908f94041..f6f4f19aa 100644
--- a/src/date.cpp
+++ b/src/date.cpp
@@ -77,11 +77,6 @@ static const uint16 _accum_days_for_month[] = {
ACCUM_SEP, ACCUM_OCT, ACCUM_NOV, ACCUM_DEC,
};
-static inline bool IsLeapYear(Year yr)
-{
- return yr % 4 == 0 && (yr % 100 != 0 || yr % 400 == 0);
-}
-
/**
* Converts a Date to a Year, Month & Day.
* @param date the date to convert from
diff --git a/src/date_func.h b/src/date_func.h
index d196fdb52..8c484b2c4 100644
--- a/src/date_func.h
+++ b/src/date_func.h
@@ -16,4 +16,9 @@ void SetDate(Date date);
void ConvertDateToYMD(Date date, YearMonthDay *ymd);
Date ConvertYMDToDate(Year year, Month month, Day day);
+static inline bool IsLeapYear(Year yr)
+{
+ return yr % 4 == 0 && (yr % 100 != 0 || yr % 400 == 0);
+}
+
#endif /* DATE_FUNC_H */
diff --git a/src/date_type.h b/src/date_type.h
index 86885faeb..ddb6dfc7c 100644
--- a/src/date_type.h
+++ b/src/date_type.h
@@ -46,8 +46,8 @@ typedef uint8 Day;
struct YearMonthDay {
Year year;
- Month month;
- Day day;
+ Month month; ///< 0 - 11
+ Day day; ///< 1 - 31
};
static const Year INVALID_YEAR = -1;
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index f1fe64635..3885fcf23 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -3566,9 +3566,13 @@ bool GetGlobalVariable(byte param, uint32 *value)
*value = Clamp(_cur_year, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR;
return true;
- case 0x02: // current month
- *value = _cur_month;
+ case 0x02: { // detailed date information: month of year (bit 0-7), day of month (bit 8-12), leap year (bit 15), day of year (bit 16-24)
+ YearMonthDay ymd;
+ ConvertDateToYMD(_date, &ymd);
+ Date start_of_year = ConvertYMDToDate(ymd.year, 0, 1);
+ *value = ymd.month | (ymd.day - 1) << 8 | (IsLeapYear(ymd.year) ? 1 << 15 : 0) | (_date - start_of_year) << 16;
return true;
+ }
case 0x03: // current climate, 0=temp, 1=arctic, 2=trop, 3=toyland
*value = _settings_game.game_creation.landscape;