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