diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index e6e0d360227097ccb7a83698395ab0cf4777ca3f..bcad3ca07b1ce6a1cd202e0a9613928ce45ad840 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
uses
SysUtils, Classes,
- mempool,
+ {$IFDEF USE_MEMPOOL}mempool,{$ENDIF}
e_graphics, g_playermodel, g_basic, g_textures,
g_weapons, g_phys, g_sound, g_saveload, MAPDEF,
g_panel;
Time: Word;
end;
- TPlayer = class(TPoolObject)
+ TPlayer = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF}
private
FIamBot: Boolean;
FUID: Word;
procedure positionChanged (); inline; //WARNING! call this after entity position was changed, or coldet will not work right!
end;
- TCorpse = class(TPoolObject)
+ TCorpse = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF}
private
FModelName: String;
FMess: Boolean;
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);
// Æèçíè
procedure g_Bot_Add(Team, Difficult: Byte);
var
- m: SArray;
+ m: SSArray;
_name, _model: String;
a, tr, tb: Integer;
begin
procedure g_Bot_AddList(Team: Byte; lName: ShortString; num: Integer = -1);
var
- m: SArray;
+ m: SSArray;
_name, _model: String;
a: Integer;
begin
s: String;
a, b: Integer;
config: TConfig;
- sa: SArray;
+ sa: SSArray;
begin
BotNames := nil;
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;
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;
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;
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;
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;
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
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;
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;
// Ïðè âçÿòèè çàùèòíîãî êîñòþìà ðèñóåòñÿ çåëåíîâàòûé ôîí
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;
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
@@ -3661,7 +3661,7 @@ function TPlayer.PickItem(ItemType: Byte; arespawn: Boolean; var remove: Boolean
if (FBFGFireCounter <> -1) then begin result := false; exit; end;
result := true;
if gBerserkAutoswitch then exit;
- if not (gDebugMode or gCheats) then exit;
+ if not conIsCheatsEnabled then exit;
result := false;
end;
FObj.Accel.Y := 0;
FDirection := RespawnPoint.Direction;
- if FDirection = D_LEFT then
+ if FDirection = TDirection.D_LEFT then
FAngle := 180
else
FAngle := 0;
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);
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;
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;
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;
if FAlive and (gFly or FJetpack) then
FlySmoke();
- if FDirection = D_LEFT then
+ if FDirection = TDirection.D_LEFT then
FAngle := 180
else
FAngle := 0;
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
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();
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);
// Èçðàñõîäîâàë ëè âñå æèçíè
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));
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);
// Æèçíè
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;
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;
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
// Åñëè ðàçíèöà âûñîò íå âåëèêà, òî äîãîíÿåì:
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;
end;
// Âûáèðàåì óãîë âíèç:
- if FDirection = D_LEFT then
+ if FDirection = TDirection.D_LEFT then
angle := ANGLE_LEFTDOWN
else
angle := ANGLE_RIGHTDOWN;
(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', '');
SetAIFlag('NEEDJUMP', '1');
- if RunDirection() = D_RIGHT then
+ if RunDirection() = TDirection.D_RIGHT then
begin // Èäåì íå â òó ñòîðîíó
if (Healthy() > 1) and GetRnd(FDifficult.InvisFire) then
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 // Åñëè çäîðîâû, òî, âîçìîæíî, áåæèì âïðàâî è ñòðåëÿåì
if GetRnd(FDifficult.DiagFire) then
begin
// Èùåì öåëü ñâåðõó è ñòðåëÿåì, åñëè åñòü:
- if FDirection = D_LEFT then
+ if FDirection = TDirection.D_LEFT then
angle := ANGLE_LEFTUP
else
angle := ANGLE_RIGHTUP;
end;
// Èùåì öåëü ñíèçó è ñòðåëÿåì, åñëè åñòü:
- if FDirection = D_LEFT then
+ if FDirection = TDirection.D_LEFT then
angle := ANGLE_LEFTDOWN
else
angle := ANGLE_RIGHTDOWN;
// Åñëè öåëü "ïåðåä íîñîì", òî ñòðåëÿåì:
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;
ReleaseKey(KEY_LEFT);
ReleaseKey(KEY_RIGHT);
PressKey(KEY_LEFT, Time);
- SetDirection(D_LEFT);
+ SetDirection(TDirection.D_LEFT);
end;
procedure GoRight(Time: Word = 1);
ReleaseKey(KEY_LEFT);
ReleaseKey(KEY_RIGHT);
PressKey(KEY_RIGHT, Time);
- SetDirection(D_RIGHT);
+ SetDirection(TDirection.D_RIGHT);
end;
function Rnd(a: Word): Boolean;
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();
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);
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
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
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
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;
var
sx, y: Integer;
begin
- sx := IfThen(RunDirection() = D_LEFT, -1, 1);
+ sx := IfThen(RunDirection() = TDirection.D_LEFT, -1, 1);
Result := False;
// Åñëè íà çåìëå è ìîæíî ïîäïðûãíóòü, òî, âîçìîæíî, ïðûãàåì:
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();
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;