Exemple #1
0
    public void SetupGameObject(GameObject go)
    {
        if (sprite != null)
        {
            SpriteRenderer spriteRenderer = go.GetComponent <SpriteRenderer>();
            if (spriteRenderer == null)
            {
                spriteRenderer = go.AddComponent <SpriteRenderer>();
            }

            spriteRenderer.sprite = sprite;

            if (FlagUtil.IsSet(tileFlags, ETileAttribute.FLIPX))
            {
                spriteRenderer.flipX = true;
            }
            if (FlagUtil.IsSet(tileFlags, ETileAttribute.FLIPY))
            {
                spriteRenderer.flipY = true;
            }

            if (FlagUtil.IsExactly(tileFlags, (ETileAttribute.ROTATE180 | ETileAttribute.ROTATE90)))
            {
                go.transform.Rotate(Vector3.back * 270);
            }
            else if (FlagUtil.IsExactly(tileFlags, ETileAttribute.ROTATE180))
            {
                go.transform.Rotate(Vector3.back * 180);
            }
            else if (FlagUtil.IsExactly(tileFlags, ETileAttribute.ROTATE90))
            {
                go.transform.Rotate(Vector3.back * 90);
            }
        }
    }
 private void SetRemake()
 {
     var ofs = Player.Personal.Offsets.ItemRemakeCollectBit;
     var data = Player.Personal.Data;
     for (int i = 0; i < CLB_Remake.Items.Count; i++)
         FlagUtil.SetFlag(data, ofs, i, CLB_Remake.GetItemChecked(i));
 }
Exemple #3
0
        private void FillRemake(IReadOnlyList <string> items)
        {
            var str    = GameInfo.Strings;
            var invert = ItemRemakeUtil.GetInvertedDictionary();
            var ofs    = Player.Personal.Offsets.ItemRemakeCollectBit;
            var max    = Player.Personal.Offsets.MaxRemakeBitFlag;
            var data   = Player.Personal.Data;

            for (int i = 0; i < max; i++)
            {
                var remakeIndex = i >> 3; // ItemRemakeInfo.BodyColorCountMax
                var variant     = i & 7;

                ushort itemId   = invert.TryGetValue((short)remakeIndex, out var id) ? id : (ushort)0;
                var    itemName = remakeIndex == 0652 ? "photo" : items[itemId];

                var    flag = FlagUtil.GetFlag(data, ofs, i);
                string name = $"{remakeIndex:0000} V{variant:0} - {itemName}";

                if (ItemRemakeInfoData.List.TryGetValue((short)remakeIndex, out var info))
                {
                    name = $"{name} ({info.GetBodyDescription(variant, str)})";
                }

                CLB_Remake.Items.Add(name, flag);
            }
        }
Exemple #4
0
    public PersonalInfoSWSH(byte[] data) : base(data)
    {
        TMHM = new bool[200];
        for (var i = 0; i < CountTR; i++)
        {
            TMHM[i]           = FlagUtil.GetFlag(Data, 0x28 + (i >> 3), i);
            TMHM[i + CountTM] = FlagUtil.GetFlag(Data, 0x3C + (i >> 3), i);
        }

        // 0x38-0x3B type tutors, but only 8 bits are valid flags.
        var typeTutors = new bool[8];

        for (int i = 0; i < typeTutors.Length; i++)
        {
            typeTutors[i] = FlagUtil.GetFlag(Data, 0x38, i);
        }
        TypeTutors = typeTutors;

        // 0xA8-0xAF are armor type tutors, one bit for each type
        var armorTutors = new bool[18];

        for (int i = 0; i < armorTutors.Length; i++)
        {
            armorTutors[i] = FlagUtil.GetFlag(Data, 0xA8 + (i >> 3), i);
        }
        SpecialTutors = new[]
        {
            armorTutors,
        };
    }
Exemple #5
0
 public override byte[] Write()
 {
     for (int i = 0; i < SpecialTutors[0].Length; i++)
     {
         FlagUtil.SetFlag(Data, 0xA8 + (i >> 3), i, SpecialTutors[0][i]);
     }
     return(Data);
 }
