Exemple #1
0
                protected void FillData(Icons.ID starticon, Kernel_bin.Stat statatk, Kernel_bin.Stat statdef)
                {
                    byte pos = 0;

                    Contents[0] = statatk;
                    getColor(pos, out byte palette, out Font.ColorID _colorid, out bool unlocked);
                    FF8String name = Kernel_bin.MagicData[Memory.State.Characters[Character].Stat_J[statatk]].Name;

                    if (name.Length == 0)
                    {
                        name = Misc[Items._];
                    }
                    ITEM[pos, 0] = new IGMDataItem_Icon(starticon, new Rectangle(SIZE[pos].X, SIZE[pos].Y, 0, 0), palette);
                    ITEM[pos, 1] = new IGMDataItem_String(name, new Rectangle(SIZE[pos].X + 60, SIZE[pos].Y, 0, 0), color: _colorid);
                    BLANKS[pos]  = !unlocked;
                    for (pos = 1; pos < Count; pos++)
                    {
                        Contents[pos] = statdef + pos - 1;
                        getColor(pos, out palette, out _colorid, out unlocked);
                        name = Kernel_bin.MagicData[Memory.State.Characters[Character].Stat_J[statdef + pos - 1]].Name;
                        if (name.Length == 0)
                        {
                            name = Misc[Items._];
                        }
                        ITEM[pos, 0] = new IGMDataItem_Icon(starticon + 1, new Rectangle(SIZE[pos].X, SIZE[pos].Y, 0, 0), palette);
                        ITEM[pos, 1] = new IGMDataItem_String(name, new Rectangle(SIZE[pos].X + 60, SIZE[pos].Y, 0, 0), color: _colorid);
                        BLANKS[pos]  = !unlocked;
                    }
                }
Exemple #2
0
            protected void FillData(Icons.ID starticon, Kernel_bin.Stat statatk, Kernel_bin.Stat statdef)
            {
                if (Damageable.GetCharacterData(out Saves.CharacterData c))
                {
                    for (byte pos = 0; pos < Count; pos++)
                    {
                        Kernel_bin.Stat stat = pos != 0 ? statdef + pos - 1 : statatk;
                        Contents[pos] = stat;
                        getColor(pos, out byte palette, out Font.ColorID _colorid, out bool unlocked);
                        FF8String name = GetName(stat);
                        UpdateItems();

                        FF8String GetName(Kernel_bin.Stat key)
                        {
                            FF8String _name = Kernel_bin.MagicData[c.Stat_J[key]].Name;

                            if (_name == null || _name.Length == 0)
                            {
                                _name = Strings.Name._;
                            }
                            return(_name);
                        }

                        void UpdateItems()
                        {
                            ((IGMDataItem.Icon)ITEM[pos, 0]).Data      = starticon + 1;
                            ((IGMDataItem.Icon)ITEM[pos, 0]).Palette   = palette;
                            ((IGMDataItem.Text)ITEM[pos, 1]).Data      = name;
                            ((IGMDataItem.Text)ITEM[pos, 1]).FontColor = _colorid;
                            BLANKS[pos] = !unlocked;
                        }
                    }
                }
            }
Exemple #3
0
                private void Get_Sort_Stat()
                {
                    SortMode = (Mode)InGameMenu_Junction.GetMode();
                    switch (SortMode)
                    {
                    default:
                    case Mode.Mag_Stat:
                    case Mode.Mag_Pool_Stat:
                        SortMode = Mode.Mag_Pool_Stat;
                        break;

                    case Mode.Mag_ST_D:
                    case Mode.Mag_Pool_ST_D:
                        SortMode = Mode.Mag_Pool_ST_D;
                        break;

                    case Mode.Mag_ST_A:
                    case Mode.Mag_Pool_ST_A:
                        SortMode = Mode.Mag_Pool_ST_A;
                        Stat     = Kernel_bin.Stat.ST_Atk;
                        break;

                    case Mode.Mag_EL_D:
                    case Mode.Mag_Pool_EL_D:
                        SortMode = Mode.Mag_Pool_EL_D;
                        break;

                    case Mode.Mag_EL_A:
                    case Mode.Mag_Pool_EL_A:
                        SortMode = Mode.Mag_Pool_EL_A;
                        Stat     = Kernel_bin.Stat.EL_Atk;
                        break;
                    }
                }
 public void JunctionSpell(Kernel_bin.Stat stat, byte spell)
 {
     //see if magic is in use, if so remove it
     if (Stat_J.ContainsValue(spell))
     {
         Kernel_bin.Stat key = Stat_J.FirstOrDefault(x => x.Value == spell).Key;
         Stat_J[key] = 0;
     }
     //junction magic
     Stat_J[stat] = spell;
 }
