I ecounter this problem too. because how the game runs the commands in a sequential order: it runs the uberasm code first, then it resets it, (STZ $9D). In my hack, several stuff gets locked while others doesn't (level timer frreeze but not sprites), try using the player animation trigger and set it to #$0B (freeze player) along with storing non-zero value to $9D (it skips the STZ $9D command). but be careful if using a message box, would not work for the first hit (don't worry if using vwf dialog). To avoid that, store #$01 in the message box trigger address when mario is able to move (animation trigger has been reset).
ps: stuff like that happens to timer also, the p-balloon timer blocks, I store #$02, and ingame, it was #$01 using a "show a ram value on a status bar" (from the asm library) the 1st frame mario touches it. It decrements right after the block stores a value in it before the next frame comes. It occors to branching too;
and the branch detects when its #$01 instead due to being decremented before the block able to detect it.
Give thanks to RPG hacker for working on Asar.