Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions TombLib/TombLib/LevelData/Compilers/TombEngine/FloorData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ private List<ushort> BuildTriggers(Room room, Sector sector, VectorInt2 pos)
case TriggerTargetType.PlayAudio:
case TriggerTargetType.FlipEffect:
case TriggerTargetType.Secret:
case TriggerTargetType.VolumeObject:
trigger2 = (ushort)(GetTriggerParameter(trigger.Target, trigger, _fdFunctionMask) | func);
result.Add(trigger2);
break;
Expand Down Expand Up @@ -347,6 +348,14 @@ private ushort GetTriggerParameter(ITriggerParameter parameter, TriggerInstance
index = _sinkTable[(SinkInstance)parameter];
else if (parameter is FlybyCameraInstance)
index = _flybyTable[(FlybyCameraInstance)parameter];
else if (parameter is VolumeInstance volume)
{
if (!_volumeTable.TryGetValue(volume, out index))
{
_progressReporter.ReportWarn("Trigger '" + triggerDiagnostic + "' referring to illegal volume '" + volume + "'.");
index = 0;
}
}
else if (parameter is StaticInstance)
{
StaticInstance @object = (StaticInstance)parameter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public sealed partial class LevelCompilerTombEngine : LevelCompiler
private Dictionary<SoundSourceInstance, int> _soundSourcesTable;
private Dictionary<FlybyCameraInstance, int> _flybyTable;
private Dictionary<StaticInstance, int> _staticsTable;
private Dictionary<VolumeInstance, int> _volumeTable;

// Collected game limits
private Dictionary<Limit, int> _limits;
Expand Down Expand Up @@ -203,10 +204,12 @@ private void BuildCamerasAndSinks()
int sinkID = 0;
int camID = 0;
int flybyID = 0;
int volumeID = 0;

_cameraTable = new Dictionary<CameraInstance, int>(new ReferenceEqualityComparer<CameraInstance>());
_sinkTable = new Dictionary<SinkInstance, int>(new ReferenceEqualityComparer<SinkInstance>());
_flybyTable = new Dictionary<FlybyCameraInstance, int>(new ReferenceEqualityComparer<FlybyCameraInstance>());
_volumeTable = new Dictionary<VolumeInstance, int>(new ReferenceEqualityComparer<VolumeInstance>());

foreach (var room in _level.ExistingRooms)
{
Expand All @@ -216,6 +219,8 @@ private void BuildCamerasAndSinks()
_flybyTable.Add(obj, flybyID++);
foreach (var obj in room.Objects.OfType<SinkInstance>())
_sinkTable.Add(obj, sinkID++);
foreach (var obj in room.Objects.OfType<VolumeInstance>())
_volumeTable.Add(obj, volumeID++);
}
}

Expand Down
3 changes: 2 additions & 1 deletion TombLib/TombLib/LevelData/Instances/TriggerInstance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ public enum TriggerTargetType : ushort
FmvNg = 14,
TimerfieldNg = 15,
VolumeEvent = 16,
GlobalEvent = 17
GlobalEvent = 17,
VolumeObject = 18
}

public interface ITriggerParameter : IEquatable<ITriggerParameter>
Expand Down
7 changes: 7 additions & 0 deletions TombLib/TombLib/NG/NgParameterInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ public static IEnumerable<TriggerTargetType> GetTargetTypeRange(LevelSettings le
{
yield return TriggerTargetType.VolumeEvent;
yield return TriggerTargetType.GlobalEvent;
yield return TriggerTargetType.VolumeObject;
}
}
}
Expand Down Expand Up @@ -177,6 +178,12 @@ public static NgParameterRange GetTargetRange(LevelSettings levelSettings, Trigg
else
return new NgParameterRange(NgParameterKind.AnyNumber);

case TriggerTargetType.VolumeObject:
if (levelSettings.GameVersion == TRVersion.Game.TombEngine)
return new NgParameterRange(NgParameterKind.VolumesInLevel);
else
return new NgParameterRange(NgParameterKind.AnyNumber);

default:
return new NgParameterRange(NgParameterKind.AnyNumber);
}
Expand Down
9 changes: 8 additions & 1 deletion TombLib/TombLib/NG/NgParameterRange.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public enum NgParameterKind
VolumeEventTypes,
GlobalEventSets,
GlobalEventTypes,
PluginEnumeration
PluginEnumeration,
VolumesInLevel
}

public struct NgLinearParameter
Expand Down Expand Up @@ -146,6 +147,7 @@ public bool IsObject
case NgParameterKind.CamerasInLevel:
case NgParameterKind.SinksInLevel:
case NgParameterKind.FlybyCamerasInLevel:
case NgParameterKind.VolumesInLevel:
return true;
case NgParameterKind.Choice:
foreach (var choice in Choices)
Expand Down Expand Up @@ -207,6 +209,8 @@ public bool ParameterMatches(ITriggerParameter parameter, bool nullResult)
return parameter is SinkInstance;
case NgParameterKind.FlybyCamerasInLevel:
return parameter is FlybyCameraInstance;
case NgParameterKind.VolumesInLevel:
return parameter is VolumeInstance;
case NgParameterKind.Rooms255:
return parameter is Room;
case NgParameterKind.VolumeEventSets:
Expand Down Expand Up @@ -295,6 +299,9 @@ public IEnumerable<ITriggerParameter> BuildList(Level level)
case NgParameterKind.FlybyCamerasInLevel:
return level.ExistingRooms.SelectMany(room => room.Objects).OfType<FlybyCameraInstance>();

case NgParameterKind.VolumesInLevel:
return level.ExistingRooms.SelectMany(room => room.Objects).OfType<VolumeInstance>();

case NgParameterKind.Rooms255:
return level.ExistingRooms;

Expand Down