npc script wolfie { void run() { int clks[3]; eweapon bite = Screen->CreateEWeapon(EW_SCRIPT1); bite->DrawYOffset = -32768; clks[1] = Rand(120,210); clks[2] = 60; while(1) { if( (--clks[1]) < 1 ) { clks[1] = Rand(120,210); //slow down do { --this->Step; nmes::transform2x1(this,clks); bite->DeadState = WDS_ALIVE; Waitframe(); } while(this->Step > 0); //change dir this->Dir = Rand(4); nmes::transform2x1(this,clks); //speed up do { ++this->Step; nmes::transform2x1(this,clks); bite->DeadState = WDS_ALIVE; Waitframe(); } while (this->Step < Game->LoadNPCData(this->ID)->Step); } nmes::transform2x1(this,clks); //this->HaltingWalk({this->Rate, this->Homing, 0, this->Haltrate, Game->LoadNPCData(this->ID)->Random}); //this->ConstantWalk({this->Rate, this->Homing, this->Hunger}); bite->DeadState = WDS_ALIVE; Waitframe(); } } } namespace nmes { void transformbite(npc n, eweapon e) { bite->X = n->X-n->HitXOffset; bite->Y = n->Y-n->HitYOffset; } void transform2x1(npc n, int clk) { ++clk[0]; int f4 = Floor(clk[0]/(n->ASpeed/4)); if( f4 >= 4 ) { f4 = 0; clk[0] = 0;} switch(n->Dir) { case DIR_DOWN: n->Tile = (Game->LoadNPCData(n->ID)->Tile) + 4 + f4; n->OriginalTile = n->Tile; n->HitXOffset = 0; n->HitYOffset = -16; n->DrawXOffset = 0; n->DrawYOffset = -16; n->TileWidth = 1; n->TileHeight = 2; n->HitWidth = 16; n->HitHeight = 32; break; case DIR_RIGHT: n->Tile = (Game->LoadNPCData(n->ID)->Tile) + 60 + (f4 * 2); n->OriginalTile = n->Tile; n->HitXOffset = -16; n->HitYOffset = 0; n->DrawXOffset = -16; n->DrawYOffset = 0; n->TileWidth = 2; n->TileHeight = 1; n->HitWidth = 32; n->HitHeight = 16; break; case DIR_LEFT: n->Tile = (Game->LoadNPCData(n->ID)->Tile) + 40 + (f4 *2); n->OriginalTile = n->Tile; n->TileWidth = 2; n->TileHeight = 1; n->HitWidth = 32; n->HitHeight = 16; n->HitXOffset = 0; n->HitYOffset = 0; n->DrawXOffset = 0; n->DrawYOffset = 0; break; case DIR_UP: n->Tile = (Game->LoadNPCData(n->ID)->Tile) + f4; n->OriginalTile = n->Tile; n->TileWidth = 1; n->TileHeight = 2; n->HitWidth = 16; n->HitHeight = 32; n->HitXOffset = 0; n->HitYOffset = 0; n->DrawXOffset = 0; n->DrawYOffset = 0; break; } } }