(svn r13594) -Feature(ette)[FS#2093]: Supply newgrfs with 'day of month', 'leap year' and 'day of year'.
authorfrosch
Fri, 20 Jun 2008 21:14:10 +0000
changeset 11038 d253e0dfa688
parent 11037 43dce4b318bf
child 11041 5a7b939e6846
(svn r13594) -Feature(ette)[FS#2093]: Supply newgrfs with 'day of month', 'leap year' and 'day of year'.
src/date.cpp
src/date_func.h
src/date_type.h
src/newgrf.cpp
--- a/src/date.cpp	Fri Jun 20 20:40:47 2008 +0000
+++ b/src/date.cpp	Fri Jun 20 21:14:10 2008 +0000
@@ -77,11 +77,6 @@
 	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
--- a/src/date_func.h	Fri Jun 20 20:40:47 2008 +0000
+++ b/src/date_func.h	Fri Jun 20 21:14:10 2008 +0000
@@ -16,4 +16,9 @@
 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 */
--- a/src/date_type.h	Fri Jun 20 20:40:47 2008 +0000
+++ b/src/date_type.h	Fri Jun 20 21:14:10 2008 +0000
@@ -46,8 +46,8 @@
 
 struct YearMonthDay {
 	Year  year;
-	Month month;
-	Day   day;
+	Month month; ///< 0 - 11
+	Day   day;   ///< 1 - 31
 };
 
 static const Year INVALID_YEAR = -1;
--- a/src/newgrf.cpp	Fri Jun 20 20:40:47 2008 +0000
+++ b/src/newgrf.cpp	Fri Jun 20 21:14:10 2008 +0000
@@ -3566,9 +3566,13 @@
 			*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;