const int SUNRISE = 1;
const int DAY = 0;
const int SUNSET = 2;
const int NIGHT = 3;
const int DAY_PAL = 0;
const int SUNRISET_PAL = 32;
const int NIGHT_PAL = 33;
const int NIGHT_OVERLAY_LAYER = 6;
const int CLOCK_FRAMES = 0;
const int CLOCK_SECONDS = 1;
const int CR_SECONDS = 30;
const int CLOCK_MINUTES = 2;
const int CR_MINUTES = 29;
const int CLOCK_HOURS = 3;
const int CR_HOURS = 28;
const int CLOCK_DAYS = 4;
const int CLOCK_MAX = 5;
int CYCLE = 0;
int CURRENTDMAP = -1;
int CURRENTSCREEN = -1;
const int TIME_FRAME = 0;
const int TIME_SEC = 1;
const int TIME_MINUTE = 2;
const int TIME_HOUR = 3;
const int TIME_DAY = 4;
const int TIME_MONTH = 5;
const int TIME_YEAR = 6;
const int TIME_MAX = 7;
const int DMT_DUNGEON = 2;
const int DMT_INTERIOR = 3;
int Time[TIME_MAX]={-1, 0, 0, 0, 1, 1, 1};
global script a
{
void run()
{
while(1)
{
Do_Time();
DayNightCycle();
Waitdraw();
Waitframe();
}
}
}
void DayNightCycle()
{
dmapdata dm = Game->LoadDMapData(Game->GetCurDMap());
int type = dm->Type;
if ( CURRENTDMAP != Game->GetCurDMap() || CURRENTSCREEN != Game->GetCurScreen() )
{
TraceNL();
TraceS("Detected DMap Type: "); Trace(type);
CURRENTDMAP = Game->GetCurDMap();
CURRENTSCREEN = Game->GetCurScreen();
}
if ( type == DMT_INTERIOR )
{
TraceS("Interior DMap found by DayNightCycle()"); return;
}
if ( type == DMT_DUNGEON )
{
TraceNL(); TraceS("Dungeon DMap found by DayNightCycle()"); return;
}
else
{
if (Time[TIME_HOUR] <= 5)
{
if (CYCLE != SUNRISE)
{
CYCLE = SUNRISE;
TraceNL(); Game->DMapPalette[CURRENTDMAP] = SUNRISET_PAL;
return;
}
}
else if (Time[TIME_HOUR] <= 11)
{
if (CYCLE != DAY)
{
CYCLE = DAY;
Game->DMapPalette[CURRENTDMAP] = DAY_PAL;
return;
}
}
else if (Time[TIME_HOUR] <= 17)
{
if (CYCLE != SUNSET)
{
CYCLE = SUNSET;
Game->DMapPalette[CURRENTDMAP] = SUNRISET_PAL;
return;
}
}
else
{
if (CYCLE != NIGHT)
{
CYCLE = NIGHT;
Game->DMapPalette[CURRENTDMAP] = NIGHT_PAL;
return;
}
}
return;
}
}
void Do_Time()
{
int f = ++Time[TIME_FRAME];
if ( f % 2 ) ++Time[TIME_SEC];
if ( f >= 60 ) Time[TIME_FRAME] = 0;
if ( Time[TIME_SEC] > 59 )
{
Time[TIME_SEC] = 0;
++Time[TIME_MINUTE];
}
if ( Time[TIME_MINUTE] > 59 )
{
Time[TIME_MINUTE] = 0;
++Time[TIME_HOUR];
}
if ( Time[TIME_HOUR] > 23 )
{
Time[TIME_HOUR] = 0;
++Time[TIME_DAY];
}
if ( Time[TIME_DAY] > 30 )
{
Time[TIME_DAY] = 1;
++Time[TIME_MONTH];
}
if ( Time[TIME_MONTH] > 12 )
{
Time[TIME_MONTH] = 1;
++Time[TIME_YEAR];
}
}
Comments