示例#1
0
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),)})
示例#2
0
    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)