diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index 35e8d46a6078d31326c79dc63af187ad03e74d17..81eb17e904044c36be49914f5172380a7b8cbdd6 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
GridTagLift = 1 shl 8; // gLifts
GridTagBlockMon = 1 shl 9; // gBlockMon
GridTagLift = 1 shl 8; // gLifts
GridTagBlockMon = 1 shl 9; // gBlockMon
+ GridTagSolid = (GridTagWall or GridTagDoor);
GridTagObstacle = (GridTagStep or GridTagWall or GridTagDoor);
GridTagLiquid = (GridTagAcid1 or GridTagAcid2 or GridTagWater);
GridTagObstacle = (GridTagStep or GridTagWall or GridTagDoor);
GridTagLiquid = (GridTagAcid1 or GridTagAcid2 or GridTagWater);
begin
// stop if the lift of the right type
result :=
begin
// stop if the lift of the right type
result :=
- ((WordBool(PanelType and PANEL_LIFTUP) and (pan.LiftType = 0)) or
- (WordBool(PanelType and PANEL_LIFTDOWN) and (pan.LiftType = 1)) or
- (WordBool(PanelType and PANEL_LIFTLEFT) and (pan.LiftType = 2)) or
- (WordBool(PanelType and PANEL_LIFTRIGHT) and (pan.LiftType = 3)));
+ ((WordBool(PanelType and PANEL_LIFTUP) and (pan.LiftType = LIFTTYPE_UP)) or
+ (WordBool(PanelType and PANEL_LIFTDOWN) and (pan.LiftType = LIFTTYPE_DOWN)) or
+ (WordBool(PanelType and PANEL_LIFTLEFT) and (pan.LiftType = LIFTTYPE_LEFT)) or
+ (WordBool(PanelType and PANEL_LIFTRIGHT) and (pan.LiftType = LIFTTYPE_RIGHT)));
exit;
end;
result := true; // otherwise, stop anyway, 'cause `forEachAtPoint()` is guaranteed to call this only for correct panels
exit;
end;
result := true; // otherwise, stop anyway, 'cause `forEachAtPoint()` is guaranteed to call this only for correct panels
a, d, j: Integer;
m: Word;
s: String;
a, d, j: Integer;
m: Word;
s: String;
+ b: Byte;
procedure UpdatePanelArray(var panels: TPanelArray);
var
procedure UpdatePanelArray(var panels: TPanelArray);
var
s := _lc[I_PLAYER_FLAG_BLUE];
g_Game_Message(Format(_lc[I_MESSAGE_FLAG_RETURN], [AnsiUpperCase(s)]), 144);
s := _lc[I_PLAYER_FLAG_BLUE];
g_Game_Message(Format(_lc[I_MESSAGE_FLAG_RETURN], [AnsiUpperCase(s)]), 144);
+ if (((gPlayer1 <> nil) and (((gPlayer1.Team = TEAM_RED) and (a = FLAG_RED)) or ((gPlayer1.Team = TEAM_BLUE) and (a = FLAG_BLUE))))
+ or ((gPlayer2 <> nil) and (((gPlayer2.Team = TEAM_RED) and (a = FLAG_RED)) or ((gPlayer2.Team = TEAM_BLUE) and (a = FLAG_BLUE))))) then
+ b := 0
+ else
+ b := 1;
+
+ if not sound_ret_flag[b].IsPlaying() then
+ sound_ret_flag[b].Play();
+
if g_Game_IsNet then
MH_SEND_FlagEvent(FLAG_STATE_RETURNED, a, 0);
Continue;
if g_Game_IsNet then
MH_SEND_FlagEvent(FLAG_STATE_RETURNED, a, 0);
Continue;
h := High(gLifts);
for a := 0 to h do
h := High(gLifts);
for a := 0 to h do
- if ((WordBool(PanelType and (PANEL_LIFTUP)) and (gLifts[a].LiftType = 0)) or
- (WordBool(PanelType and (PANEL_LIFTDOWN)) and (gLifts[a].LiftType = 1)) or
- (WordBool(PanelType and (PANEL_LIFTLEFT)) and (gLifts[a].LiftType = 2)) or
- (WordBool(PanelType and (PANEL_LIFTRIGHT)) and (gLifts[a].LiftType = 3))) and
+ if ((WordBool(PanelType and (PANEL_LIFTUP)) and (gLifts[a].LiftType = LIFTTYPE_UP)) or
+ (WordBool(PanelType and (PANEL_LIFTDOWN)) and (gLifts[a].LiftType = LIFTTYPE_DOWN)) or
+ (WordBool(PanelType and (PANEL_LIFTLEFT)) and (gLifts[a].LiftType = LIFTTYPE_LEFT)) or
+ (WordBool(PanelType and (PANEL_LIFTRIGHT)) and (gLifts[a].LiftType = LIFTTYPE_RIGHT))) and
g_Collide(X, Y, Width, Height,
gLifts[a].X, gLifts[a].Y,
gLifts[a].Width, gLifts[a].Height) then
g_Collide(X, Y, Width, Height,
gLifts[a].X, gLifts[a].Y,
gLifts[a].Width, gLifts[a].Height) then
if ((tag and GridTagLift) <> 0) then
begin
result :=
if ((tag and GridTagLift) <> 0) then
begin
result :=
- ((WordBool(PanelType and PANEL_LIFTUP) and (pan.LiftType = 0)) or
- (WordBool(PanelType and PANEL_LIFTDOWN) and (pan.LiftType = 1)) or
- (WordBool(PanelType and PANEL_LIFTLEFT) and (pan.LiftType = 2)) or
- (WordBool(PanelType and PANEL_LIFTRIGHT) and (pan.LiftType = 3))) {and
+ ((WordBool(PanelType and PANEL_LIFTUP) and (pan.LiftType = LIFTTYPE_UP)) or
+ (WordBool(PanelType and PANEL_LIFTDOWN) and (pan.LiftType = LIFTTYPE_DOWN)) or
+ (WordBool(PanelType and PANEL_LIFTLEFT) and (pan.LiftType = LIFTTYPE_LEFT)) or
+ (WordBool(PanelType and PANEL_LIFTRIGHT) and (pan.LiftType = LIFTTYPE_RIGHT))) {and
g_Collide(X, Y, Width, Height, pan.X, pan.Y, pan.Width, pan.Height)};
exit;
end;
g_Collide(X, Y, Width, Height, pan.X, pan.Y, pan.Width, pan.Height)};
exit;
end;
if ((pan.tag and GridTagLift) <> 0) then
begin
result :=
if ((pan.tag and GridTagLift) <> 0) then
begin
result :=
- ((WordBool(PanelType and PANEL_LIFTUP) and (pan.LiftType = 0)) or
- (WordBool(PanelType and PANEL_LIFTDOWN) and (pan.LiftType = 1)) or
- (WordBool(PanelType and PANEL_LIFTLEFT) and (pan.LiftType = 2)) or
- (WordBool(PanelType and PANEL_LIFTRIGHT) and (pan.LiftType = 3))) {and
+ ((WordBool(PanelType and PANEL_LIFTUP) and (pan.LiftType = LIFTTYPE_UP)) or
+ (WordBool(PanelType and PANEL_LIFTDOWN) and (pan.LiftType = LIFTTYPE_DOWN)) or
+ (WordBool(PanelType and PANEL_LIFTLEFT) and (pan.LiftType = LIFTTYPE_LEFT)) or
+ (WordBool(PanelType and PANEL_LIFTRIGHT) and (pan.LiftType = LIFTTYPE_RIGHT))) {and
g_Collide(X, Y, Width, Height, pan.X, pan.Y, pan.Width, pan.Height)};
end
else if ((pan.tag and GridTagBlockMon) <> 0) then
g_Collide(X, Y, Width, Height, pan.X, pan.Y, pan.Width, pan.Height)};
end
else if ((pan.tag and GridTagBlockMon) <> 0) then
//TODO: make separate lift tags, and change tag here
case LiftType of
//TODO: make separate lift tags, and change tag here
case LiftType of
- 0: g_Mark(X, Y, Width, Height, MARK_LIFTUP);
- 1: g_Mark(X, Y, Width, Height, MARK_LIFTDOWN);
- 2: g_Mark(X, Y, Width, Height, MARK_LIFTLEFT);
- 3: g_Mark(X, Y, Width, Height, MARK_LIFTRIGHT);
+ LIFTTYPE_UP: g_Mark(X, Y, Width, Height, MARK_LIFTUP);
+ LIFTTYPE_DOWN: g_Mark(X, Y, Width, Height, MARK_LIFTDOWN);
+ LIFTTYPE_LEFT: g_Mark(X, Y, Width, Height, MARK_LIFTLEFT);
+ LIFTTYPE_RIGHT: g_Mark(X, Y, Width, Height, MARK_LIFTRIGHT);
end;
//if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(pguid);
end;
//if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(pguid);