--- mario-orig/players.pas Sat Jul 24 16:00:00 1999 +++ mario/players.pas Wed Jan 17 22:58:28 2001 @@ -122,6 +122,7 @@ AtCh2, Below1, Below2: Char; + YAccel: Integer; procedure HighMirror (P1, P2: Pointer); @@ -203,6 +204,7 @@ OldY := Y; XVel := 0; YVel := 0; + YAccel := 0; Direction := dirRight; WalkingMode := 0; Status := stOnTheGround; @@ -545,10 +547,12 @@ if not Jumped then if keyAlt or HitEnemy then begin + YAccel := 1; Counter := 0; Status := stJumping; - HighJump := (Abs (XVel) = 2) or (HitEnemy and keyAlt); - YVel := - JumpVel - 2 * Byte (HitEnemy and keyAlt) - Byte (Turbo); + {HighJump := (Abs (XVel) = 2) or (HitEnemy and keyAlt);} + HighJump := True; + YVel := - JumpVel + 1 {- 2} {* Byte (HitEnemy and keyAlt)} {- 1}{Byte (Turbo)}; end; cdEnemy := 0; end; @@ -691,10 +695,22 @@ case NewCh2 of '*': HitCoin (NewX * W, NewY * H, False); end; - if (Counter mod (JumpDelay + Byte(HighJump)) = 0) or - ((not keyAlt) and (not HitEnemy)) - then + if (Counter mod (JumpDelay + Byte(HighJump)) = 0) then Inc (YVel); + if ((Counter mod (JumpDelay div 2)) = ((JumpDelay div 2) - 1)) + {if (Counter mod (JumpDelay + Byte(HighJump)) = 0) or + ((not keyAlt) and (not HitEnemy))} + then + begin + if ((not keyAlt) and (YAccel < 4)) then + YVel := YVel - 1; + end; + if ((Counter mod JumpDelay) = (JumpDelay - 1)) then + begin + if (keyAlt) then + YVel := YVel + YAccel; + YAccel := YAccel + 2; + end; if YVel >= 0 then begin YVel := 0;