/*
* This file is part of Deliantra, the Roguelike Realtime MMORPG.
*
* Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
* Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
* 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
*/
#include
#include
#include
#include
#include
/*
* Gloabal variables:
*/
tick_t pticks;
static const char *season_name[5] = {
"New Year",
"Growth",
"Harvest",
"Decay",
"the Blizzard",
};
static const char *weekdays[DAYS_PER_WEEK] = {
"the Moon",
"the Bull",
"the Deception",
"Thunder",
"Freedom",
"the Great Gods",
"the Sun"
};
static const char *month_name[MONTHS_PER_YEAR] = {
"Winter", /* 0 */
"the Ice Dragon",
"the Frost Giant",
"Valriel",
"Lythander",
"the Harvest",
"Gaea",
"Futility",
"the Dragon",
"the Sun",
"the Great Infernus",
"Ruggilli",
"the Dark Shades",
"the Devourers",
"Sorig",
"the Ancient Darkness",
"Gorokh"
};
void
get_tod (timeofday_t * tod)
{
unsigned int todtick = (unsigned int)(runtime * (1. / RUNTIME_PER_HOUR));
tod->year = todtick / HOURS_PER_YEAR;
tod->month = todtick / HOURS_PER_MONTH % MONTHS_PER_YEAR;
tod->day = todtick % HOURS_PER_MONTH / DAYS_PER_MONTH;
tod->hour = todtick % HOURS_PER_DAY;
tod->minute = (int)((runtime - todtick * RUNTIME_PER_HOUR) * (60. / RUNTIME_PER_HOUR));
tod->dayofweek = tod->day % DAYS_PER_WEEK;
tod->weekofmonth = tod->day / WEEKS_PER_MONTH;
tod->season = min (4, tod->month / 3);
}
void
print_tod (object *op)
{
timeofday_t tod;
get_tod (&tod);
char todmsg [1024];
int day = tod.day + 1;
const char *suf;
if (day == 1 || ((day % 10) == 1 && day > 20))
suf = "st";
else if (day == 2 || ((day % 10) == 2 && day > 20))
suf = "nd";
else if (day == 3 || ((day % 10) == 3 && day > 20))
suf = "rd";
else
suf = "th";
snprintf (todmsg, sizeof (todmsg),
"It is %d minute%s past %d o'clock %s, on the Day of %s,\n"
"the %d%s Day of the Month of %s, Year %d.\n"
"It is the Season of %s.",
tod.minute + 1,
(tod.minute + 1 < 2) ? "" : "s",
(tod.hour + 13) % 14 + 1,
(tod.hour >= 14 ? "pm" : "am"),
weekdays[tod.dayofweek],
day, suf, month_name[tod.month], tod.year + 1,
season_name[tod.season]);
new_draw_info (NDI_UNIQUE, 0, op, todmsg);
}