diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index 20bfa3bf1bee93ff29bc5471cb86a60cf214941a..eb351a0c495808585b3e2f42cb6f51e3333104e1 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
uses
SysUtils, Classes, mempool,
- e_graphics, g_basic, MAPDEF, g_textures,
+ g_base, r_graphics, g_basic, MAPDEF, g_textures,
g_phys, utils, g_panel, g_grid, md5, binheap, xprofiler, xparser, xdynrec;
type
CaptureTime: LongWord;
Animation: TAnimation;
Direction: TDirection;
+ NeedSend: Boolean;
end;
function g_Map_Load(Res: String): Boolean;
function g_Map_PanelByGUID (aguid: Integer): TPanel; inline;
-procedure g_Map_DrawPanels (PanelType: Word; hasAmbient: Boolean; constref ambColor: TDFColor); // unaccelerated
-procedure g_Map_CollectDrawPanels (x0, y0, wdt, hgt: Integer);
-
-procedure g_Map_DrawBack(dx, dy: Integer);
function g_Map_CollidePanel(X, Y: Integer; Width, Height: Word;
PanelType: Word; b1x3: Boolean=false): Boolean;
function g_Map_CollideLiquid_Texture(X, Y: Integer; Width, Height: Word): DWORD;
function g_Map_HaveFlagPoints(): Boolean;
procedure g_Map_ResetFlag(Flag: Byte);
-procedure g_Map_DrawFlags();
procedure g_Map_SaveState (st: TStream);
procedure g_Map_LoadState (st: TStream);
-procedure g_Map_DrawPanelShadowVolumes(lightX: Integer; lightY: Integer; radius: Integer);
-
// returns panel or nil
// sets `ex` and `ey` to `x1` and `y1` when no hit was detected
function g_Map_traceToNearestWall (x0, y0, x1, y1: Integer; hitx: PInteger=nil; hity: PInteger=nil): TPanel;
var
mapGrid: TPanelGrid = nil; // DO NOT USE! public for debugging only!
+var (* private state *)
+ Textures: TLevelTextureArray = nil;
implementation
uses
- {$INCLUDE ../nogl/noGLuses.inc}
- e_input, g_main, e_log, e_texture, e_res, g_items, g_gfx, g_console,
+ e_input, e_log, e_res, g_items, g_gfx, g_console,
g_weapons, g_game, g_sound, e_sound, CONFIG,
- g_options, g_triggers, g_player,
+ g_options, g_triggers, g_player, r_textures, r_animations,
Math, g_monsters, g_saveload, g_language, g_netmsg,
sfs, xstreams, hashtable, wadreader,
- ImagingTypes, Imaging, ImagingUtility,
- ImagingGif, ImagingNetworkGraphics,
g_res_downloader;
const
result := (a.arrIdx < b.arrIdx);
end;
-procedure dplClear ();
-begin
- if (gDrawPanelList = nil) then gDrawPanelList := TBinHeapPanelDraw.Create() else gDrawPanelList.clear();
-end;
-
-
var
- Textures: TLevelTextureArray = nil;
TextNameHash: THashStrInt = nil; // key: texture name; value: index in `Textures`
BadTextNameHash: THashStrInt = nil; // set; so we won't spam with non-existing texture messages
RespawnPoints: array of TRespawnPoint;
if (TextNameHash = nil) then TextNameHash := THashStrInt.Create();
if TextNameHash.get(RecName, result) then exit; // i found her!
- SetLength(Textures, Length(Textures)+1);
- result := High(Textures);
-
- with Textures[High(Textures)] do
- begin
- TextureName := RecName;
- Width := 1;
- Height := 1;
- Anim := False;
- TextureID := LongWord(TEXTURE_NONE);
- end;
-
+ SetLength(Textures, Length(Textures) + 1);
+ Textures[High(Textures)].TextureName := RecName;
+ Textures[High(Textures)].FullName := '';
+ Textures[High(Textures)].Anim := False;
+ Result := High(Textures);
TextNameHash.put(RecName, result);
end;
function CreateTexture (RecName: AnsiString; Map: string; log: Boolean): Integer;
var
WAD: TWADFile;
- TextureData: Pointer;
- WADName: String;
- a, ResLength: Integer;
+ WADName, ResName: String;
+ ResData: Pointer;
+ ResLen: Integer;
begin
RecName := toLowerCase1251(RecName);
if (TextNameHash = nil) then TextNameHash := THashStrInt.Create();
Result := -1;
- if (BadTextNameHash <> nil) and BadTextNameHash.has(RecName) then exit; // don't do it again and again
-
- {
- if Textures <> nil then
- begin
- for a := 0 to High(Textures) do
- begin
- if (Textures[a].TextureName = RecName) then
- begin // Òåêñòóðà ñ òàêèì èìåíåì óæå åñòü
- e_LogWritefln('texture ''%s'' already loaded', [RecName]);
- Result := a;
- Exit;
- end;
- end;
- end;
- }
-
- // Òåêñòóðû ñî ñïåöèàëüíûìè èìåíàìè (âîäà, ëàâà, êèñëîòà):
- if (RecName = TEXTURE_NAME_WATER) or
- (RecName = TEXTURE_NAME_ACID1) or
- (RecName = TEXTURE_NAME_ACID2) then
- begin
- SetLength(Textures, Length(Textures)+1);
-
- with Textures[High(Textures)] do
- begin
- TextureName := RecName;
- if (TextureName = TEXTURE_NAME_WATER) then TextureID := LongWord(TEXTURE_SPECIAL_WATER)
- else if (TextureName = TEXTURE_NAME_ACID1) then TextureID := LongWord(TEXTURE_SPECIAL_ACID1)
- else if (TextureName = TEXTURE_NAME_ACID2) then TextureID := LongWord(TEXTURE_SPECIAL_ACID2);
-
- Anim := False;
- end;
-
- result := High(Textures);
- TextNameHash.put(RecName, result);
- Exit;
- end;
-
- // Çàãðóæàåì ðåñóðñ òåêñòóðû â ïàìÿòü èç WAD'à:
- WADName := GetReplacementWad(g_ExtractWadName(RecName));
- if (WADName <> '') then addResToExternalResList(WADName);
- if WADName = '' then WADName := Map; //WADName := GameDir+'/wads/'+WADName else
-
- WAD := TWADFile.Create();
- WAD.ReadFile(WADName);
-
- //txname := RecName;
- {
- if (WADName = Map) and WAD.GetResource(g_ExtractFilePathName(RecName), TextureData, ResLength) then
- begin
- FreeMem(TextureData);
- RecName := 'COMMON\ALIEN';
- end;
- }
+ if (BadTextNameHash <> nil) and BadTextNameHash.has(RecName) then
+ exit; // don't do it again and again
- if WAD.GetResource(g_ExtractFilePathName(RecName), TextureData, ResLength, log) then
- begin
- SetLength(Textures, Length(Textures)+1);
- if not e_CreateTextureMem(TextureData, ResLength, Textures[High(Textures)].TextureID) then
+ case RecName of
+ TEXTURE_NAME_WATER, TEXTURE_NAME_ACID1, TEXTURE_NAME_ACID2:
begin
- e_WriteLog(Format('Error loading texture %s', [RecName]), TMsgType.Warning);
- SetLength(Textures, Length(Textures)-1);
- result := -1;
- Exit;
- end;
- e_GetTextureSize(Textures[High(Textures)].TextureID, @Textures[High(Textures)].Width, @Textures[High(Textures)].Height);
- FreeMem(TextureData);
- Textures[High(Textures)].TextureName := RecName;
- Textures[High(Textures)].Anim := False;
-
- result := High(Textures);
- TextNameHash.put(RecName, result);
- end
- else // Íåò òàêîãî ðåóñðñà â WAD'å
- begin
- //e_WriteLog(Format('SHIT! Error loading texture %s : %s', [RecName, g_ExtractFilePathName(RecName)]), MSG_WARNING);
- if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create();
- if log and (not BadTextNameHash.get(RecName, a)) then
+ SetLength(Textures, Length(Textures) + 1);
+ Textures[High(Textures)].FullName := RecName;
+ Textures[High(Textures)].TextureName := RecName;
+ Textures[High(Textures)].Anim := False;
+ Result := High(Textures);
+ TextNameHash.put(RecName, result);
+ end
+ else
+ WADName := GetReplacementWad(g_ExtractWadName(RecName));
+ if (WADName <> '') then
+ addResToExternalResList(WADName);
+ if WADName = '' then
+ WADName := Map;
+ ResName := g_ExtractFilePathName(RecName);
+
+ // !!! we have a better way to check that resource exists?
+ WAD := TWADFile.Create();
+ if WAD.ReadFile(WadName) and WAD.GetResource(ResName, ResData, ResLen, log) then
begin
- e_WriteLog(Format('Error loading texture %s', [RecName]), TMsgType.Warning);
- //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
+ FreeMem(ResData);
+ SetLength(Textures, Length(Textures) + 1);
+ Textures[High(Textures)].FullName := WADName + ':' + ResName;
+ Textures[High(Textures)].TextureName := RecName;
+ Textures[High(Textures)].Anim := False;
+ Result := High(Textures);
+ TextNameHash.put(RecName, result);
end;
- BadTextNameHash.put(RecName, -1);
+ WAD.Free;
end;
-
- WAD.Free();
end;
WAD: TWADFile;
TextureWAD: PChar = nil;
TextData: Pointer = nil;
- TextureData: Pointer = nil;
cfg: TConfig = nil;
WADName: String;
ResLength: Integer;
- TextureResource: String;
- _width, _height, _framecount, _speed: Integer;
- _backanimation: Boolean;
- //imgfmt: string;
- ia: TDynImageDataArray = nil;
- f, c, frdelay, frloop: Integer;
+ f: Integer;
begin
RecName := toLowerCase1251(RecName);
if (TextNameHash = nil) then TextNameHash := THashStrInt.Create();
WAD := TWADFile.Create();
try
- //if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map;
-
WAD.ReadFile(WADName);
-
if not WAD.GetResource(g_ExtractFilePathName(RecName), TextureWAD, ResLength, log) then
begin
if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create();
BadTextNameHash.put(RecName, -1);
exit;
end;
-
- {TEST
- if WADName = Map then
- begin
- //FreeMem(TextureWAD);
- if not WAD.GetResource('COMMON/animation', TextureWAD, ResLength) then Halt(1);
- end;
- }
-
WAD.FreeWAD();
- if ResLength < 6 then
+ // íåò, ýòî ñóïåðìåí!
+ if not WAD.ReadMemory(TextureWAD, ResLength) then
begin
- e_WriteLog(Format('Animated texture file "%s" too short', [RecName]), TMsgType.Warning);
+ e_WriteLog(Format('Animated texture WAD file "%s" is invalid', [RecName]), TMsgType.Warning);
BadTextNameHash.put(RecName, -1);
exit;
end;
- // ýòî ïòèöà? ýòî ñàìîë¸ò?
- if isWadData(TextureWAD, ResLength) then
+ // ×èòàåì INI-ðåñóðñ àíèì. òåêñòóðû è çàïîìèíàåì åãî óñòàíîâêè:
+ if not WAD.GetResource('TEXT/ANIM', TextData, ResLength) then
begin
- // íåò, ýòî ñóïåðìåí!
- if not WAD.ReadMemory(TextureWAD, ResLength) then
- begin
- e_WriteLog(Format('Animated texture WAD file "%s" is invalid', [RecName]), TMsgType.Warning);
- BadTextNameHash.put(RecName, -1);
- exit;
- end;
-
- // ×èòàåì INI-ðåñóðñ àíèì. òåêñòóðû è çàïîìèíàåì åãî óñòàíîâêè:
- if not WAD.GetResource('TEXT/ANIM', TextData, ResLength) then
- begin
- e_WriteLog(Format('Animated texture file "%s" has invalid INI', [RecName]), TMsgType.Warning);
- BadTextNameHash.put(RecName, -1);
- exit;
- end;
-
- cfg := TConfig.CreateMem(TextData, ResLength);
-
- TextureResource := cfg.ReadStr('', 'resource', '');
- if TextureResource = '' then
- begin
- e_WriteLog(Format('Animated texture WAD file "%s" has no "resource"', [RecName]), TMsgType.Warning);
- BadTextNameHash.put(RecName, -1);
- exit;
- end;
-
- _width := cfg.ReadInt('', 'framewidth', 0);
- _height := cfg.ReadInt('', 'frameheight', 0);
- _framecount := cfg.ReadInt('', 'framecount', 0);
- _speed := cfg.ReadInt('', 'waitcount', 0);
- _backanimation := cfg.ReadBool('', 'backanimation', False);
+ e_WriteLog(Format('Animated texture file "%s" has invalid INI', [RecName]), TMsgType.Warning);
+ BadTextNameHash.put(RecName, -1);
+ exit;
+ end;
+ WAD.Free();
+ WAD := nil;
+
+ cfg := TConfig.CreateMem(TextData, ResLength);
+ if cfg <> nil then
+ begin
+ SetLength(Textures, Length(Textures) + 1);
+ Textures[High(Textures)].TextureName := RecName;
+ Textures[High(Textures)].FullName := WadName + ':' + g_ExtractFilePathName(RecName);
+ Textures[High(Textures)].Anim := True;
+ Textures[High(Textures)].FramesCount := cfg.ReadInt('', 'framecount', 0);
+ Textures[High(Textures)].Speed := cfg.ReadInt('', 'waitcount', 0);
+ result := High(Textures);
+ TextNameHash.put(RecName, result);
cfg.Free();
cfg := nil;
-
- // ×èòàåì ðåñóðñ òåêñòóð (êàäðîâ) àíèì. òåêñòóðû â ïàìÿòü:
- if not WAD.GetResource('TEXTURES/'+TextureResource, TextureData, ResLength) then
- begin
- e_WriteLog(Format('Animated texture WAD file "%s" has no texture "%s"', [RecName, 'TEXTURES/'+TextureResource]), TMsgType.Warning);
- BadTextNameHash.put(RecName, -1);
- exit;
- end;
-
- WAD.Free();
- WAD := nil;
-
- SetLength(Textures, Length(Textures)+1);
- with Textures[High(Textures)] do
- begin
- // Ñîçäàåì êàäðû àíèì. òåêñòóðû èç ïàìÿòè:
- if g_Frames_CreateMemory(@FramesID, '', TextureData, ResLength, _width, _height, _framecount, _backanimation) then
- begin
- TextureName := RecName;
- Width := _width;
- Height := _height;
- Anim := True;
- FramesCount := _framecount;
- Speed := _speed;
- result := High(Textures);
- TextNameHash.put(RecName, result);
- end
- else
- begin
- if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create();
- if log and (not BadTextNameHash.get(RecName, f)) then
- begin
- e_WriteLog(Format('Error loading animation texture %s', [RecName]), TMsgType.Warning);
- end;
- BadTextNameHash.put(RecName, -1);
- end;
- end;
- end
- else
- begin
- // try animated image
- {
- imgfmt := DetermineMemoryFormat(TextureWAD, ResLength);
- if length(imgfmt) = 0 then
- begin
- e_WriteLog(Format('Animated texture file "%s" has unknown format', [RecName]), MSG_WARNING);
- exit;
- end;
- }
- GlobalMetadata.ClearMetaItems();
- GlobalMetadata.ClearMetaItemsForSaving();
- if not LoadMultiImageFromMemory(TextureWAD, ResLength, ia) then
- begin
- e_WriteLog(Format('Animated texture file "%s" cannot be loaded', [RecName]), TMsgType.Warning);
- BadTextNameHash.put(RecName, -1);
- exit;
- end;
- if length(ia) = 0 then
- begin
- e_WriteLog(Format('Animated texture file "%s" has no frames', [RecName]), TMsgType.Warning);
- BadTextNameHash.put(RecName, -1);
- exit;
- end;
-
- WAD.Free();
- WAD := nil;
-
- _width := ia[0].width;
- _height := ia[0].height;
- _framecount := length(ia);
- _speed := 1;
- _backanimation := false;
- frdelay := -1;
- frloop := -666;
- if GlobalMetadata.HasMetaItem(SMetaFrameDelay) then
- begin
- //writeln(' frame delay: ', GlobalMetadata.MetaItems[SMetaFrameDelay]);
- try
- f := GlobalMetadata.MetaItems[SMetaFrameDelay];
- frdelay := f;
- if f < 0 then f := 0;
- // rounding ;-)
- c := f mod 28;
- if c < 13 then c := 0 else c := 1;
- f := (f div 28)+c;
- if f < 1 then f := 1 else if f > 255 then f := 255;
- _speed := f;
- except
- end;
- end;
- if GlobalMetadata.HasMetaItem(SMetaAnimationLoops) then
- begin
- //writeln(' frame loop : ', GlobalMetadata.MetaItems[SMetaAnimationLoops]);
- try
- f := GlobalMetadata.MetaItems[SMetaAnimationLoops];
- frloop := f;
- if f <> 0 then _backanimation := true; // non-infinite looping == forth-and-back
- except
- end;
- end;
- //writeln(' creating animated texture with ', length(ia), ' frames (delay:', _speed, '; backloop:', _backanimation, ') from "', RecName, '"...');
- //for f := 0 to high(ia) do writeln(' frame #', f, ': ', ia[f].width, 'x', ia[f].height);
- f := ord(_backanimation);
- e_WriteLog(Format('Animated texture file "%s": %d frames (delay:%d; back:%d; frdelay:%d; frloop:%d), %dx%d', [RecName, length(ia), _speed, f, frdelay, frloop, _width, _height]), TMsgType.Notify);
-
- SetLength(Textures, Length(Textures)+1);
- // cîçäàåì êàäðû àíèì. òåêñòóðû èç êàðòèíîê
- if g_CreateFramesImg(ia, @Textures[High(Textures)].FramesID, '', _backanimation) then
- begin
- Textures[High(Textures)].TextureName := RecName;
- Textures[High(Textures)].Width := _width;
- Textures[High(Textures)].Height := _height;
- Textures[High(Textures)].Anim := True;
- Textures[High(Textures)].FramesCount := length(ia);
- Textures[High(Textures)].Speed := _speed;
- result := High(Textures);
- TextNameHash.put(RecName, result);
- //writeln(' CREATED!');
- end
- else
- begin
- if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create();
- if log and (not BadTextNameHash.get(RecName, f)) then
- begin
- e_WriteLog(Format('Error loading animation texture "%s" images', [RecName]), TMsgType.Warning);
- end;
- BadTextNameHash.put(RecName, -1);
- end;
end;
finally
- for f := 0 to High(ia) do FreeImage(ia[f]);
WAD.Free();
cfg.Free();
if (TextureWAD <> nil) then FreeMem(TextureWAD);
if (TextData <> nil) then FreeMem(TextData);
- if (TextureData <> nil) then FreeMem(TextureData);
end;
end;
begin
e_WriteLog(' Loading sky: ' + gMapInfo.SkyName, TMsgType.Notify);
g_Game_SetLoadingText(_lc[I_LOAD_SKY], 0, False);
- if gTextureFilter then TEXTUREFILTER := GL_LINEAR else TEXTUREFILTER := GL_NEAREST;
- try
- s := e_GetResourcePath(WadDirs, gMapInfo.SkyName, g_ExtractWadName(Res));
- if g_Texture_CreateWAD(BackID, s) then
- g_Game_SetupScreenSize
- else
- g_FatalError(Format(_lc[I_GAME_ERROR_SKY], [s]))
- finally
- TEXTUREFILTER := GL_NEAREST;
- end;
+ s := e_GetResourcePath(WadDirs, gMapInfo.SkyName, g_ExtractWadName(Res));
+ if g_Texture_CreateWAD(BackID, s, gTextureFilter) then
+ g_Game_SetupScreenSize
+ else
+ g_FatalError(Format(_lc[I_GAME_ERROR_SKY], [s]))
end;
// Çàãðóçêà ìóçûêè
end;
procedure g_Map_Free(freeTextures: Boolean=true);
-var
- a: Integer;
procedure FreePanelArray(var panels: TPanelArray);
var
if freeTextures then
begin
e_LogWritefln('g_Map_Free: clearing textures...', []);
- if (Textures <> nil) then
- begin
- for a := 0 to High(Textures) do
- begin
- if not g_Map_IsSpecialTexture(Textures[a].TextureName) then
- begin
- if Textures[a].Anim then
- begin
- g_Frames_DeleteByID(Textures[a].FramesID)
- end
- else
- begin
- if (Textures[a].TextureID <> LongWord(TEXTURE_NONE)) then
- begin
- e_DeleteTexture(Textures[a].TextureID);
- end;
- end;
- end;
- end;
- Textures := nil;
- end;
+ Textures := nil;
TextNameHash.Free();
TextNameHash := nil;
BadTextNameHash.Free();
begin
if gFlags[a].Animation <> nil then gFlags[a].Animation.Update();
+ Obj.oldX := Obj.X;
+ Obj.oldY := Obj.Y;
+
m := g_Obj_Move(@Obj, True, True);
+ NeedSend := NeedSend or (Obj.X <> Obj.oldX) or (Obj.Y <> Obj.oldY);
+
if gTime mod (GAME_TICK*2) <> 0 then Continue;
// Ñîïðîòèâëåíèå âîçäóõà
end;
end;
-
-// old algo
-procedure g_Map_DrawPanels (PanelType: Word; hasAmbient: Boolean; constref ambColor: TDFColor);
-
- procedure DrawPanels (constref panels: TPanelArray; drawDoors: Boolean=False);
- var
- idx: Integer;
- begin
- if (panels <> nil) then
- begin
- // alas, no visible set
- for idx := 0 to High(panels) do
- begin
- if not (drawDoors xor panels[idx].Door) then panels[idx].Draw(hasAmbient, ambColor);
- end;
- end;
- end;
-
-begin
- case PanelType of
- PANEL_WALL: DrawPanels(gWalls);
- PANEL_CLOSEDOOR: DrawPanels(gWalls, True);
- PANEL_BACK: DrawPanels(gRenderBackgrounds);
- PANEL_FORE: DrawPanels(gRenderForegrounds);
- PANEL_WATER: DrawPanels(gWater);
- PANEL_ACID1: DrawPanels(gAcid1);
- PANEL_ACID2: DrawPanels(gAcid2);
- PANEL_STEP: DrawPanels(gSteps);
- end;
-end;
-
-
-// new algo
-procedure g_Map_CollectDrawPanels (x0, y0, wdt, hgt: Integer);
-var
- mwit: PPanel;
- it: TPanelGrid.Iter;
-begin
- dplClear();
- it := mapGrid.forEachInAABB(x0, y0, wdt, hgt, GridDrawableMask);
- for mwit in it do if (((mwit^.tag and GridTagDoor) <> 0) = mwit^.Door) then gDrawPanelList.insert(mwit^);
- it.release();
- // list will be rendered in `g_game.DrawPlayer()`
-end;
-
-
-procedure g_Map_DrawPanelShadowVolumes (lightX: Integer; lightY: Integer; radius: Integer);
-var
- mwit: PPanel;
- it: TPanelGrid.Iter;
-begin
- it := mapGrid.forEachInAABB(lightX-radius, lightY-radius, radius*2, radius*2, (GridTagWall or GridTagDoor));
- for mwit in it do mwit^.DrawShadowVolume(lightX, lightY, radius);
- it.release();
-end;
-
-
-procedure g_Map_DrawBack(dx, dy: Integer);
-begin
- if gDrawBackGround and (BackID <> DWORD(-1)) then
- e_DrawSize(BackID, dx, dy, 0, False, False, gBackSize.X, gBackSize.Y)
- else
- e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
-end;
-
function g_Map_CollidePanelOld(X, Y: Integer; Width, Height: Word;
PanelType: Word; b1x3: Boolean=false): Boolean;
var
Direction := FlagPoints[Flag]^.Direction;
State := FLAG_STATE_NORMAL;
end;
+ Obj.oldX := Obj.X;
+ Obj.oldY := Obj.Y;
+ NeedSend := False; // the event will take care of this
Count := -1;
end;
end;
-procedure g_Map_DrawFlags();
-var
- i, dx: Integer;
- Mirror: TMirrorType;
-begin
- if gGameSettings.GameMode <> GM_CTF then
- Exit;
-
- for i := FLAG_RED to FLAG_BLUE do
- with gFlags[i] do
- if State <> FLAG_STATE_CAPTURED then
- begin
- if State = FLAG_STATE_NONE then
- continue;
-
- if Direction = TDirection.D_LEFT then
- begin
- Mirror := TMirrorType.Horizontal;
- dx := -1;
- end
- else
- begin
- Mirror := TMirrorType.None;
- dx := 1;
- end;
-
- Animation.Draw(Obj.X+dx, Obj.Y+1, Mirror);
-
- if g_debug_Frames then
- begin
- e_DrawQuad(Obj.X+Obj.Rect.X,
- Obj.Y+Obj.Rect.Y,
- Obj.X+Obj.Rect.X+Obj.Rect.Width-1,
- Obj.Y+Obj.Rect.Y+Obj.Rect.Height-1,
- 0, 255, 0);
- end;
- end;
-end;
-
-
procedure g_Map_SaveState (st: TStream);
var
str: String;
if gGameSettings.GameMode in [GM_TDM, GM_CTF] then
begin
// Î÷êè Êðàñíîé êîìàíäû
- utils.writeInt(st, SmallInt(gTeamStat[TEAM_RED].Goals));
+ utils.writeInt(st, SmallInt(gTeamStat[TEAM_RED].Score));
// Î÷êè Ñèíåé êîìàíäû
- utils.writeInt(st, SmallInt(gTeamStat[TEAM_BLUE].Goals));
+ utils.writeInt(st, SmallInt(gTeamStat[TEAM_BLUE].Score));
end;
///// /////
end;
if gGameSettings.GameMode in [GM_TDM, GM_CTF] then
begin
// Î÷êè Êðàñíîé êîìàíäû
- gTeamStat[TEAM_RED].Goals := utils.readSmallInt(st);
+ gTeamStat[TEAM_RED].Score := utils.readSmallInt(st);
// Î÷êè Ñèíåé êîìàíäû
- gTeamStat[TEAM_BLUE].Goals := utils.readSmallInt(st);
+ gTeamStat[TEAM_BLUE].Score := utils.readSmallInt(st);
end;
///// /////
end;