Exemple #1
0
 /// <summary>Downgrades XWA missions to TIE95</summary>
 /// <remarks>G/PLT, SHPYD, REPYD and M/SC craft will have their indexes changed to reflect IDMR TIE95 Ships patch numbering. Triggers will update.<br/>
 /// FG.Radio is not converted, since TIE behaviour is different<br/>
 /// Maximum FG.Formation value of 12 allowed<br/>
 /// For Triggers, maximum Trigger index of 24, maximum VariableType of 9, Amounts will be adjusted as 66% to 75%, 33% to 50% and "each" to 100%<br/>
 /// Maximum Abort index of 5<br/>
 /// Maximum FG.Goal Amount index of 6, 75% converted to 100%, 25% to 50%. First three XvT Goals will be used as Primary, Secondary and Bonus goals. Bonus points will be scaled appropriately. Goals only used if set for Team[0] and Enabled<br/>
 /// First two Arrival triggers used, first Departure trigger used. First three Region 1 Orders used, max index of 38.<br/>
 /// Only Start and Hyp WPs converted, manual placement for WP1-8 required.<br/>
 /// For Messages, first two triggers used.<br/>
 /// For the Briefing, first 16 strings and text tags are copied, events are ignored (due to using icons instead of Craft)<br/>
 /// Primary Global goals used, XWA Secondary goals converted to Bonus goals. Prevent goals ignored<br/>
 /// Team[0] EndOfMissionMessages used, Teams[2-6] Name and Hostility towards Team[0] used for IFF<br/>
 /// BriefingQuestions generated using MissionSucc/Fail/Desc strings. Flight Officer has a single pre-mission entry for the Description, two post-mission entries for the Success and Fail. Line breaks must be entered manually<br/>
 /// Filename will end in "_TIE.tie"</remarks>
 /// <param name="miss">XWA mission to convert</param>
 /// <returns>Downgraded mission</returns>
 /// <exception cref="System.ArgumentException">Properties incompatable with TIE95 were detected in <i>miss</i></exception>
 public static Tie.Mission XwaToTie(Xwa.Mission miss)
 {
     Tie.Mission tie = new Tie.Mission();
     if (miss.FlightGroups.Count > Tie.Mission.FlightGroupLimit)
     {
         throw maxException(true, true, Tie.Mission.FlightGroupLimit);
     }
     if (miss.Messages.Count > Tie.Mission.MessageLimit)
     {
         throw maxException(true, false, Tie.Mission.MessageLimit);
     }
     tie.FlightGroups = new Tie.FlightGroupCollection(miss.FlightGroups.Count);
     if (miss.Messages.Count > 0)
     {
         tie.Messages = new Tie.MessageCollection(miss.Messages.Count);
     }
     #region FGs
     for (int i = 0; i < tie.FlightGroups.Count; i++)
     {
         #region Craft
         // Radio is omitted intentionally
         tie.FlightGroups[i].Name              = miss.FlightGroups[i].Name;
         tie.FlightGroups[i].Cargo             = miss.FlightGroups[i].Cargo;
         tie.FlightGroups[i].SpecialCargo      = miss.FlightGroups[i].SpecialCargo;
         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]);
         }
         tie.FlightGroups[i].NumberOfCraft = miss.FlightGroups[i].NumberOfCraft;
         tie.FlightGroups[i].Status1       = miss.FlightGroups[i].Status1;
         if (tie.FlightGroups[i].Status1 > 19)
         {
             throw flightException(0, i, Xwa.Strings.Status[miss.FlightGroups[i].Status1]);
         }
         tie.FlightGroups[i].Missile  = miss.FlightGroups[i].Missile;
         tie.FlightGroups[i].Beam     = miss.FlightGroups[i].Beam;
         tie.FlightGroups[i].IFF      = miss.FlightGroups[i].IFF;
         tie.FlightGroups[i].AI       = miss.FlightGroups[i].AI;
         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]);
         }
         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;
         tie.FlightGroups[i].FormLeaderDist = miss.FlightGroups[i].FormLeaderDist;
         tie.FlightGroups[i].NumberOfWaves  = miss.FlightGroups[i].NumberOfWaves;
         tie.FlightGroups[i].PlayerCraft    = (byte)(miss.FlightGroups[i].PlayerCraft + (miss.FlightGroups[i].PlayerNumber == 1 ? 1 : 0));
         tie.FlightGroups[i].Yaw            = miss.FlightGroups[i].Yaw;
         tie.FlightGroups[i].Pitch          = miss.FlightGroups[i].Pitch;
         tie.FlightGroups[i].Roll           = miss.FlightGroups[i].Roll;
         #endregion Craft
         #region ArrDep
         tie.FlightGroups[i].Difficulty = miss.FlightGroups[i].Difficulty;
         for (int j = 0; j < 3; j++)
         {
             try { tie.FlightGroups[i].ArrDepTriggers[j] = (Tie.Mission.Trigger)miss.FlightGroups[i].ArrDepTriggers[(j == 2 ? 4 : j)]; }
             catch (Exception x) { throw new ArgumentException("FG[" + i + "] ArrDep[" + j + "]: " + x.Message, x); }
         }
         tie.FlightGroups[i].AT1AndOrAT2           = miss.FlightGroups[i].ArrDepAndOr[0];
         tie.FlightGroups[i].ArrivalDelayMinutes   = miss.FlightGroups[i].ArrivalDelayMinutes;
         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]);
         }
         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;
         tie.FlightGroups[i].ArrivalCraft2    = miss.FlightGroups[i].ArrivalCraft2;
         tie.FlightGroups[i].ArrivalMethod2   = miss.FlightGroups[i].ArrivalMethod2;
         tie.FlightGroups[i].DepartureCraft1  = miss.FlightGroups[i].DepartureCraft1;
         tie.FlightGroups[i].DepartureMethod1 = miss.FlightGroups[i].DepartureMethod1;
         tie.FlightGroups[i].DepartureCraft2  = miss.FlightGroups[i].DepartureCraft2;
         tie.FlightGroups[i].DepartureMethod2 = miss.FlightGroups[i].DepartureMethod2;
         #endregion ArrDep
         #region Goals
         if ((miss.FlightGroups[i].Goals[0].Enabled) && miss.FlightGroups[i].Goals[0].Team == 0)
         {
             tie.FlightGroups[i].Goals[0] = miss.FlightGroups[i].Goals[0][1];
             tie.FlightGroups[i].Goals[1] = miss.FlightGroups[i].Goals[0][2];
         }
         if ((miss.FlightGroups[i].Goals[1].Enabled) && miss.FlightGroups[i].Goals[1].Team == 0)
         {
             tie.FlightGroups[i].Goals[2] = miss.FlightGroups[i].Goals[1][1];
             tie.FlightGroups[i].Goals[3] = miss.FlightGroups[i].Goals[1][2];
         }
         if ((miss.FlightGroups[i].Goals[2].Enabled) && miss.FlightGroups[i].Goals[2].Team == 0)
         {
             tie.FlightGroups[i].Goals[6] = miss.FlightGroups[i].Goals[2][1];
             tie.FlightGroups[i].Goals[7] = miss.FlightGroups[i].Goals[2][2];
             tie.FlightGroups[i].Goals[8] = miss.FlightGroups[i].Goals[2][3];
         }
         tieGoalsCheck("FlightGroup " + i, tie.FlightGroups[i].Goals);
         #endregion Goals
         for (int j = 0; j < 3; j++)
         {
             try { tie.FlightGroups[i].Orders[j] = (Tie.FlightGroup.Order)miss.FlightGroups[i].Orders[0, j]; }
             catch (Exception x) { throw new ArgumentException("FG[" + i + "] Order[" + j + "]: " + x.Message, x); }
         }
         for (int j = 0; j < 3; j++)
         {
             tie.FlightGroups[i].Waypoints[j] = (Tie.FlightGroup.Waypoint)miss.FlightGroups[i].Waypoints[j];
         }
         tie.FlightGroups[i].Waypoints[13] = (Tie.FlightGroup.Waypoint)miss.FlightGroups[i].Waypoints[3];
     }
     #endregion FGs
     #region Messages
     for (int i = 0; i < tie.Messages.Count; i++)
     {
         tie.Messages[i].MessageString   = miss.Messages[i].MessageString;
         tie.Messages[i].Color           = miss.Messages[i].Color;
         tie.Messages[i].Delay           = (byte)((miss.Messages[i].DelaySeconds + miss.Messages[i].DelayMinutes * 60) / 5);             // should throw if delay > 21:15
         tie.Messages[i].Short           = miss.Messages[i].Note;
         tie.Messages[i].Trig1AndOrTrig2 = miss.Messages[i].TrigAndOr[0];
         for (int j = 0; j < 2; j++)
         {
             try { tie.Messages[i].Triggers[j] = (Tie.Mission.Trigger)miss.Messages[i].Triggers[j]; }
             catch (Exception x) { throw new ArgumentException("Mess[" + i + "] T[" + j + "]: " + x.Message, x); }
         }
     }
     #endregion Messages
     #region Briefing
     for (int i = 0; i < tie.Briefing.BriefingTag.Length; i++)
     {
         tie.Briefing.BriefingTag[i] = miss.Briefings[0].BriefingTag[i];
     }
     for (int i = 0; i < tie.Briefing.BriefingString.Length; i++)
     {
         tie.Briefing.BriefingString[i] = miss.Briefings[0].BriefingString[i];
     }
     tie.Briefing.Unknown1 = miss.Briefings[0].Unknown1;
     tie.Briefing.Length   = (short)(miss.Briefings[0].Length * Tie.Briefing.TicksPerSecond / Xwa.Briefing.TicksPerSecond);
     #endregion Briefing
     #region Globals
     tie.GlobalGoals.Goals[0].T1AndOrT2 = miss.Globals[0].Goals[0].T1AndOrT2;                    // Primary
     tie.GlobalGoals.Goals[2].T1AndOrT2 = miss.Globals[0].Goals[2].T1AndOrT2;                    // Secondary to Bonus, Prevent will be ignored
     for (int j = 0; j < 4; j++)
     {
         try { tie.GlobalGoals.Goals[j / 2 * 2].Triggers[j % 2] = (Tie.Mission.Trigger)miss.Globals[0].Goals[j / 2 * 2].Triggers[j % 2]; }
         catch (Exception x) { throw new ArgumentException("Goal[" + (j / 2 * 2) + "] T[" + (j % 2) + "]: " + x.Message, x); }
     }
     #endregion Globals
     #region IFF/Team
     for (int i = 0; i < 6; i++)
     {
         tie.EndOfMissionMessages[i] = miss.Teams[0].EndOfMissionMessages[i];
     }
     for (int i = 2; i < 6; i++)
     {
         tie.IFFs[i]       = miss.Teams[i].Name;
         tie.IffHostile[i] = ((int)miss.Teams[0].Allies[i] == 0);
     }
     #endregion IFF/Team
     #region Questions
     if (miss.MissionDescription != "")
     {
         tie.BriefingQuestions.PreMissQuestions[0] = "What are the mission objectives?";
         tie.BriefingQuestions.PreMissAnswers[0]   = miss.MissionDescription;                    // line breaks will have to be manually placed
     }
     if (miss.MissionSuccessful != "")
     {
         tie.BriefingQuestions.PostMissQuestions[0] = "What have I accomplished?";
         tie.BriefingQuestions.PostMissAnswers[0]   = miss.MissionSuccessful;                    // again, line breaks
         tie.BriefingQuestions.PostTrigger[0]       = 4;
         tie.BriefingQuestions.PostTrigType[0]      = 1;
     }
     if (miss.MissionFailed != "")
     {
         tie.BriefingQuestions.PostMissQuestions[1] = "Any suggestions?";
         tie.BriefingQuestions.PostMissAnswers[1]   = miss.MissionFailed;                // again, line breaks
         tie.BriefingQuestions.PostTrigger[1]       = 5;
         tie.BriefingQuestions.PostTrigType[1]      = 1;
     }
     #endregion Questions
     tie.MissionPath = miss.MissionPath.ToUpper().Replace(".TIE", "_TIE.tie");
     return(tie);
 }
