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),)})
def choose_world_map_encounter( self, camp: gears.GearHeadCampaign, metroscene, return_wp, encounter_chance=25, dest_scene=None, dest_wp=None, rank=None, scenegen=pbge.randmaps.SceneGenerator, architecture=gharchitecture.MechaScaleDeadzone, environment=gears.tags.GroundEnv, **kwargs): candidate_seeds = list() # Step one: harvest any world map encounters that may exist within this adventure already. for p in camp.active_plots(): if p is not self and hasattr(p, "generate_world_map_encounter"): myseed = p.generate_world_map_encounter( camp, metroscene, return_wp, dest_scene=dest_scene, dest_wp=dest_wp, rank=rank, scenegen=scenegen, architecture=architecture, environment=environment, **kwargs) if myseed: if hasattr(myseed, "priority"): candidate_seeds += [ myseed, ] * myseed.priority else: candidate_seeds.append(myseed) if hasattr(myseed, "mandatory") and myseed.mandatory: encounter_chance = 100 # Step two: Attempt to load a generic world map encounter plot. for t in range(random.randint(2, 6)): myplotstate = PlotState(rank=rank, elements={ "METROSCENE": metroscene, "DEST_SCENE": dest_scene, "KWARGS": kwargs.copy() }) myplot = game.content.load_dynamic_plot(camp, "RWMENCOUNTER", myplotstate) if myplot: myseed = myplot.generate_world_map_encounter( camp, metroscene, return_wp, dest_scene=dest_scene, dest_wp=dest_wp, rank=rank, scenegen=scenegen, architecture=architecture, environment=environment, **kwargs) if myseed: if hasattr(myseed, "priority"): candidate_seeds += [ myseed, ] * myseed.priority else: candidate_seeds.append(myseed) if hasattr(myseed, "mandatory") and myseed.mandatory: encounter_chance = 100 if candidate_seeds and random.randint(1, 100) <= encounter_chance: return random.choice(candidate_seeds)