Advertisement
ZoriaRPG

Level Screen Intros for 2.55 for SkyLizardGirl, v0.2

Mar 8th, 2019
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. script typedef ffc struct;
  2. script typedef ffc class;
  3.  
  4. stuct script locations
  5. {
  6.     enum{ curDMAP, curSCREEN, curLEVEL, pvsDMAP, pvsSCREEN, pvsLEVEL, locLAST};
  7.     int data[locLAST];
  8.     void run(){}
  9.     void clear() for ( int q = 0; q < locLAST; ++q ) data[q] = 0;
  10.     bool changed() { return ( Game->GetCurDMap() != data[curDMAP] || Game->GetCurScreen() != data[curSCREEN] ); }
  11.     bool dmapchanged() { return ( Game->GetCurDMap() != data[curDMAP] ); }
  12.     bool screenchanged() { return ( Game->GetCurScreen() != data[curSCREEN] ); }
  13.     bool levelchanged() { return ( Game->GetCurLevel() != data[curLEVEL] ); }
  14.     int priorDMap() { return ( data[pvsDMAP] );
  15.     void update()
  16.     {
  17.         data[pvsSCREEN] = data[curSCREEN];
  18.         data[pvsDMAP] = data[curDMAP];
  19.         data[curSCREEN] = Game->GetCurScreen();
  20.         data[curDMAP] = Game->GetCurDMap();
  21.     }
  22.     void update_dmap()
  23.     {
  24.         data[pvsDMAP] = data[curDMAP];
  25.         data[curDMAP] = Game->GetCurDMap();
  26.     }
  27.     void update_level()
  28.     {
  29.         data[pvsLEVEL] = data[curLEVEL];
  30.         data[curLEVEL] = Game->GetCurLevel();
  31.     }
  32.     void update_screen()
  33.     {
  34.         data[pvsSCREEN] = data[curSCREEN];
  35.         data[curSCREEN] = Game->GetCurScreen();
  36.     }
  37.    
  38. }
  39.  
  40. class script screenintros
  41. {
  42.     const int REGISTER = 6;
  43.     const int BIT = 2;
  44.     void run(){}
  45.     void clear()
  46.     {
  47.         for ( int q = 0; q < 0x80; ++q )
  48.         {
  49.             SetScreenDBit(locations.data[pvsDMAP], q, REG, BIT, false);
  50.         }
  51.     }
  52.     void update()
  53.     {
  54.    
  55.         if ( locations.levelchanged() )
  56.         {
  57.             locations.update_level();
  58.             clear(); /Re-display after changing dmaps, like DMap intros repeat, but for screens.
  59.         }
  60.     }
  61. }
  62.  
  63. link script active
  64. {
  65.     void run()
  66.     {
  67.         while(1)
  68.         {
  69.             screenintros.update();
  70.            
  71.             Waitframe();
  72.         }
  73.     }
  74. }
  75.  
  76. //Does not repeat if you revisit the screen, unless you change dmaps.
  77. ffc script screenmessage
  78. {
  79.  
  80.     const int REGISTER = 6;
  81.     const int BIT = 2;
  82.     const int DELAY_DEFAULT = 150;
  83.     void run(int delay, int reg )
  84.     {
  85.         reg = ( reg > 0 ) ? reg : REGISTER;
  86.         delay = ( delay > 0 ) ? delay : DELAY_DEFAULT;
  87.        
  88.         while(1)
  89.         {
  90.             if ( !(GetScreenDBit(Game->GetCurDMap(), Game->GetCurScreen(), REG, BIT)); )
  91.             {
  92.                 Waitframes(delay);
  93.                 Screen->Message(Screen->String);
  94.                 SetScreenDBit(Game->GetCurDMap(), Game->GetCurScreen(), REG, BIT, true);
  95.             }
  96.             Waitframe();
  97.         }
  98.     }
  99. }
  100.  
  101. link script init
  102. {
  103.     void run()
  104.     {
  105.         locations.clear();
  106.         locations.clear(); //Call twice to push the previous screen down.
  107.     }
  108. }
  109.  
  110. npc script screenguy
  111. {
  112.     void run(int delay)
  113.     {
  114.         delay = this->InitD[0];
  115.         if ( !Screen-RoomType )
  116.         {
  117.             if ( Screen->CatchAll )
  118.             {
  119.                 delay = Screen->CatchAll;
  120.             }
  121.         }
  122.         this->CollDetection = false;
  123.         //this->DrawYOffset = -32768;
  124.         //Waitframes(Screen->CatchAll); //might be in use depending on room type
  125.         Waitframes(delay);
  126.         Screen->Message(Screen->String);
  127.     }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement