public string dmgType2String(Attack.Damage dmgType)
        {
            switch (dmgType)
            {
            case Attack.Damage.Acid:
                return("Acid");

            case Attack.Damage.Crushing:
                return("Crushing");

            case Attack.Damage.Electric:
                return("Electric");

            case Attack.Damage.Fire:
                return("Fire");

            case Attack.Damage.Frost:
                return("Frost");

            case Attack.Damage.Piercing:
                return("Piercing");

            case Attack.Damage.Slashing:
                return("Slashing");
            }

            return("Unknown");
        }
Example #2
0
        public Necromancer(gridCoordinate sGridCoord, ContentManager sCont, int sIndex, int rank = 1)
            : base(sGridCoord, sCont, sIndex, Monster_Size.Normal)
        {
            female = false;
            int gender_roll = rGen.Next(2);

            if (gender_roll == 0)
            {
                my_Texture        = sCont.Load <Texture2D>("Enemies/necromancer_male");
                pronoun           = "him";
                min_melee_damage  = 1;
                max_melee_damage  = 3;
                melee_damage_type = Attack.Damage.Crushing;
            }
            else
            {
                female            = true;
                my_Texture        = sCont.Load <Texture2D>("Enemies/necromancer_female");
                pronoun           = "her";
                min_melee_damage  = 1;
                max_melee_damage  = 4;
                melee_damage_type = Attack.Damage.Slashing;
            }

            max_hitPoints = 34;
            hitPoints     = max_hitPoints;
            armorPoints   = 5;

            min_acidsplash_dmg = 1;
            max_acidsplash_dmg = 2;
            acid_splash_dmgtyp = Attack.Damage.Acid;

            min_damage = 2;
            max_damage = 6;
            dmg_type   = Attack.Damage.Frost;
            can_hear   = true;

            frostbolt_range  = 4;
            acidsplash_range = 5;
            can_create_major = rank > 1;

            //Sensory
            base_sight_range = 2;
            sounds_i_can_hear.Add(SoundPulse.Sound_Types.Player);
            base_listen_threshold.Add(8);

            set_senses_to_baseline();

            melee_dodge         = 5;
            ranged_dodge        = 5;
            armor_effectiveness = 10;
            set_initial_dodge_values();
            smart_monster = true;
        }
Example #3
0
        public RedKnight(gridCoordinate sGridCoord, ContentManager sCont, int sIndex)
            : base(sGridCoord, sCont, sIndex, Monster_Size.Normal)
        {
            my_Texture    = cont.Load <Texture2D>("Enemies/redKnightIdle");
            can_hear      = true;
            max_hitPoints = 10;
            hitPoints     = max_hitPoints;
            armorPoints   = 30;
            min_damage    = 2;
            max_damage    = 5;
            dmg_type      = Attack.Damage.Slashing;
            active        = false;

            //SENSORY
            sounds_i_can_hear.Add(SoundPulse.Sound_Types.Player);
            base_listen_threshold.Add(5);
            base_sight_range = 2;

            set_senses_to_baseline();

            //OTHER
            speed_denominator = 1;
            my_name           = "Red Knight";

            //Red Knight specials
            javelin_range       = 5;
            jav_min_dmg         = 1;
            jav_max_dmg         = 4;
            javelin_damage_type = Attack.Damage.Piercing;

            //cleave has a cooldown of 3 turns
            cleave_min_dmg  = 2;
            cleave_max_dmg  = 3;
            cleave_cooldown = 0;

            //power strike has a 5 turn cooldown
            pwr_strike_min_dmg  = 3;
            pwr_strike_max_dmg  = 7;
            pwr_strike_cooldown = 0;

            melee_dodge         = 5;
            ranged_dodge        = 75;
            armor_effectiveness = 95;
            set_initial_dodge_values();
            dodge_values_degrade = false;
            smart_monster        = true;
        }
