The thing that scares me most about your code is that you seem to have multiple things moving the state to the next level. In case 0, both the music play: self and the (= seconds 4) will increment the state.
In case 1, you also have this FadeCode thing... I dunno what that is, but you pass self to it, so I assume it cues the RoomScript too at some point.
I dunno if either of these things are actually problems, but they are very suspicious to me.
(method (changeState newState &tmp temp0 [temp1 10])
(switch (= state newState)
(0
(gMusic1
number: 1001
loop: 1
play: self
)
(sparkle init: posn: 185 42)
(= seconds 4)
)
; Wait 4 seconds before going to the next state.
(1
(FadeCode init: 100 1 self)
(if (and
(< (gMusic1 prevSignal?) 20)
(!= (gMusic1 prevSignal?) -1)
)
(-- state)
)
(= cycles 1)
)
(2
(sparkle setCycle: EndLoop self)
)
(3
(if (and
(< (gMusic1 prevSignal?) 30)
(!= (gMusic1 prevSignal?) -1)
)
(-- state)
)
(= cycles 1)
)
(4
(sparkle posn: 79 133 loop: 1 cel: 0 setCycle: EndLoop self)
)
(5 (= seconds 3))
(6
(gMusic1 stop:)
(sparkle hide:)
(= cyclePalette FALSE)
(= cycles 5)
)
(7
(sparkle dispose:)
(DrawPic 501 dpOPEN_FADEPALETTE dpNO_CLEAR)
(= seconds 1)
)
(8
(Fanfare play:)
(= cycles 1)
)
(9
(if (== (Fanfare prevSignal?) 10)
(One init: setCycle: EndLoop self)
else
(-- state)
(= cycles 1)
)
)
)
)