ZoriaRPG icon

Screen Intros for 2.55 for SkyLizardGirl

ZoriaRPG | PRO | 03/08/19 07:52:26 AM UTC | 0 ⭐ | 641 👁️ | Never ⏰ | []
C++ |

2.17 KB

|

None

|

0 👍

/

0 👎

script typedef ffc struct;
script typedef ffc class;
 
stuct script locations
{
    enum{ curDMAP, curSCREEN, pvsDMAP, pvsSCREEN, locLAST};
    int data[locLAST];
    void run(){}
    void clear() for ( int q = 0; q < locLAST; ++q ) data[q] = 0;
    bool changed() { return ( Game->GetCurDMap() != data[curDMAP] || Game->GetCurScreen() != data[curSCREEN] ); }
    bool dmapchanged() { return ( Game->GetCurDMap() != data[curDMAP] ); }
    bool screenchanged() { return ( Game->GetCurScreen() != data[curSCREEN] ); }
    int priorDMap() { return ( data[pvsDMAP] );
    void update()
    {
        data[pvsSCREEN] = data[curSCREEN];
        data[pvsDMAP] = data[curDMAP];
        data[curSCREEN] = Game->GetCurScreen();
        data[curDMAP] = Game->GetCurDMap();
    }
    void update_dmap()
    {
        data[pvsDMAP] = data[curDMAP];
        data[curDMAP] = Game->GetCurDMap();
    }
    void update_screen()
    {
        data[pvsSCREEN] = data[curSCREEN];
        data[curSCREEN] = Game->GetCurScreen();
    }
    
}
 
class script screenintros
{
    const int REGISTER = 6;
    const int BIT = 2;
    void run(){}
    void clear()
    {
        for ( int q = 0; q < 0x80; ++q )
        {
            SetScreenDBit(locations.data[pvsDMAP], q, REG, BIT, false);
        }
    }
    void update()
    {
    
        if ( locations.dmapchanged() )
        {
            locations.update_dmap();
            clear(); /Re-display after changing dmaps, like DMap intros repeat, but for screens.
        }
    }
}
 
link script active
{
    void run()
    {
        while(1)
        {
            screenintros.update();
            
            Waitframe();
        }
    }
}
 
//Does not repeat if you revisit the screen, unless you change dmaps. 
ffc script screenmessage
{
 
    const int REGISTER = 6;
    const int BIT = 2;
    const int DELAY_DEFAULT = 150;
    void run(int msg, int delay, int reg )
    {
        reg = ( reg > 0 ) ? reg : REGISTER;
        delay = ( delay > 0 ) ? delay : DELAY_DEFAULT;
        
        while(1)
        {
            if ( !(GetScreenDBit(Game->GetCurDMap(), Game->GetCurScreen(), REG, BIT)); )
            {
                Waitframes(delay);
                Screen->Message(msg);
                SetScreenDBit(Game->GetCurDMap(), Game->GetCurScreen(), REG, BIT, true);
            }
            Waitframe();
        }
    }
}
 
link script init
{
    void run()
    {
        locations.clear();
        locations.clear(); //Call twice to push the previous screen down. 
    }
}

Comments