Example #4
0
        public PersistentEffect(Scroll.Atk_Area_Type etyp, Floor.specific_effect setyp,
                                gridCoordinate ectr, int turnsr, bool m_effect,
                                Attack.Damage fx_dmg_type, int aoe_size, int min_dmg, int max_dmg)
        {
            my_effect_type  = etyp;
            my_special_fx   = setyp;
            effect_center   = ectr;
            turns_remaining = turnsr;
            monster_effect  = m_effect;
            effect_ready    = false;
            effect_size     = aoe_size;

            effect_damage_type = fx_dmg_type;

            min_damage = min_dmg;
            max_damage = max_dmg;
        }
Example #5
0
        public Weapon(int IDno, int goldVal, string myName,
                      Type typ, int hnd, int min_dmg, int max_dmg, int wpn_range)
            : base(IDno, goldVal, myName)
        {
            weaponType   = typ;
            hands        = hnd;
            min_damage   = min_dmg;
            max_damage   = max_dmg;
            weapon_range = wpn_range;
            cooldown     = 0;

            switch (weaponType)
            {
            //Spears, lances, bows and crossbows do piercing damage
            case Type.Spear:
            case Type.Lance:
            case Type.Bow:
            case Type.Crossbow:
                damageType = Attack.Damage.Piercing;
                break;

            //Swords and axes do slashing damage
            case Type.Sword:
            case Type.Axe:
                damageType = Attack.Damage.Slashing;
                break;

            //Maces and staffs do crushing damage
            case Type.Mace:
            case Type.Staff:
                damageType = Attack.Damage.Crushing;
                break;
            }

            if (hands == 2)
            {
                max_talismans = 4;
            }

            //Specifically overwrites the hyperion spear to do fire damage
            if (IDno == 12)
            {
                damageType = Attack.Damage.Fire;
            }
        }
Example #6
0
        public Weapon(Weapon w)
            : base(w.get_my_IDno(), w.get_my_gold_value(), w.get_my_name())
        {
            weaponType   = w.get_my_weapon_type();
            hands        = w.get_hand_count();
            min_damage   = w.specific_damage_val(false);
            max_damage   = w.specific_damage_val(true);
            weapon_range = w.get_my_range();
            cooldown     = 0;

            switch (weaponType)
            {
            //Spears, lances, bows and crossbows do piercing damage
            case Type.Spear:
            case Type.Lance:
            case Type.Bow:
            case Type.Crossbow:
                damageType = Attack.Damage.Piercing;
                break;

            //Swords and axes do slashing damage
            case Type.Sword:
            case Type.Axe:
                damageType = Attack.Damage.Slashing;
                break;

            //Maces and staffs do crushing damage
            case Type.Mace:
            case Type.Staff:
                damageType = Attack.Damage.Crushing;
                break;
            }

            if (hands == 2)
            {
                max_talismans = 4;
            }

            if (identification == 12)
            {
                damageType = Attack.Damage.Fire;
            }
        }
Example #7
0
 public Scroll(Scroll s)
     : base(s.get_my_IDno(), s.get_my_gold_value(), s.get_my_name())
 {
     //Enums
     my_sType       = s.get_spell_type();
     spell_dmg_type = s.get_damage_type();
     my_prjType     = s.get_assoc_projectile();
     my_specAnim    = s.get_spec_impact_anim();
     myBufforDebuff = s.get_status_effect();
     //Ints
     scroll_tier         = s.get_tier();
     aoe_size            = s.get_aoe_size();
     max_range           = s.get_range();
     min_damage          = s.get_specific_damage(false);
     max_damage          = s.get_specific_damage(true);
     total_impacts       = s.get_t_impacts();
     mana_cost           = s.get_manaCost();
     buffDebuff_duration = s.get_duration();
     //Bools
     destroys_walls = s.spell_destroys_walls();
     melee_range    = s.is_melee_range_spell();
 }
