X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame%2Fg_map.pas;h=e976be49c616045a92b12fd0b2c4844fd9227be2;hb=db4e988645273fe1c11611d84e03f0199cd181f7;hp=33571b8bcd182fb5b61cbae55bfabfcd3c9f4a33;hpb=bc39ceef968c6dabc91c4f4fb94411f52117e9f3;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index 33571b8..e976be4 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -358,8 +358,11 @@ begin try dfmapdef := TDynMapDef.Create(pr); - except on e: Exception do - raise Exception.Create(Format('ERROR in "mapdef.txt" at (%s,%s): %s', [pr.line, pr.col, e.message])); + except + on e: TDynParseException do + raise Exception.CreateFmt('ERROR in "mapdef.txt" at (%s,%s): %s', [e.tokLine, e.tokCol, e.message]); + on e: Exception do + raise Exception.CreateFmt('ERROR in "mapdef.txt" at (%s,%s): %s', [pr.tokLine, pr.tokCol, e.message]); end; st.Free(); @@ -371,7 +374,6 @@ end; function g_Map_ParseMap (data: Pointer; dataLen: Integer): TDynRecord; var wst: TSFSMemoryChunkStream = nil; - pr: TTextParser = nil; begin result := nil; if (dataLen < 4) then exit; @@ -381,41 +383,25 @@ begin if (dfmapdef = nil) then raise Exception.Create('internal map loader error'); wst := TSFSMemoryChunkStream.Create(data, dataLen); - - if (PAnsiChar(data)[0] = 'M') and (PAnsiChar(data)[1] = 'A') and (PAnsiChar(data)[2] = 'P') and (PByte(data)[3] = 1) then - begin - // binary map - try - //e_LogWriteln('parsing binary map...'); - result := dfmapdef.parseBinMap(wst); - except on e: Exception do + try + result := dfmapdef.parseMap(wst); + except + on e: TDynParseException do begin - e_LogWritefln('ERROR: %s', [e.message]); + e_LogWritefln('ERROR at (%s,%s): %s', [e.tokLine, e.tokCol, e.message]); wst.Free(); result := nil; exit; end; - end; - wst.Free(); - end - else - begin - // text map - pr := TFileTextParser.Create(wst); - try - //e_LogWriteln('parsing text map...'); - result := dfmapdef.parseMap(pr); - except on e: Exception do + on e: Exception do begin - if (pr <> nil) then e_LogWritefln('ERROR at (%s,%s): %s', [pr.tokLine, pr.tokCol, e.message]) - else e_LogWritefln('ERROR: %s', [e.message]); - pr.Free(); // will free `wst` + e_LogWritefln('ERROR: %s', [e.message]); + wst.Free(); result := nil; exit; end; - end; - pr.Free(); // will free `wst` end; + //e_LogWriteln('map parsed.'); end; @@ -1354,7 +1340,8 @@ begin //Data.Default := Trigger.DATA; if (Trigger.trigRec = nil) then begin - trigData := nil; + trigDataRec := nil; + //HACK! if (TriggerType <> TRIGGER_SECRET) then begin e_LogWritefln('trigger of type %s has no triggerdata; wtf?!', [TriggerType], MSG_WARNING); @@ -1362,7 +1349,7 @@ begin end else begin - trigData := Trigger.trigRec.clone(nil); + trigDataRec := Trigger.trigRec.clone(nil); end; end; @@ -1388,7 +1375,7 @@ begin if gTriggers[a].TriggerType in [TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF] then begin //if (gTriggers[a].Data.MonsterID-1) = Integer(mon.StartID) then mon.AddTrigger(a); - if (gTriggers[a].trigData.trigMonsterId) = Integer(mon.StartID) then mon.AddTrigger(a); + if (gTriggers[a].trigDataRec.trigMonsterId) = Integer(mon.StartID) then mon.AddTrigger(a); end; end; end; @@ -1420,7 +1407,7 @@ procedure g_Map_ReAdd_DieTriggers(); tw.Free(); end; } - if (gTriggers[a].trigData.trigMonsterId) = Integer(mon.StartID) then mon.AddTrigger(a); + if (gTriggers[a].trigDataRec.trigMonsterId) = Integer(mon.StartID) then mon.AddTrigger(a); end; end; end; @@ -2034,7 +2021,7 @@ begin moveSpeed := rec.moveSpeed; //moveStart := rec.moveStart; //moveEnd := rec.moveEnd; - //moveActive := rec['move_active'].varvalue; + //moveActive := rec['move_active'].value; if not moveSpeed.isZero then begin SetLength(gMovingWallIds, Length(gMovingWallIds)+1);