Beispiel #1
0
        private void TriggerVictory(ConcurrentDictionary <Characters, int> expextra = null)
        {
            int  exp = 0;
            uint ap  = 0;
            ConcurrentDictionary <byte, byte>     items = new ConcurrentDictionary <byte, byte>();
            ConcurrentDictionary <Cards.ID, byte> cards = new ConcurrentDictionary <Cards.ID, byte>();

            foreach (Enemy e in Enemy.Party)
            {
                exp += e.EXP;
                ap  += e.AP;
                Saves.Item drop     = e.Drop(Memory.State.PartyHasAbility(Kernel_bin.Abilities.RareItem));
                Cards.ID   carddrop = e.CardDrop();
                if (drop.QTY > 0 && drop.ID > 0)
                {
                    if (!items.TryAdd(drop.ID, drop.QTY))
                    {
                        items[drop.ID] += drop.QTY;
                    }
                }
                if (carddrop != Cards.ID.Fail && carddrop != Cards.ID.Immune)
                {
                    if (!cards.TryAdd(carddrop, 1))
                    {
                        cards[carddrop]++;
                    }
                }
            }
            SetMode(Mode.Victory);
            Victory_Menu?.Refresh(exp, ap, expextra, items, cards);
        }
Beispiel #2
0
        private static void DrawFace()
        {
            if (pointer >= 0)
            {
                Viewport vp = Memory.graphics.GraphicsDevice.Viewport;

                Cards.ID id  = CardValue[pointer];
                uint     pos = (uint)id;
                //int i = cards.GetEntry(id).File;
                uint col = (uint)(Memory.Cards.GetEntry(id).X / Memory.Cards.GetEntry(id).Width) + 1;
                uint row = (uint)(Memory.Cards.GetEntry(id).Y / Memory.Cards.GetEntry(id).Width) + 1;

                float     scale = vp.Height / Memory.Cards.GetEntry(id).Height;
                Rectangle dst   = new Rectangle(new Point(0), (Memory.Cards.GetEntry(id).Size *scale).ToPoint());
                dst.Offset(vp.Width / 2 - dst.Center.X, 0);
                Memory.SpriteBatchStartAlpha();
                Memory.spriteBatch.GraphicsDevice.Clear(Color.Black);
                Memory.Cards.Draw(id, dst);
                Memory.font.RenderBasicText(
                    $"{CardValue[pointer].ToString().Replace('_', ' ')}\n" +
                    $"pos: {pos}\n" +
                    $"col: {col}\n" +
                    $"row: {row}\n" +
                    $"x: {Memory.Cards.GetEntry(id).X}\n" +
                    $"y: {Memory.Cards.GetEntry(id).Y}\n" +
                    $"width: {Memory.Cards.GetEntry(id).Width}\n" +
                    $"height: {Memory.Cards.GetEntry(id).Height}",
                    (int)(vp.Width * 0.10f), (int)(vp.Height * 0.05f), lineSpacing: 1);
                Memory.SpriteBatchEnd();
            }
        }
Beispiel #3
0
            public bool EarnItem(Cards.ID card, byte qty, byte location = 0)
            {
                TTCardInfo i = new TTCardInfo {
                    Unlocked = true, Qty = qty, Location = location
                };

                if (!TripleTriad.cards.TryAdd(card, i))
                {
                    TripleTriad.cards[card].Unlocked = i.Unlocked;
                    TripleTriad.cards[card].Qty     += i.Qty;
                    TripleTriad.cards[card].Location = i.Location;
                    return(true);
                }
                return(false);
            }
Beispiel #4
0
        private static void DrawFace()
        {
            if (pointer >= 0)
            {
                Viewport vp = Memory.graphics.GraphicsDevice.Viewport;

                Cards.ID id  = CardValue[pointer];
                uint     pos = (uint)((uint)id % Memory.Cards.EntriesPerTexture);
                if (id >= Cards.ID.Card_Back)
                {
                    pos = Memory.Cards.Count - 1;
                }
                //int i = cards.GetEntry(id).File;
                Entry     entry = Memory.Cards.GetEntry(pos);
                uint      col   = (uint)(entry.X / entry.Width) + 1;
                uint      row   = (uint)(entry.Y / entry.Width) + 1;
                Rectangle dst   = new Rectangle(new Point(0), entry.Size.ToPoint());
                dst.Height = (int)Math.Round(dst.Width * (1 + Cards.AspectRatio));

                float scale = vp.Height / dst.Height;
                dst = dst.Scale(new Vector2(scale));
                dst.Offset(vp.Width / 2 - dst.Center.X, vp.Height / 2 - dst.Center.Y);
                Memory.SpriteBatchStartAlpha();
                Memory.spriteBatch.GraphicsDevice.Clear(Color.Black);
                Memory.Cards.Draw(id, dst);
                Memory.font.RenderBasicText(
                    $"{CardValue[pointer].ToString().Replace('_', ' ')}\n" +
                    $"pos: {(uint)id}\n" +
                    $"col: {col}\n" +
                    $"row: {row}\n" +
                    $"x: {entry.X}\n" +
                    $"y: {entry.Y}\n" +
                    $"width: {entry.Width}\n" +
                    $"height: {entry.Height}",
                    (int)(vp.Width * 0.10f), (int)(vp.Height * 0.05f), lineSpacing: 1);
                Memory.SpriteBatchEnd();
            }
        }
