Wow, you really stack a lot of allocs into one line!
You seem to be over-retaining things. For example, the array you are passing for "entities." If the NPC you are allocing is retaining the entities array in some way, you should autorelease it as you create it. You can do that simply by using the convenience method arrayWithObjects instead of using the alloc/initWithObjects combo (the convenience method will autorelease for you). The alloc/init is adding an extra retain, and since you don't even bother to store a reference to it, that extra retain is more than likely never getting released.
Also, the allNPC array is putting a retain on the NPC (when adding an object to an array or dictionary, a retain is placed on the object), but once again so is your alloc/init combination. So unless you autorelease the NPC as you create it, it will get over-retained.
Hope this helps.