Exemple #1
0
        private static void stealGive(HarrowDeck deck, Suit v, int dist, int num)
        {
            Fortune f1 = deck.getAttr(v);
            Fortune f2 = deck.getAttr((Suit)((int)(v + dist) % 4));

            f1.tokens -= num;
            f2.tokens += num;
        }
Exemple #2
0
        private static void resolveBody(HarrowDeck deck, Suit s, int n)
        {
            //UnityEngine.Debug.Log(s + "," + n);
            if ((s == Suit.HAMMER_STR || s == Suit.KEY_AGL) && (n == 1 || n == 3 || n == 7 || n == 9))
            {
                //ideologue
                switch (s)
                {
                case Suit.HAMMER_STR:
                    deck.STR.tokens += deck.body.tokens;
                    break;

                case Suit.KEY_AGL:
                    deck.AGL.tokens += deck.body.tokens;
                    break;
                }
            }
            else if (n == 2)
            {
                //equalizer
                switch (s)
                {
                case Suit.HAMMER_STR:
                case Suit.KEY_AGL:
                case Suit.TOME_INT:
                case Suit.CROWN_CHA:
                    deck.STR.tokens += deck.body.tokens / 2;
                    deck.AGL.tokens += deck.body.tokens / 2;
                    break;
                }
            }
            else
            {
                switch (s)
                {
                case Suit.HAMMER_STR:
                    deck.STR.tokens += deck.body.tokens / 3 * 2;
                    deck.AGL.tokens += deck.body.tokens / 3;
                    break;

                case Suit.KEY_AGL:
                    deck.STR.tokens += deck.body.tokens / 3;
                    deck.AGL.tokens += deck.body.tokens / 3 * 2;
                    break;

                case Suit.TOME_INT:
                    deck.STR.tokens += deck.body.tokens / 3 * 2;
                    deck.AGL.tokens += deck.body.tokens / 3;
                    break;

                case Suit.CROWN_CHA:
                    deck.STR.tokens += deck.body.tokens / 3;
                    deck.AGL.tokens += deck.body.tokens / 3 * 2;
                    break;
                }
            }
        }
Exemple #3
0
        private static void resolveMind(HarrowDeck deck, Suit s, int n)
        {
            if ((s == Suit.TOME_INT || s == Suit.CROWN_CHA) && (n == 1 || n == 3 || n == 7 || n == 9))
            {
                //ideologue
                switch (s)
                {
                case Suit.TOME_INT:
                    deck.INT.tokens += deck.mind.tokens;
                    break;

                case Suit.CROWN_CHA:
                    deck.CHA.tokens += deck.mind.tokens;
                    break;
                }
            }
            else if (n == 2)
            {
                //equalizer
                switch (s)
                {
                case Suit.HAMMER_STR:
                case Suit.KEY_AGL:
                case Suit.TOME_INT:
                case Suit.CROWN_CHA:
                    deck.INT.tokens += deck.mind.tokens / 2;
                    deck.CHA.tokens += deck.mind.tokens / 2;
                    break;
                }
            }
            else
            {
                switch (s)
                {
                case Suit.HAMMER_STR:
                    deck.INT.tokens += deck.mind.tokens / 3;
                    deck.CHA.tokens += deck.mind.tokens / 3 * 2;
                    break;

                case Suit.KEY_AGL:
                    deck.INT.tokens += deck.mind.tokens / 3 * 2;
                    deck.CHA.tokens += deck.mind.tokens / 3;
                    break;

                case Suit.TOME_INT:
                    deck.INT.tokens += deck.mind.tokens / 3;
                    deck.CHA.tokens += deck.mind.tokens / 3 * 2;
                    break;

                case Suit.CROWN_CHA:
                    deck.INT.tokens += deck.mind.tokens / 3 * 2;
                    deck.CHA.tokens += deck.mind.tokens / 3;
                    break;
                }
            }
        }
