private void DoFightSpeak() { // Cooldown not expired? Say nothing if (this.fightBubbleCooldown != 0) { return; } if (Game1.random.NextDouble() < this.fightSpeechTriggerThres && DialogueHelper.GetBubbleString(this.bubbles, this.follower, "fight", out string text)) { bool isRed = this.ai.Csm.HasSkill("warrior") && Game1.random.NextDouble() < 0.1; this.follower.showTextAboveHead(text, isRed ? 2 : -1); this.fightBubbleCooldown = 600; } else if (this.ai.Csm.HasSkill("warrior") && Game1.random.NextDouble() < this.fightSpeechTriggerThres / 2) { this.follower.clearTextAboveHead(); this.follower.doEmote(12); this.fightBubbleCooldown = 550; } else if (Game1.random.NextDouble() > (this.fightSpeechTriggerThres + this.fightSpeechTriggerThres * .33f)) { this.follower.clearTextAboveHead(); this.follower.doEmote(16); this.fightBubbleCooldown = 500; } }
private void Player_Warped(object sender, WarpedEventArgs e) { NPC companion = this.StateMachine.Companion; Dictionary <string, string> bubbles = this.StateMachine.ContentLoader.LoadStrings("Strings/SpeechBubbles"); // Warp companion to farmer if it's needed if (companion.currentLocation != e.NewLocation) { this.ai.ChangeLocation(e.NewLocation); } // Show above head bubble text for location if (Game1.random.NextDouble() > .66f && DialogueHelper.GetBubbleString(bubbles, companion, e.NewLocation, out string bubble)) { companion.showTextAboveHead(bubble, preTimer: 250); } // Push new location dialogue this.TryPushLocationDialogue(e.NewLocation, true); }