def start_conversation(camp: gears.GearHeadCampaign,pc,npc,cue=None): # If this NPC has no relationship with the PC, create that now. realnpc = npc.get_pilot() if realnpc and not realnpc.relationship: realnpc.relationship = camp.get_relationship(realnpc) if not cue: npcteam = camp.scene.local_teams.get(npc) if npcteam and camp.scene.player_team.is_enemy(npcteam): cue = ATTACK_STARTER elif camp.is_favorable_to_pc(realnpc): cue = HELLO_STARTER elif npc not in camp.party and camp.is_unfavorable_to_pc(realnpc): cue = UNFAVORABLE_STARTER else: cue = HELLO_STARTER cviz = ghdview.ConvoVisualizer(npc,camp,pc=pc) cviz.rollout() convo = pbge.dialogue.DynaConversation(camp,realnpc,pc,cue,visualizer=cviz) convo.converse() if realnpc: realnpc.relationship.met_before = True
def build_grammar( mygram, camp: gears.GearHeadCampaign, speaker, audience ): speaker = speaker.get_pilot() tags = list(speaker.get_tags()) if speaker.relationship and not speaker.relationship.met_before: tags.append(ghgrammar.FIRST_TIME) else: tags.append(ghgrammar.MET_BEFORE) if audience: audience = audience.get_pilot() react = speaker.get_reaction_score(audience,camp) if react > 60: tags += [ghgrammar.LIKE,ghgrammar.LOVE] elif react > 20: tags += [ghgrammar.LIKE,] elif react < -60: tags += [ghgrammar.DISLIKE,ghgrammar.HATE] elif react < -20: tags += [ghgrammar.DISLIKE,] if audience is camp.pc: if camp.is_favorable_to_pc(speaker): tags.append(ghgrammar.FAVORABLE) elif camp.is_unfavorable_to_pc(speaker): tags.append(ghgrammar.UNFAVORABLE) trait_absorb(mygram,ghgrammar.DEFAULT_GRAMMAR,tags) for p in camp.active_plots(): pgram = p.get_dialogue_grammar(speaker, camp) if pgram: mygram.absorb( pgram ) if speaker.relationship and audience is camp.pc: mygram.absorb(speaker.relationship.get_grammar()) if speaker is camp.pc and audience and audience.relationship: mygram.absorb(audience.relationship.get_pc_grammar()) if hasattr(speaker, "faction") and speaker.faction: mygram["[speaker_faction]"] = [str(speaker.faction),] mygram.absorb({"[speaker]":(str(speaker),),"[audience]":(str(audience),)})