public void CheckEnabled() { ActivatedAbilities ObjectsAbilityList = Object.GetPart <ActivatedAbilities>(); ActivatedAbilityEntry Wrestle = ObjectsAbilityList.GetAbilityByCommand("wm-WrestleCommand"); ActivatedAbilityEntry HipThrow = ObjectsAbilityList.GetAbilityByCommand("wm-HipThrowCommand"); ActivatedAbilityEntry Suplex = ObjectsAbilityList.GetAbilityByCommand("wm-SuplexCommand"); ActivatedAbilityEntry Subdue = ObjectsAbilityList.GetAbilityByCommand("wm-SubdueCommand"); ActivatedAbilityEntry RavageLimb = ObjectsAbilityList.GetAbilityByCommand("wm-RavageLimbCommand"); if (WrestleCommand != null) { Wrestle.Enabled = ShouldEnable(); } if (HipThrowCommand != null) { HipThrow.Enabled = ShouldEnable(); } if (SuplexCommand != null) { Suplex.Enabled = ShouldEnable(); } if (SubdueCommand != null) { Subdue.Enabled = ShouldEnable(); } if (RavageLimbCommand != null) { RavageLimb.Enabled = ShouldEnable(); } }
public override bool Mutate(GameObject GO, int Level) { Body SourceBody = GO.GetPart <Body>(); if (SourceBody != null) { GameObject TailObj = GameObject.create("Ovipositor"); var body = GO.GetPart <Body>(); var core = body.GetBody(); var tail = core.AddPartAt(Base: "Tail", DefaultBehavior: "Ovipositor", InsertAfter: "Feet", OrInsertBefore: "Hands"); tail.DefaultBehaviorBlueprint = "Ovipositor"; tail.DefaultBehavior = TailObj; // Armor part = TailObj.GetPart<Armor>(); // part.AV = 1; // part.DV = 0; body.UpdateBodyParts(); } CooldownMyActivatedAbility(ActivatedAbilityID, PlaceHolder, ParentObject); ActivatedAbilities activatedAbilities = ParentObject.GetPart("ActivatedAbilities") as ActivatedAbilities; ActivatedAbilityID = activatedAbilities.AddAbility("Lay Egg", "CommandLayEgg", "Physical Mutation", "Lay an egg.", "O", null, false, false, false, false, false, false, false, true, PlaceHolder); ChangeLevel(Level); return(base.Mutate(GO, Level)); }
public override void Apply(ActivatedAbilities abilities) { _abilities = abilities; var ap = new ManaAbilityParameters { Text = string.Format("{{T}}: Add {0} to your mana pool.", BasicLandTypeToManaSymbol[_landSubtype]), }; ap.ManaAmount(Mana.GetBasicLandMana(_landSubtype)); _addedAbility = new ManaAbility(ap); _addedAbility.Initialize(OwningCard, Game); if (_replace) { _modifier = new SetList <ActivatedAbility>(new List <ActivatedAbility> { _addedAbility }); } else { _modifier = new AddToList <ActivatedAbility>(_addedAbility); } _modifier.Initialize(ChangeTracker); _abilities.AddModifier(_modifier); }
public override void Apply(ActivatedAbilities abilities) { _abilities = abilities; _modifier = new AddToList <ActivatedAbility>(_activatedAbility); _modifier.Initialize(ChangeTracker); _activatedAbility.Initialize(OwningCard, Game); _abilities.AddModifier(_modifier); }
public override void Apply(ActivatedAbilities abilities) { _abilities = abilities; foreach (var manaAbility in _abilities.GetManaAbilities()) { manaAbility.AddAditionalAmountAbilityWillProduce(_amount); } }
public override bool Mutate(GameObject GO, int Level) { Unmutate(GO); ActivatedAbilities part = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; SWForceChokeActivatedAbilityID = part.AddAbility("Force Choke", "CommandSWForceChoke", "Mental Mutation", "#"); SWForceChokeActivatedAbility = part.AbilityByGuid[SWForceChokeActivatedAbilityID]; return(true); }
public override bool RemoveSkill(GameObject GO) { if (ActivatedAbilityID != Guid.Empty) { ActivatedAbilities activatedAbilities = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; activatedAbilities.RemoveAbility(ActivatedAbilityID); } return(true); }
public override bool Mutate(GameObject GO, int Level) { Unmutate(GO); ActivatedAbilities part = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; ReadEmotionsActivatedAbilityID = part.AddAbility(DisplayName, "CommandReadEmotions", "Mental Mutation", "#"); ReadEmotionsActivatedAbility = part.AbilityByGuid[ReadEmotionsActivatedAbilityID]; return(true); }
public override void Register(GameObject Object) { Object.RegisterPartEvent((IPart)this, "BeforeApplyDamage"); Object.RegisterPartEvent((IPart)this, "EndTurn"); ActivatedAbilities part = Object.GetPart("ActivatedAbilities") as ActivatedAbilities; this.ChargeCellsActivatedAbilityID = part.AddAbility("Charge Cells", "CommandKoboldChargeCells", "Kobold Power", 0, true, false, "Toggle to consume hunger and charge equipped cells each turn", "~", false, false); this.ChargeCellsActivatedAbility = part.AbilityByGuid[this.ChargeCellsActivatedAbilityID]; base.Register(Object); }
public override bool AddSkill(GameObject GO) { ActivatedAbilities activatedAbilities = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; if (activatedAbilities != null) { AddAbility(); } return(true); }
public bool RemoveSkill(GameObject GO) { if (ActivatedAbilityID != Guid.Empty) { ActivatedAbilities pAA = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; pAA.RemoveAbility(ActivatedAbilityID); } return(true); }
public override bool Unmutate(GameObject GO) { if (ReadEmotionsActivatedAbilityID != Guid.Empty) { ActivatedAbilities part = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; part.RemoveAbility(ReadEmotionsActivatedAbilityID); ReadEmotionsActivatedAbilityID = Guid.Empty; } return(true); }
public override bool FireEvent(Event E) { if (E.ID == "GetInventoryActions") { E.GetParameter <EventParameterGetInventoryActions>("Actions").AddAction("Water", 'W', false, "&WW&yater", "CommandWater"); } // else if (E.ID == "OwnerGetInventoryActions") // { // GameObject GO = E.GetGameObjectParameter("Object"); // if(GO.GetPart<acegiak_Seed>() != null){ // } // E.GetParameter<EventParameterGetInventoryActions>("Actions").AddAction("Water", 'W', false, "&WW&yater", "CommandWater", 5); // } else if (E.ID == "CommandWater") { // if(ParentObject.Equipped == null){ // Popup.Show("You must have a watering can equipped to water."); // } GameObject who = E.GetGameObjectParameter("Owner"); if (who == null) { who = ParentObject.Equipped; } if (who == null) { who = ParentObject; } Water(who); E.RequestInterfaceExit(); } else if (E.ID == "Equipped") { GameObject GO = E.GetGameObjectParameter("EquippingObject"); ActivatedAbilities part = GO.GetPart <ActivatedAbilities>(); if (part != null) { ActivatedAbilityID = part.AddAbility("Water", "CommandWater", "Gear"); ActivatedAbilityEntry activatedAbilityEntry = part.AbilityByGuid[ActivatedAbilityID]; GO.RegisterPartEvent(this, "CommandWater"); } } else if (E.ID == "Unequipped") { GameObject GO = E.GetGameObjectParameter("UnequippingObject"); ActivatedAbilities part = GO.GetPart <ActivatedAbilities>(); if (part != null) { part.RemoveAbility(ActivatedAbilityID); GO.UnregisterPartEvent(this, "CommandWater"); } } return(base.FireEvent(E)); }
public override bool Mutate(GameObject GO, int Level) { ActivatedAbilities part = GO.GetPart <ActivatedAbilities>(); if (part != null) { this.ActivatedAbilityID = part.AddAbility("Evolve", "CommandEvolve", "Physical Mutation", -1, false, false, "Evolve from liquid.", string.Empty + (object)'\x0003', false); this.ActivatedAbility = part.AbilityByGuid[this.ActivatedAbilityID]; } return(base.Mutate(GO, Level)); }
public override bool AddSkill(GameObject GO) { ActivatedAbilities activatedAbilities = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; if (activatedAbilities != null) { ActivatedAbilityID = activatedAbilities.AddAbility("Polearm Lunge [&Wattack&y]", "CommandAcegiakPolearmLunge", "Skill", "You strike out with a polearm to attack a foe two spaces away.", string.Empty + '\u0010'); pActivatedAbility = activatedAbilities.AbilityByGuid[ActivatedAbilityID]; } return(true); }
public bool AddSkill(GameObject GO) { ActivatedAbilities pAA = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; if (pAA != null) { ActivatedAbilityID = pAA.AddAbility("Hit The Gas", "CommandAcegiakGasGasGas", "Maneuvers", -1, "While gassing it you move 2-4 spaces each turn.", "-"); Ability = pAA.AbilityByGuid[ActivatedAbilityID]; } return(true); }
public override bool AddSkill(GameObject GO) { ActivatedAbilities pAA = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; if (pAA != null) { ActivatedAbilityID = pAA.AddAbility("Double Grip", "CommandAcegiakPolearmGrip", "Skill", "You wield your polearm with two hands for additional damage.", "G", null, true, false); Ability = pAA.AbilityByGuid[ActivatedAbilityID]; } return(true); }
public override bool AddSkill(GameObject GO) { ActivatedAbilities pAA = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; if (pAA != null) { ActivatedAbilityID = pAA.AddAbility("Repel Attackers", "CommandAcegiakPolearmRepel", "Skill","When attacking with a polearm you push enemies away from you.", ">", null, true,true); Ability = pAA.AbilityByGuid[ActivatedAbilityID]; } return true; }
public override bool Mutate(GameObject GO, int Level) { this.ParentObject.ApplyEffect((Effect) new Phased(9999)); ActivatedAbilities part = GO.GetPart("ActivatedAbilities") as ActivatedAbilities; if (part != null) { this.UnphaseActivatedAbilityID = part.AddAbility("Unphase", "CommandUnphase", "Physical Mutation", true, false); this.UnphaseActivatedAbility = part.AbilityByGuid[this.UnphaseActivatedAbilityID]; } this.ChangeLevel(Level); return(base.Mutate(GO, Level)); }
public override void Apply(ActivatedAbilities abilities) { if (!_activated) { return; } _activatedAbilities = abilities; _activatedAbilitiesModifier = new SetList <ActivatedAbility>( new List <ActivatedAbility>()); _activatedAbilitiesModifier.Initialize(ChangeTracker); _activatedAbilities.AddModifier(_activatedAbilitiesModifier); }
/// <summary> /// Calculates the willpower-adjusted cooldown for an ability. /// </summary> public int GetAdjustedCooldown(int baseCooldown) { GameObject player = XRLCore.Core?.Game?.Player?.Body; if (player == null || !player.HasStat("Willpower")) { return(baseCooldown); } int internalCooldown = baseCooldown * 10; int val = (int)((double)internalCooldown * (100.0 - (double)((player.Stat("Willpower", 0) - 16) * 5))) / 100; int calculatedCooldown = Math.Max(val, ActivatedAbilities.MinimumValueForCooldown(internalCooldown)); baseCooldown = (int)Math.Ceiling((double)((float)calculatedCooldown / 10f)); return(baseCooldown); }
public Mountain(Player owner) : this() { Owner = owner; ActivatedAbilities.Add(new Ability( (Player p, State s) => { return((this.Status & Card.StatusEnum.Tapped) == Card.StatusEnum.Default); }, (Player p, State s) => { s.ManaPools[p].R++; this.Status |= Card.StatusEnum.Tapped; } )); }
public override void Apply(ActivatedAbilities abilities) { _abilities = abilities; if (_isBasicLand) { _removedAbility = _abilities.RemoveFirst(); } var basicLandMana = Mana.GetBasicLandMana(_changeTo); var ap = new ManaAbilityParameters { Text = "{{T}}: Add {0} to your mana pool.", }; ap.ManaAmount(basicLandMana); _addedAbility = new ManaAbility(ap); _addedAbility.Initialize(OwningCard, Game); _abilities.Add(_addedAbility); }
public override bool Mutate(GameObject GO, int Level) { if (!ParentObject.HasPart("NotOriginalEntity")) { // Statshifter - Setting all stats for starting husk StatShifter.SetStatShift(ParentObject, "Ego", 6, true); StatShifter.SetStatShift(ParentObject, "Willpower", 6, true); StatShifter.SetStatShift(ParentObject, "Intelligence", 6, true); StatShifter.SetStatShift(ParentObject, "Strength", -6, true); StatShifter.SetStatShift(ParentObject, "Toughness", -6, true); StatShifter.SetStatShift(ParentObject, "Agility", -6, true); } if (!ParentObject.HasEffect <Disintegrating>()) { ParentObject.ApplyEffect(new Disintegrating(9999)); } ActivatedAbilities activatedAbilities = ParentObject.GetPart("ActivatedAbilities") as ActivatedAbilities; this.ActivatedAbilityID = activatedAbilities.AddAbility("Soulshunt", "CommandSoulShunt", "Mental Mutation", "Shunt the imprints of your victims' mind from their body, and assume the throne of their vessel.\n\n" + "Target makes a Willpower saving-throw vs your Ego Modifier {{light blue|(+10)}} or be shunted from its body; you assume control of the target's body permanently. Your new husk will wither over time. On a successful soulshunt you gain a 10% chance to increase your ego score by {{light blue|1}}." + "\n\n{{dark gray|Base cooldown: 2400}}", "(O)", null, false, false, false, false, false, false, false, false, -1); return(base.Mutate(GO, Level)); }
public void LoadPlayerAbilities() { this.PlayerAbilities.Clear(); ActivatedAbilities activatedAbilities = XRLCore.Core.Game.Player.Body.GetPart("ActivatedAbilities") as ActivatedAbilities; if (activatedAbilities == null || activatedAbilities.AbilityLists == null) { return; } foreach (KeyValuePair <string, List <ActivatedAbilityEntry> > abilityList in activatedAbilities.AbilityLists) { List <ActivatedAbilityEntry> entries = new List <ActivatedAbilityEntry>(); foreach (ActivatedAbilityEntry entry in abilityList.Value) { entries.Add(entry); } if (entries.Count > 0) { this.PlayerAbilities.Add(abilityList.Key, entries); } } }
public TimeChangeRemoval ChangeTime(ChangeCharacterTimeDto changeCharacterTimeDto) { ActivatedAbilities.ForEach(x => x.ActiveTime.Add(new TimeLimitUnitParsed { Time = changeCharacterTimeDto.TimeUnit })); var toRemove = new List <RoundActivateAbilities>(); foreach (var feat in changeCharacterTimeDto.Bonus.Feats) { toRemove.AddRange(feat.ChangeTime(changeCharacterTimeDto)); } foreach (var roundActivateAbilitiese in toRemove) { //Removing the time unit just added. No need to add it to DB to be removed. roundActivateAbilitiese.ActiveTime.RemoveAll(x => x.ID == Guid.Empty); } var dmgToRemove = new List <DamageTaken>(); if (changeCharacterTimeDto.TimeUnit == TimeLimitUnit.Encounter || changeCharacterTimeDto.TimeUnit == TimeLimitUnit.Day) { dmgToRemove = changeCharacterTimeDto.Bonus.Character.HitPoints.DamgeToDelete(changeCharacterTimeDto.Bonus); } //UsedActions.RemoveAll(x => x.ID == Guid.Empty); return(new TimeChangeRemoval { UsedActions = GetActionToRemove(UsedActions, changeCharacterTimeDto.TimeUnit), DeaktivatedAbilities = toRemove, DeaktivatedConditions = ActivatedConditions.Where(x => x.AutoDismissAfter.HasValue && (int)x.AutoDismissAfter.Value <= (int)changeCharacterTimeDto.TimeUnit).ToList(), DamagesToRemove = dmgToRemove }); }
public override void Apply(ActivatedAbilities abilities) { abilities.DisableAll(); _activatedAbilities = abilities; }
public override void Apply(ActivatedAbilities abilities) { _abilities = abilities; _activatedAbility.Initialize(OwningCard, Game); _abilities.Add(_activatedAbility); }
public override bool FireEvent(Event E) { if (E.ID == "AIGetOffensiveMutationList") { int intParameter = E.GetIntParameter("Distance"); if (intParameter <= 1 & IsMyActivatedAbilityCoolingDown(ActivatedAbilityID, ParentObject)) { GameObject gameObjectParameter2 = E.GetGameObjectParameter("Target"); if (gameObjectParameter2.PhaseAndFlightMatches(ParentObject)) { List <AICommandList> list = E.GetParameter("List") as List <AICommandList>; list.Add(new AICommandList("CommandSoulShunt", 1)); } } } if (E.ID == "DamageFromDecay") { int DegradateLevel = ParentObject.Stat("Level"); if (!ParentObject.MakeSave("Toughness", (28 + DegradateLevel), null, null, "Husk Deterioration")) { // StatShifter.SetStatShift(ParentObject, "Hitpoints", -Stat.Random(0, 3), true); ParentObject.Statistics["Hitpoints"].BaseValue -= Stat.Random(0, 3); } } else if (E.ID == "ApplyingTonic") { if (E.GetParameter <GameObject>("Tonic").Blueprint == "UbernostrumTonic" && SetCounterUberAptitude <= 0) { UbernostrumScaling = (int)Math.Round(Stat.Random(0.10f, 0.30f) * ParentObject.GetStatValue("Hitpoints", 1)); StatShifter.SetStatShift(ParentObject, "Hitpoints", UbernostrumScaling, true); SetCounterUberAptitude += 1; } else if (E.GetParameter <GameObject>("Tonic").Blueprint == "UbernostrumTonic" && SetCounterUberAptitude > 0) { UbernostrumScaling = (int)Math.Round(Stat.Random(0.10f, 0.30f) * ParentObject.GetStatValue("Hitpoints", 1)); UbernostrumScaling -= (int)Math.Round(UbernostrumScaling * (SetCounterUberAptitude + 0.10)); StatShifter.SetStatShift(ParentObject, "Hitpoints", UbernostrumScaling, true); SetCounterUberAptitude += 1; } } else if (E.ID == "EndTurn") { if (HuskWeakeningDuration > 0) { --HuskWeakeningDuration; if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.7) { ParentObject.FireEvent(Event.New("DebuffsFromDecay")); } else if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.3) { ParentObject.FireEvent(Event.New("DebuffsFromDecay")); } else if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.1) { ParentObject.FireEvent(Event.New("DebuffsFromDecay")); } else if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.05) { ParentObject.FireEvent(Event.New("DebuffsFromDecay")); } } else if (ParentObject.Statistics["Hitpoints"].BaseValue <= 1) { if (ParentObject.IsPlayer()) { ParentObject.Die(null, null, "As your husk crumbles to dust, so do your last tethers to world as your form radiates away.", Force: false); } } if (!ParentObject.HasEffect <Disintegrating>()) { ParentObject.ApplyEffect(new Disintegrating(9999)); } } else if (E.ID == "CommandSoulShunt") { ActivatedAbilities activatedAbilities = ParentObject.GetPart("ActivatedAbilities") as ActivatedAbilities; activatedAbilities.GetAbility(ActivatedAbilityID).Cooldown = 24000; SoulShunt(); var HuskCurrentToughness = ParentObject.Stat("Toughness"); HuskWeakeningDuration = 1200 * Math.Min(1, HuskCurrentToughness); } else if (E.ID == "DebuffsFromDecay") { var OwnersStrength = ParentObject.Stat("Strength"); var OwnersToughness = ParentObject.Stat("Toughness"); var OwnersAgility = ParentObject.Stat("Agility"); if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.6) { } else if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.5) { StatShifter.SetStatShift(ParentObject, "Strength", -((int)Math.Round(OwnersStrength * 0.2)), false); StatShifter.SetStatShift(ParentObject, "Toughness", -((int)Math.Round(OwnersToughness * 0.2)), false); StatShifter.SetStatShift(ParentObject, "Agility", -((int)Math.Round(OwnersAgility * 0.2)), false); } else if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.3) { StatShifter.SetStatShift(ParentObject, "Strength", -((int)Math.Round(OwnersStrength * 0.4)), false); StatShifter.SetStatShift(ParentObject, "Toughness", -((int)Math.Round(OwnersToughness * 0.4)), false); StatShifter.SetStatShift(ParentObject, "Agility", -((int)Math.Round(OwnersAgility * 0.4)), false); } else if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.1) { StatShifter.SetStatShift(ParentObject, "Strength", -((int)Math.Round(OwnersStrength * 0.6)), false); StatShifter.SetStatShift(ParentObject, "Toughness", -((int)Math.Round(OwnersToughness * 0.6)), false); StatShifter.SetStatShift(ParentObject, "Agility", -((int)Math.Round(OwnersAgility * 0.6)), false); } else if (HuskWeakeningDuration >= HuskWeakeningDuration * 0.05) { StatShifter.SetStatShift(ParentObject, "Strength", -((int)Math.Round(OwnersStrength * 0.8)), false); StatShifter.SetStatShift(ParentObject, "Toughness", -((int)Math.Round(OwnersToughness * 0.8)), false); StatShifter.SetStatShift(ParentObject, "Agility", -((int)Math.Round(OwnersAgility * 0.8)), false); } else if (HuskWeakeningDuration <= 0) { HuskWeakeningDuration = (int)Math.Round(HuskWeakeningDuration * 0.7); } } else if (E.ID == "SuccessfulDethroning") { GameObject OriginalBody = E.GetGameObjectParameter("OriginalBody"); var SkillAccess = OriginalBody.GetPart <Skills>(); var SkillListing = SkillAccess.SkillList; var CreatureTier = OriginalBody.GetTier(); var PrimaryFaction = OriginalBody.GetPrimaryFaction(); var FactionVar = Factions.get(PrimaryFaction); var NewBodyPrimaryFaction = OriginalBody.GetPrimaryFaction(); var ParentIntelligenceSkillAward = (ParentObject.BaseStat("Intelligence") - 10) * 4; ParentObject.FireEvent(Event.New("EntityHasSwappedBodies")); if (!ParentObject.HasSkill("Survival")) { ParentObject.AddSkill("Survival"); if (!ParentObject.HasSkill("Survival_Camp")) { ParentObject.AddSkill("Survival_Camp"); } } foreach (var k in SkillListing) { ParentObject.GetStat("SP").BaseValue += ParentIntelligenceSkillAward; } if (FactionVar.Visible) { try { XRL.Core.XRLCore.Core.Game.PlayerReputation.modify(PrimaryFaction, -CreatureTier * 50, true); } catch { return(true); } } if (OriginalBody != null) { // AddPlayerMessage("Original Body: " + OriginalBody + "."); // AddPlayerMessage("Parent Body: " + ParentObject + "."); if (!ParentObject.HasProperName) { ParentObject.DisplayName = OriginalBody.DisplayNameOnly; OriginalBody.DisplayName = Names.NameMaker.MakeName(ParentObject); } else { var NewName = ParentObject.DisplayNameOnly; ParentObject.DisplayName = OriginalBody.DisplayNameOnly; OriginalBody.DisplayName = NewName; } OriginalBody.GetAngryAt(ParentObject, -100); PlayWorldSound("soulshunt"); var DifferenceVar = ParentObject.StatMod("Ego") - OriginalBody.StatMod("Ego"); DifferenceVar *= 5; if (Stat.Random(1, 100) <= DifferenceVar && IsPlayer()) { if (Popup.ShowYesNo("You feel the remnants of tender light pulsating within your new husk, would you like to imprint these codings upon your own animus?", false, DialogResult.Yes) == DialogResult.Yes) { StatShifter.SetStatShift(ParentObject, "Ego", 1, true); } else { Popup.Show("You cast the remnants away."); } } } } return(base.FireEvent(E)); }
public void ActuallyFire(int Charges) { FocusPsi PsiMutation = ParentObject.GetPart <FocusPsi>(); // Shows the line picker interface for the player. TextConsole _TextConsole = UI.Look._TextConsole; ScreenBuffer Buffer = TextConsole.ScrapBuffer; Core.XRLCore.Core.RenderMapToBuffer(Buffer); List <GameObject> hit = new List <GameObject>(1); List <Cell> usedCells = new List <Cell>(1); var line = PickLine(20, AllowVis.Any, null, false, ForMissileFrom: ParentObject); Body body = ParentObject.GetPart <Body>(); List <BodyPart> ParentsHead = body.GetPart("Head"); Cell targetCell = line[line.Count - 1]; if (!PsiMutation.usePsiCharges(Charges)) { AddPlayerMessage("You do not have enough psi-charges!"); return; } foreach (var Head in ParentsHead) { if (Head.Equipped != null) { Physics.ApplyExplosion(currentCell, GetForce(Level, Charges), usedCells, hit, true, true, ParentObject, GetDamage(Level, Charges), 1, false, false, 2); AddPlayerMessage("Your helmet obstructs the energy of the beam--it explodes in your face!"); return; } } if (ParentObject.HasEffect("Dazed") || ParentObject.HasEffect("Confused")) { Physics.ApplyExplosion(currentCell, GetForce(Level, Charges), usedCells, hit, true, true, ParentObject, GetDamage(Level, Charges), 1, false, false, 2); AddPlayerMessage("You lack the concentration to hold your focus! The collected energy explodes in your face!"); return; } ActivatedAbilities activatedAbilities = ParentObject.GetPart("ActivatedAbilities") as ActivatedAbilities; activatedAbilities.GetAbility(CombustionBlastActivatedAbilityID).Cooldown = (Charges - 1) * 100; // Loop through each cell of the line in order. List <string> SparkySparkyChars = new List <string>() { "\xf8", "*", "." }; List <Point> Beamline = Zone.Line(line[0].X, line[0].Y, targetCell.X, targetCell.Y); base.PlayWorldSound("sparkblast", 0.3f, 0.1f, true, null); for (int index = 1; index < line.Count; index++) { Cell cell = line[index]; char DisplayBeam = Beamline[index].DisplayChar; Buffer.Goto(cell.X, cell.Y); Buffer.Write("&Y^r" + DisplayBeam); Cell SparkyBeam = cell.GetRandomLocalAdjacentCell(); Buffer.Goto(SparkyBeam.X, SparkyBeam.Y); Buffer.Write("&W" + SparkySparkyChars.GetRandomElement()); _TextConsole.DrawBuffer(Buffer); System.Threading.Thread.Sleep(18); // Find a solid object and combat id on obj in line, to hit in this cell. GameObject obj = cell.FindObject(o => o.ConsiderSolidFor(ParentObject, ParentObject) || (o.HasPart("Combat") && !o.pPhysics.Solid)); if (obj != null) { targetCell = cell; break; } } if (Stat.Random(1, 100) <= 50) { base.PlayWorldSound("bang1", 0.3f, 0, true, null); } else { base.PlayWorldSound("bang2", 0.3f, 0, true, null); } ComExplode(GetForce(Level, Charges), targetCell, ParentObject, GetDamage(Level, Charges)); ParentObject.UseEnergy(10000); }