Exemple #5
0
        private void UpdateOnEvent(object sender, IGM_Junction.Mode?mode = null, Kernel_bin.Stat?stat = null)
        {
            mode = mode ?? (IGM_Junction.Mode)Menu.IGM_Junction.GetMode();
            if ((
                    mode == IGM_Junction.Mode.Mag_Pool_ST_A ||
                    mode == IGM_Junction.Mode.Mag_Pool_ST_D ||
                    mode == IGM_Junction.Mode.Mag_Pool_EL_A ||
                    mode == IGM_Junction.Mode.Mag_Pool_EL_D ||
                    mode == IGM_Junction.Mode.Mag_Pool_Stat) || Battle && Enabled)

            {
                Cursor_Status |= Cursor_Status.Enabled;
            }
            else
            {
                Cursor_Status &= ~Cursor_Status.Enabled;
            }
            if (Memory.State.Characters != null && Damageable != null)
            {
                Get_Sort_Stat();
                Stat = stat ?? Stat;
                Get_Slots_Values();
                if (SortMode != LastMode || this.Stat != LastStat || Damageable != LastCharacter)
                {
                    Get_Sort();
                }
                bool skipundo = false;
                if (Battle || !(SortMode == LastMode && Damageable == LastCharacter && this.Stat == LastStat && Page == LastPage))
                {
                    // goal of these checks were to avoid updating the whole list if we don't need to.
                    LastCharacter = Damageable;
                    LastStat      = this.Stat;
                    LastPage      = Page;
                    LastMode      = SortMode;
                    skipundo      = Undo();
                    FillMagic();
                    UpdateTitle();
                }
                if (!Battle && (
                        mode == IGM_Junction.Mode.Mag_Pool_ST_A ||
                        mode == IGM_Junction.Mode.Mag_Pool_ST_D ||
                        mode == IGM_Junction.Mode.Mag_Pool_EL_A ||
                        mode == IGM_Junction.Mode.Mag_Pool_EL_D ||
                        mode == IGM_Junction.Mode.Mag_Pool_Stat))
                {
                    Generate_Preview(skipundo);
                }
            }
        }
Exemple #6
0
 private void UpdateOnEvent(object sender, Mode?mode = null, Kernel_bin.Stat?stat = null)
 {
     mode = mode ?? (Mode)InGameMenu_Junction.GetMode();
     if (
         mode != Mode.Mag_Pool_ST_A &&
         mode != Mode.Mag_Pool_ST_D &&
         mode != Mode.Mag_Pool_EL_A &&
         mode != Mode.Mag_Pool_EL_D &&
         mode != Mode.Mag_Pool_Stat)
     {
         Cursor_Status &= ~Cursor_Status.Enabled;
     }
     else
     {
         Cursor_Status |= Cursor_Status.Enabled;
     }
     if (Memory.State.Characters != null)
     {
         Get_Sort_Stat();
         Stat = stat ?? Stat;
         Get_Slots_Values();
         if (SortMode != LastMode || this.Stat != LastStat || Character != LastCharacter)
         {
             Get_Sort();
         }
         bool skipundo = false;
         if (!(SortMode == LastMode && Character == LastCharacter && this.Stat == LastStat && Page == LastPage))
         {
             LastCharacter = Character;
             LastStat      = this.Stat;
             LastPage      = Page;
             LastMode      = SortMode;
             skipundo      = Undo();
             FillMagic();
             UpdateTitle();
         }
         if (
             mode == Mode.Mag_Pool_ST_A ||
             mode == Mode.Mag_Pool_ST_D ||
             mode == Mode.Mag_Pool_EL_A ||
             mode == Mode.Mag_Pool_EL_D ||
             mode == Mode.Mag_Pool_Stat)
         {
             Generate_Preview(skipundo);
         }
     }
 }
            public ushort TotalStat(Kernel_bin.Stat s, Characters c = Characters.Blank)
            {
                if (c == Characters.Blank)
                {
                    c = ID;
                }
                int total = 0;

                foreach (Kernel_bin.Abilities i in Abilities)
                {
                    if (Kernel_bin.Statpercentabilities.ContainsKey(i) && Kernel_bin.Statpercentabilities[i].Stat == s)
                    {
                        total += Kernel_bin.Statpercentabilities[i].Value;
                    }
                }
                switch (s)
                {
                case Kernel_bin.Stat.HP:
                    return(Kernel_bin.CharacterStats[c].HP((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], _HP, total));

                case Kernel_bin.Stat.EVA:
                    //TODO confirm if there is no flat stat buff for eva. If there isn't then remove from function.
                    return(Kernel_bin.CharacterStats[c].EVA((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], 0, TotalStat(Kernel_bin.Stat.SPD, c), total));

                case Kernel_bin.Stat.SPD:
                    return(Kernel_bin.CharacterStats[c].SPD((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], RawStats[s], total));

                case Kernel_bin.Stat.HIT:
                    return(Kernel_bin.CharacterStats[c].HIT(Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], WeaponID));

                case Kernel_bin.Stat.LUCK:
                    return(Kernel_bin.CharacterStats[c].LUCK((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], RawStats[s], total));

                case Kernel_bin.Stat.MAG:
                    return(Kernel_bin.CharacterStats[c].MAG((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], RawStats[s], total));

                case Kernel_bin.Stat.SPR:
                    return(Kernel_bin.CharacterStats[c].SPR((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], RawStats[s], total));

                case Kernel_bin.Stat.STR:
                    return(Kernel_bin.CharacterStats[c].STR((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], RawStats[s], total, WeaponID));

                case Kernel_bin.Stat.VIT:
                    return(Kernel_bin.CharacterStats[c].VIT((sbyte)Level, Stat_J[s], Stat_J[s] == 0 ? 0 : Magics[Stat_J[s]], RawStats[s], total));
                }
                return(0);
            }
