X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame%2Fg_map.pas;h=1b92a967f0c31115b5101b3db1be3c003c1ae070;hb=3e4c594ed4894e6a69897d3c2ac19c878da13280;hp=e2612f454e3c624895f54eb0c6ae7dce431622ec;hpb=5e0a71e1d35a9037be80c8912060a913d0e98b18;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index e2612f4..1b92a96 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -242,7 +242,7 @@ var implementation uses - e_input, g_main, e_log, SysUtils, g_items, g_gfx, g_console, + e_input, g_main, e_log, e_texture, SysUtils, g_items, g_gfx, g_console, GL, GLExt, g_weapons, g_game, g_sound, e_sound, CONFIG, g_options, g_triggers, g_player, Math, g_monsters, g_saveload, g_language, g_netmsg, @@ -1338,22 +1338,9 @@ begin trigPanelGUID := atrigpanid; //trigShotPanelId := ashotpanid; //Data.Default := Trigger.DATA; - if (Trigger.trigRec = nil) then - begin - trigDataRec := nil; - //HACK! - if (TriggerType <> TRIGGER_SECRET) then - begin - e_LogWritefln('trigger of type %s has no triggerdata; wtf?!', [TriggerType], MSG_WARNING); - end; - end - else - begin - trigDataRec := Trigger.trigRec.clone(nil); - end; end; - result := Integer(g_Triggers_Create(_trigger)); + result := Integer(g_Triggers_Create(_trigger, Trigger)); end; procedure CreateMonster(monster: TDynRecord); @@ -1633,6 +1620,7 @@ var moveSpeed{, moveStart, moveEnd}: TDFPoint; //moveActive: Boolean; pan: TPanel; + mapOk: Boolean = false; begin mapGrid.Free(); mapGrid := nil; @@ -1684,7 +1672,7 @@ begin e_LogWritefln('Loading map: %s', [mapResName], MSG_NOTIFY); g_Game_SetLoadingText(_lc[I_LOAD_MAP], 0, False); - stt := curTimeMicro(); + stt := getTimeMicro(); try mapReader := g_Map_ParseMap(Data, Len); @@ -1703,6 +1691,8 @@ begin exit; end; + gCurrentMap := mapReader; + generateExternalResourcesList(mapReader); mapTextureList := mapReader['texture']; // get all other lists here too @@ -1791,6 +1781,8 @@ begin begin e_WriteLog('error loading map: invalid texture index for panel', MSG_FATALERROR); result := false; + gCurrentMap := nil; + gCurrentMapFileName := ''; exit; end; end; @@ -2092,26 +2084,28 @@ begin mapReader := nil; // Çàãðóçêà íåáà - if gMapInfo.SkyName <> '' then + if (gMapInfo.SkyName <> '') then begin e_WriteLog(' Loading sky: ' + gMapInfo.SkyName, MSG_NOTIFY); g_Game_SetLoadingText(_lc[I_LOAD_SKY], 0, False); FileName := g_ExtractWadName(gMapInfo.SkyName); - if FileName <> '' then - FileName := GameDir+'/wads/'+FileName - else - begin - FileName := g_ExtractWadName(Res); - end; + if (FileName <> '') then FileName := GameDir+'/wads/'+FileName else FileName := g_ExtractWadName(Res); - s := FileName+':'+g_ExtractFilePathName(gMapInfo.SkyName); - if g_Texture_CreateWAD(BackID, s) then + if gTextureFilter then TEXTUREFILTER := GL_LINEAR else TEXTUREFILTER := GL_NEAREST; + try + s := FileName+':'+g_ExtractFilePathName(gMapInfo.SkyName); + if g_Texture_CreateWAD(BackID, s) then begin g_Game_SetupScreenSize(); end - else - g_FatalError(Format(_lc[I_GAME_ERROR_SKY], [s])); + else + begin + g_FatalError(Format(_lc[I_GAME_ERROR_SKY], [s])); + end; + finally + TEXTUREFILTER := GL_NEAREST; + end; end; // Çàãðóçêà ìóçûêè @@ -2167,12 +2161,18 @@ begin gMusic.SetByName(''); end; - stt := curTimeMicro()-stt; + stt := getTimeMicro()-stt; e_LogWritefln('map loaded in %s.%s milliseconds', [Integer(stt div 1000), Integer(stt mod 1000)]); + mapOk := true; finally sfsGCEnable(); // enable releasing unused volumes mapReader.Free(); e_ClearInputBuffer(); // why not? + if not mapOk then + begin + gCurrentMap := nil; + gCurrentMapFileName := ''; + end; end; e_WriteLog('Done loading map.', MSG_NOTIFY); @@ -3083,14 +3083,12 @@ var var PAMem: TBinMemoryWriter; pan: TPanel; - count: Integer; begin // Ñîçäàåì íîâûé ñïèñîê ñîõðàíÿåìûõ ïàíåëåé PAMem := TBinMemoryWriter.Create((Length(panByGUID)+1) * 40); // Ñîõðàíÿåì ïàíåëè - count := Length(panByGUID); - Mem.WriteInt(count); + //Mem.WriteInt(Length(panByGUID)); for pan in panByGUID do pan.SaveState(PAMem); // Ñîõðàíÿåì ýòîò ñïèñîê ïàíåëåé @@ -3174,15 +3172,16 @@ var var PAMem: TBinMemoryReader; pan: TPanel; - count: LongInt; + //count: LongInt; begin // Çàãðóæàåì òåêóùèé ñïèñîê ïàíåëåé PAMem := TBinMemoryReader.Create(); PAMem.LoadFromMemory(Mem); // Çàãðóæàåì ïàíåëè - PAMem.ReadInt(count); - if (count <> Length(panByGUID)) then raise EBinSizeError.Create('g_Map_LoadState: LoadPanelArray: invalid number of panels'); + //PAMem.ReadInt(count); + //if (count <> Length(panByGUID)) then raise EBinSizeError.Create('g_Map_LoadState: LoadPanelArray: invalid number of panels'); + //if (count <> Length(panByGUID)) then raise EBinSizeError.Create(Format('g_Map_LoadState: LoadPanelArray: invalid number of panels (%d : %d)', [count, Length(panByGUID)])); for pan in panByGUID do begin pan.LoadState(PAMem);