Exemple #4
0
        private static void resolveNature(HarrowDeck deck, Suit s, int n)
        {
            switch (s)
            {
            case Suit.HAMMER_STR:
            case Suit.KEY_AGL:
                if (n != 5)
                {
                    deck.body.tokens += deck.nature.tokens / 3 * 2;
                    deck.mind.tokens += deck.nature.tokens / 3;
                }
                else
                {
                    deck.body.tokens += deck.nature.tokens / 3;
                    deck.mind.tokens += deck.nature.tokens / 3;
                    switch (s)
                    {
                    case Suit.HAMMER_STR:
                        deck.mind.tokens += deck.STR.tokens / 3;
                        break;

                    case Suit.KEY_AGL:
                        deck.mind.tokens += deck.AGL.tokens / 3;
                        break;
                    }
                }
                break;

            case Suit.TOME_INT:
            case Suit.CROWN_CHA:
                if (n != 5)
                {
                    deck.body.tokens += deck.nature.tokens / 3;
                    deck.mind.tokens += deck.nature.tokens / 3 * 2;
                }
                else
                {
                    deck.body.tokens += deck.nature.tokens / 3;
                    deck.mind.tokens += deck.nature.tokens / 3;
                    switch (s)
                    {
                    case Suit.TOME_INT:
                        deck.mind.tokens += deck.INT.tokens / 3;
                        break;

                    case Suit.CROWN_CHA:
                        deck.mind.tokens += deck.CHA.tokens / 3;
                        break;
                    }
                }
                break;
            }
        }
Exemple #5
0
        private static void resolveSpirit(HarrowDeck deck, Suit s, int n)
        {
            //UnityEngine.Debug.Log(s);
            switch (s)
            {
            case Suit.HAMMER_STR:
                deck.STR.tokens += deck.spirit.tokens / 2;
                break;

            case Suit.KEY_AGL:
                deck.AGL.tokens += deck.spirit.tokens / 2;
                break;

            case Suit.TOME_INT:
                deck.INT.tokens += deck.spirit.tokens / 2;
                break;

            case Suit.CROWN_CHA:
                deck.CHA.tokens += deck.spirit.tokens / 2;
                break;
            }
            s += ((n % 3) + 1);
            s  = (Suit)((int)s % 4);
            //UnityEngine.Debug.Log(s);
            switch (s)
            {
            case Suit.HAMMER_STR:
                deck.STR.tokens += deck.spirit.tokens / 2;
                break;

            case Suit.KEY_AGL:
                deck.AGL.tokens += deck.spirit.tokens / 2;
                break;

            case Suit.TOME_INT:
                deck.INT.tokens += deck.spirit.tokens / 2;
                break;

            case Suit.CROWN_CHA:
                deck.CHA.tokens += deck.spirit.tokens / 2;
                break;
            }
        }
Exemple #6
0
        private static void resolve(HarrowDeck deck)
        {
            Suit s;
            int  n;

            s = deck.nature.card.getSuit();
            n = deck.nature.card.getValue();
            resolveNature(deck, s, n);
            //UnityEngine.Debug.Log("1: " + deck.body.tokens + "," + deck.mind.tokens);
            //UnityEngine.Debug.Log("0: " + deck.STR.tokens + "," + deck.AGL.tokens + "," + deck.INT.tokens + "," + deck.CHA.tokens + "(" + deck.nature.tokens + ")");
            deck.nature.tokens = 0;
            s = deck.spirit.card.getSuit();
            n = deck.spirit.card.getValue();
            resolveSpirit(deck, s, n);
            //UnityEngine.Debug.Log("1: " + deck.STR.tokens + "," + deck.AGL.tokens + "," + deck.INT.tokens + "," + deck.CHA.tokens + "(" + deck.spirit.tokens + ")");
            deck.spirit.tokens = 0;
            s = deck.body.card.getSuit();
            n = deck.body.card.getValue();
            resolveBody(deck, s, n);
            //UnityEngine.Debug.Log("2: " + deck.STR.tokens + "," + deck.AGL.tokens + "," + deck.INT.tokens + "," + deck.CHA.tokens + "(" + deck.body.tokens + ")");
            deck.body.tokens = 0;
            s = deck.mind.card.getSuit();
            n = deck.mind.card.getValue();
            resolveMind(deck, s, n);
            //UnityEngine.Debug.Log(deck.STR.tokens + "," + deck.AGL.tokens + "," + deck.INT.tokens + "," + deck.CHA.tokens + "(" + deck.mind.tokens + ")");
            deck.mind.tokens = 0;
            s = deck.nurture.card.getSuit();
            n = deck.nurture.card.getValue();
            s = resolveNurture(deck, s, n, true);
            //UnityEngine.Debug.Log(deck.STR.tokens + "," + deck.AGL.tokens + "," + deck.INT.tokens + "," + deck.CHA.tokens + "(" + deck.nurture.tokens + ")");
            deck.nurture.tokens = 0;
            //str, agl, int, cha in order starting with 's's
            for (int o = 0; o < 4; o++)
            {
                Suit ss = (Suit)((int)(s + o) % 4);
                resolveAttribute(deck, ss);
            }
            //UnityEngine.Debug.Log(deck.STR.tokens + "," + deck.AGL.tokens + "," + deck.INT.tokens + "," + deck.CHA.tokens);
        }
