*(Original guide by redhotsonic)*

Quote from *redhotsonic* - "The problem here is when you and Tails enter the water, your speed, acceleration and deceleration are decreased, to give you the underwater physics. The problem is, if you lose Tails when underwater, when he next respawns (in Sonic 2, he only respawns when you've come out of water), he will still have his underwater speeds. Hence why Tails suddenly cannot keep up. This bug only occurs when you lose Tails underwater, and his underwater speed will remain this way until he enters/exits water again (no matter how many times you lose him and he respawns)."

This can be done in **Xenowhirl's 2007 disassembly** or the **SVN disassembly**.

First, Go to "loc_1BC68:" and you'll see this:

```
loc_1BC68:
lea (Sonic_Stat_Record_Buf).w,a2
move.b 2(a2,d3.w),d2
andi.b #$D2,d2
bne.s return_1BCDE
or.w d0,d1
bne.s return_1BCDE
; etc...
```

Right after the 2nd "bne.s return_1BCDE" command, insert this:

```
move.w #$600,(Tails_top_speed).w ; set Tails' top speed
move.w #$C,(Tails_acceleration).w ; set Tails' acceleration
move.w #$80,(Tails_deceleration).w ; set Tails' deceleration
```

So, you have something like this:

```
loc_1BC68: ; Fix for Tails' underwater respawn
lea (Sonic_Stat_Record_Buf).w,a2
move.b 2(a2,d3.w),d2
andi.b #$D2,d2
bne.s return_1BCDE
or.w d0,d1
bne.s return_1BCDE
move.w #$600,(Tails_top_speed).w ; set Tails' top speed
move.w #$C,(Tails_acceleration).w ; set Tails' acceleration
move.w #$80,(Tails_deceleration).w ; set Tails' deceleration
; etc...
```

Done! Now Tails' respawn speeds are fixed, and when respawning after being lost underwater, he will move and behave normally! Now that was easy, but wait... are you hacking Sonic 3K also? Oh.. you are? Well then, there's more!

The bug is NOT fixed in S3K either, but to fix it, you have to do an extra check, so follow this S3K fix!
This can be done in the **SVN disassembly**.

Go to "loc_13CD2:" and you'll see this:

```
loc_13CD2:
lea (Stat_table).w,a2
move.b 2(a2,d3.w),d2
andi.b #$80,d2
bne.s loc_13D42
or.w d0,d1
bne.s loc_13D42
; etc...
```

Right after the 2nd "bne.s loc_13D42" command, insert this:

```
btst #6,$2A(a0) ; is Tails underwater?
bne.s .underwater ; if so, branch
move.w #$600,($FFFFFEC0).w ; set Tails' top speed
move.w #$C,($FFFFFEC2).w ; set Tails' acceleration
move.w #$80,($FFFFFEC4).w ; set Tails' deceleration
.underwater:
```

So, you have something like this:

```
loc_13CD2: ; Fix for Tails' underwater respawn
lea (Stat_table).w,a2
move.b 2(a2,d3.w),d2
andi.b #$80,d2
bne.s loc_13D42
or.w d0,d1
bne.s loc_13D42
btst #6,$2A(a0) ; is Tails underwater?
bne.s .underwater ; if so, branch
move.w #$600,($FFFFFEC0).w ; set Tails' top speed
move.w #$C,($FFFFFEC2).w ; set Tails' acceleration
move.w #$80,($FFFFFEC4).w ; set Tails' deceleration
.underwater:
; etc...
```

AGAIN! Easy! Piece of cake! Now Tails will behave properly.

Tails... oh Tails, what a stupid little fucker... never does anything right, does he? But why??? Why does this bug happen to begin with? RedHotSonic explains this in detail:

Again, quoted from RHS - "Now, when you lose Tails, he goes through lots of commands to move him about and to respawn him on certain conditions. BUT, none of these commands reset Tails' speeds. Because of this, when Tails respawns, he has the exact same speeds as when you lost him. So, if you lose him underwater, when he respawns, he will still have underwater speeds. So, all we've done here is added the command to reset his speeds. So...

In Sonic 2, all we've done is set Tails to use his normal speeds no matter what when he respawns. This is fine because he only respawns when you're not in water, so he will always be out of water when he arrives. So we want his normal speed.

In Sonic 3 and Knuckles, we have to do a check first to see if Tails is respawning in water or not. If not, do not bother resetting the speeds because he's going to spawn in water. On the other hand, if not in water, it will reset to his normal speeds because he's going to respawn out of water."