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. } }