Hi! After watching a lecture/talk from Ken Levine about a rpg like game narratives, I was interested in trying out a situation like that. My example is 2 NPC's - borog and justin Borog likes shrines being built - he does not like wells Justin likes wells being built - he does not like shrines I was thinking events could be a good way of holding the 'build states' so I was thinking... like below, have two events, is the best way to do something like this? I want to be efficient Code (csharp): public delegate void buildShrine(); public static event buildShrine onBuildShrine; public delegate void buildWell(); public static event buildShrine onBuildWell; void OnGUI() { if(GUI.Button (new Rect (10, 140, 100, 20), "Build a shrine")){ onBuildShrine(); } if(GUI.Button (new Rect (10, 170, 100, 20), "Build a well")){ onBuildWell(); } } and a 'borog' script Code (csharp): void OnEnable() { eventManager.onBuildShrine += shrineBuilt; eventManager.onBuildWell += wellBuilt; } void OnDisable() { eventManager.onBuildShrine -= shrineBuilt; eventManager.onBuildWell -= wellBuilt; } void shrineBuilt() { currentMacro += 20; } void wellBuilt() { currentMacro -= 20; } void OnGUI() { windowRect = GUI.Window(1, windowRect, DoMyWindow, "Borog the orc"); } void DoMyWindow(int windowID) { GUI.Label (new Rect (10, 20, 200, 23), "Name: Borog"); GUI.Label (new Rect (10, 40, 200, 23), "Borog Macro - " + currentMacro + " / " + maxMacro); GUI.Label (new Rect (10, 60, 250, 23), "Dialogue: " + borogText); } void Update() { if (currentMacro < 40) borogText = borogsDialogue [0]; if (currentMacro > 39 currentMacro < 61) borogText = borogsDialogue [1]; if (currentMacro >= 60) borogText = borogsDialogue [2]; } and a and a 'justin' script Code (csharp): void OnEnable() { eventManager.onBuildShrine += shrineBuilt; eventManager.onBuildWell += wellBuilt; } void OnDisable() { eventManager.onBuildShrine -= shrineBuilt; eventManager.onBuildWell -= wellBuilt; } void shrineBuilt() { currentMacro -= 20; } void wellBuilt() { currentMacro += 20; } void OnGUI() { windowRect = GUI.Window(0, windowRect, DoMyWindow, "Justin the shrew"); } void DoMyWindow(int windowID) { GUI.Label (new Rect (10, 20, 200, 23), "Name: Justin"); GUI.Label (new Rect (10, 40, 200, 23), "Justin Macro - " + currentMacro + " / " + maxMacro); GUI.Label (new Rect (10, 60, 250, 23), "Dialogue: " + justinText); } void Update() { if (currentMacro < 40) justinText = justinDialogue [0]; if (currentMacro > 39 currentMacro < 61) justinText = justinDialogue [1]; if (currentMacro >= 60) justinText = justinDialogue [2]; }