Example #8
0
 public Scroll(int IDno, int goldVal, string myName, int stier, int smana, int srange, int sAoe, int minDmg, int maxDmg, bool meleeSpell,
               Atk_Area_Type s_spell_type, Projectile.projectile_type s_prj_type, Attack.Damage dmg_type, bool destroyWalls, int t_impacts,
               Status_Type s_buffDebuff, int spell_duration, Projectile.special_anim s_prj_special_anim)
     : base(IDno, goldVal, myName)
 {
     //Enums
     my_sType       = s_spell_type;
     spell_dmg_type = dmg_type;
     my_prjType     = s_prj_type;
     my_specAnim    = s_prj_special_anim;
     myBufforDebuff = s_buffDebuff;
     //Ints
     scroll_tier         = stier;
     aoe_size            = sAoe;
     max_range           = srange;
     min_damage          = minDmg;
     max_damage          = maxDmg;
     total_impacts       = t_impacts;
     mana_cost           = smana;
     buffDebuff_duration = spell_duration;
     //Bools
     destroys_walls = destroyWalls;
     melee_range    = meleeSpell;
 }
Example #9
0
        public void add_injury(Attack.Damage dmg_type, int inj_severity)
        {
            if (dmg_type == Attack.Damage.Slashing || dmg_type == Attack.Damage.Piercing)
            {
                if (open_wounds < 3)
                {
                    int chance_for_new_ow = 100 - open_wounds * 33;
                    if (dmg_type == Attack.Damage.Piercing)
                    {
                        chance_for_new_ow /= 2;
                    }
                    if (rGen.Next(100) < chance_for_new_ow)
                    {
                        open_wounds++;
                    }
                }
            }

            if (dmg_type == Attack.Damage.Fire || dmg_type == Attack.Damage.Acid)
            {
                if (burn_wounds < 3)
                {
                    int chance_for_new_bw = 100 - burn_wounds * 33;
                    if (dmg_type == Attack.Damage.Acid)
                    {
                        chance_for_new_bw /= 2;
                    }
                    if (rGen.Next(100) < chance_for_new_bw)
                    {
                        burn_wounds++;
                    }
                }
            }

            injuries += inj_severity;
        }