Exemple #2
0
 /// <summary>Downgrades XvT and BoP missions to TIE95</summary>
 /// <remarks>G/PLT, SHPYD, REPYD and M/SC craft will have their indexes changed to reflect IDMR TIE95 Ships patch numbering. Triggers and orders will update.<br/>
 /// FG.Radio is not converted, since TIE behaviour is different<br/>
 /// Maximum FG.Formation value of 12 allowed<br/>
 /// For Triggers, maximum Trigger index of 24, maximum VariableType of 9, Amounts will be adjusted as 66% to 75%, 33% to 50% and "each" to 100%<br/>
 /// Maximum Abort index of 5<br/>
 /// Maximum FG.Goal Amount index of 6, 75% converted to 100%, 25% to 50%. First three XvT Goals will be used as Primary, Secondary and Bonus goals. Bonus points will be scaled appropriately. Goals only used if set for Team[0] and Enabled<br/>
 /// First two Arrival triggers used, first Departure trigger used. First three Orders used. All standard WPs and first Briefing WP used.<br/>
 /// For Messages, first two triggers used.<br/>
 /// For the Briefing, entire thing should be able to be used unless the original actually uses close to 200 commands (yikes). There is a conversion on the Zoom factor, this is a legacy factor from my old Converter program, I don't remember why.<br/>
 /// Primary Global goals used, XvT Secondary goals converted to Bonus goals. Prevent goals ignored<br/>
 /// Team[0] EndOfMissionMessages used, Teams[2-6] Name and Hostility towards Team[0] used for IFF<br/>
 /// BriefingQuestions generated using MissionSucc/Fail/Desc strings. Flight Officer has a single pre-mission entry for the Description, two post-mission entries for the Success and Fail. Line breaks must be entered manually<br/>
 /// Filename will end in "_TIE.tie"</remarks>
 /// <param name="miss">XvT/BoP mission to convert</param>
 /// <returns>Downgraded mission</returns>
 /// <exception cref="System.ArgumentException">Properties incompatable with TIE95 were detected in <i>miss</i></exception>
 public static Tie.Mission XvtBopToTie(Xvt.Mission miss)
 {
     Tie.Mission tie = new Tie.Mission();
     // FG limit is okay, since XvT < TIE for some reason
     if (miss.Messages.Count > Tie.Mission.MessageLimit)
     {
         throw maxException(true, false, Tie.Mission.MessageLimit);
     }
     tie.FlightGroups = new Tie.FlightGroupCollection(miss.FlightGroups.Count);
     if (miss.Messages.Count > 0)
     {
         tie.Messages = new Tie.MessageCollection(miss.Messages.Count);
     }
     #region FGs
     for (int i = 0; i < tie.FlightGroups.Count; i++)
     {
         #region Craft
         // Radio is omitted intentionally
         tie.FlightGroups[i].Name              = miss.FlightGroups[i].Name;
         tie.FlightGroups[i].Cargo             = miss.FlightGroups[i].Cargo;
         tie.FlightGroups[i].SpecialCargo      = miss.FlightGroups[i].SpecialCargo;
         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]);
         }
         tie.FlightGroups[i].NumberOfCraft = miss.FlightGroups[i].NumberOfCraft;
         tie.FlightGroups[i].Status1       = miss.FlightGroups[i].Status1;
         tie.FlightGroups[i].Missile       = miss.FlightGroups[i].Missile;
         tie.FlightGroups[i].Beam          = miss.FlightGroups[i].Beam;
         tie.FlightGroups[i].IFF           = miss.FlightGroups[i].IFF;
         tie.FlightGroups[i].AI            = miss.FlightGroups[i].AI;
         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]);
         }
         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;
         tie.FlightGroups[i].FormLeaderDist = miss.FlightGroups[i].FormLeaderDist;
         tie.FlightGroups[i].NumberOfWaves  = miss.FlightGroups[i].NumberOfWaves;
         tie.FlightGroups[i].PlayerCraft    = miss.FlightGroups[i].PlayerCraft;
         tie.FlightGroups[i].Yaw            = miss.FlightGroups[i].Yaw;
         tie.FlightGroups[i].Pitch          = miss.FlightGroups[i].Pitch;
         tie.FlightGroups[i].Roll           = miss.FlightGroups[i].Roll;
         #endregion Craft
         #region ArrDep
         tie.FlightGroups[i].Difficulty = miss.FlightGroups[i].Difficulty;
         for (int j = 0; j < 3; j++)
         {
             try { tie.FlightGroups[i].ArrDepTriggers[j] = (Tie.Mission.Trigger)miss.FlightGroups[i].ArrDepTriggers[j]; }
             catch (Exception x) { throw new ArgumentException("FG[" + i + "] ArrDep[" + j + "]: " + x.Message, x); }
         }
         tie.FlightGroups[i].AT1AndOrAT2           = miss.FlightGroups[i].ArrDepAO[0];
         tie.FlightGroups[i].ArrivalDelayMinutes   = miss.FlightGroups[i].ArrivalDelayMinutes;
         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]);
         }
         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;
         tie.FlightGroups[i].ArrivalCraft2    = miss.FlightGroups[i].ArrivalCraft2;
         tie.FlightGroups[i].ArrivalMethod2   = miss.FlightGroups[i].ArrivalMethod2;
         tie.FlightGroups[i].DepartureCraft1  = miss.FlightGroups[i].DepartureCraft1;
         tie.FlightGroups[i].DepartureMethod1 = miss.FlightGroups[i].DepartureMethod1;
         tie.FlightGroups[i].DepartureCraft2  = miss.FlightGroups[i].DepartureCraft2;
         tie.FlightGroups[i].DepartureMethod2 = miss.FlightGroups[i].DepartureMethod2;
         #endregion ArrDep
         #region Goals
         if ((miss.FlightGroups[i].Goals[0].Enabled == true) && miss.FlightGroups[i].Goals[0].Team == 0)
         {
             tie.FlightGroups[i].Goals.PrimaryCondition = miss.FlightGroups[i].Goals[0].Condition;
             tie.FlightGroups[i].Goals.PrimaryAmount    = miss.FlightGroups[i].Goals[0].Amount;
         }
         if ((miss.FlightGroups[i].Goals[1].Enabled == true) && miss.FlightGroups[i].Goals[1].Team == 0)
         {
             tie.FlightGroups[i].Goals.SecondaryCondition = miss.FlightGroups[i].Goals[1].Condition;
             tie.FlightGroups[i].Goals.SecondaryAmount    = miss.FlightGroups[i].Goals[1].Amount;
         }
         if ((miss.FlightGroups[i].Goals[2].Enabled == true) && miss.FlightGroups[i].Goals[2].Team == 0)
         {
             tie.FlightGroups[i].Goals.BonusCondition = miss.FlightGroups[i].Goals[2].Condition;
             tie.FlightGroups[i].Goals.BonusAmount    = miss.FlightGroups[i].Goals[2].Amount;
             tie.FlightGroups[i].Goals.RawBonusPoints = miss.FlightGroups[i].Goals[2].RawPoints;
         }
         tieGoalsCheck("FlightGroup " + i, tie.FlightGroups[i].Goals);
         #endregion Goals
         for (int j = 0; j < 3; j++)
         {
             try { tie.FlightGroups[i].Orders[j] = (Tie.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++)
         {
             tie.FlightGroups[i].Waypoints[j] = (Tie.FlightGroup.Waypoint)miss.FlightGroups[i].Waypoints[j];
         }
     }
     #endregion FGs
     #region Messages
     for (int i = 0; i < tie.Messages.Count; i++)
     {
         tie.Messages[i].MessageString   = miss.Messages[i].MessageString;
         tie.Messages[i].Color           = miss.Messages[i].Color;
         tie.Messages[i].Delay           = miss.Messages[i].Delay;
         tie.Messages[i].Short           = miss.Messages[i].Note;
         tie.Messages[i].Trig1AndOrTrig2 = miss.Messages[i].T1AndOrT2;
         for (int j = 0; j < 2; j++)
         {
             try { tie.Messages[i].Triggers[j] = (Tie.Mission.Trigger)miss.Messages[i].Triggers[j]; }
             catch (Exception x) { throw new ArgumentException("Mess[" + i + "] T[" + j + "]: " + x.Message, x); }
         }
     }
     #endregion Messages
     #region Briefing
     for (int i = 0; i < tie.Briefing.BriefingTag.Length; i++)
     {
         tie.Briefing.BriefingTag[i] = miss.Briefings[0].BriefingTag[i];
     }
     for (int i = 0; i < tie.Briefing.BriefingString.Length; i++)
     {
         tie.Briefing.BriefingString[i] = miss.Briefings[0].BriefingString[i];
     }
     tie.Briefing.Unknown1 = miss.Briefings[0].Unknown1;
     tie.Briefing.Length   = (short)(miss.Briefings[0].Length * Tie.Briefing.TicksPerSecond / Xvt.Briefing.TicksPerSecond);
     for (int i = 0; i < tie.Briefing.Events.Length; i += 2)
     {
         short time = miss.Briefings[0].Events[i];
         short evnt = miss.Briefings[0].Events[i + 1];
         tie.Briefing.Events[i + 1] = evnt;
         if (time == 9999 && evnt == 0x22)
         {
             tie.Briefing.Events[i] = time;
             break;
         }
         tie.Briefing.Events[i] = (short)(time * Tie.Briefing.TicksPerSecond / Xvt.Briefing.TicksPerSecond);
         i += 2;
         for (int j = 0; j < tie.Briefing.EventParameterCount[evnt]; j++, i++)
         {
             tie.Briefing.Events[i] = miss.Briefings[0].Events[i];
         }
     }
     #endregion Briefing
     #region Globals
     tie.GlobalGoals.Goals[0].T1AndOrT2 = miss.Globals[0].Goals[0].T1AndOrT2;                    // Primary
     tie.GlobalGoals.Goals[2].T1AndOrT2 = miss.Globals[0].Goals[2].T1AndOrT2;                    // Secondary to Bonus, Prevent will be ignored
     for (int j = 0; j < 4; j++)
     {
         try { tie.GlobalGoals.Goals[j / 2 * 2].Triggers[j % 2] = (Tie.Mission.Trigger)miss.Globals[0].Goals[j / 2 * 2].Triggers[j % 2].GoalTrigger; }
         catch (Exception x) { throw new ArgumentException("Goal[" + (j / 2 * 2) + "] T[" + (j % 2) + "]: " + x.Message, x); }
     }
     #endregion Globals
     #region IFF/Team
     for (int i = 0; i < 6; i++)
     {
         tie.EndOfMissionMessages[i] = miss.Teams[0].EndOfMissionMessages[i];
     }
     for (int i = 2; i < 6; i++)
     {
         tie.IFFs[i]       = miss.Teams[i].Name;
         tie.IffHostile[i] = !miss.Teams[0].AlliedWithTeam[i];
     }
     #endregion IFF/Team
     #region Questions
     if (miss.MissionDescription != "")
     {
         tie.BriefingQuestions.PreMissQuestions[0] = "What are the mission objectives?";
         tie.BriefingQuestions.PreMissAnswers[0]   = miss.MissionDescription;                    // line breaks will have to be manually placed
     }
     if (miss.MissionSuccessful != "")
     {
         tie.BriefingQuestions.PostMissQuestions[0] = "What have I accomplished?";
         tie.BriefingQuestions.PostMissAnswers[0]   = miss.MissionSuccessful;                    // again, line breaks
         tie.BriefingQuestions.PostTrigger[0]       = 4;
         tie.BriefingQuestions.PostTrigType[0]      = 1;
     }
     if (miss.MissionFailed != "")
     {
         tie.BriefingQuestions.PostMissQuestions[1] = "Any suggestions?";
         tie.BriefingQuestions.PostMissAnswers[1]   = miss.MissionFailed;                // again, line breaks
         tie.BriefingQuestions.PostTrigger[1]       = 5;
         tie.BriefingQuestions.PostTrigType[1]      = 1;
     }
     #endregion Questions
     tie.MissionPath = miss.MissionPath.ToUpper().Replace(".TIE", "_TIE.tie");
     return(tie);
 }
