diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index e976be49c616045a92b12fd0b2c4844fd9227be2..d18aeceac9bad1055d4cdcf0c94f963d715b00c8 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
//TexturePanel: Integer;
tnum: Integer;
id: Integer;
- texPanIdx: Integer;
- LiftPanelIdx: Integer;
- DoorPanelIdx: Integer;
- ShotPanelIdx: Integer;
- MPlatPanelIdx: Integer;
trigrec: TDynRecord;
- texPan: TDynRecord;
- liftPan: TDynRecord;
- doorPan: TDynRecord;
- shotPan: TDynRecord;
- mplatPan: TDynRecord;
+ // texture pane;
+ texPanelIdx: Integer;
+ texPanel: TDynRecord;
+ // "action" panel
+ actPanelIdx: Integer;
+ actPanel: TDynRecord;
end;
var
WAD: TWADFile;
//SetLength(TriggersTable, triggers.count);
g_Game_SetLoadingText(_lc[I_LOAD_TRIGGERS_TABLE], triggers.count-1, False);
+ SetLength(TriggersTable, triggers.count);
+ trignum := -1;
for rec in triggers do
begin
- SetLength(TriggersTable, Length(TriggersTable)+1);
- pttit := @TriggersTable[High(TriggersTable)];
+ Inc(trignum);
+ pttit := @TriggersTable[trignum];
pttit.trigrec := rec;
// Ñìåíà òåêñòóðû (âîçìîæíî, êíîïêè)
- pttit.texPan := mapReader.panel[rec.TexturePanel];
- pttit.liftPan := nil;
- pttit.doorPan := nil;
- pttit.shotPan := nil;
- pttit.mplatPan := nil;
- pttit.texPanIdx := -1;
- pttit.LiftPanelIdx := -1;
- pttit.DoorPanelIdx := -1;
- pttit.ShotPanelIdx := -1;
- pttit.MPlatPanelIdx := -1;
- // Ëèôòû
- if rec.TriggerType in [TRIGGER_LIFTUP, TRIGGER_LIFTDOWN, TRIGGER_LIFT] then
- begin
- pttit.liftPan := mapReader.panel[rec.trigRec.tgPanelID];
- end;
- // Äâåðè
- if rec.TriggerType in [TRIGGER_OPENDOOR, TRIGGER_CLOSEDOOR, TRIGGER_DOOR, TRIGGER_DOOR5, TRIGGER_CLOSETRAP, TRIGGER_TRAP] then
- begin
- pttit.doorPan := mapReader.panel[rec.trigRec.tgPanelID];
- end;
- // Òóðåëü
- if (rec.TriggerType = TRIGGER_SHOT) then
- begin
- pttit.shotPan := mapReader.panel[rec.trigRec.tgShotPanelID];
- end;
- //
- if rec.TriggerType in [TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF] then
- begin
- pttit.mplatPan := mapReader.panel[rec.trigRec.tgPanelID];
- end;
-
- if (pttit.texPan <> nil) then pttit.texPan.userPanelTrigRef := true;
- if (pttit.liftPan <> nil) then pttit.liftPan.userPanelTrigRef := true;
- if (pttit.doorPan <> nil) then pttit.doorPan.userPanelTrigRef := true;
- if (pttit.shotPan <> nil) then pttit.shotPan.userPanelTrigRef := true;
- if (pttit.mplatPan <> nil) then pttit.mplatPan.userPanelTrigRef := true;
-
+ pttit.texPanelIdx := -1; // will be fixed later
+ pttit.texPanel := rec.TexturePanelRec;
+ // action panel
+ pttit.actPanelIdx := -1;
+ if (rec.trigRec <> nil) then pttit.actPanel := rec.trigRec.tgPanelRec else pttit.actPanel := nil;
+ // set flag
+ if (pttit.texPanel <> nil) then pttit.texPanel.userPanelTrigRef := true;
+ if (pttit.actPanel <> nil) then pttit.actPanel.userPanelTrigRef := true;
+ // update progress
g_Game_StepLoading();
end;
end;
// ×èíèì ID'û ïàíåëåé, êîòîðûå èñïîëüçóþòñÿ â òðèããåðàõ
for b := 0 to High(TriggersTable) do
begin
- if (TriggersTable[b].texPan <> nil) then TriggersTable[b].texPanIdx := TriggersTable[b].texPan.userPanelId;
- if (TriggersTable[b].liftPan <> nil) then TriggersTable[b].LiftPanelIdx := TriggersTable[b].liftPan.userPanelId;
- if (TriggersTable[b].doorPan <> nil) then TriggersTable[b].DoorPanelIdx := TriggersTable[b].doorPan.userPanelId;
- if (TriggersTable[b].shotPan <> nil) then TriggersTable[b].ShotPanelIdx := TriggersTable[b].shotPan.userPanelId;
- if (TriggersTable[b].mplatPan <> nil) then TriggersTable[b].MPlatPanelIdx := TriggersTable[b].mplatPan.userPanelId;
+ if (TriggersTable[b].texPanel <> nil) then TriggersTable[b].texPanelIdx := TriggersTable[b].texPanel.userPanelId;
+ if (TriggersTable[b].actPanel <> nil) then TriggersTable[b].actPanelIdx := TriggersTable[b].actPanel.userPanelId;
end;
// create map grid, init other grids (for monsters, for example)
for rec in triggers do
begin
Inc(trignum);
- if (TriggersTable[trignum].texPan <> nil) then b := TriggersTable[trignum].texPan.PanelType else b := 0;
- if (TriggersTable[trignum].shotPan <> nil) then c := TriggersTable[trignum].shotPan.PanelType else c := 0;
+ if (TriggersTable[trignum].texPanel <> nil) then b := TriggersTable[trignum].texPanel.PanelType else b := 0;
+ if (TriggersTable[trignum].actPanel <> nil) then c := TriggersTable[trignum].actPanel.PanelType else c := 0;
// we can have only one of those
- if (TriggersTable[trignum].LiftPanelIdx <> -1) then tgpid := TriggersTable[trignum].LiftPanelIdx
- else if (TriggersTable[trignum].DoorPanelIdx <> -1) then tgpid := TriggersTable[trignum].DoorPanelIdx
- else if (TriggersTable[trignum].ShotPanelIdx <> -1) then tgpid := TriggersTable[trignum].ShotPanelIdx
- else if (TriggersTable[trignum].MPlatPanelIdx <> -1) then tgpid := TriggersTable[trignum].MPlatPanelIdx
- else tgpid := -1;
+ tgpid := TriggersTable[trignum].actPanelIdx;
//e_LogWritefln('creating trigger #%s; texpantype=%s; shotpantype=%s (%d,%d)', [trignum, b, c, TriggersTable[trignum].texPanIdx, TriggersTable[trignum].ShotPanelIdx]);
TriggersTable[trignum].tnum := trignum;
- TriggersTable[trignum].id := CreateTrigger(trignum, rec, TriggersTable[trignum].texPanIdx, tgpid, Word(b), Word(c));
+ TriggersTable[trignum].id := CreateTrigger(trignum, rec, TriggersTable[trignum].texPanelIdx, tgpid, Word(b), Word(c));
end;
end;