Cool, good to hear it's doing what it should.
There's a few more instructions you should add to the NMI routine, to replace the PHA/PLA. Keeping in mind that it's possible at times for the NMI to interrupt anything that's running in main reset code. Since the X register is modified, (and Y could be, after you add more code to it), do this at the beginning to completely save the CPU's state:
You've probably seen that before (it's standard 6502 interrupt stuff, pretty much), but I'm mentioning it anyways.
The player in Dragon Warrior definitely uses sprites. It's rare to have anything moving seperately from the background that aren't sprites, but it was done sometimes in games like Super C.