Exemple #3
0
            static void checkValues(Order o)
            {
                string error = "";
                string msg;
                byte   tempVar;

                if (o.Command > 39)
                {
                    error += "Command (" + o.Command + ")";
                }
                if (o.Target1Type == 10)
                {
                    o.Target1Type = o.Target1 = 0;
                }
                if (o.Target2Type == 10)
                {
                    o.Target2Type = o.Target2 = 0;
                }
                if (o.Target3Type == 10)
                {
                    o.Target3Type = o.Target3 = 0;
                }
                if (o.Target4Type == 10)
                {
                    o.Target4Type = o.Target4 = 0;
                }
                if (o.Target3Type == 3 && o.Target3 > 6)
                {
                    o.Target3Type = 0; o.Target3 = 0;
                }
                ;                                                                                               //[JB] Hack to fix TIE DOS B2M3IW.TIE
                tempVar = o.Target1;
                Mission.CheckTarget(o.Target1Type, ref tempVar, out msg);
                o.Target1 = tempVar;
                if (msg != "")
                {
                    error += (error != "" ? ", " : "") + "T1 " + msg;
                }
                tempVar = o.Target2;
                Mission.CheckTarget(o.Target2Type, ref tempVar, out msg);
                o.Target2 = tempVar;
                if (msg != "")
                {
                    error += (error != "" ? ", " : "") + "T2 " + msg;
                }
                tempVar = o.Target3;
                Mission.CheckTarget(o.Target3Type, ref tempVar, out msg);
                o.Target3 = tempVar;
                if (msg != "")
                {
                    error += (error != "" ? ", " : "") + "T3 " + msg;
                }
                tempVar = o.Target4;
                Mission.CheckTarget(o.Target4Type, ref tempVar, out msg);
                o.Target4 = tempVar;
                if (msg != "")
                {
                    error += (error != "" ? ", " : "") + "T4 " + msg;
                }
                if (error != "")
                {
                    throw new ArgumentException("Invalid values detected: " + error);
                }
            }
 /// <summary>Initializes the indexer</summary>
 /// <param name="parent">The parent Mission</param>
 public IffNameIndexer(Mission parent) : base(parent._iff)
 {
     _owner = parent;
 }
