Have the ambushers say something.

Very unsure about the way I did this...
This commit is contained in:
Tormod Gjeitnes Hellen 2022-07-12 22:16:12 +02:00 committed by Tormod G. Hellen
parent 753a51e683
commit e306b3bfe3
No known key found for this signature in database
GPG Key ID: 48FAFB3169034023
5 changed files with 34 additions and 7 deletions

View File

@ -92,6 +92,9 @@ npc-speech-merchant_trade_declined =
npc-speech-merchant_trade_cancelled_hostile =
.a0 = Sorry to cut it short, we have a problem to solve here!
.a1 = We'll trade later, I need to take care of this first!
npc-speech-ambush =
.a0 = It's unwise to travel alone!
.a1 = Like stealing candy from a baby!
npc-speech-villager_cultist_alarm =
.a0 = Lookout! There is a cultist on the loose!
.a1 = To arms! The cultists are attacking!

View File

@ -130,6 +130,7 @@ pub enum UtteranceKind {
Hurt,
Greeting,
Scream,
Ambush,
/* Death,
* TODO: Wait for more post-death features (i.e. animations) before implementing death
* sounds */

View File

@ -745,7 +745,13 @@ impl<'a> AgentData<'a> {
}
}
fn choose_target(&self, agent: &mut Agent, controller: &mut Controller, read_data: &ReadData) {
fn choose_target(
&self,
agent: &mut Agent,
controller: &mut Controller,
read_data: &ReadData,
event_emitter: &mut Emitter<ServerEvent>,
) {
agent.action_state.timer = 0.0;
let mut aggro_on = false;
@ -785,6 +791,12 @@ impl<'a> AgentData<'a> {
if self.is_enemy(entity, read_data) {
Some((entity, true))
} else if can_ambush(entity, read_data) {
controller.clone().push_utterance(UtteranceKind::Ambush);
self.chat_npc_if_allowed_to_speak(
"npc-speech-ambush".to_string(),
agent,
event_emitter,
);
aggro_on = true;
Some((entity, true))
} else if self.should_defend(entity, read_data) {

View File

@ -455,9 +455,12 @@ fn handle_timed_events(bdata: &mut BehaviorData) -> bool {
}
if bdata.rng.gen::<f32>() < 0.1 {
bdata
.agent_data
.choose_target(bdata.agent, bdata.controller, bdata.read_data);
bdata.agent_data.choose_target(
bdata.agent,
bdata.controller,
bdata.read_data,
bdata.event_emitter,
);
} else {
bdata.agent_data.handle_sounds_heard(
bdata.agent,
@ -577,7 +580,7 @@ fn do_combat(bdata: &mut BehaviorData) -> bool {
read_data.time.0 - selected_at > RETARGETING_THRESHOLD_SECONDS;
if !in_aggro_range && is_time_to_retarget {
agent_data.choose_target(agent, controller, read_data);
agent_data.choose_target(agent, controller, read_data, event_emitter);
}
if aggro_on {

View File

@ -94,7 +94,13 @@ pub fn handle_inbox_talk(bdata: &mut BehaviorData) -> bool {
{
let personality = &rtsim_entity.brain.personality;
let standard_response_msg = || -> String {
if personality
if personality.will_ambush {
format!(
"I'm heading to {}! Want to come along? We'll make \
great travel buddies, hehe.",
destination_name
)
} else if personality
.personality_traits
.contains(PersonalityTrait::Extroverted)
{
@ -121,7 +127,9 @@ pub fn handle_inbox_talk(bdata: &mut BehaviorData) -> bool {
},
));
if rtsim_entity.brain.remembers_character(&tgt_stats.name) {
if personality
if personality.will_ambush {
"Just follow me a bit more, hehe.".to_string()
} else if personality
.personality_traits
.contains(PersonalityTrait::Extroverted)
{