ZoriaRPG

HP Change Display, v0.4

Aug 18th, 2020 (edited)
231
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ///////////////////////////
  2. // RPG-esque HP Display  //
  3. // v0.4                  //
  4. // 18th August, 2020     //
  5. // For ZC 2.55 Alpha 80+ //
  6. // By: ZoriaRPG          //
  7. ///////////////////////////
  8.  
  9. namespace hphealth
  10. {
  11.     enum colourtype { cNONE, cWHITE, cGREY, cBLUE, cRED = 0xE1 };
  12.    
  13.     const int OLDHP_INDX = 19;
  14.     const int OLDHP_DIFF = 20;
  15.     const int SPAWN_CLK = 21;
  16.     const int DRAW_CLK = 22;
  17.     const int INITIALISED = 23;
  18.     const int SPAWNCLKDUR = 60;
  19.     const int HPCLOCKDUR = 40;
  20.  
  21.     const int DMG_COLOUR = cRED;
  22.     const int DMG_OUTLINE = cWHITE;
  23.     const int HEAL_OUTLINE = cWHITE;
  24.     const int HEAL_COLOUR = cBLUE;
  25.  
  26.     const int DRAW_LAYER = 6;
  27.     const int XOFS = -4;
  28.     const int YOFS = -4;
  29.  
  30.     global script test
  31.     {
  32.         void run()
  33.         {
  34.             while(1)
  35.             {
  36.                 for ( int q = Screen->NumNPCs(); q > 0; --q )
  37.                 {
  38.                     npc n = Screen->LoadNPC(q);
  39.                     init_enemy_hp(n);
  40.                     do_npc_hp_clock(n);
  41.                     update_npc_hp(n);
  42.                     draw_npc_hp_change(n);
  43.                 }
  44.                 init_hero_hp();
  45.                 do_hero_hp_clock();
  46.                 update_hero_hp();
  47.                 draw_hero_hp_change();
  48.                 Waitdraw();
  49.                 Waitframe();
  50.             }
  51.         }
  52.     }
  53.  
  54.  
  55.     void do_npc_hp_clock(npc n)
  56.     {
  57.         ++n->Misc[SPAWN_CLK];
  58.     }
  59.  
  60.     void init_enemy_hp(npc n)
  61.     {
  62.         unless ( n->Misc[INITIALISED] )
  63.         {
  64.             n->Misc[OLDHP_INDX] = n->HP;
  65.             n->Misc[INITIALISED] = 1;
  66.         }
  67.     }
  68.     void update_npc_hp(npc n)
  69.     {
  70.        
  71.         {
  72.             if ( n->Family != NPCT_GLEEOK && n->Misc[DRAW_CLK] == 0 && (n->HitBy[2] || n->Family == NPCT_MOLDORM ) && n->HP != n->Misc[OLDHP_INDX] )
  73.             {
  74.                
  75.                 n->Misc[OLDHP_DIFF] = n->HP - n->Misc[OLDHP_INDX];
  76.                 n->Misc[DRAW_CLK] = HPCLOCKDUR;
  77.                
  78.             }
  79.             else if ( (n->Family == NPCT_GLEEOK && n->Core) && n->HP != n->Misc[OLDHP_INDX] && n->Misc[DRAW_CLK] == 0 )
  80.             {
  81.                 n->Misc[OLDHP_DIFF] = n->HP - n->Misc[OLDHP_INDX];
  82.                 n->Misc[DRAW_CLK] = HPCLOCKDUR;
  83.             }
  84.  
  85.             else if ( n->Family == NPCT_LANMOLA && n->HP != n->Misc[OLDHP_INDX] && n->Misc[DRAW_CLK] == 0 )
  86.             {
  87.                 npcdata nd = Game->LoadNPCData(n->ID);
  88.                 int orighp = (nd->HP -1) * -1;
  89.                 //printf("hp: %d\n", orighp);
  90.                 int tmpdif = n->HP - n->Misc[OLDHP_INDX];
  91.                 if ( tmpdif == orighp && n->Misc[SPAWN_CLK] < 60 )
  92.                 {
  93.                     n->Misc[OLDHP_INDX] = n->HP;
  94.                     return;
  95.                 }
  96.                 else
  97.                 {
  98.                     n->Misc[OLDHP_DIFF] = n->HP - n->Misc[OLDHP_INDX];
  99.                     n->Misc[DRAW_CLK] = HPCLOCKDUR;
  100.                 }
  101.             }
  102.         }
  103.        
  104.     }
  105.  
  106.     void draw_npc_hp_change(npc n)
  107.     {
  108.         if (  n->Misc[SPAWN_CLK] < SPAWNCLKDUR ) return;
  109.         if ( --n->Misc[DRAW_CLK] > 0 && n->Misc[OLDHP_DIFF] )
  110.         {
  111.             int buffer[8];
  112.             int buffer2[8];
  113.             itoa(buffer,n->Misc[OLDHP_DIFF]);
  114.             if ( n->Misc[OLDHP_DIFF] > 0 )
  115.             {
  116.                 buffer2[0] = '+';
  117.             }
  118.             strcat(buffer2, buffer);
  119.            
  120.             Screen->DrawString
  121.             (
  122.                 DRAW_LAYER,
  123.                 n->X + XOFS,
  124.                 n->Y + YOFS,
  125.                 FONT_Z3SMALL,
  126.                 ((n->Misc[OLDHP_DIFF]<0) ? DMG_COLOUR : HEAL_COLOUR),
  127.                 -1,
  128.                 0,
  129.                 buffer2,
  130.                 128,
  131.                 SHD_OUTLINED8,
  132.                 ((n->Misc[OLDHP_DIFF]<0) ? DMG_OUTLINE : HEAL_OUTLINE)
  133.             );
  134.                
  135.            
  136.         }
  137.         else
  138.         {
  139.             n->Misc[DRAW_CLK] = 0;
  140.             n->Misc[OLDHP_INDX] = n->HP;
  141.         }
  142.     }
  143.     void do_hero_hp_clock()
  144.     {
  145.         ++Hero->Misc[SPAWN_CLK];
  146.     }
  147.  
  148.     void init_hero_hp()
  149.     {
  150.         unless ( Hero->Misc[INITIALISED] )
  151.         {
  152.             Hero->Misc[OLDHP_INDX] = Hero->HP;
  153.             Hero->Misc[INITIALISED] = 1;
  154.         }
  155.     }
  156.     void update_hero_hp()
  157.     {
  158.        
  159.         if ( Hero->Misc[DRAW_CLK] == 0 && Hero->HP != Hero->Misc[OLDHP_INDX] )
  160.         {
  161.             Hero->Misc[OLDHP_DIFF] = Hero->HP - Hero->Misc[OLDHP_INDX];
  162.             Hero->Misc[DRAW_CLK] = HPCLOCKDUR;
  163.         }
  164.     }
  165.  
  166.  
  167.  
  168.     void draw_hero_hp_change()
  169.     {
  170.         if ( --Hero->Misc[DRAW_CLK] > 0 && Hero->Misc[OLDHP_DIFF] )
  171.         {
  172.            
  173.             int buffer[8];
  174.             int buffer2[8];
  175.            
  176.             itoa(buffer,Hero->Misc[OLDHP_DIFF]);
  177.             if ( Hero->Misc[OLDHP_DIFF] > 0 )
  178.             {
  179.                 buffer2[0] = '+';
  180.             }
  181.             strcat(buffer2, buffer);
  182.            
  183.             Screen->DrawString
  184.             (
  185.                 DRAW_LAYER,
  186.                 Hero->X + XOFS,
  187.                 Hero->Y + YOFS,
  188.                 FONT_Z3SMALL,
  189.                 ((Hero->Misc[OLDHP_DIFF]<0) ? DMG_COLOUR : HEAL_COLOUR),
  190.                 -1,
  191.                 0,
  192.                 buffer2,
  193.                 128,
  194.                 SHD_OUTLINED8,
  195.                 ((Hero->Misc[OLDHP_DIFF]<0) ? DMG_OUTLINE : HEAL_OUTLINE)
  196.             );
  197.         }
  198.         else
  199.         {
  200.             Hero->Misc[DRAW_CLK] = 0;
  201.             Hero->Misc[OLDHP_INDX] = Hero->HP;
  202.         }
  203.     }
  204. }
RAW Paste Data