underworld level2
rename leve1 -> level -1 and level2 -> level1
extra sound effect
assets folder symlink in root

playerBulletCategory: collide with NPC
environmental category (wall) collide with NPC

DetectObjectCallback: do not detect sensor fixture

decrase ice bullet radius so it can be cast in 1 tile wide corridor

Torch: remove unncessary bullet.expire() call
Barrier: load locked state from map
Player: add Level2 spirit to iteract map (GrabItem)
drop item if it is no longer grabbable
StationaryNPC: constructor that takes entity name

NPC: name animaiton argument position bug

Gatekeeper: derived from StationaryNPC
Level2Sensor: track how many spirits are occupying an area and whether or not the player is. lock the corresponding barrier when the area is occupied by a spirit and not the player
Level2Spirit: freeze when hit with ice bullet, grabbable when frozen. kinetic friction when frozen.

change map format from "background" layer to floor layer

Game: start game at level2
loadGameStart(): initialize saveState
only apply room-blanking if crntRoom is not null