Прыжок в оригинале чувствовался как-то не очень отзывчево.Надо поправить.
Откроем АСМ код.Перейдем к Obj09_InAir.
Заменим строку:
BSR . W nullsub_2
на:
BSR . W Obj09_JumpHeight
Если в данный момент скомпилировать,то компилятор нам выдаст ошибку.
Потому что в коде нет Obj09_JumpHeight.
Надо найти nullsub_2.Там код примерно такой:
nullsub_2: ; XREF: Obj09_InAir
rts
; End of function nullsub_2
; ===========================================================================
; ---------------------------------------------------------------------------
; unused subroutine to limit Sonic's upward vertical speed
; ---------------------------------------------------------------------------
move.w #-$400,d1
cmp.w $12(a0),d1
ble.s locret_1BBB4
move.b ($FFFFF602).w,d0
andi.b #$70,d0
bne.s locret_1BBB4
move.w d1,$12(a0)
locret_1BBB4:
rtsТак как у нас нет ссылки больше на эту процедуру,заменим её на:
; ===========================================================================
; ---------------------------------------------------------------------------
; Subroutine to limit Sonic's upward vertical speed
; ---------------------------------------------------------------------------
Obj09_JumpHeight: ; XREF: Obj09_InAir
move.b ($FFFFF602).w,d0 ; Кнопка прыжка нажата?
andi.b #$70,d0
bne.s locret_1BBB4 ; Если нет,переходим
btst #7,$22(a0) ; did Sonic jump or is he just falling or hit by a bumper?
beq.s locret_1BBB4 ; if not, branch to return
move.b ($FFFFF780).w,d0 ; get SS angle
andi.b #$FC,d0
neg.b d0
subi.b #$40,d0
jsr (CalcSine).l
move.w $12(a0),d2 ; Y скорость
muls.w d2,d0 ; multiply Y speed by sin
asr.l #8,d0 ; find the new Y speed
move.w $10(a0),d2 ; X скорость
muls.w d2,d1 ; multiply X speed by cos
asr.l #8,d1 ; find the new X speed
add.w d0,d1 ; combine the two speeds
cmpi.w #$400,d1 ; compare the combined speed with the jump release speed
ble.s locret_1BBB4 ; if it's less, branch to return
move.b ($FFFFF780).w,d0
andi.b #$FC,d0
neg.b d0
subi.b #$40,d0
jsr (CalcSine).l
muls.w #$400,d1
asr.l #8,d1
move.w d1,$10(a0)
muls.w #$400,d0
asr.l #8,d0
move.w d0,$12(a0) ; set the speed to the jump release speed
bclr #7,$22(a0) ; Очистить флаг "Соник прыгнул"
locret_1BBB4:
rtsТеперь подправим баги.Для этого найдем Obj09_OnWall.СРАЗУ после этой строки добавим эту:
bclr #7,$22(a0) ; clear "Sonic has jumped" flag
Также пройдем на Obj09_Jump.Найдем строку :
bset #1,$22(a0)
добавим после неё:
bset #7,$22(a0) ; set "Sonic has jumped" flag
.
И наконец последнее.Перейдем на Obj09_ChkBumper.Найдем строку :
bset #1,$22(a0)
добавим после неё:
bclr #7,$22(a0) ; set "Sonic has jumped" flag
.
Все физика изменена.