--- deliantra/server/include/tod.h 2006/02/03 07:12:51 1.1.1.1 +++ deliantra/server/include/tod.h 2009/09/17 00:07:04 1.17 @@ -1,113 +1,82 @@ -/* Copyright 2000 Tim Rightnour */ +/* + * This file is part of Deliantra, the Roguelike Realtime MMORPG. + * + * Copyright (©) 2006,2007,2009 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2003-2006,2007 Mark Wedel & Crossfire Development Team + * Copyright (©) 2000,2007 Tim Rightnour + * Copyright (©) 1992,2007 Frank Tore Johansen + * + * Deliantra is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * The authors can be reached via e-mail to + */ + +#ifndef TOD_H_ +#define TOD_H_ + +#define TICK (MAX_TIME * 1e-6) + +#define TICK2TIME(tick) (tstamp (tick) * TICK) +#define TIME2TICK(time) tstamp ((time) / TICK) -#ifndef _TOD_H_ -#define _TOD_H_ +#define RUNTIME_PER_MINUTE 3. +#define RUNTIME_PER_HOUR (RUNTIME_PER_MINUTE * 60.) +#define TICKS_PER_HOUR int (RUNTIME_PER_HOUR / MAX_TIME * 1e6) -#define PTICKS_PER_CLOCK 1500 +// the first year in the game +#define EPOCH 8437 /* game time */ #define HOURS_PER_DAY 28 -#define DAYS_PER_WEEK 7 -#define WEEKS_PER_MONTH 5 +#define DAYS_PER_WEEK 7 +#define WEEKS_PER_MONTH 5 #define MONTHS_PER_YEAR 17 +// one game minute is 3s +// one game hour is 3m +// one game day is 1h24s +// one game week is 9h48s +// one game month is 2d1h +// one game year is 34d17h + /* convenience */ -#define WEEKS_PER_YEAR (WEEKS_PER_MONTH*MONTHS_PER_YEAR) -#define DAYS_PER_MONTH (DAYS_PER_WEEK*WEEKS_PER_MONTH) -#define DAYS_PER_YEAR (DAYS_PER_MONTH*MONTHS_PER_YEAR) -#define HOURS_PER_WEEK (HOURS_PER_DAY*DAYS_PER_WEEK) -#define HOURS_PER_MONTH (HOURS_PER_WEEK*WEEKS_PER_MONTH) -#define HOURS_PER_YEAR (HOURS_PER_MONTH*MONTHS_PER_YEAR) +#define WEEKS_PER_YEAR (WEEKS_PER_MONTH * MONTHS_PER_YEAR) +#define DAYS_PER_MONTH (DAYS_PER_WEEK * WEEKS_PER_MONTH) +#define DAYS_PER_YEAR (DAYS_PER_MONTH * MONTHS_PER_YEAR) +#define HOURS_PER_WEEK (HOURS_PER_DAY * DAYS_PER_WEEK) +#define HOURS_PER_MONTH (HOURS_PER_WEEK * WEEKS_PER_MONTH) +#define HOURS_PER_YEAR (HOURS_PER_MONTH * MONTHS_PER_YEAR) #define LUNAR_DAYS DAYS_PER_MONTH -typedef struct _timeofday { - int year; - int month; - int day; - int dayofweek; - int hour; - int minute; - int weekofmonth; - int season; -} timeofday_t; +struct timeofday_t +{ + int year; + int month; + int day; + int dayofweek; + int hour; + int minute; + int weekofmonth; + int season; +}; /* from common/time.c */ -extern void get_tod(timeofday_t *tod); - -/* weather stuff */ - -#define POLAR_BASE_TEMP 0 /* C */ -#define EQUATOR_BASE_TEMP 30 /* C */ -#define SEASONAL_ADJUST 10 /* polar distance */ -#define GULF_STREAM_WIDTH 3 /* width of gulf stream */ -#define GULF_STREAM_BASE_SPEED 40 /* base speed of gulf stream */ - -/* don't muck with these unless you are sure you know what they do */ -#define PRESSURE_ITERATIONS 30 -#define PRESSURE_AREA 180 -#define PRESSURE_ROUNDING_FACTOR 2 -#define PRESSURE_ROUNDING_ITER 1 -#define PRESSURE_SPIKES 3 -#define PRESSURE_MAX 1040 -#define PRESSURE_MIN 960 - -/* This is a multiplier for the wind caused by pressure differences. - * The type of overal climate you get depends on this. - * Too little wind, and the rain hugs the coast. - * Too much wind, and there are hurricanes and blizzards everywhere. - * 1 is too little. - */ -#define WIND_FACTOR 4.0 +void get_tod (timeofday_t *tod); +char *format_tod (char *buf, int len, timeofday_t *tod); +const char *get_current_tod_str (); +void print_tod (object *op); -/* editing the below might require actual changes to code */ -#define WEATHERMAPTILESX 100 -#define WEATHERMAPTILESY 100 - -/* sky conditions */ -#define SKY_CLEAR 0 -#define SKY_LIGHTCLOUD 1 -#define SKY_OVERCAST 2 -#define SKY_LIGHT_RAIN 3 -#define SKY_RAIN 4 /* rain -> storm has lightning */ -#define SKY_HEAVY_RAIN 5 -#define SKY_HURRICANE 6 -/* wierd weather 7-12 */ -#define SKY_FOG 7 -#define SKY_HAIL 8 -/* snow */ -#define SKY_LIGHT_SNOW 13 /* add 10 to rain to get snow */ -#define SKY_SNOW 14 -#define SKY_HEAVY_SNOW 15 -#define SKY_BLIZZARD 16 - -typedef struct _weather_avoids { - const char *name; - int snow; - archetype *what; /*inited from name, faste to compare arch pointers than strings*/ -} weather_avoids_t; - -typedef struct _weather_replace { - const char *tile; - const char *special_snow; - const char *doublestack_arch; - int arch_or_name; -} weather_replace_t; - -typedef struct _weather_grow { - const char *herb; /* arch name of item to grow */ - const char *tile; /* arch tile to grow on, NULL if anything */ - int random; /* random factor. min 1, higher = lower chance of - * appearance */ - float rfmin; - float rfmax; /* rainfall min/max (inches/day) */ - int humin; - int humax; /* humidity min/max */ - int tempmin; - int tempmax; /* temp min/max */ - int elevmin; - int elevmax; /* elevation min/max */ - int season; /* 0=any or 1-5 */ -} weather_grow_t; +#endif -#endif /* _TOD_H_ */