Exemple #7
0
        /*public static void _resolveAttribute(HarrowDeck deck, Suit attr) {
         *      resolveAttribute(deck, attr);
         * }*/

        private static void resolveAttribute(HarrowDeck deck, Suit attr)
        {
            //UnityEngine.Debug.Log("Resolving " + attr);
            Fortune f = deck.getAttr(attr);
            Suit    s = f.card.getSuit();
            int     n = f.card.getValue();

            //UnityEngine.Debug.Log("    " + s + n);
            switch (n)
            {
            case 0:
                switch (s)
                {
                case Suit.HAMMER_STR:
                case Suit.TOME_INT:
                    stealGive(deck, attr, 3, -1);
                    break;

                case Suit.KEY_AGL:                                 //steal 1 from all
                    stealGive(deck, attr, 1, -1);
                    stealGive(deck, attr, 2, -1);
                    stealGive(deck, attr, 3, -1);
                    break;

                case Suit.CROWN_CHA:                                 //give 1 to all
                    stealGive(deck, attr, 1, 1);
                    stealGive(deck, attr, 2, 1);
                    stealGive(deck, attr, 3, 1);
                    break;
                }
                break;

            case 1:
                stealGive(deck, attr, 1, 1);
                break;

            case 2:
                stealGive(deck, attr, 2, 1);
                break;

            case 3:
                stealGive(deck, attr, 3, 1);
                break;

            case 4:                     //steal from hammers&keys or tomes&crowns
                bool getHammerKey = false;
                switch (s)
                {
                case Suit.HAMMER_STR:
                case Suit.CROWN_CHA:
                    getHammerKey = true;
                    break;

                case Suit.TOME_INT:
                case Suit.KEY_AGL:
                    getHammerKey = false;
                    break;
                }
                for (Suit t = Suit.HAMMER_STR; t <= Suit.CROWN_CHA; t++)
                {
                    Fortune a = deck.getAttr(t);
                    Suit    d = a.card.getSuit();
                    if (d == Suit.HAMMER_STR || d == Suit.KEY_AGL)
                    {
                        if (getHammerKey)
                        {
                            a.tokens--;
                            f.tokens++;
                        }
                    }
                    else
                    {
                        if (!getHammerKey)
                        {
                            a.tokens--;
                            f.tokens++;
                        }
                    }
                }
                break;

            case 5:
                //UnityEngine.Debug.Log("    !" + attr);
                //UnityEngine.Debug.Log("    [" + deck.STR.tokens + "," + deck.AGL.tokens + "," + deck.INT.tokens + "," + deck.CHA.tokens + "]");
                List <Fortune> arr = new List <Fortune>();
                for (Suit t = Suit.HAMMER_STR; t <= Suit.CROWN_CHA; t++)
                {
                    Fortune fff = deck.getAttr(t);
                    arr.Add(fff);
                }
                arr.Sort((x, y) => x.tokens.CompareTo(y.tokens));
                bool    cont = true;
                Fortune toActOn;
                int     i = 0;
                switch (s)
                {
                case Suit.HAMMER_STR:
                case Suit.CROWN_CHA:
                    do
                    {
                        toActOn = arr[i];
                        i++;
                        if (i > 3 || (toActOn.tokens != arr[i].tokens && toActOn != f))
                        {
                            cont = false;
                        }
                        if (i <= 3 && toActOn.tokens == arr[i].tokens && toActOn != f)
                        {
                            i++;
                            if (i > 3)
                            {
                                cont = false;
                            }
                        }
                    } while(cont);
                    //UnityEngine.Debug.Log(s + ", Lowest: " + (Suit)(i-1));
                    if (s == Suit.HAMMER_STR)
                    {
                        toActOn.tokens -= 2;
                        f.tokens       += 2;
                    }
                    else
                    {
                        toActOn.tokens += 2;
                        f.tokens       -= 2;
                    }
                    break;

                case Suit.KEY_AGL:
                case Suit.TOME_INT:
                    i = 3;
                    do
                    {
                        toActOn = arr[i];
                        i--;
                        if (i > 0 || (toActOn.tokens != arr[i].tokens && toActOn != f))
                        {
                            cont = false;
                        }
                        if (i > 0 && toActOn.tokens == arr[i].tokens && toActOn != f)
                        {
                            i--;
                            if (i < 0)
                            {
                                cont = false;
                            }
                        }
                    } while(cont);
                    //UnityEngine.Debug.Log(s + ", Highest: " + (Suit)(i - 1));
                    if (s == Suit.HAMMER_STR)
                    {
                        toActOn.tokens -= 2;
                        f.tokens       += 2;
                    }
                    else
                    {
                        toActOn.tokens += 2;
                        f.tokens       -= 2;
                    }
                    break;
                }
                break;

            case 6:                     //give to hammer&key or tome&crown
                bool getHammerKey2 = false;
                switch (s)
                {
                case Suit.HAMMER_STR:
                case Suit.CROWN_CHA:
                    getHammerKey2 = true;
                    break;

                case Suit.TOME_INT:
                case Suit.KEY_AGL:
                    getHammerKey2 = false;
                    break;
                }
                for (Suit t = Suit.HAMMER_STR; t <= Suit.CROWN_CHA; t++)
                {
                    Fortune a = deck.getAttr(t);
                    Suit    d = a.card.getSuit();
                    if (d == Suit.HAMMER_STR || d == Suit.KEY_AGL)
                    {
                        if (getHammerKey2)
                        {
                            a.tokens++;
                            f.tokens--;
                        }
                    }
                    else
                    {
                        if (!getHammerKey2)
                        {
                            a.tokens++;
                            f.tokens--;
                        }
                    }
                }
                break;

            case 7:
                stealGive(deck, attr, 1, -1);
                break;

            case 8:
                stealGive(deck, attr, 2, -1);
                break;

            case 9:
                throw new NotImplementedException();
            }
        }
