ZoriaRPG icon

Day and Night Cycle for Binx

ZoriaRPG | PRO | 06/22/18 06:36:24 AM UTC | 0 ⭐ | 700 👁️ | Never ⏰ | []
C++ |

2.92 KB

|

None

|

0 👍

/

0 👎

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