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"); }
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; }
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; }
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; }
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; } }
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; } }
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(); }
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; }
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; }
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)); }
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())); }
public void attach_weapon(Weapon w) { Weap = w; damage_type = w.get_my_damage_type(); }
public void attach_scroll(Scroll s) { Scll = s; damage_type = s.get_damage_type(); }
public void set_damage_type(Attack.Damage dmg_typ) { damage_type = dmg_typ; }
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); } }