public void ControlTagsToCodes()
{
ProofReadTagstoCodes();
for (int i = 0; i < charData.Count; i++)
{
if (charData[i] != '<')
{
continue;
}
if (charData[i] == '>')
{
//Error correction box call will go here
}
List<byte> tagBuffer = new List<byte>();
uint tagSize = 1;
while (charData[(int)(i + tagSize)] != '>')
{
tagBuffer.Add(charData[(int)(i + tagSize)]);
tagSize += 1;
}
//tagSize at this point only covers the text within the angled brackets.
//This figures the brackets into the size
tagSize += 1;
string tempTag = new string(Encoding.ASCII.GetChars(tagBuffer.ToArray()));
string[] tagArgs = tempTag.Split(':');
tagArgs[0] = tagArgs[0].ToLower();
if (tagArgs.Length > 1)
{
tagArgs[1] = tagArgs[1].ToLower();
}
List<byte> code = new List<byte>();
switch (tagArgs[0])
{
#region Five-Byte Codes
case "player":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PlayerName, 0);
break;
case "draw":
if (tagArgs.Length > 1)
{
if (tagArgs[1] == "instant")
{
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CharDrawInstant, 0);
}
if (tagArgs[1] == "bychar")
{
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CharDrawByChar, 0);
}
else
{
//Error handler
}
}
break;
case "two choices":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.TwoChoices, 0);
break;
case "three choices":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ThreeChoices, 0);
break;
case "a button":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AButtonIcon, 0);
break;
case "b button":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BButtonIcon, 0);
break;
case "c-stick":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CStickIcon, 0);
break;
case "l trigger":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.LTriggerIcon, 0);
break;
case "r trigger":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RTriggerIcon, 0);
break;
case "x button":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.XButtonIcon, 0);
break;
case "y button":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.YButtonIcon, 0);
break;
case "z button":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ZButtonIcon, 0);
break;
case "d pad":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.DPadIcon, 0);
break;
case "control stick":
if (tagArgs.Length == 1)
{
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.StaticControlStickIcon, 0);
}
else
{
switch (tagArgs[1])
{
#region Direction Switch
case "up":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingUp, 0);
break;
case "down":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingDown, 0);
break;
case "left":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingLeft, 0);
break;
case "right":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingRight, 0);
break;
case "up+down":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingUpAndDown, 0);
break;
case "left+right":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingLeftAndRight, 0);
break;
default:
//Error handling
break;
#endregion
}
}
break;
case "left arrow":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.LeftArrowIcon, 0);
break;
case "right arrow":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RightArrowIcon, 0);
break;
case "up arrow":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.UpArrowIcon, 0);
break;
case "down arrow":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.DownArrowIcon, 0);
break;
case "choice one":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChoiceOne, 0);
break;
case "choice two":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChoiceTwo, 0);
break;
case "canon game balls":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CanonGameBalls, 0);
break;
case "broken vase payment":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BrokenVasePayment, 0);
break;
case "auction attendee":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionCharacter, 0);
break;
case "auction item name":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionItemName, 0);
break;
case "auction attendee bid":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionPersonBid, 0);
break;
case "auction starting bid":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionStartingBid, 0);
break;
case "player auction bid selector":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PlayerAuctionBidSelector, 0);
break;
case "starburst a button":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.StarburstAIcon, 0);
break;
case "orca blow count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.OrcaBlowCount, 0);
break;
case "pirate ship password":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PirateShipPassword, 0);
break;
case "target starburst":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.TargetStarburstIcon, 0);
break;
case "player letter count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PostOfficeGamePlayerLetterCount, 0);
break;
case "letter rupee reward":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PostOfficeGameRupeeReward, 0);
break;
case "letters":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PostBoxLetterCount, 0);
break;
case "remaining koroks":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RemainingKoroks, 0);
break;
case "remaining forest water time":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RemainingForestWaterTime, 0);
break;
case "flight control game time":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FlightPlatformGameTime, 0);
break;
case "flight control game record":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FlightPlatformGameRecord, 0);
break;
case "beedle points":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BeedlePointCount, 0);
break;
case "joy pendant count (ms. marie)":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.JoyPendantCountMsMarie, 0);
break;
case "pendant total":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.MsMariePendantTotal, 0);
break;
case "pig game time":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PigGameTime, 0);
break;
case "sailing game rupee reward":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.SailingGameRupeeReward, 0);
break;
case "current bomb capacity":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CurrentBombCapacity, 0);
break;
case "current arrow capacity":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CurrentArrowCapacity, 0);
break;
case "heart icon":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.HeartIcon, 0);
break;
case "music note icon":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.MusicNoteIcon, 0);
break;
case "target letter count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.TargetLetterCount, 0);
break;
case "fishman hit count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FishmanHitCount, 0);
break;
case "fishman rupee reward":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FishmanRupeeReward, 0);
break;
case "boko baba seed count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BokoBabaSeedCount, 0);
break;
case "skull necklace count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.SkullNecklaceCount, 0);
break;
case "chu jelly count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChuJellyCount, 0);
break;
case "joy pendant count (beedle)":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.JoyPendantCountBeedle, 0);
break;
case "golden feather count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.GoldenFeatherCount, 0);
break;
case "knight's crest count":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.KnightsCrestCount, 0);
break;
case "beedle price offer":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BeedlePriceOffer, 0);
break;
case "boko baba seed sell selector":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BokoBabaSeedSellSelector, 0);
break;
case "skull necklace sell selector":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.SkullNecklaceSellSelector, 0);
break;
case "chu jelly sell selector":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChuJellySellSelector, 0);
break;
case "joy pendant sell selector":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.JoyPendantSellSelector, 0);
break;
case "golden feather sell selector":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.GoldenFeatherSellSelector, 0);
break;
case "knight's crest sell selector":
code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.KnightsCrestSellSelector, 0);
break;
case "sound":
if (tagArgs.Length > 1)
{
code = ConvertTagToFiveByteControlCode(i, 1, 1, Convert.ToInt16(tagArgs[1]));
}
else
{
//Error handler
}
break;
case "camera modifier":
if (tagArgs.Length > 1)
{
code = ConvertTagToFiveByteControlCode(i, 2, 2, Convert.ToInt16(tagArgs[1]));
}
else
{
//Error handler
}
break;
case "anim":
if (tagArgs.Length > 1)
{
code = ConvertTagToFiveByteControlCode(i, 3, 3, Convert.ToInt16(tagArgs[1]));
}
else
{
//Error handler
}
break;
#endregion
#region Six-Byte Code
case "color":
if (tagArgs.Length > 1)
{
code.Add(0x1A);
code.Add(0x06);
code.Add(0xFF);
code.Add(0x00);
code.Add(0x00);
code.Add(Convert.ToByte(tagArgs[1]));
}
else
{
//error handling
}
break;
#endregion
#region Seven-Byte Codes
case "scale":
if (tagArgs.Length > 1)
{
code.Add(0x1A);
code.Add(0x07);
code.Add(0xFF);
code.Add(0x00);
code.Add((byte)SevenByteTypes.SetTextSize);
byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));
code.Add(tempShort[1]);
code.Add(tempShort[0]);
}
else
{
//error handling
}
break;
case "wait + dismiss (prompt)":
if (tagArgs.Length > 1)
{
code.Add(0x1A);
code.Add(0x07);
code.Add(0x00);
code.Add(0x00);
code.Add((byte)SevenByteTypes.WaitAndDismissWithPrompt);
byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));
code.Add(tempShort[1]);
code.Add(tempShort[0]);
}
else
{
//error handling
}
break;
case "wait + dismiss":
if (tagArgs.Length > 1)
{
code.Add(0x1A);
code.Add(0x07);
code.Add(0x00);
code.Add(0x00);
code.Add((byte)SevenByteTypes.WaitAndDismiss);
byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));
code.Add(tempShort[1]);
code.Add(tempShort[0]);
}
else
{
//error handling
}
break;
case "dismiss":
if (tagArgs.Length > 1)
{
code.Add(0x1A);
code.Add(0x07);
code.Add(0x00);
code.Add(0x00);
code.Add((byte)SevenByteTypes.Dismiss);
byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));
code.Add(tempShort[1]);
code.Add(tempShort[0]);
}
else
{
//error handling
}
break;
case "dummy":
if (tagArgs.Length > 1)
{
code.Add(0x1A);
code.Add(0x07);
code.Add(0x00);
code.Add(0x00);
code.Add((byte)SevenByteTypes.Dummy);
byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));
code.Add(tempShort[1]);
code.Add(tempShort[0]);
}
else
{
//error handling
}
break;
case "wait":
if (tagArgs.Length > 1)
{
code.Add(0x1A);
code.Add(0x07);
code.Add(0x00);
code.Add(0x00);
code.Add((byte)SevenByteTypes.Wait);
byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));
code.Add(tempShort[1]);
code.Add(tempShort[0]);
}
else
{
//error handling
}
break;
#endregion
}
charData.InsertRange((int)(i + tagSize), code.ToArray());
charData.RemoveRange(i, (int)tagSize);
i += code.Count - 1;
}
}