Skip to content

Commit bdb8c3c

Browse files
committed
More work
- Added WIP Terrain Importer blender script (only TR2 support) - Fixes for Model Importer blender script - Added BlockDetectorDatabase - Added CarSpewerDatabase - Added AITrackSpeedDatabase - Added AISignalDatabase - Updated TrackDatabase with identified variables
1 parent a7909c6 commit bdb8c3c

17 files changed

+1208
-197
lines changed

Run8/LibRun8/Common/LightLoader.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@ public class LightLoader
44
{
55
public bool billboardGlare { get; set; }
66

7-
public float lightRange { get; set; }
7+
public float LightRange { get; set; }
88

99
public float lightWidth { get; set; }
1010

11-
public float lightIntensity { get; set; }
11+
public float LightIntensity { get; set; }
1212

1313
public float decayExponent { get; set; } = 1f;
1414

15-
public Vector3 lightOffsetXYZ { get; set; }
15+
public Vector3 LightOffsetXYZ { get; set; }
1616

1717
public bool isSpotLight { get; set; }
1818

19-
public Vector4 color { get; set; }
19+
public Vector4 Color { get; set; }
2020

21-
public Vector3 lightDirectionDeg { get; set; }
21+
public Vector3 LightDirectionDeg { get; set; }
2222

2323
public bool flashing { get; set; }
2424

@@ -30,17 +30,17 @@ public class LightLoader
3030

3131
public float dayNiteSensorAmbientLevel { get; set; }
3232

33-
public Vector3[] glareList { get; set; }
33+
public Vector3[] GlareList { get; set; }
3434

35-
public float lightGlareRadiusMeters { get; set; } = 0.35f;
35+
public float LightGlareRadiusMeters { get; set; } = 0.35f;
3636

3737
public bool isHepPowered { get; set; }
3838

3939
public bool isMarkerLight { get; set; }
4040

4141
public bool isNumberboardLight { get; set; }
4242

43-
public bool isLimitedYardLight { get; set; }
43+
public bool IsLimitedYardLight { get; set; }
4444

4545
public bool renderGlareOnly { get; set; }
4646

Run8/LibRun8/Common/TileIndex.cs

+16
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,26 @@ public class TileIndex
55
public int X { get; set; }
66
public int Y { get; set; }
77

8+
public TileIndex()
9+
{
10+
X = 0;
11+
Y = 0;
12+
}
13+
814
public TileIndex(int x, int y)
915
{
1016
X = x;
1117
Y = y;
1218
}
19+
20+
public static TileIndex Read(BinaryReader reader)
21+
{
22+
TileIndex tileXZ = new TileIndex();
23+
24+
tileXZ.X = reader.ReadInt32();
25+
tileXZ.Y = reader.ReadInt32();
26+
27+
return tileXZ;
28+
}
1329
}
1430
}

Run8/LibRun8/Common/Vector3.cs

