Hi,
Just got around to get Love/Hate, but i have had it in mind ever since i started developing my game a year ago.
After implementation and trying some stuff out, i have a few questions:
1. Characters share rumors with friends, but what is the definition of a Friend? Is it someone i have a high affinity to, or someone i have a relationship with? Someone my parent faction have a relationship with?
2. In the events OnShareRumors and OnGossip, how do i know exactly what rumors are being shared, since the entire faction member is passed into it?
3. A Rumor's PAD is defined as "The xxx that this rumor caused the faction". So if a deed is performed on a faction member, the entire faction gets affected? If so, must i create a new faction for every character?
I'm sure there's more to come! =)
Thanks in advance!
//Andreas
A couple of questions (newbie)
Re: A couple of questions (newbie)
Hi Andreas,
Thanks!Aheydeck wrote:Hi,
Just got around to get Love/Hate, but i have had it in mind ever since i started developing my game a year ago.
A relationship with positive affinity. The character could have a personal relationship with the friend, or it could inherit the relationship from its parents. For example, Juliet might have a personal relationship to Romeo, and that relationship would define her affinity to Romeo. However, if Juliet doesn't yet have a personal relationship to Romeo, then she would inherit the Capulets' relationship to Romeo. If the Capulets don't have a personal relationship to Romeo, it would fall back to the Capulets' relationship to the Montagues, Romeo's parent faction.Aheydeck wrote:After implementation and trying some stuff out, i have a few questions:
1. Characters share rumors with friends, but what is the definition of a Friend? Is it someone i have a high affinity to, or someone i have a relationship with? Someone my parent faction have a relationship with?
The gossiper shares all rumors in its memory. The receiver evaluates each shared rumor. If it's a new rumor and the receiver decides it's worth remembering, the receiver will add it to its own memory.Aheydeck wrote:2. In the events OnShareRumors and OnGossip, how do i know exactly what rumors are being shared, since the entire faction member is passed into it?
Yes. The word "faction" is perhaps misleading because it usually refers to a group. However, in Love/Hate each unique character is its own faction. It may also have multiple parent factions, too.Aheydeck wrote:3. A Rumor's PAD is defined as "The xxx that this rumor caused the faction". So if a deed is performed on a faction member, the entire faction gets affected? If so, must i create a new faction for every character?
Re: A couple of questions (newbie)
Hey, sorry to necro post, but I have a question related to the discussion.
You said that when an NPC gossips with another NPC, they each swap the entirety of their known rumors? If so, then:
1) Is there any way to limit it to one rumor, in the way one might exchange a secret with someone else? Which brings me to
2) Do rumors have a var for how important or secretive the rumor is? Or similarly, is there any way to have secrets that NPCs are less than willing to share?
Thanks!
You said that when an NPC gossips with another NPC, they each swap the entirety of their known rumors? If so, then:
1) Is there any way to limit it to one rumor, in the way one might exchange a secret with someone else? Which brings me to
2) Do rumors have a var for how important or secretive the rumor is? Or similarly, is there any way to have secrets that NPCs are less than willing to share?
Thanks!
Re: A couple of questions (newbie)
Hi,
Here's an example. When the NPC evaluates a rumor in a custom EvaluateRumor method, it determines its secretiveness and records it in the rumor object:
You only want an NPC to share a rumor if it loves the other NPC sufficiently -- that is, if the NPC's affinity to the other NPC is greater than the rumor's secretiveness value. (You could define a new relationship trait called Trust or something like that, but for the sake of this example we'll just use the built-in affinity value.)
Combining these into one script that you can add to your FactionMember GameObject, you get:
Yes, but it requires a tiny bit of scripting. In the upcoming version 1.8.6 (just submitted to the Asset Store today!), you can assign your own method to the FactionMember's ShareRumor delegate. The default delegate simply tells the other FactionMember to evaluate the rumor, but your own delegate could be more selective. I'll include example code below.Nosteme wrote:You said that when an NPC gossips with another NPC, they each swap the entirety of their known rumors? If so, then:
1) Is there any way to limit it to one rumor, in the way one might exchange a secret with someone else?
A little scripting is required again for this. A secretiveness variable isn't built in, but the Rumor object has a customData field that's designed for purposes like this. You can use customData to record how secretive the rumor is.Nosteme wrote:2) Do rumors have a var for how important or secretive the rumor is? Or similarly, is there any way to have secrets that NPCs are less than willing to share?
Here's an example. When the NPC evaluates a rumor in a custom EvaluateRumor method, it determines its secretiveness and records it in the rumor object:
Code: Select all
void Start() { // Assign our custom EvaluateRumor delegate:
GetComponent<FactionMember>().EvaluateRumor = MyEvaluateRumor;
}
public Rumor MyEvaluateRumor(Rumor rumor, FactionMember source) {
var myRumor = DefaultEvaluateRumor(rumor, source);
var secretiveness = rumor.impact * rumor.aggression; // Some formula of your choice.
myRumor.customData = secretiveness;
return myRumor;
}
Code: Select all
void Start() { // Assign our custom ShareRumor delegate:
GetComponent<FactionMember>().ShareRumor = MyShareRumor;
}
public void ShareRumor(Rumor rumor, FactionMember other) {
var secretiveness = (float) rumor.customData;
if (GetAffinity(other) > secretiveness) {
other.EvaluateRumor(rumor, this);
}
}
Code: Select all
using UnityEngine;
using PixelCrushers.LoveHate;
public class MyFactionMemberDelegates : MonoBehaviour
{
void Start() { // Assign our custom delegates:
var factionMember = GetComponent<FactionMember>();
factionMember.ShareRumor = MyShareRumor;
factionMember.EvaluateRumor = MyEvaluateRumor;
}
public Rumor MyEvaluateRumor(Rumor rumor, FactionMember source) {
var myRumor = DefaultEvaluateRumor(rumor, source);
var secretiveness = rumor.impact * rumor.aggression; // Some formula of your choice.
myRumor.customData = secretiveness;
return myRumor;
}
public void ShareRumor(Rumor rumor, FactionMember other) {
var secretiveness = (float) rumor.customData;
if (GetAffinity(other) > secretiveness) {
other.EvaluateRumor(rumor, this);
}
}
}
Re: A couple of questions (newbie)
Hey!
Another newb question!
I'm in a situation where i define different characters (factions) traits such as "Leadership", but where i don't want them to be accounted for when looking up trait alignments with other characters. Is there a way to accomplish this?
Another newb question!
I'm in a situation where i define different characters (factions) traits such as "Leadership", but where i don't want them to be accounted for when looking up trait alignments with other characters. Is there a way to accomplish this?
Re: A couple of questions (newbie)
Typically you'd assign a replacement method to the FactionMember's EvaluateRumor() delegate. But in this case you'd end up copy-pasting the entire DefaultEvaluateRumor() method and customizing just one line. Instead, I'll post a patch today (which will also be included in v1.8.7) that will let you assign a delegate for GetTraitAlignment(). You can then assign a replacement that excludes certain traits from the alignment calculation, and the default EvaluateRumor will use it seamlessly.Aheydeck wrote:I'm in a situation where i define different characters (factions) traits such as "Leadership", but where i don't want them to be accounted for when looking up trait alignments with other characters. Is there a way to accomplish this?
Re: A couple of questions (newbie)
That sounds awesome! Thanks for the great support!
Re: A couple of questions (newbie)
Okay, you can download the patch here: http://pixelcrushers.com/lovehate/downloadaccess.php
You'll need to enter your Unity Asset Store invoice number to access the download.
The manual has code examples for custom delegates for the other functions like GetTrustInSource() and EvaluateRumor(). You can follow the same format to assign a delegate for GetTraitAlignment(). The default function just calls Traits.Alignment(), which compares all traits. Say your Leadership trait is trait #3 in the list. You could use a function like this:
I hard-coded "3" for brevity. If you wanted to make it more general, you could loop through the faction database's personalityTraitDefinitions[] array to find the right traits[] index instead.
You'll need to enter your Unity Asset Store invoice number to access the download.
The manual has code examples for custom delegates for the other functions like GetTrustInSource() and EvaluateRumor(). You can follow the same format to assign a delegate for GetTraitAlignment(). The default function just calls Traits.Alignment(), which compares all traits. Say your Leadership trait is trait #3 in the list. You could use a function like this:
Code: Select all
public class MyFactionMemberDelegates : MonoBehaviour {
private FactionMember m_factionMember;
void Start() {
m_factionMember = GetComponent<FactionMember>();
m_factionMember.GetTraitAlignment = MyGetTraitAlignment;
}
Rumor MyGetTraitAlignment(float[] traits) {
var originalValue = traits[3];
traits[3] = 0;
var result = Traits.Alignment(traits, m_factionMember.traits);
traits[3] = originalValue;
return result;
}
}