Example #10
0
        private Scroll process_sDC(ScrollDC rs)
        {
            int    SIDNO = rs.IDNumber;
            int    SCOST = rs.Cost;
            string SNAME = rs.Name;

            Scroll.Atk_Area_Type SAETP = 0;
            switch (rs.AOEType)
            {
            case "singleTile":
                SAETP = Scroll.Atk_Area_Type.singleTile;
                break;

            case "cloudAOE":
                SAETP = Scroll.Atk_Area_Type.cloudAOE;
                break;

            case "solidblockAOE":
                SAETP = Scroll.Atk_Area_Type.solidblockAOE;
                break;

            case "randomblockAOE":
                SAETP = Scroll.Atk_Area_Type.randomblockAOE;
                break;

            case "personalBuff":
                SAETP = Scroll.Atk_Area_Type.personalBuff;
                break;

            case "piercingBolt":
                SAETP = Scroll.Atk_Area_Type.piercingBolt;
                break;

            case "smallfixedAOE":
                SAETP = Scroll.Atk_Area_Type.smallfixedAOE;
                break;

            case "chainedBolt":
                SAETP = Scroll.Atk_Area_Type.chainedBolt;
                break;

            case "enemyDebuff":
                SAETP = Scroll.Atk_Area_Type.enemyDebuff;
                break;
            }
            int STIER = rs.ScrollTier;
            int SMANA = rs.ManaCost;
            int SRANG = rs.ScrollRange;
            int SAESZ = rs.AOESize;
            int SMNDM = rs.MinDamage;
            int SMADM = rs.MaxDamage;

            Attack.Damage SDMTP = 0;
            switch (rs.DamageType)
            {
            case "Acid":
                SDMTP = Attack.Damage.Acid;
                break;

            case "Crushing":
                SDMTP = Attack.Damage.Crushing;
                break;

            case "Electric":
                SDMTP = Attack.Damage.Electric;
                break;

            case "Fire":
                SDMTP = Attack.Damage.Fire;
                break;

            case "Frost":
                SDMTP = Attack.Damage.Frost;
                break;

            case "Piercing":
                SDMTP = Attack.Damage.Piercing;
                break;

            case "Slashing":
                SDMTP = Attack.Damage.Slashing;
                break;
            }
            bool SDSWL = false;

            if (String.Compare("Y", rs.DestroysWalls) == 0)
            {
                SDSWL = true;
            }
            bool SMLSP = false;

            if (String.Compare("Y", rs.MeleeSpell) == 0)
            {
                SMLSP = true;
            }
            int SCHIP = rs.ChainImpacts;

            Projectile.projectile_type SPRJT = 0;
            switch (rs.SpellProjectile)
            {
            case "Blank":
                SPRJT = Projectile.projectile_type.Blank;
                break;

            case "Arrow":
                SPRJT = Projectile.projectile_type.Arrow;
                break;

            case "Flamebolt":
                SPRJT = Projectile.projectile_type.Flamebolt;
                break;

            case "Javelin":
                SPRJT = Projectile.projectile_type.Javelin;
                break;

            case "AcidCloud":
                SPRJT = Projectile.projectile_type.AcidCloud;
                break;

            case "Crossbow_Bolt":
                SPRJT = Projectile.projectile_type.Crossbow_Bolt;
                break;

            case "Fireball":
                SPRJT = Projectile.projectile_type.Fireball;
                break;

            case "Lightning_Bolt":
                SPRJT = Projectile.projectile_type.Lightning_Bolt;
                break;

            case "Bonespear":
                SPRJT = Projectile.projectile_type.Bonespear;
                break;

            case "Bloody_AcidCloud":
                SPRJT = Projectile.projectile_type.Bloody_AcidCloud;
                break;
            }
            Projectile.special_anim SSPFX = 0;
            switch (rs.SpecialAnimation)
            {
            case "BloodAcid":
                SSPFX = Projectile.special_anim.BloodAcid;
                break;

            case "Alert":
                SSPFX = Projectile.special_anim.Alert;
                break;

            case "Earthquake":
                SSPFX = Projectile.special_anim.Earthquake;
                break;

            case "None":
                SSPFX = Projectile.special_anim.None;
                break;

            case "Blank":
                SSPFX = Projectile.special_anim.Blank;
                break;
            }
            Scroll.Status_Type SBFDB = 0;
            switch (rs.SpellSpecialEffect)
            {
            case "Anosmia":
                SBFDB = Scroll.Status_Type.Anosmia;
                break;

            case "Blind":
                SBFDB = Scroll.Status_Type.Blind;
                break;

            case "Deaf":
                SBFDB = Scroll.Status_Type.Deaf;
                break;

            case "LynxFer":
                SBFDB = Scroll.Status_Type.LynxFer;
                break;

            case "PantherFer":
                SBFDB = Scroll.Status_Type.PantherFer;
                break;

            case "TigerFer":
                SBFDB = Scroll.Status_Type.TigerFer;
                break;
            }
            int SBDDR = rs.SpecialEffectDuration;

            return(new Scroll(SIDNO, SCOST, SNAME, STIER, SMANA, SRANG, SAESZ, SMNDM,
                              SMADM, SMLSP, SAETP, SPRJT, SDMTP, SDSWL, SCHIP, SBFDB,
                              SBDDR, SSPFX));
        }
