diff --git a/Converter.cs b/Converter.cs
index 41da5c9..faf577f 100644
--- a/Converter.cs
+++ b/Converter.cs
@@ -4,10 +4,11 @@
* Licensed under the MPL v2.0 or later
*
* Full notice in ../help/Idmr.Platform.chm
- * Version: 5.4+
+ * Version: 6.0
*/
/* CHANGELOG
+ * v6.0, 231027
* [UPD] Changes due to XWA Arr/Dep Method1
* v5.4, 210404
* [FIX] TIE goal check exception type
@@ -43,8 +44,7 @@
namespace Idmr.Platform
{
/// Object for Mission Platform conversions
- /// Primarily handles downgrading of platforms, due to existing utilities for upgrading
- /// Converted files will use same MissionPath with platform included ("test.tie" to "test_Xvt.tie")
+ /// Converted files will use same MissionPath with platform included ("test.tie" to "test_Xvt.tie")
public static class Converter
{
/// Downgrades XvT and BoP missions to TIE95
@@ -83,7 +83,7 @@ public static Tie.Mission XvtBopToTie(Xvt.Mission miss)
tie.FlightGroups[i].SpecialCargoCraft = miss.FlightGroups[i].SpecialCargoCraft;
tie.FlightGroups[i].RandSpecCargo = miss.FlightGroups[i].RandSpecCargo;
tie.FlightGroups[i].CraftType = Tie.Mission.CraftCheck(miss.FlightGroups[i].CraftType);
- if (tie.FlightGroups[i].CraftType == 255) throw flightException(4, i, Xwa.Strings.CraftType[miss.FlightGroups[i].CraftType]);
+ if (tie.FlightGroups[i].CraftType == 255) throw flightException(4, i, Xvt.Strings.CraftType[miss.FlightGroups[i].CraftType]);
tie.FlightGroups[i].NumberOfCraft = miss.FlightGroups[i].NumberOfCraft;
tie.FlightGroups[i].Status1 = miss.FlightGroups[i].Status1;
tie.FlightGroups[i].Missile = miss.FlightGroups[i].Missile;
@@ -92,7 +92,7 @@ public static Tie.Mission XvtBopToTie(Xvt.Mission miss)
tie.FlightGroups[i].AI = miss.FlightGroups[i].AI;
if (tie.FlightGroups[i].AI > 4) tie.FlightGroups[i].AI = 4; //[JB] Jedi in XvT should be Top Ace in TIE, not invul.
tie.FlightGroups[i].Markings = miss.FlightGroups[i].Markings;
- if (miss.FlightGroups[i].Formation > 12) throw flightException(1, i, Xwa.Strings.Formation[miss.FlightGroups[i].Formation]);
+ if (miss.FlightGroups[i].Formation > 12) throw flightException(1, i, BaseStrings.Formation[miss.FlightGroups[i].Formation]);
else tie.FlightGroups[i].Formation = miss.FlightGroups[i].Formation;
tie.FlightGroups[i].FormDistance = miss.FlightGroups[i].FormDistance;
tie.FlightGroups[i].GlobalGroup = miss.FlightGroups[i].GlobalGroup;
@@ -115,7 +115,7 @@ public static Tie.Mission XvtBopToTie(Xvt.Mission miss)
tie.FlightGroups[i].ArrivalDelaySeconds = miss.FlightGroups[i].ArrivalDelaySeconds;
tie.FlightGroups[i].DepartureTimerMinutes = miss.FlightGroups[i].DepartureTimerMinutes;
tie.FlightGroups[i].DepartureTimerSeconds = miss.FlightGroups[i].DepartureTimerSeconds;
- if (miss.FlightGroups[i].AbortTrigger > 5) throw flightException(2, i, Xwa.Strings.Abort[miss.FlightGroups[i].AbortTrigger]);
+ if (miss.FlightGroups[i].AbortTrigger > 5) throw flightException(2, i, Xvt.Strings.Abort[miss.FlightGroups[i].AbortTrigger]);
else tie.FlightGroups[i].AbortTrigger = miss.FlightGroups[i].AbortTrigger;
tie.FlightGroups[i].ArrivalCraft1 = miss.FlightGroups[i].ArrivalCraft1;
tie.FlightGroups[i].ArrivalMethod1 = miss.FlightGroups[i].ArrivalMethod1;
@@ -232,6 +232,123 @@ public static Tie.Mission XvtBopToTie(Xvt.Mission miss)
return tie;
}
+ /// Upgrades TIE missions to XvT/BoP
+ /// TIE mission to convert
+ /// Determines if mission is to be ocnverted to BoP isntead of XvT
+ /// Upgraded mission
+ public static Xvt.Mission TieToXvtBop(Tie.Mission miss, bool bop)
+ {
+ throw new NotImplementedException();
+
+ Xvt.Mission xvt = new Xvt.Mission { IsBop = bop };
+
+ if (miss.FlightGroups.Count > Xvt.Mission.FlightGroupLimit) throw maxException(false, true, Xvt.Mission.FlightGroupLimit);
+ xvt.FlightGroups = new Xvt.FlightGroupCollection(miss.FlightGroups.Count);
+ if (miss.Messages.Count > 0) xvt.Messages = new Xvt.MessageCollection(miss.Messages.Count);
+
+ #region FGs
+ // Before we can start processing FGs, we need to first determine if the player craft is Imperial or Rebel (probably Imp, but still)
+ bool playerIsImperial = true;
+ for (int i = 0; i < xvt.FlightGroups.Count; i++)
+ {
+ if (miss.FlightGroups[i].PlayerCraft != 0)
+ {
+ playerIsImperial = (miss.FlightGroups[i].IFF == 1);
+ break;
+ }
+ }
+ for (int i = 0; i < xvt.FlightGroups.Count; i++)
+ {
+ #region Craft
+ xvt.FlightGroups[i].Name = miss.FlightGroups[i].Name;
+ xvt.FlightGroups[i].Cargo = miss.FlightGroups[i].Cargo;
+ xvt.FlightGroups[i].SpecialCargo = miss.FlightGroups[i].SpecialCargo;
+ xvt.FlightGroups[i].RandSpecCargo = miss.FlightGroups[i].RandSpecCargo;
+ xvt.FlightGroups[i].CraftType = miss.FlightGroups[i].CraftType;
+ xvt.FlightGroups[i].NumberOfCraft = miss.FlightGroups[i].NumberOfCraft;
+ xvt.FlightGroups[i].Status1 = miss.FlightGroups[i].Status1;
+ xvt.FlightGroups[i].Missile = miss.FlightGroups[i].Missile;
+ xvt.FlightGroups[i].Beam = miss.FlightGroups[i].Beam;
+ xvt.FlightGroups[i].IFF = miss.FlightGroups[i].IFF;
+ switch (miss.FlightGroups[i].IFF)
+ {
+ // if player is Imperial, have to switch Team/IFF values, since Imps have to be Team 1 (0) and Rebs are Team 2 (1)
+ case 0:
+ if (playerIsImperial) xvt.FlightGroups[i].Team = 1;
+ else xvt.FlightGroups[i].Team = 0;
+ break;
+ case 1:
+ if (playerIsImperial) xvt.FlightGroups[i].Team = 0;
+ else xvt.FlightGroups[i].Team = 1;
+ break;
+ default:
+ xvt.FlightGroups[i].Team = miss.FlightGroups[i].IFF;
+ break;
+ }
+ xvt.FlightGroups[i].AI = miss.FlightGroups[i].AI;
+ xvt.FlightGroups[i].Markings = miss.FlightGroups[i].Markings;
+ xvt.FlightGroups[i].Formation = miss.FlightGroups[i].Formation;
+ xvt.FlightGroups[i].FormDistance = miss.FlightGroups[i].FormDistance;
+ xvt.FlightGroups[i].GlobalGroup = miss.FlightGroups[i].GlobalGroup;
+ xvt.FlightGroups[i].FormLeaderDist = miss.FlightGroups[i].FormLeaderDist;
+ xvt.FlightGroups[i].NumberOfWaves = miss.FlightGroups[i].NumberOfWaves;
+ if (miss.FlightGroups[i].PlayerCraft != 0)
+ {
+ xvt.FlightGroups[i].PlayerNumber = 1;
+ xvt.FlightGroups[i].PlayerCraft = (byte)(miss.FlightGroups[i].PlayerCraft - 1);
+ }
+ xvt.FlightGroups[i].Yaw = miss.FlightGroups[i].Yaw;
+ xvt.FlightGroups[i].Pitch = miss.FlightGroups[i].Pitch;
+ xvt.FlightGroups[i].Roll = miss.FlightGroups[i].Roll;
+ #endregion
+ #region ArrDep
+ xvt.FlightGroups[i].Difficulty = miss.FlightGroups[i].Difficulty;
+ for (int j = 0; j < 3; j++)
+ {
+ try { xvt.FlightGroups[i].ArrDepTriggers[j] = (Xvt.Mission.Trigger)miss.FlightGroups[i].ArrDepTriggers[j]; }
+ catch (Exception x) { throw new ArgumentException("FG[" + i + "] ArrDep[" + j + "]: " + x.Message, x); }
+ }
+ xvt.FlightGroups[i].ArrDepAO[0] = miss.FlightGroups[i].AT1AndOrAT2;
+ xvt.FlightGroups[i].ArrivalDelayMinutes = miss.FlightGroups[i].ArrivalDelayMinutes;
+ xvt.FlightGroups[i].ArrivalDelaySeconds = miss.FlightGroups[i].ArrivalDelaySeconds;
+ xvt.FlightGroups[i].DepartureTimerMinutes = miss.FlightGroups[i].DepartureTimerMinutes;
+ xvt.FlightGroups[i].DepartureTimerSeconds = miss.FlightGroups[i].DepartureTimerSeconds;
+ xvt.FlightGroups[i].AbortTrigger = miss.FlightGroups[i].AbortTrigger;
+ xvt.FlightGroups[i].ArrivalCraft1 = miss.FlightGroups[i].ArrivalCraft1;
+ xvt.FlightGroups[i].ArrivalMethod1 = miss.FlightGroups[i].ArrivalMethod1;
+ xvt.FlightGroups[i].ArrivalCraft2 = miss.FlightGroups[i].ArrivalCraft2;
+ xvt.FlightGroups[i].ArrivalMethod2 = miss.FlightGroups[i].ArrivalMethod2;
+ xvt.FlightGroups[i].DepartureCraft1 = miss.FlightGroups[i].DepartureCraft1;
+ xvt.FlightGroups[i].DepartureMethod1 = miss.FlightGroups[i].DepartureMethod1;
+ xvt.FlightGroups[i].DepartureCraft2 = miss.FlightGroups[i].DepartureCraft2;
+ xvt.FlightGroups[i].DepartureMethod2 = miss.FlightGroups[i].DepartureMethod2;
+ #endregion
+ #region Goals
+ # endregion
+ for (int j = 0; j < 3; j++)
+ {
+ try { xvt.FlightGroups[i].Orders[j] = (Xvt.FlightGroup.Order)miss.FlightGroups[i].Orders[j]; }
+ catch (Exception x) { throw new ArgumentException("FG[" + i + "] Order[" + j + "]: " + x.Message, x); }
+ }
+ for (int j = 0; j < 15; j++)
+ xvt.FlightGroups[i].Waypoints[j] = miss.FlightGroups[i].Waypoints[j];
+ }
+ #endregion
+ #region Messages
+ #endregion
+ #region Briefing
+ #endregion
+ #region Globals
+ #endregion
+ #region IFF/Team
+ #endregion
+ #region Questions
+ #endregion
+
+ xvt.MissionPath = miss.MissionPath.ToUpper().Replace(".TIE", (bop ? "_BoP.tie" : "_XvT.tie"));
+ return xvt;
+ }
+
/// Downgrades XWA missions to XvT and BoP
/// Maximum CraftType of 91. Triggers will update.
/// For Triggers, maximum Trigger index of 46, maximum VariableType of 23, Amounts will be adjusted as "each special" to "100% special"
diff --git a/Readme.txt b/Readme.txt
index 46ebe5f..66de71c 100644
--- a/Readme.txt
+++ b/Readme.txt
@@ -3,16 +3,17 @@ Idmr.Platform.dll
Author: Michael Gaisser (mjgaisser@gmail.com)
Contributors: Random Starfighter (JB)
-Version: 5.8.1
-Date: 2023.10.14
+Version: 6.0
+Date: 2023.10.27
Library for editing LucasArts *.XWI and *.TIE mission files for Xwing95, TIE95, XvT and XWA
=========
Version History
+v6.0, 27 Oct 2023
- (XWA) FG.Designation Unknown 0x14 renamed to "HYP from Any Region" [YOGEME#91]
- - (XWA) Arr/Dep Method1 changed to byte to handle value of 2, "HYP to region of mothership"
+ - (XWA) Arr/Dep Method1 changed to byte to handle value of 2, "HYP to region of mothership" **BREAKING CHANGE**
v5.8.1, 14 Oct 2023
- (XWA) Added missing CraftWhen [YOGEME#90] and defined unknown Triggers [YOGEME#89]
diff --git a/Xwa/FlightGroup.cs b/Xwa/FlightGroup.cs
index 9f16f13..4468895 100644
--- a/Xwa/FlightGroup.cs
+++ b/Xwa/FlightGroup.cs
@@ -4,10 +4,11 @@
* Licensed under the MPL v2.0 or later
*
* Full notice in ../help/Idmr.Platform.chm
- * Version: 4.0+
+ * Version: 6.0
*/
/* CHANGELOG
+ * v6.0, 231027
* [FIX] Arr/Dep Method1 to byte
* v4.0, 200809
* [UPD] auto-properties
diff --git a/Xwa/Mission.cs b/Xwa/Mission.cs
index 64f5b34..72d02f4 100644
--- a/Xwa/Mission.cs
+++ b/Xwa/Mission.cs
@@ -4,10 +4,11 @@
* Licensed under the MPL v2.0 or later
*
* Full notice in ../help/Idmr.Platform.chm
- * Version: 5.7.5+
+ * Version: 6.0
*/
/* CHANGELOG
+ * v6.0, 231027
* [UPD] Changes due to XWA Arr/Dep Method1
* v5.7.5, 230116
* [FIX] Message read now uses LengthLimit
diff --git a/Xwa/Strings.cs b/Xwa/Strings.cs
index 92cb3a4..d4456b1 100644
--- a/Xwa/Strings.cs
+++ b/Xwa/Strings.cs
@@ -4,10 +4,11 @@
* Licensed under the MPL v2.0 or later
*
* Full notice in ../help/Idmr.Platform.chm
- * Version: 5.8.1+
+ * Version: 6.0
*/
/* CHANGELOG
+ * v6.0, 231027
* [UPD] Role unk uncovered [YOGEME#91]
* v5.8.1, 231014
* [UPD] Added missing CraftWhen [YOGEME#90]
diff --git a/help/Idmr.Platform.chm b/help/Idmr.Platform.chm
index efba0b3..8ac8477 100644
Binary files a/help/Idmr.Platform.chm and b/help/Idmr.Platform.chm differ