Exemple #8
0
            /// <summary>
            /// Things fixed at startup.
            /// </summary>
            protected override void Init()
            {
                Contents = new Kernel_bin.Stat[Count];
                base.Init();

                ITEM[5, 0] = new IGMDataItem.Icon {
                    Data = Icons.ID.Icon_Status_Attack, Pos = new Rectangle(SIZE[5].X + 200, SIZE[5].Y, 0, 0)
                };
                ITEM[5, 1] = new IGMDataItem.Icon {
                    Data = Icons.ID.Icon_Status_Defense, Pos = new Rectangle(SIZE[5].X + 240, SIZE[5].Y, 0, 0)
                };
                ITEM[5, 2] = new IGMDataItem.Icon {
                    Data = Icons.ID.Icon_Elemental_Attack, Pos = new Rectangle(SIZE[5].X + 280, SIZE[5].Y, 0, 0)
                };
                ITEM[5, 3] = new IGMDataItem.Icon {
                    Data = Icons.ID.Icon_Elemental_Defense, Pos = new Rectangle(SIZE[5].X + 320, SIZE[5].Y, 0, 0)
                };

                foreach (Kernel_bin.Stat stat in Stat2Icon.Keys.OrderBy(o => (byte)o))
                {
                    int pos = (int)stat;
                    if (pos >= 5)
                    {
                        pos++;
                    }
                    ITEM[pos, 0] = new IGMDataItem.Icon {
                        Data = Stat2Icon[stat], Pos = new Rectangle(SIZE[pos].X, SIZE[pos].Y, 0, 0)
                    };
                    ITEM[pos, 1] = new IGMDataItem.Text {
                        Pos = new Rectangle(SIZE[pos].X + 80, SIZE[pos].Y, 0, 0)
                    };
                    ITEM[pos, 2] = new IGMDataItem.Integer {
                        Pos = new Rectangle(SIZE[pos].X + 152, SIZE[pos].Y, 0, 0), NumType = Icons.NumType.SysFntBig, Spaces = 10
                    };
                    ITEM[pos, 3] = stat == Kernel_bin.Stat.HIT || stat == Kernel_bin.Stat.EVA
                                    ? new IGMDataItem.Text {
                        Data = Strings.Name.Percent, Pos = new Rectangle(SIZE[pos].X + 350, SIZE[pos].Y, 0, 0)
                    }
                                    : null;
                    ITEM[pos, 4] = new IGMDataItem.Icon {
                        Pos = new Rectangle(SIZE[pos].X + 250, SIZE[pos].Y, 0, 0), Palette = 16
                    };
                }
            }