Beispiel #5
0
 public HOWMANYCARD(Cards.ID cardID) => _cardID = cardID;
Beispiel #6
0
 public HowManyCard(Cards.ID cardID) => _cardID = cardID;
            protected override void Init()
            {
                if (CommandFunc == null)
                {
                    CommandFunc = new Dictionary <int, Func <bool> >
                    {
                        //{0,Command00 },
                        { 1, Command01_ATTACK },
                        { 2, Command02_MAGIC },
                        //{3,Command03_GF },
                        { 4, Command04_ITEM },
                        { 5, Command05_RENZOKUKEN },
                        { 6, Command06_DRAW },
                        { 7, Command07_DEVOUR },
                        //{8,Command08_UNNAMED },
                        //{9,Command09_CAST },
                        //{10,Command10_STOCK },
                        { 11, Command11_DUEL },
                        { 12, Command12_MUG },
                        //{13,Command13_NOMSG },
                        { 14, Command14_SHOT },
                        { 15, Command15_BLUE_MAGIC },
                        //{16,Command16_SLOT },
                        { 17, Command17_FIRE_CROSS_NO_MERCY },
                        { 18, Command18_SORCERY_ICE_STRIKE },
                        { 19, Command19_COMBINE },
                        { 20, Command20_DESPERADO },
                        { 21, Command21_BLOOD_PAIN },
                        { 22, Command22_MASSIVE_ANCHOR },
                        //{23,Command23_DEFEND },
                        { 24, Command24_MADRUSH },
                        { 25, Command25_TREATMENT },
                        { 26, Command26_RECOVERY },
                        { 27, Command27_REVIVE },
                        { 28, Command28_DARKSIDE },
                        { 29, Command29_CARD },
                        { 30, Command30_DOOM },
                        { 31, Command31_KAMIKAZI },
                        { 32, Command32_ABSORB },
                        { 33, Command33_LVL_DOWN },
                        { 34, Command34_LVL_UP },
                        { 35, Command35_SINGLE },
                        { 36, Command36_DOUBLE },
                        { 37, Command37_TRIPLE },
                        { 38, Command38_MINIMOG },
                    }
                }
                ;
                base.Init();

                //bool Command00() => throw new NotImplementedException();

                bool Command01_ATTACK()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    Damageable.EndTurn();
                    return(true);
                }

                bool Command02_MAGIC()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} casts {Magic.Name}({Magic.ID}) spell on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();
                    return(true);
                }

                //bool Command03_GF() => throw new NotImplementedException();

                bool Command04_ITEM()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} uses {Item.Name}({Item.ID}) item on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();
                    return(true);
                }

                bool Command05_RENZOKUKEN()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    if (d.First().GetType() == typeof(Enemy))
                    {
                        //Renzokuken
                        byte w    = Memory.State[fromvc].WeaponID;
                        int  hits = 0;
                        if (Memory.State[fromvc].CurrentCrisisLevel > 0)
                        {
                            hits = Memory.State[fromvc].CurrentCrisisLevel < Renzokuken_hits.Length ? Renzokuken_hits[Memory.State[fromvc].CurrentCrisisLevel] : Renzokuken_hits.Last();
                        }
                        //else return false;
                        else
                        {
                            hits = Renzokuken_hits.First();
                        }
                        int  finisherchance = (Memory.State[fromvc].CurrentCrisisLevel + 1) * 60;
                        bool willfinish     = Memory.Random.Next(byte.MaxValue + 1) <= finisherchance;
                        int  choosefinish   = Memory.Random.Next(3 + 1);
                        Kernel_bin.Weapons_Data        wd = Kernel_bin.WeaponsData[w];
                        Kernel_bin.Renzokeken_Finisher r  = wd.Renzokuken;
                        if (r == 0)
                        {
                            willfinish = false;
                        }

                        //per wiki the chance of which finisher is 25% each and the highest value finisher get the remaining of 100 percent.
                        //so rough divide is 100% when you only only have that
                        //when you unlock 2 one is 75% chance
                        //when you onlock 3 last one is 50%
                        //when you unlock all 4 it's 25% each.

                        //finishers each have their own target
                        BattleMenus.GetCurrentBattleMenu().Renzokeken.Reset(hits);
                        BattleMenus.GetCurrentBattleMenu().Renzokeken.Show();
                        if (willfinish)
                        {
                            List <Kernel_bin.Renzokeken_Finisher> flags = Enum.GetValues(typeof(Kernel_bin.Renzokeken_Finisher))
                                                                          .Cast <Kernel_bin.Renzokeken_Finisher>()
                                                                          .Where(f => (f & r) != 0)
                                                                          .ToList();
                            Kernel_bin.Renzokeken_Finisher finisher = choosefinish >= flags.Count ? flags.Last() : flags[choosefinish];
                            Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} hits {hits} times with {Command.Name}({Command.ID}) then uses {Kernel_bin.RenzokukenFinishersData[finisher].Name}.");
                        }
                        else
                        {
                            Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} hits {hits} times with {Command.Name}({Command.ID}) then fails to use a finisher.");
                        }
                    }
                    return(true);
                }

                bool Command06_DRAW()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    //draw
                    //spawn a 1 page 4 row pool of the magic/gfs that the selected enemy has.
                    if (d.First().GetType() == typeof(Enemy))
                    {
                        var e = (Enemy)d.First();
                        DrawMagic(e.DrawList);
                        Draw_Pool.Refresh(e.DrawList);
                        Draw_Pool.Show();
                    }
                    return(true);
                }

                bool Command07_DEVOUR()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    //TODO add devour commands
                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                //bool Command08_UNNAMED() => throw new NotImplementedException();

                //bool Command09_CAST() => throw new NotImplementedException();

                //bool Command10_STOCK() => throw new NotImplementedException();

                bool Command11_DUEL()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command12_MUG()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    if (d.First().GetType() == typeof(Enemy))
                    {
                        var e = (Enemy)d.First();
                        //unsure if party member being ejected or if they need to be in the party for rare item to work
                        Saves.Item i = e.Mug(Memory.State[fromvc].SPD, Memory.State.PartyHasAbility(Kernel_bin.Abilities.RareItem));
                        Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} stole {i.DATA?.Name}({i.ID}) x {i.QTY} from { DebugMessageSuffix(d) }");
                    }
                    Damageable.EndTurn();
                    return(true);
                }

                //bool Command13_NOMSG() => throw new NotImplementedException();

                bool Command14_SHOT()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command15_BLUE_MAGIC()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} casts {BlueMagic.Name}({BlueMagic.ID}) spell on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();
                    return(false);
                }

                //bool Command16_SLOT() => throw new NotImplementedException();

                bool Command17_FIRE_CROSS_NO_MERCY()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command18_SORCERY_ICE_STRIKE()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command19_COMBINE()
                {
                    //perform angelo attack unless angel wing is unlocked and chosen in menu.
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command20_DESPERADO()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command21_BLOOD_PAIN()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command22_MASSIVE_ANCHOR()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                //bool Command23_DEFEND() => throw new NotImplementedException();

                bool Command24_MADRUSH()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command25_TREATMENT()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command26_RECOVERY()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command27_REVIVE()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command28_DARKSIDE()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    Damageable.EndTurn();
                    return(true);
                }

                bool Command29_CARD()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    if (d.First().GetType() == typeof(Enemy))
                    {
                        var      e = (Enemy)d.First();
                        Cards.ID c = e.Card();
                        if (c == Cards.ID.Fail)
                        {
                            Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} Failed to use {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                        }
                        else if (c == Cards.ID.Immune)
                        {
                            Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} Failed to use {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) } because they are immune!");
                        }
                        else
                        {
                            Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) } and got a {c} card");
                        }
                        Damageable.EndTurn();
                    }
                    return(true);
                }

                bool Command30_DOOM()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);
                    Damageable.EndTurn();
                    return(true);
                }

                bool Command31_KAMIKAZI()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command32_ABSORB()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command33_LVL_DOWN()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command34_LVL_UP()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }

                bool Command35_SINGLE() => Command02_MAGIC();

                bool Command36_DOUBLE()
                {
                    // CHOOSE 2X TARGETS
                    throw new NotImplementedException();
                }

                bool Command37_TRIPLE()
                {
                    // CHOOSE 3X TARGETS
                    throw new NotImplementedException();
                }

                bool Command38_MINIMOG()
                {
                    Neededvaribles(out Damageable[] d, out Characters fromvc);

                    Debug.WriteLine($"{Memory.Strings.GetName(fromvc)} used {Command.Name}({Command.ID}) on { DebugMessageSuffix(d) }");
                    Damageable.EndTurn();

                    return(true);
                }
            }