X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_map.pas;h=722bd9bb1cdc2a8cf6625a9399795176a29979ea;hb=refs%2Fheads%2Fmaster;hp=20bfa3bf1bee93ff29bc5471cb86a60cf214941a;hpb=05a8dcb37440aa1f010e418de05ecc153340956f;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index 20bfa3b..722bd9b 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -54,6 +54,7 @@ type CaptureTime: LongWord; Animation: TAnimation; Direction: TDirection; + NeedSend: Boolean; end; function g_Map_Load(Res: String): Boolean; @@ -1477,7 +1478,7 @@ begin if g_Game_IsClient then Exit; if (gGameSettings.GameType = GT_SINGLE) - or LongBool(gGameSettings.Options and GAME_OPTION_MONSTERS) then + or (TGameOption.MONSTERS in gGameSettings.Options) then begin mon := g_Monsters_Create(monster.MonsterType, monster.X, monster.Y, TDirection(monster.Direction)); @@ -1846,7 +1847,7 @@ begin cnt := -1; for rec in mapTextureList do begin - Inc(cnt); + cnt += 1; if not usedTextures.has(toLowerCase1251(rec.Resource)) then begin rec.tagInt := -1; // just in case @@ -1858,17 +1859,39 @@ begin e_LogWritefln(' Loading texture #%d: %s', [cnt, rec.Resource]); {$ENDIF} //if g_Map_IsSpecialTexture(s) then e_WriteLog(' SPECIAL!', MSG_NOTIFY); + // TODO: Unify the texture reader - static textures are a special case of dynamic ones, just with only one frame. if rec.Anim then begin // Àíèìèðîâàííàÿ òåêñòóðà ntn := CreateAnimTexture(rec.Resource, FileName, True); - if (ntn < 0) then g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_ANIM], [rec.Resource])); + if (ntn < 0) then + begin + // FIXME: I think, CreateAnimTexture() will load static textures too, just as animated ones with one frame. + ntn := CreateTexture(rec.Resource, FileName, False); + if (ntn < 0) then + g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_ANIM], [rec.Resource])) + else + begin + rec.user['animated'] := False; + e_LogWritefln(' wrong (outdated?) anim flag hint - texture #%d is actually static: %s', [cnt, rec.Resource]); + end; + end; end else begin // Îáû÷íàÿ òåêñòóðà ntn := CreateTexture(rec.Resource, FileName, True); - if (ntn < 0) then g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_SIMPLE], [rec.Resource])); + if (ntn < 0) then + begin + ntn := CreateAnimTexture(rec.Resource, FileName, False); + if (ntn < 0) then + g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_SIMPLE], [rec.Resource])) + else + begin + rec.user['animated'] := True; + e_LogWritefln(' wrong (outdated?) anim flag hint - texture #%d is actually animated: %s', [cnt, rec.Resource]); + end; + end; end; if (ntn < 0) then ntn := CreateNullTexture(rec.Resource); @@ -2567,8 +2590,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; // Ñîïðîòèâëåíèå âîçäóõà @@ -3153,6 +3181,9 @@ 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; @@ -3160,6 +3191,7 @@ end; procedure g_Map_DrawFlags(); var i, dx: Integer; + tx, ty: Integer; Mirror: TMirrorType; begin if gGameSettings.GameMode <> GM_CTF then @@ -3172,6 +3204,8 @@ begin if State = FLAG_STATE_NONE then continue; + Obj.lerp(gLerpFactor, tx, ty); + if Direction = TDirection.D_LEFT then begin Mirror := TMirrorType.Horizontal; @@ -3183,7 +3217,7 @@ begin dx := 1; end; - Animation.Draw(Obj.X+dx, Obj.Y+1, Mirror); + Animation.Draw(tx+dx, ty+1, Mirror); if g_debug_Frames then begin @@ -3260,9 +3294,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 +3386,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;