


Move.bđ(a1,d1.w),d0 read sprite number from scriptĬmp.b #$FA,d0 MJ: is it a flag from FA to FF?īhsĚnim_End_FF MJ: if so, branch to flag routinesĪs you can see, if the value is from $00 to $F9, it'll continue down to "Anim_Next:", whilst if the value is from $FA to $FF, it'll branch to "Anim_End_FF" to run through the flag routines. Expanded) Sonic (LoonyDude, Sonic 3-Style) Sonic (Mania, Sonic 1-Style) Sonic (Mario-Style). Move.b $1B(a0),d1 load current frame number SONIC THE HEDGEHOG 2 MOVIE SPRITE DC2 DOWNLOAD (PART 1).

Subq.b #1,$1E(a0) subtract 1 from frame durationīpl.sĚnim_Wait if time remains, branchĪdda.w (a1,d0.w),a1 jump to appropriate animation script What's causing this is the sprite counter, the line "move.b (a1)+,d1" will load the "counter" (the "counter" is used to set how many sprites to process in one map list), but it's loading a byte of data, this isn't a problem as that's what we want it to do, but our new "add.w d1,d1" has changed a "word" of data in d1, so the left side of the word is still in d1 and needs to be cleared, adding "moveq #$00,d1" above "move.b (a1)+,d1" will ensure that the register is cleared and ready to use.Īfter the changes the routine should look like this: This will ensure values from $80 to $FC will multiply by 2 properly.īecause we changed that value from byte to word, we have caused a potential (and fatal) error that will cause the game to crash if a sprite map ID from $80 to $FC is set to show. $80 x $02 = $100, only the the right two digits are read $00). What happens here is the map ID is loaded into d1 "move.b $1A(a0),d1", and it is then multiplied by 2 "add.b d1,d1", but this only multiplies a "byte" of data, so map ID's higher than $7F won't multiply properly (e.g.