Exemple #9
0
        private void Get_Sort_Stat()
        {
            if (Battle)
            {
                //SortMode = IGM_Junction.Mode.Mag_Pool_Stat;
            }
            else
            {
                SortMode = (IGM_Junction.Mode)Menu.IGM_Junction.GetMode();
                switch (SortMode)
                {
                default:
                case IGM_Junction.Mode.Mag_Stat:
                case IGM_Junction.Mode.Mag_Pool_Stat:
                    SortMode = IGM_Junction.Mode.Mag_Pool_Stat;
                    break;

                case IGM_Junction.Mode.Mag_ST_D:
                case IGM_Junction.Mode.Mag_Pool_ST_D:
                    SortMode = IGM_Junction.Mode.Mag_Pool_ST_D;
                    break;

                case IGM_Junction.Mode.Mag_ST_A:
                case IGM_Junction.Mode.Mag_Pool_ST_A:
                    SortMode = IGM_Junction.Mode.Mag_Pool_ST_A;
                    Stat     = Kernel_bin.Stat.ST_Atk;
                    break;

                case IGM_Junction.Mode.Mag_EL_D:
                case IGM_Junction.Mode.Mag_Pool_EL_D:
                    SortMode = IGM_Junction.Mode.Mag_Pool_EL_D;
                    break;

                case IGM_Junction.Mode.Mag_EL_A:
                case IGM_Junction.Mode.Mag_Pool_EL_A:
                    SortMode = IGM_Junction.Mode.Mag_Pool_EL_A;
                    Stat     = Kernel_bin.Stat.EL_Atk;
                    break;
                }
            }
        }
            public bool Unlocked(List <Kernel_bin.Abilities> unlocked, Kernel_bin.Stat stat)
            {
                switch (stat)
                {
                default:
                    return(unlocked.Contains(Kernel_bin.Stat2Ability[stat]));

                case Kernel_bin.Stat.EL_Atk:
                    return(unlocked.Contains(Kernel_bin.Abilities.EL_Atk_J));

                case Kernel_bin.Stat.EL_Def_1:
                    return(unlocked.Contains(Kernel_bin.Abilities.EL_Def_Jx1) ||
                           unlocked.Contains(Kernel_bin.Abilities.EL_Def_Jx2) ||
                           unlocked.Contains(Kernel_bin.Abilities.EL_Def_Jx4));

                case Kernel_bin.Stat.EL_Def_2:
                    return(unlocked.Contains(Kernel_bin.Abilities.EL_Def_Jx2) ||
                           unlocked.Contains(Kernel_bin.Abilities.EL_Def_Jx4));

                case Kernel_bin.Stat.EL_Def_3:
                case Kernel_bin.Stat.EL_Def_4:
                    return(unlocked.Contains(Kernel_bin.Abilities.EL_Def_Jx4));

                case Kernel_bin.Stat.ST_Atk:
                    return(unlocked.Contains(Kernel_bin.Abilities.ST_Atk_J));

                case Kernel_bin.Stat.ST_Def_1:
                    return(unlocked.Contains(Kernel_bin.Abilities.ST_Def_Jx1) ||
                           unlocked.Contains(Kernel_bin.Abilities.ST_Def_Jx2) ||
                           unlocked.Contains(Kernel_bin.Abilities.ST_Def_Jx4));

                case Kernel_bin.Stat.ST_Def_2:
                    return(unlocked.Contains(Kernel_bin.Abilities.ST_Def_Jx2) ||
                           unlocked.Contains(Kernel_bin.Abilities.ST_Def_Jx4));

                case Kernel_bin.Stat.ST_Def_3:
                case Kernel_bin.Stat.ST_Def_4:
                    return(unlocked.Contains(Kernel_bin.Abilities.ST_Def_Jx4));
                }
            }
 public bool Unlocked(Kernel_bin.Stat stat) => Unlocked(UnlockedGFAbilities, stat);
 public void Read(BinaryReader br, Characters c)
 {
     ID         = c;
     _CurrentHP = br.ReadUInt16(); //0x00
     _HP        = br.ReadUInt16(); //0x02
     Experience = br.ReadUInt32(); //0x04
     ModelID    = br.ReadByte();   //0x08
     WeaponID   = br.ReadByte();   //0x09
     RawStats   = new Dictionary <Kernel_bin.Stat, byte>(6)
     {
         [Kernel_bin.Stat.STR]  = br.ReadByte(), //0x0A
         [Kernel_bin.Stat.VIT]  = br.ReadByte(), //0x0B
         [Kernel_bin.Stat.MAG]  = br.ReadByte(), //0x0C
         [Kernel_bin.Stat.SPR]  = br.ReadByte(), //0x0D
         [Kernel_bin.Stat.SPD]  = br.ReadByte(), //0x0E
         [Kernel_bin.Stat.LUCK] = br.ReadByte()  //0x0F
     };
     Magics = new Dictionary <byte, byte>(33);
     for (int i = 0; i < 32; i++)
     {
         byte key = br.ReadByte();
         byte val = br.ReadByte();
         if (key >= 0 && !Magics.ContainsKey(key))
         {
             Magics.Add(key, val);//0x10
         }
     }
     Commands = Array.ConvertAll(br.ReadBytes(3), Item => (Kernel_bin.Abilities)Item).ToList();         //0x50
     Paddingorunusedcommand = br.ReadByte();                                                            //0x53
     Abilities        = Array.ConvertAll(br.ReadBytes(4), Item => (Kernel_bin.Abilities)Item).ToList(); //0x54
     JunctionnedGFs   = (GFflags)br.ReadUInt16();                                                       //0x58
     Unknown1         = br.ReadByte();                                                                  //0x5A
     Alternativemodel = br.ReadByte();                                                                  //0x5B (Normal, SeeD, Soldier...)
     Stat_J           = new Dictionary <Kernel_bin.Stat, byte>(9);
     for (int i = 0; i < 19; i++)
     {
         Kernel_bin.Stat key = (Kernel_bin.Stat)i;
         byte            val = br.ReadByte();
         if (!Stat_J.ContainsKey(key))
         {
             Stat_J.Add(key, val);
         }
     }
     //JunctionHP = br.ReadByte();//0x5C
     //JunctionSTR = br.ReadByte();//0x5D
     //JunctionVIT = br.ReadByte();//0x5E
     //JunctionMAG = br.ReadByte();//0x5F
     //JunctionSPR = br.ReadByte();//0x60
     //JunctionSPD = br.ReadByte();//0x61
     //JunctionEVA = br.ReadByte();//0x62
     //JunctionHIT = br.ReadByte();//0x63
     //JunctionLCK = br.ReadByte();//0x64
     //Elem_Atk_J = br.ReadByte();//0x65
     //ST_Atk_J = br.ReadByte();//0x66
     //Elem_Def_J = br.ReadBytes(4).ToList() ;//0x67
     //ST_Def_J = br.ReadBytes(4).ToList();//0x6B
     Unknown2             = br.ReadByte();//0x6F (padding?)
     CompatibilitywithGFs = new Dictionary <GFs, ushort>(16);
     for (int i = 0; i < 16; i++)
     {
         CompatibilitywithGFs.Add((GFs)i, br.ReadUInt16()); //0x70
     }
     Numberofkills = br.ReadUInt16();                       //0x90
     NumberofKOs   = br.ReadUInt16();                       //0x92
     Exists        = br.ReadByte();                         //0x94
     Unknown3      = br.ReadByte();                         //0x95
     MentalStatus  = br.ReadByte();                         //0x96
     Unknown4      = br.ReadByte();                         //0x97
 }
 /// <summary>
 /// Sorted Enumerable based on best to worst for Stat. Uses character's total magic and
 /// kernel bin's stat value.
 /// </summary>
 /// <param name="Stat">Stat sorting by.</param>
 /// <returns>Ordered Enumberable</returns>
 public IOrderedEnumerable <Kernel_bin.Magic_Data> SortedMagic(Kernel_bin.Stat Stat) => Kernel_bin.MagicData.OrderBy(x => (-x.totalStatVal(Stat) * (Magics.ContainsKey(x.ID) ? Magics[x.ID] : 0)) / 100);