Example #11
0
        public Attack absorb_damage(Attack atk, Attack_Zone area, gridCoordinate atk_origin, ref Random rgen, ref List <string> msgBuf, ref Floor fl)
        {
            //First get the type of the attack.
            Attack.Damage atkdmg           = atk.get_dmg_type();
            int           absorb_threshold = 0;
            int           attacks_absorbed = 0;

            calculate_modified_values();

            switch (atkdmg)
            {
            case Attack.Damage.Slashing:
                absorb_threshold = (modified_hardness_value * 4) + (modified_rigidness_value * 2);
                break;

            case Attack.Damage.Piercing:
                absorb_threshold = (modified_hardness_value * 4) + (modified_padding_value * 2);
                break;

            case Attack.Damage.Crushing:
                absorb_threshold = (modified_rigidness_value * 4) + (modified_padding_value * 2);
                break;

            case Attack.Damage.Fire:
                absorb_threshold = (modified_ablative_value * 4) + (modified_rigidness_value * 2);
                break;

            case Attack.Damage.Frost:
                absorb_threshold = (modified_padding_value * 4) + (modified_insulative_value * 2);
                break;

            case Attack.Damage.Acid:
                absorb_threshold = (modified_insulative_value * 4) + (modified_ablative_value * 2);
                break;

            case Attack.Damage.Electric:
                absorb_threshold = (modified_insulative_value * 4) + (modified_padding_value * 2);
                break;
            }

            absorb_threshold += absorb_all;
            int total_wounds = atk.get_damage_amt();

            for (int i = 0; i < total_wounds; i++)
            {
                int r_chance = rgen.Next(100);
                if (r_chance < absorb_threshold)
                {
                    switch (area)
                    {
                    case Attack_Zone.Head:
                        if (c_helm_integ > 0)
                        {
                            c_helm_integ--;
                            atk.decrease_severity(1);
                            attacks_absorbed++;
                        }
                        break;

                    case Attack_Zone.Chest:
                        if (c_chest_integ > 0)
                        {
                            c_chest_integ--;
                            atk.decrease_severity(1);
                            attacks_absorbed++;
                        }
                        break;

                    case Attack_Zone.R_Arm:
                        if (c_rarm_integ > 0)
                        {
                            c_rarm_integ--;
                            atk.decrease_severity(1);
                            attacks_absorbed++;
                        }
                        break;

                    case Attack_Zone.L_Arm:
                        if (c_larm_integ > 0)
                        {
                            c_larm_integ--;
                            atk.decrease_severity(1);
                            attacks_absorbed++;
                        }
                        break;

                    case Attack_Zone.L_Leg:
                        if (c_lleg_integ > 0)
                        {
                            c_lleg_integ--;
                            atk.decrease_severity(1);
                            attacks_absorbed++;
                        }
                        break;

                    case Attack_Zone.R_Leg:
                        if (c_rleg_integ > 0)
                        {
                            c_rleg_integ--;
                            atk.decrease_severity(1);
                            attacks_absorbed++;
                        }
                        break;
                    }
                }
            }

            if (attacks_absorbed > 0)
            {
                string msg_buf_msg = "Your";
                if (area != Attack_Zone.Head)
                {
                    msg_buf_msg += " armor's ";
                }
                else
                {
                    msg_buf_msg += " helmet ";
                }
                string fl_popup_msg = "";
                switch (area)
                {
                case Attack_Zone.Head:
                    fl_popup_msg = "Head";
                    break;

                case Attack_Zone.Chest:
                    msg_buf_msg += "chest ";
                    fl_popup_msg = "Chest";
                    break;

                case Attack_Zone.L_Arm:
                    msg_buf_msg += "left arm ";
                    fl_popup_msg = "L Arm";
                    break;

                case Attack_Zone.R_Arm:
                    msg_buf_msg += "right arm ";
                    fl_popup_msg = "R Arm";
                    break;

                case Attack_Zone.L_Leg:
                    msg_buf_msg += "left leg ";
                    fl_popup_msg = "L Leg";
                    break;

                case Attack_Zone.R_Leg:
                    msg_buf_msg += "right leg ";
                    fl_popup_msg = "R Leg";
                    break;
                }
                msg_buf_msg += "absorbs " + attacks_absorbed + " wound";
                if (attacks_absorbed > 1)
                {
                    msg_buf_msg += "!";
                }
                else
                {
                    msg_buf_msg += "s!";
                }

                msgBuf.Add(msg_buf_msg);
                fl.add_new_popup("- " + attacks_absorbed + " " + fl_popup_msg,
                                 Popup.popup_msg_color.Blue, atk_origin);
            }

            return(new Attack(atk.get_dmg_type(), atk.get_damage_amt()));
        }