Exemple #5
0
 /// <summary>Downgrades XvT and BoP missions to TIE95</summary>
 /// <remarks>G/PLT, SHPYD, REPYD and M/SC craft will have their indexes changed to reflect IDMR TIE95 Ships patch numbering. Triggers and orders will update.<br/>
 /// FG.Radio is not converted, since TIE behaviour is different<br/>
 /// Maximum FG.Formation value of 12 allowed<br/>
 /// For Triggers, maximum Trigger index of 24, maximum VariableType of 9, Amounts will be adjusted as 66% to 75%, 33% to 50% and "each" to 100%<br/>
 /// Maximum Abort index of 5<br/>
 /// Maximum FG.Goal Amount index of 6, 75% converted to 100%, 25% to 50%. First three XvT Goals will be used as Primary, Secondary and Bonus goals. Bonus points will be scaled appropriately. Goals only used if set for Team[0] and Enabled<br/>
 /// First two Arrival triggers used, first Departure trigger used. First three Orders used. All standard WPs and first Briefing WP used.<br/>
 /// For Messages, first two triggers used.<br/>
 /// For the Briefing, entire thing should be able to be used unless the original actually uses close to 200 commands (yikes). There is a conversion on the Zoom factor, this is a legacy factor from my old Converter program, I don't remember why.<br/>
 /// Primary Global goals used, XvT Secondary goals converted to Bonus goals. Prevent goals ignored<br/>
 /// Team[0] EndOfMissionMessages used, Teams[2-6] Name and Hostility towards Team[0] used for IFF<br/>
 /// BriefingQuestions generated using MissionSucc/Fail/Desc strings. Flight Officer has a single pre-mission entry for the Description, two post-mission entries for the Success and Fail. Line breaks must be entered manually<br/>
 /// Filename will end in "_TIE.tie"</remarks>
 /// <param name="miss">XvT/BoP mission to convert</param>
 /// <returns>Downgraded mission</returns>
 /// <exception cref="System.ArgumentException">Properties incompatable with TIE95 were detected in <i>miss</i></exception>
 public static Tie.Mission XvtBopToTie(Xvt.Mission miss)
 {
     Tie.Mission tie = new Tie.Mission();
     // FG limit is okay, since XvT < TIE for some reason
     if (miss.Messages.Count > Tie.Mission.MessageLimit) throw maxException(true, false, Tie.Mission.MessageLimit);
     tie.FlightGroups = new Tie.FlightGroupCollection(miss.FlightGroups.Count);
     if (miss.Messages.Count > 0) tie.Messages = new Tie.MessageCollection(miss.Messages.Count);
     #region FGs
     for (int i = 0; i < tie.FlightGroups.Count; i++)
     {
         #region Craft
         // Radio is omitted intentionally
         tie.FlightGroups[i].Name = miss.FlightGroups[i].Name;
         tie.FlightGroups[i].Cargo = miss.FlightGroups[i].Cargo;
         tie.FlightGroups[i].SpecialCargo = miss.FlightGroups[i].SpecialCargo;
         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]);
         tie.FlightGroups[i].NumberOfCraft = miss.FlightGroups[i].NumberOfCraft;
         tie.FlightGroups[i].Status1 = miss.FlightGroups[i].Status1;
         tie.FlightGroups[i].Missile = miss.FlightGroups[i].Missile;
         tie.FlightGroups[i].Beam = miss.FlightGroups[i].Beam;
         tie.FlightGroups[i].IFF = miss.FlightGroups[i].IFF;
         tie.FlightGroups[i].AI = miss.FlightGroups[i].AI;
         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]);
         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;
         tie.FlightGroups[i].FormLeaderDist = miss.FlightGroups[i].FormLeaderDist;
         tie.FlightGroups[i].NumberOfWaves = miss.FlightGroups[i].NumberOfWaves;
         tie.FlightGroups[i].PlayerCraft = miss.FlightGroups[i].PlayerCraft;
         tie.FlightGroups[i].Yaw = miss.FlightGroups[i].Yaw;
         tie.FlightGroups[i].Pitch = miss.FlightGroups[i].Pitch;
         tie.FlightGroups[i].Roll = miss.FlightGroups[i].Roll;
         #endregion Craft
         #region ArrDep
         tie.FlightGroups[i].Difficulty = miss.FlightGroups[i].Difficulty;
         for (int j = 0; j < 3; j++)
         {
             try { tie.FlightGroups[i].ArrDepTriggers[j] = (Tie.Mission.Trigger)miss.FlightGroups[i].ArrDepTriggers[j]; }
             catch (Exception x) { throw new ArgumentException("FG[" + i + "] ArrDep[" + j + "]: " + x.Message, x); }
         }
         tie.FlightGroups[i].AT1AndOrAT2 = miss.FlightGroups[i].ArrDepAO[0];
         tie.FlightGroups[i].ArrivalDelayMinutes = miss.FlightGroups[i].ArrivalDelayMinutes;
         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]);
         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;
         tie.FlightGroups[i].ArrivalCraft2 = miss.FlightGroups[i].ArrivalCraft2;
         tie.FlightGroups[i].ArrivalMethod2 = miss.FlightGroups[i].ArrivalMethod2;
         tie.FlightGroups[i].DepartureCraft1 = miss.FlightGroups[i].DepartureCraft1;
         tie.FlightGroups[i].DepartureMethod1 = miss.FlightGroups[i].DepartureMethod1;
         tie.FlightGroups[i].DepartureCraft2 = miss.FlightGroups[i].DepartureCraft2;
         tie.FlightGroups[i].DepartureMethod2 = miss.FlightGroups[i].DepartureMethod2;
         #endregion ArrDep
         #region Goals
         if ((miss.FlightGroups[i].Goals[0].Enabled == true) && miss.FlightGroups[i].Goals[0].Team == 0)
         {
             tie.FlightGroups[i].Goals.PrimaryCondition = miss.FlightGroups[i].Goals[0].Condition;
             tie.FlightGroups[i].Goals.PrimaryAmount = miss.FlightGroups[i].Goals[0].Amount;
         }
         if ((miss.FlightGroups[i].Goals[1].Enabled == true) && miss.FlightGroups[i].Goals[1].Team == 0)
         {
             tie.FlightGroups[i].Goals.SecondaryCondition = miss.FlightGroups[i].Goals[1].Condition;
             tie.FlightGroups[i].Goals.SecondaryAmount = miss.FlightGroups[i].Goals[1].Amount;
         }
         if ((miss.FlightGroups[i].Goals[2].Enabled == true) && miss.FlightGroups[i].Goals[2].Team == 0)
         {
             tie.FlightGroups[i].Goals.BonusCondition = miss.FlightGroups[i].Goals[2].Condition;
             tie.FlightGroups[i].Goals.BonusAmount = miss.FlightGroups[i].Goals[2].Amount;
             tie.FlightGroups[i].Goals.RawBonusPoints = miss.FlightGroups[i].Goals[2].RawPoints;
         }
         tieGoalsCheck("FlightGroup " + i, tie.FlightGroups[i].Goals);
         #endregion Goals
         for (int j = 0; j < 3; j++)
         {
             try { tie.FlightGroups[i].Orders[j] = (Tie.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++)
             tie.FlightGroups[i].Waypoints[j] = (Tie.FlightGroup.Waypoint)miss.FlightGroups[i].Waypoints[j];
     }
     #endregion FGs
     #region Messages
     for (int i=0; i < tie.Messages.Count; i++)
     {
         tie.Messages[i].MessageString = miss.Messages[i].MessageString;
         tie.Messages[i].Color = miss.Messages[i].Color;
         tie.Messages[i].Delay = miss.Messages[i].Delay;
         tie.Messages[i].Short = miss.Messages[i].Note;
         tie.Messages[i].Trig1AndOrTrig2 = miss.Messages[i].T1AndOrT2;
         for (int j = 0; j < 2; j++)
         {
             try { tie.Messages[i].Triggers[j] = (Tie.Mission.Trigger)miss.Messages[i].Triggers[j]; }
             catch (Exception x) { throw new ArgumentException("Mess[" + i + "] T[" + j + "]: " + x.Message, x); }
         }
     }
     #endregion Messages
     #region Briefing
     for (int i = 0; i < tie.Briefing.BriefingTag.Length; i++) tie.Briefing.BriefingTag[i] = miss.Briefings[0].BriefingTag[i];
     for (int i = 0; i < tie.Briefing.BriefingString.Length; i++) tie.Briefing.BriefingString[i] = miss.Briefings[0].BriefingString[i];
     tie.Briefing.Unknown1 = miss.Briefings[0].Unknown1;
     tie.Briefing.Length = (short)(miss.Briefings[0].Length * Tie.Briefing.TicksPerSecond / Xvt.Briefing.TicksPerSecond);
     for (int i = 0; i < tie.Briefing.Events.Length; i += 2)
     {
         short time = miss.Briefings[0].Events[i];
         short evnt = miss.Briefings[0].Events[i + 1];
         tie.Briefing.Events[i + 1] = evnt;
         if (time == 9999 && evnt == 0x22)
         {
             tie.Briefing.Events[i] = time;
             break;
         }
         tie.Briefing.Events[i] = (short)(time * Tie.Briefing.TicksPerSecond / Xvt.Briefing.TicksPerSecond);
         i += 2;
         for (int j = 0; j < tie.Briefing.EventParameterCount[evnt]; j++, i++)
             tie.Briefing.Events[i] = miss.Briefings[0].Events[i];
     }
     #endregion Briefing
     #region Globals
     tie.GlobalGoals.Goals[0].T1AndOrT2 = miss.Globals[0].Goals[0].T1AndOrT2;	// Primary
     tie.GlobalGoals.Goals[2].T1AndOrT2 = miss.Globals[0].Goals[2].T1AndOrT2;	// Secondary to Bonus, Prevent will be ignored
     for (int j = 0; j < 4; j++)
     {
         try { tie.GlobalGoals.Goals[j/2*2].Triggers[j%2] = (Tie.Mission.Trigger)miss.Globals[0].Goals[j/2*2].Triggers[j%2].GoalTrigger; }
         catch (Exception x) { throw new ArgumentException("Goal[" + (j/2*2) + "] T[" + (j%2) + "]: " + x.Message, x); }
     }
     #endregion Globals
     #region IFF/Team
     for (int i = 0; i < 6; i++) tie.EndOfMissionMessages[i] = miss.Teams[0].EndOfMissionMessages[i];
     for (int i = 2; i < 6; i++)
     {
         tie.IFFs[i] = miss.Teams[i].Name;
         tie.IffHostile[i] = !miss.Teams[0].AlliedWithTeam[i];
     }
     #endregion IFF/Team
     #region Questions
     if (miss.MissionDescription != "")
     {
         tie.BriefingQuestions.PreMissQuestions[0] = "What are the mission objectives?";
         tie.BriefingQuestions.PreMissAnswers[0] = miss.MissionDescription;	// line breaks will have to be manually placed
     }
     if (miss.MissionSuccessful != "")
     {
         tie.BriefingQuestions.PostMissQuestions[0] = "What have I accomplished?";
         tie.BriefingQuestions.PostMissAnswers[0] = miss.MissionSuccessful;	// again, line breaks
         tie.BriefingQuestions.PostTrigger[0] = 4;
         tie.BriefingQuestions.PostTrigType[0] = 1;
     }
     if (miss.MissionFailed != "")
     {
         tie.BriefingQuestions.PostMissQuestions[1] = "Any suggestions?";
         tie.BriefingQuestions.PostMissAnswers[1] = miss.MissionFailed;	// again, line breaks
         tie.BriefingQuestions.PostTrigger[1] = 5;
         tie.BriefingQuestions.PostTrigType[1] = 1;
     }
     #endregion Questions
     tie.MissionPath = miss.MissionPath.ToUpper().Replace(".TIE", "_TIE.tie");
     return tie;
 }