Exemple #14
0
 /// <summary>
 /// Things fixed at startup.
 /// </summary>
 protected override void Init()
 {
     Contents = new Kernel_bin.Stat[Count];
     base.Init();
 }
Exemple #15
0
            protected Dictionary <T, byte> getTotal <T>(out Enum[] availableFlagsarray, byte max, Kernel_bin.Stat stat, params byte[] spells) where T : Enum
            {
                const int            maxspellcount  = 100;
                Dictionary <T, byte> total          = new Dictionary <T, byte>(8);
                IEnumerable <Enum>   availableFlags = Enum.GetValues(typeof(T)).Cast <Enum>();

                foreach (Enum flag in availableFlags.Where(d => !total.ContainsKey((T)d)))
                {
                    total.Add((T)flag, 0);
                }
                for (int i = 0; i < spells.Length; i++)
                {
                    Enum flags = null;
                    byte spell = spells[i];
                    Kernel_bin.Magic_Data magic_Data = Kernel_bin.MagicData[spell];
                    switch (stat)
                    {
                    case Kernel_bin.Stat.EL_Atk:
                        flags = magic_Data.EL_Atk;
                        break;

                    case Kernel_bin.Stat.EL_Def_1:
                    case Kernel_bin.Stat.EL_Def_2:
                    case Kernel_bin.Stat.EL_Def_3:
                    case Kernel_bin.Stat.EL_Def_4:
                        flags = magic_Data.EL_Def;
                        break;

                    case Kernel_bin.Stat.ST_Atk:
                        flags = magic_Data.ST_Atk;
                        break;

                    case Kernel_bin.Stat.ST_Def_1:
                    case Kernel_bin.Stat.ST_Def_2:
                    case Kernel_bin.Stat.ST_Def_3:
                    case Kernel_bin.Stat.ST_Def_4:
                        flags = magic_Data.ST_Def;
                        break;
                    }
                    if (flags != null && Damageable.GetCharacterData(out Saves.CharacterData c))
                    {
                        foreach (Enum flag in availableFlags.Where(flags.HasFlag))
                        {
                            if (c.Magics.TryGetByKey(spell, out byte count) && magic_Data.J_Val.TryGetValue(stat, out byte value))
                            {
                                int t = total[(T)flag] + (value * count / maxspellcount);
                                total[(T)flag] = (byte)MathHelper.Clamp(t, 0, max);
                            }
                        }
                    }
                    else
                    {
                        throw new Exception($"Unknown stat, {stat}");
                    }
                }
                availableFlagsarray = availableFlags.ToArray();
                return(total);
            }
