diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index 50b0d2669ae576f4647c599664b6d7c38dc094d2..101c3c544d06658454afb94777d730c333832545 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
result := dfmapdef.parseMap(pr);
except on e: Exception do
begin
- if (pr <> nil) then e_LogWritefln('ERROR at (%s,%s): %s', [pr.line, pr.col, e.message])
+ 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`
result := nil;
end;
end;
-procedure CreateTrigger (amapIdx: Integer; Trigger: TDynRecord; atpanid, atrigpanid: Integer; fTexturePanel1Type, fTexturePanel2Type: Word);
+function CreateTrigger (amapIdx: Integer; Trigger: TDynRecord; atpanid, atrigpanid: Integer; fTexturePanel1Type, fTexturePanel2Type: Word): Integer;
var
_trigger: TTrigger;
begin
+ result := -1;
if g_Game_IsClient and not (Trigger.TriggerType in [TRIGGER_SOUND, TRIGGER_MUSIC]) then Exit;
with _trigger do
end;
end;
- g_Triggers_Create(_trigger);
+ result := Integer(g_Triggers_Create(_trigger));
end;
procedure CreateMonster(monster: TDynRecord);
PTRec = ^TTRec;
TTRec = record
//TexturePanel: Integer;
+ tnum: Integer;
+ id: Integer;
texPanIdx: Integer;
LiftPanelIdx: Integer;
DoorPanelIdx: Integer;
stt: UInt64;
moveSpeed{, moveStart, moveEnd}: TDFPoint;
//moveActive: Boolean;
+ pan: TPanel;
begin
mapGrid.Free();
mapGrid := nil;
FreeMem(Data);
+ if (mapReader = nil) then
+ begin
+ e_LogWritefln('invalid map file: ''%s''', [mapResName]);
+ exit;
+ end;
+
generateExternalResourcesList(mapReader);
mapTextureList := mapReader['texture'];
// get all other lists here too
else if (TriggersTable[trignum].MPlatPanelIdx <> -1) then tgpid := TriggersTable[trignum].MPlatPanelIdx
else tgpid := -1;
//e_LogWritefln('creating trigger #%s; texpantype=%s; shotpantype=%s (%d,%d)', [trignum, b, c, TriggersTable[trignum].texPanIdx, TriggersTable[trignum].ShotPanelIdx]);
- CreateTrigger(trignum, rec, TriggersTable[trignum].texPanIdx, tgpid, Word(b), Word(c));
+ TriggersTable[trignum].tnum := trignum;
+ TriggersTable[trignum].id := CreateTrigger(trignum, rec, TriggersTable[trignum].texPanIdx, tgpid, Word(b), Word(c));
+ end;
+ end;
+
+ //FIXME: use hashtable!
+ for pan in panByGUID do
+ begin
+ if (pan.endPosTrigId >= 0) and (pan.endPosTrigId < Length(TriggersTable)) then
+ begin
+ pan.endPosTrigId := TriggersTable[pan.endPosTrigId].id;
+ end;
+ if (pan.endSizeTrigId >= 0) and (pan.endSizeTrigId < Length(TriggersTable)) then
+ begin
+ pan.endSizeTrigId := TriggersTable[pan.endSizeTrigId].id;
end;
end;
FreeMem(Data);
+ if (mapReader = nil) then exit;
+
if (mapReader.Width > 0) and (mapReader.Height > 0) then
begin
Result.Name := mapReader.MapName;