Exemple #6
0
        /// Returns the current value of the attribute taking into account all modifiers currently applied
        private float getValueWithModifiers()
        {
            if (Config == null)
            {
                return(0);
            }

            if (HasFlags)
            {
                float currentFlag = Flat;
                for (int i = 0; i < Modifiers.Count; i++)
                {
                    switch (Modifiers[i].FlagOperator)
                    {
                    case AttributeFlagModOperator.AddFlag:
                        currentFlag = FlagUtil.Add(currentFlag, Modifiers[i].Flat);
                        break;

                    case AttributeFlagModOperator.RemoveFlag:
                        currentFlag = FlagUtil.Remove(currentFlag, Modifiers[i].Flat);
                        break;

                    case AttributeFlagModOperator.Set:
                        currentFlag = Modifiers[i].Flat;
                        break;
                    }
                }

                return(currentFlag);
            }

            Modifiers.Sort((a, b) => - 1 * a.Factor.CompareTo(b.Factor)); //descending sort
            float totalFlat   = 0;
            float totalFactor = 0;

            for (int i = 0; i < Modifiers.Count; i++)
            {
                totalFlat += Modifiers[i].Flat;

                if (Config.HasStackPenault)
                {
                    totalFactor += Modifiers[i].Factor *
                                   Config.StackPenaults[
                        Mathf.Clamp(i, 0, Config.StackPenaults.Length - 1)];
                }
                else
                {
                    totalFactor += Modifiers[i].Factor;
                }
            }

            return(Mathf.Clamp((Flat + totalFlat) * (1 + Factor + totalFactor),
                               Config.MinMaxValue.x, Config.MinMaxValue.y));
        }
Exemple #7
0
        private void B_Save_Click(object sender, EventArgs e)
        {
            var ofs  = Player.Personal.Offsets.ReceivedItems;
            var data = Player.Personal.Data;

            for (int i = 0; i < CLB_Items.Items.Count; i++)
            {
                FlagUtil.SetFlag(data, ofs, i, CLB_Items.GetItemChecked(i));
            }
            Close();
        }
 private void FillCollect(IReadOnlyList<string> items)
 {
     var ofs = Player.Personal.Offsets.ItemCollectBit;
     var data = Player.Personal.Data;
     for (int i = 0; i < items.Count; i++)
     {
         var flag = FlagUtil.GetFlag(data, ofs, i);
         string value = items[i];
         string name = $"0x{i:X3} - {value}";
         CLB_Items.Items.Add(name, flag);
     }
 }
Exemple #9
0
    public void GetSetFlag(uint raw, int byteIndex, int bitIndex)
    {
        Span <byte> data = stackalloc byte[4];

        WriteUInt32LittleEndian(data, raw);
        var value = FlagUtil.GetFlag(data, byteIndex, bitIndex);

        value.Should().Be(true);

        Span <byte> copy = stackalloc byte[data.Length];

        FlagUtil.SetFlag(copy, byteIndex, bitIndex, true);
        data.SequenceEqual(copy).Should().BeTrue();
    }
Exemple #10
0
        private void FillCheckBoxes()
        {
            var items = GameInfo.Strings.itemlistdisplay;

            var ofs  = Player.Personal.Offsets.ReceivedItems;
            var data = Player.Personal.Data;

            for (int i = 0; i < items.Length; i++)
            {
                var    flag  = FlagUtil.GetFlag(data, ofs, i);
                string value = items[i];
                string name  = $"0x{i:X3} - {value}";
                CLB_Items.Items.Add(name, flag);
            }
        }
Exemple #11
0
    private static void LoadFavorites(IEnumerable <InventoryItem> items, Span <byte> favorites)
    {
        foreach (var z in items)
        {
            var item   = (InventoryItem8a)z;
            var itemID = item.Index;
            var ofs    = itemID >> 3;
            if ((uint)ofs >= favorites.Length)
            {
                continue;
            }

            var bit = itemID & 7;
            item.IsFavorite = FlagUtil.GetFlag(favorites, ofs, bit);
        }
    }