+9
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,14 @@ public override string ToString()
4444
{
4545
return string.Format("X={0};Y={1};Z={2}", X, Y, Z);
4646
}
47+
48+
public static Vector3 Read(BinaryReader reader)
49+
{
50+
Vector3 v = new Vector3();
51+
v.X = reader.ReadSingle();
52+
v.Y = reader.ReadSingle();
53+
v.Z = reader.ReadSingle();
54+
return v;
55+
}
4756
}
4857
}
+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/**
2+
* Low Accuracy
3+
*/
4+
5+
namespace LibRun8.Formats
6+
{
7+
public class AISignalDatabase : FileFormat
8+
{
9+
public List<AISignal> Signals { get; set; } = new List<AISignal>();
10+
11+
public static AISignalDatabase Read(string path)
12+
{
13+
AISignalDatabase aiSignalDatabase = new AISignalDatabase();
14+
using (FileStream fileStream = new FileStream(path, FileMode.Open))
15+
{
16+
using (BinaryReader reader = new BinaryReader(fileStream))
17+
{
18+
reader.ReadInt32(); // reserved
19+
20+
var signalCount = reader.ReadInt32();
21+
for (int i = 0; i < signalCount; i++)
22+
{
23+
AISignal aiSignal = AISignal.Read(reader);
24+
aiSignalDatabase.Signals.Add(aiSignal);
25+
}
26+
}
27+
}
28+
29+
return aiSignalDatabase;
30+
}
31+
32+
public override void Write()
33+
{
34+
throw new NotImplementedException();
35+
}
36+
37+
public class AISignal
38+
{
39+
public List<int> SignalIndices { get; set; } = new List<int>(); // maps signal head signal index -> signal
40+
public bool Bool0 { get; set; }
41+
public int Int0 { get; set; }
42+
public int Int1 { get; set; }
43+
public Class336 Class336_0 { get; set; }
44+
public Class336 Class336_1 { get; set; }
45+
46+
public static AISignal Read(BinaryReader reader)
47+
{
48+
AISignal aiSignal = new AISignal();
49+
50+
reader.ReadInt32(); // reserved
51+
var count = reader.ReadInt32();
52+
for (int i = 0; i < count; i++)
53+
{
54+
aiSignal.SignalIndices.Add(reader.ReadInt32());
55+
}
56+
57+
aiSignal.Bool0 = reader.ReadBoolean();
58+
aiSignal.Int0 = reader.ReadInt32();
59+
aiSignal.Int1 = reader.ReadInt32();
60+
61+
if(reader.ReadBoolean())
62+
{
63+
aiSignal.Class336_0 = Class336.Read(reader);
64+
}
65+
66+
if(reader.ReadBoolean())
67+
{
68+
aiSignal.Class336_1 = Class336.Read(reader);
69+
}
70+
71+
return aiSignal;
72+
}
73+
}
74+
75+
public class Class336
76+
{
77+
public int Int0 { get; set; }
78+
public int Int1 { get; set; }
79+
public static Class336 Read(BinaryReader reader)
80+
{
81+
Class336 @class = new Class336();
82+
@class.Int0 = reader.ReadInt32();
83+
@class.Int1 = reader.ReadInt32();
84+
85+
return @class;
86+
}
87+
}
88+
}
89+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/**
2+
* Low Accuracy
3+
*/
4+
5+
namespace LibRun8.Formats
6+
{
7+
public class AITrackSpeedDatabase : FileFormat
8+
{
9+
public List<TrackSpeed> TrackSpeeds { get; set; } = new List<TrackSpeed>();
10+
public static AITrackSpeedDatabase Read(string path)
11+
{
12+
AITrackSpeedDatabase aiTrackSpeedDatabase = new AITrackSpeedDatabase();
13+
using (FileStream fileStream = new FileStream(path, FileMode.Open))
14+
{
15+
using (BinaryReader reader = new BinaryReader(fileStream))
16+
{
17+
reader.ReadInt32(); // reserved
18+
var count = reader.ReadInt32();
19+
for (int i = 0; i < count; i++)
20+
{
21+
aiTrackSpeedDatabase.TrackSpeeds.Add(TrackSpeed.Read(reader));
22+
}
23+
}
24+
}
25+
26+
return aiTrackSpeedDatabase;
27+
}
28+
29+
public override void Write()
30+
{
31+
throw new NotImplementedException();
32+
}
33+
34+
public class TrackSpeedEntry
35+
{
36+
public int Int0 { get; set; }
37+
public int Int1 { get; set; } = 15;
38+
public int Int2 { get; set; } = 15;
39+
public static TrackSpeedEntry Read(BinaryReader reader)
40+
{
41+
TrackSpeedEntry class317 = new TrackSpeedEntry();
42+
43+
reader.ReadInt32(); // reserved
44+
class317.Int0 = reader.ReadInt32();
45+
class317.Int1 = reader.ReadInt32();
46+
class317.Int2 = reader.ReadInt32();
47+
48+
return class317;
49+
}
50+
}
51+
52+
public class TrackSpeed
53+
{
54+
public List<TrackSpeedEntry> Speeds { get; set; } = new List<TrackSpeedEntry>();
55+
public int Int0 { get; set; }
56+
public static TrackSpeed Read(BinaryReader reader)
57+
{
58+
TrackSpeed trackSpeed = new TrackSpeed();
59+
60+
reader.ReadInt32(); // reserved
61+
trackSpeed.Int0 = reader.ReadInt32();
62+
var count = reader.ReadInt32();
63+
for (int i = 0; i < count; i++)
64+
{
65+
trackSpeed.Speeds.Add(TrackSpeedEntry.Read(reader));
66+
}
67+
68+
return trackSpeed;
69+
}
70+
}
71+
}
72+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using LibRun8.Common;
2+
3+
namespace LibRun8.Formats
4+
{
5+
public class BlockDetectorDatabase : FileFormat
6+
{
7+
public List<BlockDetector> Detectors { get; set; } = new List<BlockDetector>();
8+
public static BlockDetectorDatabase Read(string path)
9+
{
10+
BlockDetectorDatabase blockDetectorDatabase = new BlockDetectorDatabase();
11+
using (FileStream fileStream = new FileStream(path, FileMode.Open))
12+
{
13+
using (BinaryReader reader = new BinaryReader(fileStream))
14+
{
15+
reader.ReadInt32(); // reserved
16+
var numOfDetectors = reader.ReadInt32();
17+
for (int i = 0; i < numOfDetectors; i++)
18+
{
19+
BlockDetector blockDetector = BlockDetector.Read(reader);
20+
blockDetectorDatabase.Detectors.Add(blockDetector);
21+
}
22+
}
23+
}
24+
25+
return blockDetectorDatabase;
26+
}
27+
28+
public override void Write()
29+
{
30+
throw new NotImplementedException();
31+
}
32+
33+
public class BlockDetector
34+
{
35+
public int Index { get; set; }
36+
public List<int> Tracks { get; set; } = new List<int>();
37+
public TileIndex TileXZ { get; set; }
38+
public Vector3 PositionXYZ { get; set; }
39+
40+
public static BlockDetector Read(BinaryReader reader)
41+
{
42+
BlockDetector blockDetector = new BlockDetector();
43+
44+
reader.ReadInt32(); // reserved
45+
blockDetector.Index = reader.ReadInt32();
46+
var numOfTracks = reader.ReadInt32();
47+
for (int i = 0; i < numOfTracks; i++)
48+
{
49+
blockDetector.Tracks.Add(reader.ReadInt32());
50+
}
51+
blockDetector.TileXZ = TileIndex.Read(reader);
52+
blockDetector.PositionXYZ = Vector3.Read(reader);
53+
54+
return blockDetector;
55+
}
56+
}
57+
}
58+
}
+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using LibRun8.Common;
2+
3+
namespace LibRun8.Formats
4+
{
5+
public class CarSpewerDatabase : FileFormat
6+
{
7+
public List<CarSpewer> Spewers { get; set; } = new List<CarSpewer>();
8+
public static CarSpewerDatabase Read(string path)
9+
{
10+
CarSpewerDatabase carSpewerDatabase = new CarSpewerDatabase();
11+
using (FileStream fileStream = new FileStream(path, FileMode.Open))
12+
{
13+
using (BinaryReader reader = new BinaryReader(fileStream))
14+
{
15+
reader.ReadInt32(); // reserved
16+
var numOfSpewers = reader.ReadInt32();
17+
for (int i = 0; i < numOfSpewers; i++)
18+
{
19+
carSpewerDatabase.Spewers.Add(CarSpewer.Read(reader));
20+
}
21+
}
22+
}
23+
24+
return carSpewerDatabase;
25+
}
26+
27+
public override void Write()
28+
{
29+
throw new NotImplementedException();
30+
}
31+
32+
public class CarSpewer
33+
{
34+
public int Int0 { get; set; } // Doesn't appear to ever be used
35+
public int RoadNodeIndex { get; set; }
36+
public int MaxNumCars { get; set; }
37+
public double MinTimeBetwixtSpew { get; set; }
38+
public double MaxTimeBetwixtSpew { get; set; }
39+
public float MaxSpeed { get; set; }
40+
public List<CarSpewStartPoint> CarSpewStartPoints { get; set; } = new List<CarSpewStartPoint>();
41+
42+
public static CarSpewer Read(BinaryReader reader)
43+
{
44+
CarSpewer carSpewer = new CarSpewer();
45+
46+
var num = reader.ReadInt32();
47+
carSpewer.Int0 = reader.ReadInt32();
48+
carSpewer.RoadNodeIndex = reader.ReadInt32();
49+
carSpewer.MaxNumCars = reader.ReadInt32();
50+
carSpewer.MinTimeBetwixtSpew = reader.ReadDouble();
51+
carSpewer.MaxTimeBetwixtSpew = reader.ReadDouble();
52+
if (num == 2)
53+
{
54+
carSpewer.MaxSpeed = reader.ReadSingle();
55+
}
56+
var numOfSpewStartPoints = reader.ReadInt32();
57+
for (int i = 0; i < numOfSpewStartPoints; i++)
58+
{
59+
carSpewer.CarSpewStartPoints.Add(CarSpewStartPoint.Read(reader));
60+
}
61+
62+
return carSpewer;
63+
}
64+
}
65+
66+
public class CarSpewStartPoint
67+
{
68+
public Vector3 PosXYZ { get; set; }
69+
public TileIndex TileXZ { get; set; }
70+
public float Heading { get; set; } = -999f;
71+
72+
public static CarSpewStartPoint Read(BinaryReader reader)
73+
{
74+
CarSpewStartPoint carSpewStartPoint = new CarSpewStartPoint();
75+
76+
reader.ReadInt32();
77+
carSpewStartPoint.PosXYZ = Vector3.Read(reader);
78+
carSpewStartPoint.TileXZ = TileIndex.Read(reader);
79+
carSpewStartPoint.Heading = reader.ReadSingle();
80+
81+
return carSpewStartPoint;
82+
}
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)