Exemple #6
0
 void labelRefresh(Mission.Trigger trigger, Label lbl)
 {
     // lbl is the affected label
     string triggerText = trigger.ToString();
     triggerText = replaceTargetText(triggerText);
     lbl.Text = triggerText;
 }
Exemple #7
0
 void initializeMission()
 {
     tabMain.Focus(); //[JB] Exit focus from any form controls.  Fixes some crashes when Leave() events are processed after mission data has been cleared (notably from within the Messages tab).
     _mission = new Mission();
     _config.LastMission = "";
     _activeFG = 0;
     _activeMessage = 0;
     _mission.FlightGroups[0].CraftType = Convert.ToByte(_config.TieCraft);
     _mission.FlightGroups[0].IFF = Convert.ToByte(_config.TieIff);
     string[] fgList = _mission.FlightGroups.GetList();
     comboReset(cboArrMS, fgList, 0);
     comboReset(cboArrMSAlt, fgList, 0);
     comboReset(cboDepMS, fgList, 0);
     comboReset(cboDepMSAlt, fgList, 0);
     lstFG.Items.Clear();
     lstFG.Items.Add(_mission.FlightGroups[_activeFG].ToString(true));
     tabMain.SelectedIndex = 0;
     tabFGMinor.SelectedIndex = 0;
     string[] t = new string[_mission.IFFs.Length];
     for (int i = 0; i < t.Length; i++) t[i] = _mission.IFFs[i];
     comboReset(cboIFF, t, 0);
     this.Text = "Ye Olde Galactic Empire Mission Editor - TIE - New Mission.tie";
 }