Example #1
0
        private string EncodeSettings()
        {
            var partsEncoded = BuildSettingsBytes()
                               .Select(p => Base36Utils.Encode(p))
                               .ToArray();

            return(string.Join("-", partsEncoded));
        }
Example #2
0
        public void GetBytes_ToBase36FromBase36_Test()
        {
            const int value = 3;

            var array        = BitConverter.GetBytes(value);
            var base36String = Base36Utils.ByteArrayToBase36String(array);
            var actual       = Base36Utils.Base36StringToByteArray(base36String);

            var expected = BitConverter.GetBytes(value);

            TestUtils.StrictEqual(expected, actual);
        }
Example #3
0
 /// <summary>
 /// Encode into a Base36 encoded string.
 /// </summary>
 /// <returns>Encoded string</returns>
 public string ToBase36String()
 {
     return(Base36Utils.EncodeBytes(this.ToBytes()));
 }
Example #4
0
        /// <summary>
        /// Decode a <see cref="HudColors"/> from a Base36 encoded string.
        /// </summary>
        /// <param name="value">Encoded string</param>
        /// <returns>HudColors</returns>
        public static HudColors FromBase36String(string value)
        {
            var bytes = Base36Utils.DecodeBytes(value);

            return(new HudColors(bytes));
        }
Example #5
0
        public void Update(string settings)
        {
            var parts = settings.Split('-')
                        .Select(p => Base36Utils.Decode(p))
                        .ToArray();

            if (parts.Any(p => p > int.MaxValue))
            {
                throw new ArgumentException(nameof(settings));
            }

            int part1 = (int)parts[0];
            int part2 = (int)parts[1];
            int part3 = (int)parts[2];
            int part4 = (int)parts[3];
            int part5 = (int)parts[4];

            UseCustomItemList = (part1 & 8192) > 0;

            if (UseCustomItemList)
            {
                CrazyStartingItems           = false;
                AddNutChest                  = false;
                AddMoonItems                 = false;
                AddFairyRewards              = false;
                AddOther                     = false;
                ExcludeSongOfSoaring         = false;
                RandomizeBottleCatchContents = false;
                AddDungeonItems              = false;
                AddShopItems                 = false;
                AddCowMilk                   = false;
                AddSkulltulaTokens           = false;
                AddStrayFairies              = false;
                AddMundaneRewards            = false;
            }
            else
            {
                AddMundaneRewards            = (part1 & 1073741824) > 0;
                AddStrayFairies              = (part1 & 536870912) > 0;
                AddSkulltulaTokens           = (part1 & 268435456) > 0;
                AddCowMilk                   = (part1 & 134217728) > 0;
                AddFairyRewards              = (part1 & 67108864) > 0;
                CrazyStartingItems           = (part1 & 4194304) > 0;
                AddNutChest                  = (part1 & 2097152) > 0;
                AddMoonItems                 = (part1 & 32768) > 0;
                AddOther                     = (part1 & 4096) > 0;
                ExcludeSongOfSoaring         = (part1 & 1024) > 0;
                RandomizeBottleCatchContents = (part1 & 128) > 0;
                AddDungeonItems              = (part1 & 64) > 0;
                AddShopItems                 = (part1 & 32) > 0;
            }

            UpdateChests         = (part1 & 33554432) > 0;
            FixEponaSword        = (part1 & 16777216) > 0;
            NoStartingItems      = (UseCustomItemList || AddOther) && (part1 & 8388608) > 0;
            UpdateShopAppearance = (part1 & 1048576) > 0;
            PreventDowngrades    = (part1 & 524288) > 0;
            EnableSunsSong       = (part1 & 262144) > 0;
            HideClock            = (part1 & 131072) > 0;
            ClearHints           = (part1 & 65536) > 0;
            FreeHints            = (part1 & 16384) > 0;
            // 8192 - UseCustomItemList, see above
            // = (part1 & 2048) > 0;
            // = (part1 & 512) > 0;
            AddSongs = (part1 & 256) > 0;
            RandomizeDungeonEntrances = (part1 & 16) > 0;
            // = (part1 & 8) > 0;
            RandomizeEnemies = (part1 & 4) > 0;
            ShortenCutscenes = (part1 & 2) > 0;
            QuickTextEnabled = (part1 & 1) > 0;

            var damageMultiplierIndex = (int)((part2 & 0xF0000000) >> 28);
            var damageTypeIndex       = (part2 & 0xF000000) >> 24;
            var modeIndex             = (part2 & 0xFF0000) >> 16;
            var characterIndex        = (part2 & 0xFF00) >> 8;
            // = part2 & 0xFF;

            var gravityTypeIndex = (int)((part3 & 0xF0000000) >> 28);
            var floorTypeIndex   = (part3 & 0xF000000) >> 24;
            // = Color.FromArgb(
            //    (part3 & 0xFF0000) >> 16,
            //    (part3 & 0xFF00) >> 8,
            //    part3 & 0xFF);

            var clockSpeedIndex   = (byte)(part4 & 0xFF);
            var gossipHintsIndex  = (byte)((part4 & 0xFF00) >> 8);
            var blastmaskCooldown = (byte)((part4 & 0xFF0000) >> 16);

            // = (byte)((part4 & 0xFF000000) >> 24);

            SpeedupBeavers = (part5 & (1 << 0)) > 0;
            SpeedupDampe   = (part5 & (1 << 1)) > 0;
            SpeedupDogRace = (part5 & (1 << 2)) > 0;
            SpeedupLabFish = (part5 & (1 << 3)) > 0;

            CritWiggleDisable = (part5 & (1 << 4)) > 0;
            //DrawHash = (part5 & (1 << 5)) > 0;
            FastPush          = (part5 & (1 << 6)) > 0;
            OcarinaUnderwater = (part5 & (1 << 7)) > 0;
            QuestItemStorage  = (part5 & (1 << 8)) > 0;

            DamageMode        = (DamageMode)damageMultiplierIndex;
            DamageEffect      = (DamageEffect)damageTypeIndex;
            LogicMode         = (LogicMode)modeIndex;
            Character         = (Character)characterIndex;
            MovementMode      = (MovementMode)gravityTypeIndex;
            FloorType         = (FloorType)floorTypeIndex;
            ClockSpeed        = (ClockSpeed)clockSpeedIndex;
            GossipHintStyle   = (GossipHintStyle)gossipHintsIndex;
            BlastMaskCooldown = (BlastMaskCooldown)blastmaskCooldown;
        }