X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame%2Fg_map.pas;h=eb351a0c495808585b3e2f42cb6f51e3333104e1;hb=8028f947967b9156e80eea51b7f8b50f3c5862b3;hp=20bfa3bf1bee93ff29bc5471cb86a60cf214941a;hpb=05a8dcb37440aa1f010e418de05ecc153340956f;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index 20bfa3b..eb351a0 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -20,7 +20,7 @@ interface 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 @@ -54,6 +54,7 @@ type CaptureTime: LongWord; Animation: TAnimation; Direction: TDirection; + NeedSend: Boolean; end; function g_Map_Load(Res: String): Boolean; @@ -65,10 +66,6 @@ procedure g_Map_Update(); 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; @@ -94,13 +91,10 @@ function g_Map_GetRandomPointType(): Byte; 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; @@ -249,18 +243,17 @@ type 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 @@ -530,14 +523,7 @@ begin 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; @@ -885,18 +871,11 @@ begin 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; @@ -997,9 +976,9 @@ 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(); @@ -1012,93 +991,41 @@ begin 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; @@ -1107,16 +1034,10 @@ var 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(); @@ -1145,10 +1066,7 @@ begin 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(); @@ -1160,197 +1078,46 @@ begin 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; @@ -2216,16 +1983,11 @@ begin 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; // Çàãðóçêà ìóçûêè @@ -2414,8 +2176,6 @@ begin end; procedure g_Map_Free(freeTextures: Boolean=true); -var - a: Integer; procedure FreePanelArray(var panels: TPanelArray); var @@ -2464,27 +2224,7 @@ begin 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(); @@ -2567,8 +2307,13 @@ begin 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; // Ñîïðîòèâëåíèå âîçäóõà @@ -2624,71 +2369,6 @@ begin 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 @@ -3153,50 +2833,13 @@ begin 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; @@ -3260,9 +2903,9 @@ begin 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; @@ -3352,9 +2995,9 @@ begin 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;