add a battle state
decouple PersistentState