ZoriaRPG

Wolf Enemy npc script v3

Dec 13th, 2019
171
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. npc script wolfie
  2. {
  3.     void run()
  4.     {
  5.         int clks[1];
  6.         lweapon bite = Screen->CreateLWeapon(EW_SCRIPT1);
  7.         bite->X = this->X;
  8.         bite->Y = this->Y;
  9.         bite->HitHeight = 8;
  10.         bite->HitWidth = 16;
  11.         bite->DrawYOffset = -32768;
  12.         bite->Damage = 2;
  13.         while(1)
  14.         {
  15.             this->ConstantWalk({this->Rate, this->Homing, this->Hunger});
  16.             unless(bite->isValid())
  17.             {
  18.                 bite = Screen->CreateLWeapon(EW_SCRIPT1);
  19.                 bite->DrawYOffset = -32768;
  20.                 bite->Damage = 2;
  21.             }
  22.             if(bite->isValid())
  23.             {
  24.                 wolfnme::positionbite(this, bite);
  25.                 wolfnme::transformbite(this, bite);
  26.                
  27.             }
  28.             Waitdraw();
  29.             wolfnme::transform2x1(this,clks);
  30.             Waitframe();
  31.         }
  32.     }
  33. }
  34.  
  35. namespace wolfnme
  36. {      
  37.     void positionbite(npc n, lweapon bite)
  38.     {
  39.         switch(n->Dir)
  40.         {
  41.             case DIR_UP:
  42.                 bite->X = n->X; bite->Y = n->Y -1; bite->HitYOffset = -2; bite->HitXOffset = 0; break;
  43.             case DIR_DOWN:
  44.                 bite->X = n->X; bite->Y = n->Y + 1; bite->HitYOffset = 24; bite->HitXOffset = 0; break;
  45.             case DIR_LEFT:
  46.                 bite->X = n->X - 1; bite->Y = ((n->Y > 0) ? n->Y : n->Y + 1); bite->HitYOffset = 0; bite->HitXOffset = -2; break;
  47.             case DIR_RIGHT:
  48.                 bite->X = n->X + 1; bite->Y = ((n->Y > 0) ? n->Y : n->Y + 1); bite->HitYOffset = 0; bite->HitXOffset = 25; break;
  49.         }
  50.     }
  51.     void transformbite(npc n, lweapon l)
  52.     {
  53.         switch(n->Dir)
  54.         {
  55.             case DIR_DOWN:
  56.             case DIR_UP:
  57.             {
  58.                 l->HitWidth = 16;
  59.                 l->HitHeight = 8;
  60.                 break;
  61.             }
  62.             case DIR_RIGHT:
  63.             case DIR_LEFT:
  64.             {
  65.                 l->HitWidth = 8;
  66.                 l->HitHeight = 16;
  67.                 break;
  68.             }
  69.         }
  70.     }
  71.  
  72.     void transform2x1(npc n, int clk)
  73.     {
  74.         ++clk[0];
  75.         int f4 = Floor(clk[0]/(n->ASpeed/4));
  76.         if( f4 >= 4 ) { f4 = 0; clk[0] = 0;}
  77.         switch(n->Dir)
  78.         {
  79.             case DIR_DOWN:
  80.             {
  81.                 n->Tile = (Game->LoadNPCData(n->ID)->Tile) + 4 + f4;
  82.                 n->OriginalTile = n->Tile;
  83.                 n->TileWidth = 1;
  84.                 n->TileHeight = 2;
  85.                 n->HitWidth = 16;
  86.                 n->HitHeight = 32;
  87.                 break;
  88.             }
  89.             case DIR_RIGHT:
  90.             {
  91.                 n->Tile = (Game->LoadNPCData(n->ID)->Tile) + 60 + (f4 * 2);
  92.                 n->OriginalTile = n->Tile;
  93.                 n->TileWidth = 2;
  94.                 n->TileHeight = 1;
  95.                 n->HitWidth = 32;
  96.                 n->HitHeight = 16;
  97.                 break;
  98.             }
  99.             case DIR_LEFT:
  100.             {
  101.                 n->Tile = (Game->LoadNPCData(n->ID)->Tile) + 40 + (f4 *2);
  102.                 n->OriginalTile = n->Tile;
  103.                 n->TileWidth = 2;
  104.                 n->TileHeight = 1;
  105.                 n->HitWidth = 32;
  106.                 n->HitHeight = 16;
  107.                 break;
  108.             }
  109.             case DIR_UP:
  110.             {
  111.                 n->Tile = (Game->LoadNPCData(n->ID)->Tile) + f4;
  112.                 n->OriginalTile = n->Tile;
  113.                 n->TileWidth = 1;
  114.                 n->TileHeight = 2;
  115.                 n->HitWidth = 16;
  116.                 n->HitHeight = 32;
  117.                 break;
  118.             }
  119.         }
  120.     }
  121. }
RAW Paste Data