Exemple #16
0
                protected Dictionary <T, byte> getTotal <T>(out Enum[] availableFlagsarray, byte max, Kernel_bin.Stat stat, params byte[] spell) where T : Enum
                {
                    Dictionary <T, byte> total = new Dictionary <T, byte>(8);

                    IEnumerable <Enum> availableFlags = Enum.GetValues(typeof(T)).Cast <Enum>();

                    foreach (Enum flag in availableFlags.Where(d => !total.ContainsKey((T)d)))
                    {
                        total.Add((T)flag, 0);
                    }
                    for (int i = 0; i < spell.Length; i++)
                    {
                        Enum flags = null;
                        switch (stat)
                        {
                        case Kernel_bin.Stat.EL_Atk:
                            flags = Kernel_bin.MagicData[spell[i]].EL_Atk;
                            break;

                        case Kernel_bin.Stat.EL_Def_1:
                        case Kernel_bin.Stat.EL_Def_2:
                        case Kernel_bin.Stat.EL_Def_3:
                        case Kernel_bin.Stat.EL_Def_4:
                            flags = Kernel_bin.MagicData[spell[i]].EL_Def;
                            break;

                        case Kernel_bin.Stat.ST_Atk:
                            flags = Kernel_bin.MagicData[spell[i]].ST_Atk;
                            break;

                        case Kernel_bin.Stat.ST_Def_1:
                        case Kernel_bin.Stat.ST_Def_2:
                        case Kernel_bin.Stat.ST_Def_3:
                        case Kernel_bin.Stat.ST_Def_4:
                            flags = Kernel_bin.MagicData[spell[i]].ST_Def;
                            break;
                        }
                        if (flags != null)
                        {
                            foreach (Enum flag in availableFlags.Where(flags.HasFlag))
                            {
                                int t = total[(T)flag] + ((Kernel_bin.MagicData[spell[i]].J_Val[stat] * Memory.State.Characters[Character].Magics[spell[i]]) / 100);
                                total[(T)flag] = (byte)(t > max ? max : t);
                            }
                        }
                        else
                        {
                            throw new Exception($"Unknown stat, {stat}");
                        }
                    }
                    availableFlagsarray = availableFlags.ToArray();
                    return(total);
                }
Exemple #17
0
 private void StatChangeEvent(object sender, Kernel_bin.Stat e) => UpdateOnEvent(sender, null, e);
Exemple #18
0
 public override ushort TotalStat(Kernel_bin.Stat s) => 0;
Exemple #19
0
 public static void ChangeStat(Kernel_bin.Stat stat) => StatEventListener?.Invoke(null, stat);
Exemple #20
0
 public abstract ushort TotalStat(Kernel_bin.Stat s);