Example #12
0
 public void attach_weapon(Weapon w)
 {
     Weap        = w;
     damage_type = w.get_my_damage_type();
 }
Example #13
0
 public void attach_scroll(Scroll s)
 {
     Scll        = s;
     damage_type = s.get_damage_type();
 }
Example #14
0
 public void set_damage_type(Attack.Damage dmg_typ)
 {
     damage_type = dmg_typ;
 }
Example #15
0
        public void draw_weaponText(ref SpriteBatch sBatch, Weapon wx, Vector2 ixtextPosition, bool compareW1)
        {
            int linedif = 50;
            int wmindmg = wx.specific_damage_val(false) * wx.get_hand_count();
            int wmaxdmg = wx.specific_damage_val(true) * wx.get_hand_count();

            Attack.Damage wdmgtyp = wx.get_my_damage_type();
            int           whands  = wx.get_hand_count();
            int           wrange  = wx.get_my_range();

            string[]   wname    = wx.get_my_name().Split(' ');
            SpriteFont nameFont = std_textfont;

            if (wx.get_my_name().Length > 10)
            {
                nameFont = small_textfont;
            }

            //Draw item name.
            Vector2 namePos = new Vector2(ixtextPosition.X, i1rect.Bottom + (nameFont.LineSpacing - 10));

            for (int i = 0; i < wname.Count(); i++)
            {
                namePos.X = ixtextPosition.X - (nameFont.MeasureString(wname[i]).X / 2);
                sBatch.DrawString(nameFont, wname[i], namePos, Color.White);
                namePos.Y += (nameFont.LineSpacing - 5);
            }

            //Draw minimum damage
            sBatch.DrawString(std_textfont, wmindmg.ToString(), ixtextPosition, Color.White);
            //if comparison.
            if (compareW1)
            {
                int diff = (w1.specific_damage_val(false) * w1.get_hand_count()) - (wx.specific_damage_val(false) * wx.get_hand_count());
                draw_difference(diff, ixtextPosition, wmindmg.ToString(), ref sBatch, false);
            }
            ixtextPosition.Y += linedif;

            //draw maximum damage
            sBatch.DrawString(std_textfont, wmaxdmg.ToString(), ixtextPosition, Color.White);
            if (compareW1)
            {
                int diff = (w1.specific_damage_val(true) * w1.get_hand_count()) - (wx.specific_damage_val(true) * wx.get_hand_count());
                draw_difference(diff, ixtextPosition, wmaxdmg.ToString(), ref sBatch, false);
            }
            ixtextPosition.Y += linedif;

            //draw damage type
            string dtyp = dmgType2String(wdmgtyp);

            sBatch.DrawString(std_textfont, dtyp,
                              new Vector2(ixtextPosition.X - (std_textfont.MeasureString(dtyp).X / 2),
                                          ixtextPosition.Y), Color.White);
            ixtextPosition.Y += linedif;

            //draw hands
            sBatch.DrawString(std_textfont, whands.ToString(), ixtextPosition, Color.White);
            if (compareW1)
            {
                int diff = w1.get_hand_count() - wx.get_hand_count();
                draw_difference(diff, ixtextPosition, whands.ToString(), ref sBatch, false);
            }
            ixtextPosition.Y += linedif;

            //draw range
            sBatch.DrawString(std_textfont, wrange.ToString(), ixtextPosition, Color.White);
            if (compareW1)
            {
                int diff = w1.get_my_range() - wx.get_my_range();
                draw_difference(diff, ixtextPosition, wrange.ToString(), ref sBatch, false);
            }
        }