Exemple #12
0
    public PersonalInfoLA(byte[] data) : base(data)
    {
        // TM/TR and Special Tutors are inaccessible; dummy data.

        // 0xA8-0xAF are armor type tutors, one bit for each type
        var moveShop = new bool[Legal.MoveShop8_LA.Length];

        for (int i = 0; i < moveShop.Length; i++)
        {
            moveShop[i] = FlagUtil.GetFlag(Data, 0xA8 + (i >> 3), i);
        }
        SpecialTutors = new[]
        {
            moveShop,
        };
    }
Exemple #13
0
 public override byte[] Write()
 {
     for (var i = 0; i < CountTR; i++)
     {
         FlagUtil.SetFlag(Data, 0x28 + (i >> 3), i, TMHM[i]);
         FlagUtil.SetFlag(Data, 0x3C + (i >> 3), i, TMHM[i + CountTM]);
     }
     for (int i = 0; i < TypeTutors.Length; i++)
     {
         FlagUtil.SetFlag(Data, 0x38, i, TypeTutors[i]);
     }
     for (int i = 0; i < SpecialTutors[0].Length; i++)
     {
         FlagUtil.SetFlag(Data, 0xA8 + (i >> 3), i, SpecialTutors[0][i]);
     }
     return(Data);
 }
Exemple #14
0
        private void FillCheckBoxes()
        {
            var items = GameInfo.Strings.itemlist.ToArray();

            items[0] = string.Empty;
            var ofs  = Player.Personal.Offsets.ReceivedItems;
            var data = Player.Personal.Data;

            for (int i = 0; i < items.Length; i++)
            {
                var    flag  = FlagUtil.GetFlag(data, ofs, i);
                string value = items[i];
                if (string.IsNullOrEmpty(value))
                {
                    value = i.ToString();
                }
                string name = $"0x{i:X3} - {value}";
                CLB_Items.Items.Add(name, flag);
            }
        }
Exemple #15
0
    public void ClearFlag(uint raw, int byteIndex, int bitIndex)
    {
        Span <byte> data = stackalloc byte[4];

        WriteUInt32LittleEndian(data, raw);
        var value = FlagUtil.GetFlag(data, byteIndex, bitIndex);

        value.Should().Be(false);

        // does nothing on empty
        Span <byte> copy = stackalloc byte[data.Length];

        FlagUtil.SetFlag(copy, byteIndex, bitIndex, false);
        copy.Count((byte)0).Should().Be(copy.Length);

        // doesn't clear any other flag
        data.CopyTo(copy);
        FlagUtil.SetFlag(copy, byteIndex, bitIndex, false);
        data.SequenceEqual(copy).Should().BeTrue();
    }
Exemple #16
0
    public List <TileSprite> CreateTileSprites()
    {
        List <TileSprite> tileSprites = new List <TileSprite>();

        if (sprite == null)
        {
            return(tileSprites);
        }

        tileSprites.Add(new TileSprite(sprite));

        for (ETileAttribute eFlag = ETileAttribute.FLIPX; eFlag < spriteFlags; ++eFlag)
        {
            if (FlagUtil.IsExactly(spriteFlags, eFlag))
            {
                tileSprites.Add(new TileSprite(sprite, eFlag));
            }
        }

        return(tileSprites);
    }