Exemple #8
0
        private static Suit resolveNurture(HarrowDeck deck, Suit s, int n, bool recurse)
        {
            //UnityEngine.Debug.Log(s + "," + n + "[" + recurse + "]");
            Suit r = s;

            if (n == 6)
            {
                //anarchist
                if (recurse)
                {
                    if (s == Suit.HAMMER_STR || s == Suit.KEY_AGL)
                    {
                        r = resolveNurture(deck, deck.nature.card.getSuit(), deck.nature.card.getValue(), false);
                    }
                    else
                    {
                        r = resolveNurture(deck, deck.spirit.card.getSuit(), deck.spirit.card.getValue(), false);
                    }
                }
                else
                {
                    switch (s)
                    {
                    case Suit.HAMMER_STR:
                        deck.STR.tokens += deck.nurture.tokens;
                        break;

                    case Suit.KEY_AGL:
                        deck.AGL.tokens += deck.nurture.tokens;
                        break;

                    case Suit.TOME_INT:
                        deck.INT.tokens += deck.nurture.tokens;
                        break;

                    case Suit.CROWN_CHA:
                        deck.CHA.tokens += deck.nurture.tokens;
                        break;
                    }
                }
            }
            else if (n == 4)
            {
                //traditionalist
                if (recurse)
                {
                    if (s == Suit.HAMMER_STR || s == Suit.KEY_AGL)
                    {
                        r = resolveNurture(deck, deck.body.card.getSuit(), deck.body.card.getValue(), false);
                    }
                    else
                    {
                        r = resolveNurture(deck, deck.mind.card.getSuit(), deck.mind.card.getValue(), false);
                    }
                }
                else
                {
                    switch (s)
                    {
                    case Suit.HAMMER_STR:
                        deck.STR.tokens += deck.nurture.tokens;
                        break;

                    case Suit.KEY_AGL:
                        deck.AGL.tokens += deck.nurture.tokens;
                        break;

                    case Suit.TOME_INT:
                        deck.INT.tokens += deck.nurture.tokens;
                        break;

                    case Suit.CROWN_CHA:
                        deck.CHA.tokens += deck.nurture.tokens;
                        break;
                    }
                }
            }
            else
            {
                switch (s)
                {
                case Suit.HAMMER_STR:
                    deck.STR.tokens += deck.nurture.tokens;
                    break;

                case Suit.KEY_AGL:
                    deck.AGL.tokens += deck.nurture.tokens;
                    break;

                case Suit.TOME_INT:
                    deck.INT.tokens += deck.nurture.tokens;
                    break;

                case Suit.CROWN_CHA:
                    deck.CHA.tokens += deck.nurture.tokens;
                    break;
                }
            }
            return(r);
        }