Fix Half-Life Blue Shift. They switched the Entities and Planes lumps.

This commit is contained in:
William Fowler
2021-10-14 19:04:06 -06:00
parent 15a083a649
commit a06fcdaa41
16 changed files with 192 additions and 51 deletions

View File

@@ -298,6 +298,7 @@ namespace LibBSP {
switch (type) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.SiN:
case MapType.SoF:
@@ -397,6 +398,9 @@ namespace LibBSP {
/// <returns>Index for this lump, or -1 if the format doesn't have this lump or it's not implemented.</returns>
public static int GetIndexForLump(MapType type) {
switch (type) {
case MapType.BlueShift: {
return 0;
}
case MapType.FAKK:
case MapType.MOHAA:
case MapType.STEF2:
@@ -449,6 +453,7 @@ namespace LibBSP {
switch (type) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.SiN:
case MapType.SoF:

View File

@@ -130,6 +130,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.SiN:
case MapType.SoF:
@@ -198,6 +199,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:
@@ -282,6 +284,7 @@ namespace LibBSP {
switch (type) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.SiN:
case MapType.SoF:
@@ -351,6 +354,7 @@ namespace LibBSP {
switch (type) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.SiN:
case MapType.SoF:

View File

@@ -29,6 +29,7 @@ namespace LibBSP {
Undefined = 0,
Quake = 29,
GoldSrc = 30, // Uses mostly the same structures as Quake
BlueShift = 31, // Blue Shift has a different lump order
Nightfire = 42,
Vindictus = 346131372,
STEF2 = 556942937,
@@ -790,7 +791,8 @@ namespace LibBSP {
public static int GetNumLumps(MapType version) {
switch (version) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return 15;
}
case MapType.Quake3: {

View File

@@ -72,6 +72,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.SiN:
case MapType.Daikatana:
case MapType.Source17:
@@ -102,6 +103,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.SiN:
case MapType.Daikatana:
case MapType.Source17:
@@ -146,6 +148,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.SiN:
case MapType.Daikatana:
case MapType.Source17:
@@ -176,6 +179,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.SiN:
case MapType.Daikatana:
case MapType.Source17:
@@ -280,6 +284,7 @@ namespace LibBSP {
switch (mapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.SiN:
case MapType.Daikatana:
case MapType.Source17:
@@ -321,6 +326,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:

View File

@@ -94,6 +94,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -127,6 +128,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -167,6 +169,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -200,6 +203,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -308,6 +312,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -340,6 +345,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -378,6 +384,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -410,6 +417,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -688,6 +696,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Source18:
case MapType.Source19:
case MapType.Source20:
@@ -719,6 +728,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Source18:
case MapType.Source19:
case MapType.Source20:
@@ -1207,6 +1217,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana: {
byte[] bytes = new byte[4];
@@ -1265,6 +1276,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana: {
Array.Copy(value, 0, Data, 12, Math.Min(value.Length, 4));
@@ -1375,6 +1387,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana: {
return BitConverter.ToInt32(Data, 16);
@@ -1432,6 +1445,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana: {
bytes.CopyTo(Data, 16);
@@ -2365,6 +2379,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana: {
return 20;
@@ -2459,7 +2474,8 @@ namespace LibBSP {
case MapType.L4D2:
case MapType.DMoMaM:
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return 7;
}
case MapType.Nightfire:

View File

@@ -62,6 +62,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.SoF:
case MapType.SiN:
@@ -91,6 +92,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.SoF:
case MapType.SiN:
@@ -134,6 +136,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.Vindictus: {
return BitConverter.ToInt32(Data, 4);
@@ -177,6 +180,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.Vindictus: {
bytes.CopyTo(Data, 4);
@@ -353,6 +357,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -398,6 +403,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -455,6 +461,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -500,6 +507,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -775,6 +783,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.SiN:
case MapType.Source17:
@@ -816,6 +825,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.SiN:
case MapType.Source17:
@@ -865,6 +875,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.SiN:
case MapType.Source17:
@@ -906,6 +917,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.SiN:
case MapType.Source17:
@@ -954,7 +966,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return Data[24];
}
default: {
@@ -965,7 +978,8 @@ namespace LibBSP {
set {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[24] = value;
break;
}
@@ -980,7 +994,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return Data[25];
}
default: {
@@ -991,7 +1006,8 @@ namespace LibBSP {
set {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[25] = value;
break;
}
@@ -1006,7 +1022,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return Data[26];
}
default: {
@@ -1017,7 +1034,8 @@ namespace LibBSP {
set {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[26] = value;
break;
}
@@ -1032,7 +1050,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return Data[27];
}
default: {
@@ -1043,7 +1062,8 @@ namespace LibBSP {
set {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[27] = value;
break;
}
@@ -1273,6 +1293,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.SiN: {
return 28;
@@ -1339,6 +1360,7 @@ namespace LibBSP {
case MapType.STEF2Demo:
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:

View File

@@ -76,6 +76,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:

View File

@@ -101,7 +101,8 @@ namespace LibBSP {
return;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
int numElements = BitConverter.ToInt32(data, 0);
structLength = 40;
int currentOffset;

View File

@@ -256,6 +256,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:

View File

@@ -74,6 +74,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -108,6 +109,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Daikatana:
case MapType.SiN:
@@ -144,7 +146,8 @@ namespace LibBSP {
return BitConverter.ToInt32(Data, 28);
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 40);
}
default: {
@@ -160,7 +163,8 @@ namespace LibBSP {
break;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 40);
break;
}
@@ -178,7 +182,8 @@ namespace LibBSP {
return BitConverter.ToInt32(Data, 32);
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 44);
}
default: {
@@ -194,7 +199,8 @@ namespace LibBSP {
break;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 44);
break;
}
@@ -212,7 +218,8 @@ namespace LibBSP {
return BitConverter.ToInt32(Data, 36);
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 48);
}
default: {
@@ -228,7 +235,8 @@ namespace LibBSP {
break;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 48);
break;
}
@@ -282,7 +290,8 @@ namespace LibBSP {
return BitConverter.ToInt32(Data, 44);
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 52);
}
default: {
@@ -298,7 +307,8 @@ namespace LibBSP {
break;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 52);
break;
}
@@ -463,7 +473,8 @@ namespace LibBSP {
return BitConverter.ToInt32(Data, 48);
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 56);
}
default: {
@@ -517,7 +528,8 @@ namespace LibBSP {
break;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 56);
break;
}
@@ -568,7 +580,8 @@ namespace LibBSP {
return BitConverter.ToInt32(Data, 52);
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 60);
}
default: {
@@ -622,7 +635,8 @@ namespace LibBSP {
break;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 60);
break;
}
@@ -699,6 +713,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Quake3:
case MapType.SiN:
@@ -737,6 +752,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Quake3:
case MapType.SiN:
@@ -779,6 +795,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Quake3:
case MapType.Nightfire:
@@ -814,6 +831,7 @@ namespace LibBSP {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Quake2:
case MapType.Quake3:
case MapType.Nightfire:
@@ -1027,7 +1045,8 @@ namespace LibBSP {
return 56;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return 64;
}
default: {
@@ -1057,6 +1076,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:

View File

@@ -98,7 +98,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt16(Data, 4);
}
case MapType.SiN:
@@ -137,7 +138,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[4] = bytes[0];
Data[5] = bytes[1];
break;
@@ -194,7 +196,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt16(Data, 6);
}
case MapType.SiN:
@@ -233,7 +236,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[6] = bytes[0];
Data[7] = bytes[1];
break;
@@ -277,7 +281,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return new Vector3(BitConverter.ToInt16(Data, 8), BitConverter.ToInt16(Data, 10), BitConverter.ToInt16(Data, 12));
}
case MapType.Quake2:
@@ -320,7 +325,8 @@ namespace LibBSP {
set {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
BitConverter.GetBytes((short)value.X()).CopyTo(Data, 8);
BitConverter.GetBytes((short)value.Y()).CopyTo(Data, 10);
BitConverter.GetBytes((short)value.Z()).CopyTo(Data, 12);
@@ -378,7 +384,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return new Vector3(BitConverter.ToInt16(Data, 14), BitConverter.ToInt16(Data, 16), BitConverter.ToInt16(Data, 18));
}
case MapType.Quake2:
@@ -421,7 +428,8 @@ namespace LibBSP {
set {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
BitConverter.GetBytes((short)value.X()).CopyTo(Data, 14);
BitConverter.GetBytes((short)value.Y()).CopyTo(Data, 16);
BitConverter.GetBytes((short)value.Z()).CopyTo(Data, 18);
@@ -491,7 +499,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToUInt16(Data, 20);
}
case MapType.Quake2:
@@ -523,7 +532,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[20] = bytes[0];
Data[21] = bytes[1];
break;
@@ -563,7 +573,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToUInt16(Data, 22);
}
case MapType.Quake2:
@@ -594,7 +605,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
Data[22] = bytes[0];
Data[23] = bytes[1];
break;
@@ -753,7 +765,8 @@ namespace LibBSP {
public static int GetStructLength(MapType mapType, int lumpVersion = 0) {
switch (mapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return 24;
}
case MapType.Quake2:
@@ -814,6 +827,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:

View File

@@ -104,7 +104,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return Data.ToNullTerminatedString(0, 16);
}
case MapType.STEF2:
@@ -151,7 +152,8 @@ namespace LibBSP {
byte[] bytes = Encoding.ASCII.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
for (int i = 0; i < 16; ++i) {
Data[i] = 0;
}
@@ -381,7 +383,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return new Vector2(BitConverter.ToUInt32(Data, 16), BitConverter.ToUInt32(Data, 20));
}
default: {
@@ -392,7 +395,8 @@ namespace LibBSP {
set {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
BitConverter.GetBytes((int)value.X()).CopyTo(Data, 16);
BitConverter.GetBytes((int)value.Y()).CopyTo(Data, 20);
break;
@@ -408,7 +412,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 24);
}
default: {
@@ -420,7 +425,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 24);
break;
}
@@ -435,7 +441,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 28);
}
default: {
@@ -447,7 +454,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 28);
break;
}
@@ -462,7 +470,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 32);
}
default: {
@@ -474,7 +483,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 32);
break;
}
@@ -489,7 +499,8 @@ namespace LibBSP {
get {
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
return BitConverter.ToInt32(Data, 36);
}
default: {
@@ -501,7 +512,8 @@ namespace LibBSP {
byte[] bytes = BitConverter.GetBytes(value);
switch (MapType) {
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
bytes.CopyTo(Data, 36);
break;
}
@@ -726,6 +738,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire: {
return 2;
}

View File

@@ -672,6 +672,9 @@ namespace LibBSP {
case MapType.Titanfall: {
return 0;
}
case MapType.BlueShift: {
return 1;
}
case MapType.FAKK:
case MapType.MOHAA: {
return 14;

View File

@@ -131,7 +131,8 @@ namespace LibBSP {
return 9;
}
case MapType.Quake:
case MapType.GoldSrc: {
case MapType.GoldSrc:
case MapType.BlueShift: {
dataType = DataType.UInt16;
return 11;
}
@@ -183,6 +184,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:

View File

@@ -126,6 +126,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Undefined: {
return BitConverter.ToInt32(Data, 36);
}
@@ -157,6 +158,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Undefined: {
bytes.CopyTo(Data, 36);
break;
@@ -195,6 +197,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Undefined: {
return BitConverter.ToInt32(Data, 32);
}
@@ -226,6 +229,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Undefined: {
bytes.CopyTo(Data, 32);
break;
@@ -317,6 +321,7 @@ namespace LibBSP {
}
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Undefined: {
return 40;
}
@@ -351,6 +356,7 @@ namespace LibBSP {
switch (type) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Vindictus:
case MapType.TacticalInterventionEncrypted:
case MapType.Source17:

View File

@@ -10,6 +10,12 @@ namespace LibBSP {
/// </summary>
public class BSPReader {
/// <summary>
/// A short and simple string that will always occur in the entities lump, but is extremely
/// unlikely to show up in any kind of binary data.
/// </summary>
private const string entityPattern = "\"classname\"";
private FileInfo bspFile;
private Dictionary<int, LumpInfo> lumpFiles = null;
@@ -52,6 +58,7 @@ namespace LibBSP {
switch (version) {
case MapType.Quake:
case MapType.GoldSrc:
case MapType.BlueShift:
case MapType.Nightfire: {
return GetLumpInfoAtOffset(4 + (8 * index), version);
}
@@ -554,7 +561,25 @@ namespace LibBSP {
break;
}
case 30: {
current = MapType.GoldSrc;
current = MapType.BlueShift;
stream.Seek(4, SeekOrigin.Begin);
int lump0offset = binaryReader.ReadInt32();
int lump0length = binaryReader.ReadInt32();
stream.Seek(lump0offset, SeekOrigin.Begin);
char currentChar;
int patternMatch = 0;
for (int i = 0; i < lump0length - entityPattern.Length; ++i) {
currentChar = (char)stream.ReadByte();
if (currentChar == entityPattern[patternMatch]) {
++patternMatch;
if (patternMatch == entityPattern.Length) {
current = MapType.GoldSrc;
break;
}
} else {
patternMatch = 0;
}
}
break;
}
case 42: {