Exemple #17
0
    private static void GetCorners(RectInt sourceRect, ETileAttribute eTileFlags, out Vector2Int vTL, out Vector2Int vTR, out Vector2Int vBR, out Vector2Int vBL)
    {
        // Unity textures start in the bottom left so TOP = y + height
        vTL = new Vector2Int(sourceRect.x, sourceRect.yMax - 1);
        vTR = new Vector2Int(sourceRect.xMax - 1, sourceRect.yMax - 1);
        vBR = new Vector2Int(sourceRect.xMax - 1, sourceRect.y);
        vBL = new Vector2Int(sourceRect.x, sourceRect.y);

        if (eTileFlags == ETileAttribute.NONE)
        {
            return;
        }

        if (FlagUtil.IsSet(eTileFlags, ETileAttribute.FLIPX))
        {
            Vector2Int vTLCopy = vTL;
            Vector2Int vTRCopy = vTR;
            Vector2Int vBRCopy = vBR;
            Vector2Int vBLCopy = vBL;

            vTL.Set(vTRCopy.x, vTRCopy.y);
            vTR.Set(vTLCopy.x, vTLCopy.y);
            vBR.Set(vBLCopy.x, vBLCopy.y);
            vBL.Set(vBRCopy.x, vBRCopy.y);
        }

        if (FlagUtil.IsSet(eTileFlags, ETileAttribute.FLIPY))
        {
            Vector2Int vTLCopy = vTL;
            Vector2Int vTRCopy = vTR;
            Vector2Int vBRCopy = vBR;
            Vector2Int vBLCopy = vBL;

            vTL.Set(vBLCopy.x, vBLCopy.y);
            vTR.Set(vBRCopy.x, vBRCopy.y);
            vBR.Set(vTRCopy.x, vTRCopy.y);
            vBL.Set(vTLCopy.x, vTLCopy.y);
        }

        if (FlagUtil.IsSet(eTileFlags, ETileAttribute.ROTATEANY))
        {
            Vector2Int[] vCorners = { vTL, vTR, vBR, vBL };

            ETileAttribute eRotate       = (eTileFlags & ETileAttribute.ROTATEANY);
            int            iRotateOffset = 3;
            if (eRotate == ETileAttribute.ROTATE90)
            {
                iRotateOffset = 3;
            }
            else if (eRotate == ETileAttribute.ROTATE180)
            {
                iRotateOffset = 2;
            }
            else if (eRotate == (ETileAttribute.ROTATE180 | ETileAttribute.ROTATE90))
            {
                iRotateOffset = 1;
            }

            int iTL = iRotateOffset % 4;
            int iTR = (iRotateOffset + 1) % 4;
            int iBR = (iRotateOffset + 2) % 4;
            int iBL = (iRotateOffset + 3) % 4;

            vTL.Set(vCorners[iTL].x, vCorners[iTL].y);
            vTR.Set(vCorners[iTR].x, vCorners[iTR].y);
            vBR.Set(vCorners[iBR].x, vCorners[iBR].y);
            vBL.Set(vCorners[iBL].x, vCorners[iBL].y);
        }
    }
Exemple #18
0
 public sealed override void SetFlag(int offset, int bitIndex, bool value) => FlagUtil.SetFlag(General, offset, bitIndex, value);
Exemple #19
0
 public sealed override bool GetFlag(int offset, int bitIndex) => FlagUtil.GetFlag(General, offset, bitIndex);
Exemple #20
0
    public bool GetFlag(int index)
    {
        var offset = Offset + FlagStart + (index >> 3);

        return(FlagUtil.GetFlag(Data, offset, index));
    }
Exemple #21
0
    public void SetFlag(int index, bool value = true)
    {
        var offset = Offset + FlagStart + (index >> 3);

        FlagUtil.SetFlag(Data, offset, index, value);
    }
Exemple #22
0
        /// Checks whether the mod can be applied to the target entity
        public bool ModApplicationCanBeAccepted(Attribute <T> attribute, AttributeCondition <T> modifier = null)
        {
            if (modifier == null)
            {
                modifier = attribute.TargetAttributeModifier.Find(item => item.TargetAttributeID.Equals(Config.ID));
            }

            if (modifier != null)
            {
                Attribute <T> currentAttribute = null;
                for (int i = 0; i < modifier.ModApplicationConditions.Count; i++)
                {
                    currentAttribute = Parent.GetAttributeByID(modifier.ModApplicationConditions[i].AttributeName);
                    switch (modifier.ModApplicationConditions[i].Operator)
                    {
                    case AttributeModOperator.Equals:
                        if (!(currentAttribute.Value == modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.Greater:
                        if (!(currentAttribute.Value > modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.Less:
                        if (!(currentAttribute.Value < modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.GreaterOrEquals:
                        if (!(currentAttribute.Value >= modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.LessOrEquals:
                        if (!(currentAttribute.Value <= modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.NotEquals:
                        if (!(currentAttribute.Value != modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.ContainsFlag:
                        if (!FlagUtil.Has(currentAttribute.Value, modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.NotContainsFlag:
                        if (FlagUtil.Has(currentAttribute.Value, modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;
                    }
                }

                return(true);
            }

            return(false);
        }