X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=14a2fdcd4d17d4fb9c3478ce9383303c7fe14986;hb=d7d166dc3cd287276202e862746208892c4cc89f;hp=4b0bffce46977c3e721a484dd314fb764ceff52a;hpb=ed44a0d5d95ad910ffdec33aca95bd71481f9b62;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 4b0bffc..14a2fdc 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -861,7 +861,7 @@ begin gPlayers[a].FNoRespawn := utils.readBool(st); // Íàïðàâëåíèå b := utils.readByte(st); - if b = 1 then gPlayers[a].FDirection := D_LEFT else gPlayers[a].FDirection := D_RIGHT; // b = 2 + if b = 1 then gPlayers[a].FDirection := TDirection.D_LEFT else gPlayers[a].FDirection := TDirection.D_RIGHT; // b = 2 // Çäîðîâüå gPlayers[a].FHealth := utils.readLongInt(st); // Æèçíè @@ -1800,10 +1800,10 @@ begin a.X := Obj.Rect.X+(Obj.Rect.Width div 2); a.y := Obj.Rect.Y+(Obj.Rect.Height div 2); - e_DrawAdv(ID, Obj.X, Obj.Y, 0, True, False, RAngle, @a, M_NONE); + e_DrawAdv(ID, Obj.X, Obj.Y, 0, True, False, RAngle, @a, TMirrorType.None); e_Colors := Color; - e_DrawAdv(MaskID, Obj.X, Obj.Y, 0, True, False, RAngle, @a, M_NONE); + e_DrawAdv(MaskID, Obj.X, Obj.Y, 0, True, False, RAngle, @a, TMirrorType.None); e_Colors.R := 255; e_Colors.G := 255; e_Colors.B := 255; @@ -1831,7 +1831,7 @@ begin a.X := CX; a.Y := CY; - e_DrawAdv(SpriteID, Obj.X, Obj.Y, 0, True, False, RAngle, @a, M_NONE); + e_DrawAdv(SpriteID, Obj.X, Obj.Y, 0, True, False, RAngle, @a, TMirrorType.None); end; end; @@ -2258,7 +2258,7 @@ var Rw, Gw, Bw: SmallInt; Dot: Byte; begin - bubX := FObj.X+FObj.Rect.X + IfThen(FDirection = D_LEFT, -4, 18); + bubX := FObj.X+FObj.Rect.X + IfThen(FDirection = TDirection.D_LEFT, -4, 18); bubY := FObj.Y+FObj.Rect.Y - 18; Rb := 64; Gb := 64; @@ -2302,10 +2302,10 @@ begin 4: // custom textured bubble begin if g_Texture_Get('TEXTURE_PLAYER_TALKBUBBLE', ID) then - if FDirection = D_RIGHT then + if FDirection = TDirection.D_RIGHT then e_Draw(ID, bubX - 6, bubY - 7, 0, True, False) else - e_Draw(ID, bubX - 6, bubY - 7, 0, True, False, M_HORIZONTAL); + e_Draw(ID, bubX - 6, bubY - 7, 0, True, False, TMirrorType.Horizontal); Exit; end; end; @@ -2317,12 +2317,12 @@ begin e_DrawFillQuad(bubX + 1, bubY + 1, bubX + 18, bubY + 12, Rw, Gw, Bw, 0); // Tail - Dot := IfThen(FDirection = D_LEFT, 14, 5); + Dot := IfThen(FDirection = TDirection.D_LEFT, 14, 5); e_DrawLine(1, bubX + Dot, bubY + 14, bubX + Dot, bubY + 16, Rb, Gb, Bb); - e_DrawLine(1, bubX + IfThen(FDirection = D_LEFT, Dot - 1, Dot + 1), bubY + 13, bubX + IfThen(FDirection = D_LEFT, Dot - 1, Dot + 1), bubY + 15, Rw, Gw, Bw); - e_DrawLine(1, bubX + IfThen(FDirection = D_LEFT, Dot - 2, Dot + 2), bubY + 13, bubX + IfThen(FDirection = D_LEFT, Dot - 2, Dot + 2), bubY + 14, Rw, Gw, Bw); - e_DrawLine(1, bubX + IfThen(FDirection = D_LEFT, Dot - 3, Dot + 3), bubY + 13, bubX + IfThen(FDirection = D_LEFT, Dot - 3, Dot + 3), bubY + 13, Rw, Gw, Bw); - e_DrawLine(1, bubX + IfThen(FDirection = D_LEFT, Dot - 3, Dot + 3), bubY + 14, bubX + IfThen(FDirection = D_LEFT, Dot - 1, Dot + 1), bubY + 16, Rb, Gb, Bb); + e_DrawLine(1, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 1, Dot + 1), bubY + 13, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 1, Dot + 1), bubY + 15, Rw, Gw, Bw); + e_DrawLine(1, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 2, Dot + 2), bubY + 13, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 2, Dot + 2), bubY + 14, Rw, Gw, Bw); + e_DrawLine(1, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 3, Dot + 3), bubY + 13, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 3, Dot + 3), bubY + 13, Rw, Gw, Bw); + e_DrawLine(1, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 3, Dot + 3), bubY + 14, bubX + IfThen(FDirection = TDirection.D_LEFT, Dot - 1, Dot + 1), bubY + 16, Rb, Gb, Bb); // Dots Dot := 6; @@ -2343,7 +2343,7 @@ begin if g_Texture_Get('TEXTURE_PLAYER_INVULPENTA', ID) then begin e_GetTextureSize(ID, @w, @h); - if FDirection = D_LEFT then + if FDirection = TDirection.D_LEFT then e_Draw(ID, FObj.X+FObj.Rect.X+(FObj.Rect.Width div 2)-(w div 2)+4, FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7+FObj.slopeUpLeft, 0, True, False) else @@ -2416,7 +2416,7 @@ var angle: SmallInt; sz, len: Word; begin - wx := FObj.X + WEAPONPOINT[FDirection].X + IfThen(FDirection = D_LEFT, 7, -7); + wx := FObj.X + WEAPONPOINT[FDirection].X + IfThen(FDirection = TDirection.D_LEFT, 7, -7); wy := FObj.Y + WEAPONPOINT[FDirection].Y; angle := FAngle; len := 1024; @@ -2711,7 +2711,7 @@ begin if dr then e_DrawFillQuad(0, 0, gPlayerScreenSize.X-1, gPlayerScreenSize.Y-1, - 191, 191, 191, 0, B_INVERT); + 191, 191, 191, 0, TBlending.Invert); end; // Ïðè âçÿòèè çàùèòíîãî êîñòþìà ðèñóåòñÿ çåëåíîâàòûé ôîí @@ -2724,14 +2724,14 @@ begin if dr then e_DrawFillQuad(0, 0, gPlayerScreenSize.X-1, gPlayerScreenSize.Y-1, - 0, 96, 0, 200, B_NONE); + 0, 96, 0, 200, TBlending.None); end; // Ïðè âçÿòèè áåðñåðêà ðèñóåòñÿ êðàñíîâàòûé ôîí if (FBerserk >= 0) and (LongWord(FBerserk) >= gTime) and (gFlash = 2) then begin e_DrawFillQuad(0, 0, gPlayerScreenSize.X-1, gPlayerScreenSize.Y-1, - 255, 0, 0, 200, B_NONE); + 255, 0, 0, 200, TBlending.None); end; end; @@ -2796,7 +2796,7 @@ begin f := False; wx := FObj.X+WEAPONPOINT[FDirection].X; wy := FObj.Y+WEAPONPOINT[FDirection].Y; - xd := wx+IfThen(FDirection = D_LEFT, -30, 30); + xd := wx+IfThen(FDirection = TDirection.D_LEFT, -30, 30); yd := wy+firediry(); case FCurrWeap of @@ -4407,7 +4407,7 @@ begin FObj.Accel.Y := 0; FDirection := RespawnPoint.Direction; - if FDirection = D_LEFT then + if FDirection = TDirection.D_LEFT then FAngle := 180 else FAngle := 0; @@ -4523,7 +4523,7 @@ begin FlySmoke(); // Áåæèì: - if Direction = D_LEFT then + if Direction = TDirection.D_LEFT then begin if FObj.Vel.X > -MAX_RUNVEL then FObj.Vel.X := FObj.Vel.X - (MAX_RUNVEL shr 3); @@ -4564,7 +4564,7 @@ procedure TPlayer.SeeDown(); begin SetAction(A_SEEDOWN); - if FDirection = D_LEFT then FAngle := ANGLE_LEFTDOWN else FAngle := ANGLE_RIGHTDOWN; + if FDirection = TDirection.D_LEFT then FAngle := ANGLE_LEFTDOWN else FAngle := ANGLE_RIGHTDOWN; if FIncCam > -120 then DecMin(FIncCam, 5, -120); end; @@ -4573,7 +4573,7 @@ procedure TPlayer.SeeUp(); begin SetAction(A_SEEUP); - if FDirection = D_LEFT then FAngle := ANGLE_LEFTUP else FAngle := ANGLE_RIGHTUP; + if FDirection = TDirection.D_LEFT then FAngle := ANGLE_LEFTUP else FAngle := ANGLE_RIGHTUP; if FIncCam < 120 then IncMax(FIncCam, 5, 120); end; @@ -4661,26 +4661,26 @@ begin begin if dir = 1 then begin - SetDirection(D_LEFT); + SetDirection(TDirection.D_LEFT); FAngle := 180; end else if dir = 2 then begin - SetDirection(D_RIGHT); + SetDirection(TDirection.D_RIGHT); FAngle := 0; end else if dir = 3 then begin // îáðàòíîå - if FDirection = D_RIGHT then + if FDirection = TDirection.D_RIGHT then begin - SetDirection(D_LEFT); + SetDirection(TDirection.D_LEFT); FAngle := 180; end else begin - SetDirection(D_RIGHT); + SetDirection(TDirection.D_RIGHT); FAngle := 0; end; end; @@ -4744,7 +4744,7 @@ begin if FAlive and (gFly or FJetpack) then FlySmoke(); - if FDirection = D_LEFT then + if FDirection = TDirection.D_LEFT then FAngle := 180 else FAngle := 0; @@ -4775,9 +4775,9 @@ begin if (FObj.Vel.X = 0) and FAlive then begin if FKeys[KEY_LEFT].Pressed then - Run(D_LEFT); + Run(TDirection.D_LEFT); if FKeys[KEY_RIGHT].Pressed then - Run(D_RIGHT); + Run(TDirection.D_RIGHT); end; if FPhysics then @@ -4794,8 +4794,8 @@ begin if FAlive then begin // Let alive player do some actions - if FKeys[KEY_LEFT].Pressed then Run(D_LEFT); - if FKeys[KEY_RIGHT].Pressed then Run(D_RIGHT); + if FKeys[KEY_LEFT].Pressed then Run(TDirection.D_LEFT); + if FKeys[KEY_RIGHT].Pressed then Run(TDirection.D_RIGHT); //if FKeys[KEY_NEXTWEAPON].Pressed and AnyServer then NextWeapon(); //if FKeys[KEY_PREVWEAPON].Pressed and AnyServer then PrevWeapon(); if FKeys[KEY_FIRE].Pressed and AnyServer then Fire(); @@ -4995,7 +4995,7 @@ begin begin wx := FObj.X+WEAPONPOINT[FDirection].X; wy := FObj.Y+WEAPONPOINT[FDirection].Y; - xd := wx+IfThen(FDirection = D_LEFT, -30, 30); + xd := wx+IfThen(FDirection = TDirection.D_LEFT, -30, 30); yd := wy+firediry(); g_Weapon_bfgshot(wx, wy, xd, yd, FUID); if NetServer then MH_SEND_PlayerFire(FUID, WEAPON_BFG, wx, wy, xd, yd); @@ -5664,7 +5664,7 @@ begin // Èçðàñõîäîâàë ëè âñå æèçíè utils.writeBool(st, FNoRespawn); // Íàïðàâëåíèå - if FDirection = D_LEFT then b := 1 else b := 2; // D_RIGHT + if FDirection = TDirection.D_LEFT then b := 1 else b := 2; // D_RIGHT utils.writeInt(st, Byte(b)); // Çäîðîâüå utils.writeInt(st, LongInt(FHealth)); @@ -5767,7 +5767,7 @@ begin FNoRespawn := utils.readBool(st); // Íàïðàâëåíèå b := utils.readByte(st); - if b = 1 then FDirection := D_LEFT else FDirection := D_RIGHT; // b = 2 + if b = 1 then FDirection := TDirection.D_LEFT else FDirection := TDirection.D_RIGHT; // b = 2 // Çäîðîâüå FHealth := utils.readLongInt(st); // Æèçíè @@ -6193,12 +6193,12 @@ begin Exit; if FAnimation <> nil then - FAnimation.Draw(FObj.X, FObj.Y, M_NONE); + FAnimation.Draw(FObj.X, FObj.Y, TMirrorType.None); if FAnimationMask <> nil then begin e_Colors := FColor; - FAnimationMask.Draw(FObj.X, FObj.Y, M_NONE); + FAnimationMask.Draw(FObj.X, FObj.Y, TMirrorType.None); e_Colors.R := 255; e_Colors.G := 255; e_Colors.B := 255; @@ -6585,16 +6585,16 @@ begin if (Healthy() = 3) or ((Healthy() = 2)) then begin // Åñëè çäîðîâû - äîãîíÿåì - if ((RunDirection() = D_LEFT) and (Target.X > FObj.X)) then + if ((RunDirection() = TDirection.D_LEFT) and (Target.X > FObj.X)) then SetAIFlag('GORIGHT', '1'); - if ((RunDirection() = D_RIGHT) and (Target.X < FObj.X)) then + if ((RunDirection() = TDirection.D_RIGHT) and (Target.X < FObj.X)) then SetAIFlag('GOLEFT', '1'); end else begin // Åñëè ïîáèòû - óáåãàåì - if ((RunDirection() = D_LEFT) and (Target.X < FObj.X)) then + if ((RunDirection() = TDirection.D_LEFT) and (Target.X < FObj.X)) then SetAIFlag('GORIGHT', '1'); - if ((RunDirection() = D_RIGHT) and (Target.X > FObj.X)) then + if ((RunDirection() = TDirection.D_RIGHT) and (Target.X > FObj.X)) then SetAIFlag('GOLEFT', '1'); end; @@ -6613,17 +6613,17 @@ begin begin // Öåëü ñáåæàëà ñ "ýêðàíà" if (Healthy() = 3) or ((Healthy() = 2)) then begin // Åñëè çäîðîâû - äîãîíÿåì - if ((RunDirection() = D_LEFT) and (Target.X > FObj.X)) then + if ((RunDirection() = TDirection.D_LEFT) and (Target.X > FObj.X)) then SetAIFlag('GORIGHT', '1'); - if ((RunDirection() = D_RIGHT) and (Target.X < FObj.X)) then + if ((RunDirection() = TDirection.D_RIGHT) and (Target.X < FObj.X)) then SetAIFlag('GOLEFT', '1'); end else begin // Åñëè ïîáèòû - çàáûâàåì î öåëè è óáåãàåì Target.UID := 0; - if ((RunDirection() = D_LEFT) and (Target.X < FObj.X)) then + if ((RunDirection() = TDirection.D_LEFT) and (Target.X < FObj.X)) then SetAIFlag('GORIGHT', '1'); - if ((RunDirection() = D_RIGHT) and (Target.X > FObj.X)) then + if ((RunDirection() = TDirection.D_RIGHT) and (Target.X > FObj.X)) then SetAIFlag('GOLEFT', '1'); end; end @@ -6635,15 +6635,15 @@ begin // Åñëè ðàçíèöà âûñîò íå âåëèêà, òî äîãîíÿåì: if (Abs(FObj.Y-Target.Y) <= 128) then begin - if ((RunDirection() = D_LEFT) and (Target.X > FObj.X)) then + if ((RunDirection() = TDirection.D_LEFT) and (Target.X > FObj.X)) then SetAIFlag('GORIGHT', '1'); - if ((RunDirection() = D_RIGHT) and (Target.X < FObj.X)) then + if ((RunDirection() = TDirection.D_RIGHT) and (Target.X < FObj.X)) then SetAIFlag('GOLEFT', '1'); end; end; // Âûáèðàåì óãîë ââåðõ: - if FDirection = D_LEFT then + if FDirection = TDirection.D_LEFT then angle := ANGLE_LEFTUP else angle := ANGLE_RIGHTUP; @@ -6663,7 +6663,7 @@ begin end; // Âûáèðàåì óãîë âíèç: - if FDirection = D_LEFT then + if FDirection = TDirection.D_LEFT then angle := ANGLE_LEFTDOWN else angle := ANGLE_RIGHTDOWN; @@ -6688,8 +6688,8 @@ begin (y1-4 > Target.Y+Target.Rect.Y) then begin // Åñëè èäåì â ñòîðîíó öåëè, òî íàäî ñòðåëÿòü: - if ((FDirection = D_LEFT) and (Target.X < FObj.X)) or - ((FDirection = D_RIGHT) and (Target.X > FObj.X)) then + if ((FDirection = TDirection.D_LEFT) and (Target.X < FObj.X)) or + ((FDirection = TDirection.D_RIGHT) and (Target.X > FObj.X)) then begin // òî íóæíî ñòðåëÿòü âïåðåä SetAIFlag('NEEDFIRE', '1'); SetAIFlag('NEEDSEEDOWN', ''); @@ -6741,7 +6741,7 @@ begin SetAIFlag('NEEDJUMP', '1'); - if RunDirection() = D_RIGHT then + if RunDirection() = TDirection.D_RIGHT then begin // Èäåì íå â òó ñòîðîíó if (Healthy() > 1) and GetRnd(FDifficult.InvisFire) then begin // Åñëè çäîðîâû, òî, âîçìîæíî, ñòðåëÿåì áåæèì âëåâî è ñòðåëÿåì @@ -6764,7 +6764,7 @@ begin SetAIFlag('NEEDJUMP', '1'); - if RunDirection() = D_LEFT then + if RunDirection() = TDirection.D_LEFT then begin // Èäåì íå â òó ñòîðîíó if (Healthy() > 1) and GetRnd(FDifficult.InvisFire) then begin // Åñëè çäîðîâû, òî, âîçìîæíî, áåæèì âïðàâî è ñòðåëÿåì @@ -6793,7 +6793,7 @@ begin if GetRnd(FDifficult.DiagFire) then begin // Èùåì öåëü ñâåðõó è ñòðåëÿåì, åñëè åñòü: - if FDirection = D_LEFT then + if FDirection = TDirection.D_LEFT then angle := ANGLE_LEFTUP else angle := ANGLE_RIGHTUP; @@ -6812,7 +6812,7 @@ begin end; // Èùåì öåëü ñíèçó è ñòðåëÿåì, åñëè åñòü: - if FDirection = D_LEFT then + if FDirection = TDirection.D_LEFT then angle := ANGLE_LEFTDOWN else angle := ANGLE_RIGHTDOWN; @@ -6833,8 +6833,8 @@ begin // Åñëè öåëü "ïåðåä íîñîì", òî ñòðåëÿåì: if targets[a].Line and targets[a].Visible and - (((FDirection = D_LEFT) and (targets[a].X < FObj.X)) or - ((FDirection = D_RIGHT) and (targets[a].X > FObj.X))) then + (((FDirection = TDirection.D_LEFT) and (targets[a].X < FObj.X)) or + ((FDirection = TDirection.D_RIGHT) and (targets[a].X > FObj.X))) then begin SetAIFlag('NEEDFIRE', '1'); Break; @@ -6985,7 +6985,7 @@ procedure TBot.UpdateMove; ReleaseKey(KEY_LEFT); ReleaseKey(KEY_RIGHT); PressKey(KEY_LEFT, Time); - SetDirection(D_LEFT); + SetDirection(TDirection.D_LEFT); end; procedure GoRight(Time: Word = 1); @@ -6993,7 +6993,7 @@ procedure TBot.UpdateMove; ReleaseKey(KEY_LEFT); ReleaseKey(KEY_RIGHT); PressKey(KEY_RIGHT, Time); - SetDirection(D_RIGHT); + SetDirection(TDirection.D_RIGHT); end; function Rnd(a: Word): Boolean; @@ -7003,7 +7003,7 @@ procedure TBot.UpdateMove; procedure Turn(Time: Word = 1200); begin - if RunDirection() = D_LEFT then GoRight(Time) else GoLeft(Time); + if RunDirection() = TDirection.D_LEFT then GoRight(Time) else GoLeft(Time); end; procedure Stop(); @@ -7024,7 +7024,7 @@ procedure TBot.UpdateMove; function CanRun(): Boolean; begin - if RunDirection() = D_LEFT then Result := CanRunLeft() else Result := CanRunRight(); + if RunDirection() = TDirection.D_LEFT then Result := CanRunLeft() else Result := CanRunRight(); end; procedure Jump(Time: Word = 30); @@ -7037,7 +7037,7 @@ procedure TBot.UpdateMove; x, sx: Integer; begin { TODO 5 : Ëåñòíèöû } - sx := IfThen(RunDirection() = D_LEFT, -1, 1); + sx := IfThen(RunDirection() = TDirection.D_LEFT, -1, 1); for x := 1 to PLAYER_RECT.Width do if (not StayOnStep(x*sx, 0)) and (not CollideLevel(x*sx, PLAYER_RECT.Height)) and @@ -7055,7 +7055,7 @@ procedure TBot.UpdateMove; x, sx, xx: Integer; begin { TODO 5 : Ëåñòíèöû } - sx := IfThen(RunDirection() = D_LEFT, -1, 1); + sx := IfThen(RunDirection() = TDirection.D_LEFT, -1, 1); for x := 1 to PLAYER_RECT.Width do if (not StayOnStep(x*sx, 0)) and (not CollideLevel(x*sx, PLAYER_RECT.Height)) and @@ -7078,7 +7078,7 @@ procedure TBot.UpdateMove; begin Result := False; - sx := IfThen(RunDirection() = D_LEFT, -1, 1); + sx := IfThen(RunDirection() = TDirection.D_LEFT, -1, 1); y := 3; for x := 1 to PLAYER_RECT.Width do @@ -7124,18 +7124,18 @@ procedure TBot.UpdateMove; function BelowLadder(): Boolean; begin - Result := (FullInStep(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height) and - not CollideLevel(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height)) or - (FullInStep(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP) and - not CollideLevel(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP)); + Result := (FullInStep(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height) and + not CollideLevel(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height)) or + (FullInStep(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP) and + not CollideLevel(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP)); end; function BelowLiftUp(): Boolean; begin - Result := ((FullInLift(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height) = -1) and - not CollideLevel(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height)) or - ((FullInLift(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP) = -1) and - not CollideLevel(IfThen(RunDirection() = D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP)); + Result := ((FullInLift(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height) = -1) and + not CollideLevel(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -PLAYER_RECT.Height)) or + ((FullInLift(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP) = -1) and + not CollideLevel(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*(PLAYER_RECT.Width div 2), -BOT_MAXJUMP)); end; function OnTopLift(): Boolean; @@ -7147,7 +7147,7 @@ procedure TBot.UpdateMove; var sx, y: Integer; begin - sx := IfThen(RunDirection() = D_LEFT, -1, 1); + sx := IfThen(RunDirection() = TDirection.D_LEFT, -1, 1); Result := False; @@ -7313,7 +7313,7 @@ begin // Åñëè íà çåìëå è ìîæíî ïîäïðûãíóòü, òî, âîçìîæíî, ïðûãàåì: if OnGround() and - CanJumpUp(IfThen(RunDirection() = D_LEFT, -1, 1)*32) and + CanJumpUp(IfThen(RunDirection() = TDirection.D_LEFT, -1, 1)*32) and Rnd(8) then Jump(); @@ -7492,7 +7492,7 @@ function TBot.RunDirection(): TDirection; begin if Abs(Vel.X) >= 1 then begin - if Vel.X > 0 then Result := D_RIGHT else Result := D_LEFT; + if Vel.X > 0 then Result := TDirection.D_RIGHT else Result := TDirection.D_LEFT; end else Result := FDirection; end;