pure virtual for npc