Jump to content

A Minor Romance Conflict - Building Strife Into The Game


cmorgan

Recommended Posts

A Minor Romance Conflict - Building Strife Into The Game

Aran is not designed to be a conflict-monger, but there are two specific BioWare folks who would get on his nerves heavily. Viconia, of course. But the more difficult one is Anomen. While a paladin might be fine with him, even one romancing PC, Anomen is a bad combination - not much of what Aran would call 'real' field experience, amplified by the claims that Anomen makes about single-handedly killing ten Fire Giants, etc. I know some folks really enjoy Anomen's romance, and his knightly manner, but I think Aran prefers either a dedicated warrior with experience as an officer (Keldorn) or a man of conviction who does not seem to lord his higher status over others (Ajantis). Perhaps Aran sees the threat of Anomen's fall, that demon lurking beneath the surface. He easily sees Ajantis' dedication, and projects that if Ajantis were to lose his status that would not fundamentally change the man. He would certainly respect Keldorn for being man enough to face a fall from the stricturs of the Order in dealing with a matter of the heart. But Anomen represents to him the social strata who just don't understand that there are other people, other belief systems, and most of all that joining an Order and Attaining Knighthood is not something you lobby for - they are things granted because the person already embodies what the organization believes. Basically, if Anomen is all about attaining the Knighthood, he is all about the status, and not all about the belief. Now *that* would be the kind of guy Aran would take an instant and strong dislike to.

 

Besides, I haven't covered this kind of messing about with existing .dlg, I think. So it is as good a place as any to start.

 

So, at the risk of ticking off players who might like both dudes, let's build some conflict into the Anomen/Aran relationship. We have two banters and some sidebars in various places already, but let's go down through ANOMENJ and see what we can find.

 

But I Like Anomen, and there are already other Anomen Hater Mods out there - I want to play with Aran and Anomen, perhaps even romance both at the same time!

 

Of course, in fitting with Companion mod goals, Aran will not leave the party or force Anomen out. Most NPCs have a list of things that need to show up to fit their character into the game and provide a sense of limits - The Romance Break, Leave FOREVAR, Thou Shalt Choose Me, and There Can Be Only One® responses really are not part of Aran's makeup. The player has ultimate control over whether or not (or in what circumstances) he leaves. So, let's build some player choice into whether the conflict exists at all.

 

 

Roleplaying Options - PID or Triggered Talk

As always, player choice first, so we can set up another one of those PID lines that can shut off the conflict for people who don't like it.

 

Simple enough to do - add a check for Anomen being in the party, and we have a PID toggled conflict that the player can turn on and off like a lightswitch, roleplaying:

 

/* PID Anomen Romance Conflict Toggle */
+ ~InParty("Anomen") Global("c-aanoconflict","GLOBAL",0)~ + ~[PC] I like Anomen well enough, Aran. But you keep fighting with him. I want you to stop doing that.~ + c-aranvsanom1s
+ ~InParty("Anomen") Global("c-aanoconflict","GLOBAL",1)~+ ~[PC] I have changed my mind about fighting with Anomen, Aran. Go ahead and speak your mind.~ + c-aranvsanom1c

/* PID Anomen Romance Conflict Toggle Responses */

IF ~~ c-aranvsanom1c
SAY ~[ARAN] Right, then. Got it. I can live wi' that. I'll be easy on th' blighted stuffy bastard, I will.~
IF ~~ THEN DO ~SetGlobal("c-aanoconflict","GLOBAL",0)~ EXIT
END	

IF ~~ c-aranvsanom1s
SAY ~[ARAN] Right, then. Got it. I'll be keepin' my mouth to myself. I can live wi' that.~
IF ~~ THEN DO ~SetGlobal("c-aanoconflict","GLOBAL",1)~ EXIT
END

 

 

But I don't play with PID - and there are lots ofthings you keep stuffing in there. Are we playing BG2, or Zelda/A Text Adventure From The Glory Days?

 

Good point. Over-reliance on the PID means we are expecting a certain style of play. Many people play without ever clicking on the PC to have extra materials show; the PPG Flirtpack has some initiated by the NPC, and some initiated via PID. Modern i.e. mods tend to mix the two up a bit. While some of this PID-reliance is unavoidable in a Companion mod (since the only real way a player has in-game on-call choice is by initiuating Player Initiated Dialog - that's why it is called that !) it is true that anything put in a PID may or may not be seen by he player. So, if you insist it has to be seen by the player, make it part of the regular dialog. Looking at the way Electron Engine modding is working out for Domi and Berelinde shows an interesting point - having a PID backup for that engine is imperatave, because scripts randomly fail to run. In i.e. land, we can use the PID as not just backup - we can use it to allow players to change their choices mid-stream. This is a relatively new direction for i.e. mods; most of the time, we put all-or-nothing content, to be chosen for inlusion at install time (see the last section of this post, "Separate Components").

 

Scenario - Player1 is halfway through a game, and has decided that romancing NPC1 is no longer fun - or is on a no-reload game, and their male romanceable dies. In the ordinary course of events, globals have been set - many mods will not allow serial romancing without resorting to CLUAConsole (and sometimes even then things get screwed up). With Aran, it would be a matter of expressing interest via PID to get the romance going - just as it is to tell him that you are not interested. He may sulk for awhile, but he will be fine with on-again, off-again romancing. The RomanceActive variable for Aran is not the traditional "I am mad and will never romance you", or "I got dumped by you", it is "The Player Is Not Interested In Having The Romance Track Running - And She Can Change Her Mind. It's Her Perogative. [Word up, Janet. Live in the '80's.]" Having Aran conflicting with Anomen might or might not fit the way the player sees this on-again, off again, just as some players will choose to turn off Aran's romance while Anomen is the romanceable in play. Not everyone wants multi-romancing - having an affair while pursuing a deep romance is not to everyone's taste. If the player controls the content, they can make the game make more sense to their particular scenario. If it is within the game via dialog choices, then it really is a choice that can be made and unmade at many different points.

 

Scenario 2 - Player1 has added Anomen to a party with Aran, and likes the idea of the conflict happening. Then, when it starts happening, they suddenly find that my writing is trivial compared to thier imagination, or it rubs them the wrong way, or Anomen is the cat's meow, and as PC they want to tell Aran to shut up and get soldiering, without the backtalk. The number of times that I wished I could have an option with Aerie and Jaheira... Plus, I have it on authority from various sources that some women like their men to fight over them (for a full treatment of this, see BG1NPC's "Romance Challenges"). A player who is not romancing Anomen but decides to start might want Aran to take notice of the fact. They may have made the choice up front to shut it down, but now they really want some hassling back and forth. Voila, PID change, and Aran feels free to comment.

 

So, let's expand this into a talk that gives choice over to the player but is part of the dialog instead of part of the PID. We can tie this into a talk, triggered when the party first has both people in it:

 

.bcs

/* This block of Aran's .bcs checks to see if they are both in-party, and sets a global and a timer... */
IF
Global("c-aranvsanom","GLOBAL",0)
CombatCounter(0)
!See([ENEMY])
InParty("anomen")
InMyArea("anomen")
!StateCheck("anomen",CD_STATE_NOTVALID)
InParty("c-aran")
InMyArea("c-aran")
!StateCheck("c-aran",CD_STATE_NOTVALID)
THEN
RESPONSE #100
	SetGlobal("c-aranvsanom","GLOBAL",1)
	SetGlobalTimer("c-aranvsanomt,"GLOBAL",THREE_DAYS)
END

IF
GlobalTimerExpired("c-aranvsanomt,"GLOBAL")
Global("c-aranvsanom","GLOBAL",1)
CombatCounter(0)
!See([ENEMY])
InParty("anomen")
InMyArea("anomen")
!StateCheck("anomen",CD_STATE_NOTVALID)
InParty("c-aran")
InMyArea("c-aran")
!StateCheck("c-aran",CD_STATE_NOTVALID)
THEN
RESPONSE #100
	StartDialogNoSet(Player1)
END

.dlg

IF ~Global("c-aranvsanom","GLOBAL",1)~ THEN BEGIN c-aranvsanom
SAY ~[ARAN] Hey, now... That there Delryn fellow. I've done put up wi' him an' his mouth for over three days now. I don't rightly see him as much o' an asset. You sure you want that priggish bastard stuffin' up our air?~
++ ~[PC] Yes. What I do not see is you being much of an asset. I think you should leave the party. Your services are no longer required.~  DO ~ActionOverride("c-aran",SetLeavePartyDialogFile()) ActionOverride("c-aran",ChangeAIScript("",DEFAULT)) ActionOverride("c-aran",LeaveParty()) ActionOverride("c-aran",StartDialogNoSet(Player1)~ EXIT // calls his first P-file dialog... needs code recheck on the SDNS(Player1) and ingame test.
++ ~[PC] I like him well enough. Is this going to become a problem?~ + c-aranvsanom1
++ ~[PC] I share some of your feelings, Aran. But I need him in the party. Is this going to become a problem?~ + c-aranvsanom1
+ ~Gender(Player1,FEMALE)~ + ~[PC] I may... I may be developing some feelings for him. Is that going to be a problem for you?~ + c-aranvsanom1
+ ~Gender(Player1,FEMALE)~ + ~[PC] Do you have a problem with my boyfriend?~ + c-aranvsanom1
++ ~[PC] Look, the two of you will just have to learn to get along. I need both of your skills.~ + c-aranvsanom1
END

IF ~~ c-aranvsanom1
SAY ~[ARAN] No, no problem. I can work wi' just about anyone, regardless. But, well... there be some commanders what don't mind a little loose talk in th' ranks, an' others what tolerate no friction in their presence. Which kind do you be?~
++ ~[PC] Say what you want to whom you chose. It is none of my concern. Just as long as both of you are ready for battle when I need you.~ + c-aranvsanom1c
++ ~[PC] I do not like conflict, Aran. For my sake, hold your tongue, please, and step away when he gets on your nerves.~ + c-aranvsanom1s
++ ~[PC] Friction and tension keep you sharp and focused. The more, the better. But if either of you push it to the point of leaving the party, expect that there will be serious consequences.~ + c-aranvsanom1c
++ ~[PC] Hey, if he bothers you too much, just kill him and be done with it. If he is not strong enough to hold his own, so be it.~  + c-aranvsanom1v
END	

IF ~~ c-aranvsanom1c
SAY ~[ARAN] Right, then. Got it. Words be fine, blood's a no - go. I can live wi' that.~
IF ~~ THEN DO ~SetGlobal("c-aanoconflict","GLOBAL",0)~ EXIT
END	

IF ~~ c-aranvsanom1s
SAY ~[ARAN] Right, then. Got it. I'll keep my mouth to myself. I can live wi' that.~
IF ~~ THEN DO ~SetGlobal("c-aanoconflict","GLOBAL",1)~ EXIT
END	

IF ~~ c-aranvsanom1v
SAY ~[ARAN] Right, then. You are a bloodthirsty <PRO_MANWOMAN>, eh? Words be fine, but in my book blood's a no-go. I'm not goin' to clobber no one under your command, no matter what th' blighted fool says, unless you order it right specific. An' by that I mean written into a contract an' signed, sealed, an' notarized.~
IF ~~ THEN DO ~SetGlobal("c-aanoconflict","GLOBAL",0)~ EXIT
END

 

Now the player gets the choice of having the Anomen/Aran conflict or not, done the "roleplaying" way. At this point, we have an entry point to the conflict, triggered when both are in the party. We have a PID line that can toggel the option on or off if the player wants or does not want him to have additional conflict with Anomen. Let's go see where we can build in some byplay in the original files.

Link to comment

Raiding The Existing Files

 

First step, scrap NI or DLTECEP reading, and go directly to the decompiled file. The WeiDU docs have how, and NI and DLTCEP can do similar things - I was lazy, so I used NI to make a mass export of all .dlg into a separate subdirectory, and then decompiled with weidu (I made the mistake of trying --transitive, which choked on an infinite loop 5 files into the process, so dont do that - Taimon warned me, the bigg wanrned me, but the thought of offline reading all of the dilaogs was very tempting - so now I can tell you too, "don't do this". At least, dont set up a batch file- do it one at a time on the dialogs you need, and you might get lucky.)

 

The resulting ANOMENJ.D file will look something like this:

// creator  : BG2_DLG\WeiDU.exe (version 20800)
// argument : BG2_DLG\ANOMENJ.DLG
// game		 : C:\Program Files\Black Isle\BGII - SoA
// source	 : BG2_DLG\ANOMENJ.DLG
// dialog	 : C:\Program Files\Black Isle\BGII - SoA/dialog.tlk
// dialogF  : (none)

BEGIN ~ANOMENJ~
//////////////////////////////////////////////////
// WARNING: this file contains non-trivial WEIGHTs
//////////////////////////////////////////////////

IF WEIGHT #9 /* Triggers after states #: 28 32 89 101 110 150 205 207 282 even though they appear after this state */
~Global("DomainPaladinBattle","GLOBAL",1)
Global("AnomenMonsters","LOCALS",0)~ THEN BEGIN 0 // from:
 SAY #6187 /* ~Helm's beard! What have we done? A most foul ruse has been played upon us! Innocents are slain! The lifeblood of the Order stains the ground at my feet. What have we done?~ [ANOMEN99] */
 IF ~~ THEN REPLY #6188 /* ~Something is most assuredly wrong with this situation. What happened?~ */ GOTO 1
 IF ~~ THEN REPLY #6249 /* ~Quit your blubbering! We were attacked and had to defend ourselves.~ */ GOTO 3
END

IF ~~ THEN BEGIN 1 // from: 3.0 0.0
 SAY #6250 /* ~It was all an illusion! These are paladins and knights of the Order of the Most Radiant Heart. I know this man, Ajantis. He was a noble man but now is dead by our hand.~ */
 IF ~false()~ THEN REPLY #6251 /* ~As did I, Anomen. ~ */ GOTO 4
 IF ~~ THEN REPLY #6266 /* ~If what you say is true then we have done a terrible thing. Illusion or not, innocents have died and we are responsible. What do we do now?~ */ GOTO 2
 IF ~~ THEN REPLY #6301 /* ~I don't believe you.~ */ GOTO 3
END

IF ~~ THEN BEGIN 2 // from: 4.0 1.1
 SAY #6255 /* ~There is only one option open to us. We must track down the one who played this foul trick upon us and extract our stolen honor from his cursed hide.~ */
 IF ~~ THEN EXIT
END

IF ~~ THEN BEGIN 3 // from: 1.2 0.1
 SAY #6256 /* ~Faithless fool! You do not understand the import of this event. Innocents were slain by our hand and we are now cursed as forever dishonorable.~ */
 IF ~~ THEN REPLY #6257 /* ~What do you mean by innocents? We slew ogres.~ */ GOTO 1
 IF ~~ THEN REPLY #6258 /* ~You are wrong. I care not for the opinions of others. No one is permitted to judge me.~ */ GOTO 5
END

and so on down the file, each of the states set out. Notice that BEGIN 0 is at the top of the file. It is followed by BEGIN 1, etc. on down numerically. This ordering is the index, not the order in which the state will fire. If I add dialog to ANOMENJ, there will be additional states added at the top or bottom of the WEIGHT ordering - but hthe states will not get renumbered without some seriously heavy duty messing about. This is how most i.e. modding is even possible - wehave static state niumbers to attach things to. The ordering, though is done by WEIGHT. Since we are going to be adding things, this means we want to be careful to add things that are carefully scripted with as tight a condition as possible - any wiggle rom, and you might face unexpexted/unanticipated side effects! This decompilation gives us the full rundown of his vanilla joined dialogs, in a set order - mods might add or subtract or all sorts of things, but unless they blow away the file or SET_STRING, ALTER_TRANS, or INTERJECT without a follow up COPY_TRANS, most stuff will be where it is supposed to be and lead to where is should lead. And while we can control for many different mods and types of modders, I think our real responsibility as modders is to tell or story, adding it to the game while doing no harm to the existing dialog whenever possible, thus giving other modders a fair chance at adding into the same game and telling their story, too. At least, that is one philosophy (and the one I like the best, since I find shutting other folks out of the game... less than desireable).

 

 

HEY! Wait a second - I write stories, not code - isn't this backwards?

 

Yes.

 

But you may want to do it anyways.

 

Banters and talks are good parts of the game, but there is a large amount of content that is never seen by any one player. Going through these files gives you specific points where your NPC might have something to say. After all, even modders have prefered pathways. Think of it as "checking for the unanticipated player response".

 

Of course, as always, a little goes a long, long way. Many people like a sprinkling of NPC, but would prefer not to have a truckload of NPC shoved down their throats, forcefed with a ton of commentary. So unless there is a compelling reason, when in doubt, throw it out. And then, have playtesters be brutal. Some folks like a little hotsauce, some like four-star Burning Hot Overkill. But most folks would really prefer not to drown in hotsauce all day long.

 

Then again, as periodic posts that surface from time to time, there is no true way to please everybody - some people find lots of interjections "immersive" and others find them "obnoxious". I am not too worried about it, number 1 because it is a toy, and if someone doesn't like it they can uninstall it and not use it, and number 2 - we have a way of shutting it all off and on ingame.

 

So, I scan through the file, and I see this little gem of Anomenic Wisdom:

 

from decomplied ANOMENJ

 

IF ~~ THEN BEGIN 194 // from:
 SAY #48744 /* 194 ~Do you speak to ME?!  Begone, harlot!  I'll hear none of that vile poison that spills from your tongue!  Begone!~ */
 IF ~~ THEN DO ~ActionOverride("bprost1",RunAwayFrom("Anomen",30))~ EXIT
END

 

I_C_T and Passback (really not needed, as the action is an ActionOveride, but it is always safer to use that transfer-the-actions-back state :rolleyes: )

I_C_T ~ANOMENJ~ 194
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Nice language wi' th ' ladies, there, Delryn. Where be your precious 'chivalry', eh?~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] Such creatures as that are not ladies, Whitehand. Though you certainly appear not to know the difference.~
END

 

Notice the I_C_T I wrote is malformed:

 

an I_C_T is a specialized form of CHAIN, and it needs a statename that it will use as a global to set from 0 to 1 (see the weidu docs under INTERJECT, INTERJECT_COPY_TRANSITIVE and I_C_T2, I_C_T3, and I_C_T4). We are waiting until all of the I_C_Ts are gathered in this sequence, as we will be using statename+1 to create these in sequence. So the base is

c-aanocon, and the I_C_T's will be labled c-aanocon1, c-aanocon2, etc. for easier troubleshooting later.

 

 

There are only a few places where intrusions on existing code are warranted, and these lines are about all that beg to be commented on. No matter the conflict, only an idiot pokes at another person in pain, so there should be silence from Aran through the whole Anomen Knight plot unless he gets knighted, at which point there might be some needling. But Aran is not written to kick even a Drow when they are down, so nothing there and nothing on the whole father/sister plot. The crosscheck is to avoid double-interjections, of course. Otherwise you have Aran taking over the game.

 

/* 3 ~Faithless fool! You do not understand the import of this event. Innocents were slain by our hand and we are now cursed as forever dishonorable.~ */
I_C_T ~ANOMENJ~ 3 c-aanocon
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] If that be th' case, every blighted soldier what ever walked Toril is in a right bit o' trouble. Dead is dead, an' we didn't know better. Only one thing left to do - go through their pockets an' look for spare coin. An' mayhap find a clue as to what adversary done did this to us. ~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] I expected no better from you. You have no concept of honor. This is a conversation for your betters, sellsword.~ 
END

/* 120 ~I'll not submit to your foul charms, slattern.  By Helm, the rot in this city fills me with bile!~ */
I_C_T ~ANOMENJ~ 120 c-aanocon1
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Talos' Treacherous Toungue, you do go on about bile an' such. For a chivalrous man, you throw words like 'slattern' an' 'trollop' an' such. I though chivalry was supposed to be better than that.~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] Any creature that has thrown away the gifts of the gods and allows thenselves to sink to such depravity should be cleansed from Toril, not given the respect reserved for a true lady.~ 
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Shiny metal armor, shiny metal heart, eh? I'll stick to my on beliefs on that one, I think.~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] You do not think, Whitehand. And as for your beliefs, I pray to Torm and Helm that you find some.~ 
END

/* 121 ~Of course not!  Cheating is the vilest breach of basic trust and humanity.  It would be punished most severely!~ */
I_C_T ~ANOMENJ~ 121 c-aanocon2
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Errr.. crap. An' here I thought it were just survival in a cold, cruel world. See what comes o' not havin' a righteous upbringin'? I get all my values all confused, like. I've just been waitin' for some wet-behind-th' ears follower o' Torm to come along an' tell th' whole world what be right an' what be wrong, an' set us all straight.~
END

/* 139 ~If that's what you believe, fool, then you believe in nothing.  Sin is not washed from the soul with a coin, it is purged with temperance and atonement!~ */
I_C_T ~ANOMENJ~ 139 c-aanocon3
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] I be fine wi' the whole atonement thing, but temperance? I think I'd find me a more forgivin' god, eh?~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] I was not speaking to you, Whitehand. Go drown your sorrows in drink, and perhaps you will drown mine there as well.~ 
END

/* 148 ~I fight for my holy order only.  If you wish to join the military and throw your life away in the service of a greedy nation of merchants, you may certainly do so.~ */
I_C_T ~ANOMENJ~ 148 c-aanocon4
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] That be what I did. Worked out fine, too. On account o' most military folks be right reasonable sorts, an' good at th' cardgames an' drinkin'. Holy orders, well, they fight fine, but not so much on th' drinkin' an' card games, eh?~
END

/* 158 ~Wealth is wasted on such.  It will be spent in a moment and forgotten.  If nothing else is done to help such barren souls, giving them coin is not a preferable alternative.~ */
I_C_T ~ANOMENJ~ 158 c-aanocon5
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Too true. I think we should give 'em a good drink, an' perhaps instruct them on how to fight a bit. Give 'em good, clean, respectable livin', fightin' th' good fight for us.~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] Perhaps as an inducement to service, a drink. And perhaps train them to be productive member of society.~
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Right. I bet we could get a bunch o' them together, an' with th' right trainin', they might be able to be a decent fightin' force. Then, we could go around an' kick seedy bastards o' nobles who think they are better than everyone else, an' thier crap don't stink, an' teach 'em manners.~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] I... I am not sure I follow...~
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] No, Anomen, you don't follow, you lead! You can be th' glorious leader, an' show those nobles what for! Show 'em th' common man can trash th' effete pansies what keep 'em poor an' destitute in an imbalanced caste system! Long Live th' Revolution!~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] By Torm, I believe the man has gone mad.~
END

/* 168 ~No, she is not!  Away with you, foul temptress and purveyor of flesh!  You will not corrupt the lady with your filthy business!~ */
I_C_T ~ANOMENJ~ 168 c-aanocon6
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Damned straight, by Sune's Rambunctious Rump. That be my job!~
END

/* 186 ~Hah!  A liar exposed for the fraud that he is!  To use such an excuse as an ill mother only to be revealed...it sickens my stomach to witness such base cunning.~ */
I_C_T ~ANOMENJ~ 186 c-aanocon7
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Aye, that be th' truth. Except for th' stomach sickenin'. I probably put a might too much in th' way o' spices in last nights dinner, eh?.~
END

/* 191 ~Perhaps it is a result of your blasphemy that the gods deny you prosperity!  Get yourself to a temple, commoner, and pray for forgiveness for your vile mouth!!~ */
I_C_T ~ANOMENJ~ 191 c-aanocon8
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] That was a mite bit harsh. I blaspheme every day, an' naught bad happens.~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] Your penalty will come, Aran. It will come, surely.~
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Who be 'Shirley', an' is she right pretty?~
END

/* 194 ~Do you speak to ME?!  Begone, harlot!  I'll hear none of that vile poison that spills from your tongue!  Begone!~ */
I_C_T ~ANOMENJ~ 194 c-aanocon9
== ~C-ARANJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ARAN] Nice language wi' th ' ladies, there, Delryn. Where be your precious 'chivalry', eh?~
== ~ANOMENJ~ IF ~Global("c-aanoconflict","GLOBAL",0) InParty("c-aran") InMyArea("c-aran") !StateCheck("c-aran",CD_STATE_NOTVALID)~ THEN ~[ANOMEN] Such creatures as that are not ladies, Whitehand. Though you certainly appear not to know the difference.~
END

/* 208 ~Or we have mistakenly wandered amidst the dirty and reprehensible. ~ */
I_C_T ~ANOMENJ~ 212 c-aanocon10
== ~C-ARANJ~ ~[ARAN] Do you be talkin' to him, or me?~
== ~ANOMENJ~ ~[ANOMEN] Both.~
END

/* 212 ~More thieves?  Am I to be steeped in such unpious activity throughout my association with you, <CHARNAME>?  I certainly hope not, as this is all beginning to wear my patience.~ */
I_C_T ~ANOMENJ~ 212 c-aanocon11
== ~C-ARANJ~ ~[ARAN] You have patience?~
== ~ANOMENJ~ ~[ANOMEN] You still stand. That should tell you that I have both patience and respect for <CHARNAME>.~
== ~C-ARANJ~ ~[ARAN] Riiiight. Got it. Come talk to me sometime, an' we'll have a bit o' a spar, you an' me,  an' we'll see whether that tongue of yours has anythin' backin' it up other than a pile dung what you call brains.~
== ~ANOMENJ~ ~[ANOMEN] I will instruct you presently, sellsword. Perhaps when <CHARNAME> no longer needs your dubious 'services'.~
END

/* 224 ~Are there not more important adventures we could be undertaking?  This manner of... of aid seems quite tedious.  This is a task for the garrison, <CHARNAME>.~ */
I_C_T ~ANOMENJ~ 224 c-aanocon12
== ~C-ARANJ~ ~[ARAN] Torm's Left Testical, there you go again, lad. What in th' nine hells is wrong wi' you? That there 'garrison' be flesh an' blood, not some toys o' yours to be pushed about. We have power, an' we can use it better'n the poor lads what might get ground up doin' these 'trivial duties'.~
== ~ANOMENJ~ ~[ANOMEN] I merely thought...~
== ~C-ARANJ~ ~[ARAN] Oh, stick it up your arse, you soddin' bastard. You think only o' 'honor', 'duty', an' your own image. I'm shut o' talkin' to you. Someday mayhap you will grow up.~
== ~ANOMENJ~ ~[ANOMEN] Keep a civil tongue, Whitehand, or I shall cut it out for you.~
END

/* 232 ~I know of Sir Keldorn.  I do not doubt that he looks into this cult on his own.  He is a veteran paladin of the Order, a fine warrior... if somewhat arrogant and over-pious. ~ */
I_C_T ~ANOMENJ~ 232 c-aanocon13
== ~C-ARANJ~ ~[ARAN] Heh. Pot, kettle.~
== ~ANOMENJ~ ~[ANOMEN] Did you speak, Whitehand?~
== ~C-ARANJ~ ~[ARAN] No, naught. Just mutterin' to myself.~
== ~ANOMENJ~ ~[ANOMEN] I see.~
END

/* 272 ~Hmph.  I have never heard of this drow, and after our experience in the Underdark, I would be surprised to encounter any dark elf who wasn't worth sending directly to Hell.~ */
I_C_T ~ANOMENJ~ 272 c-aanocon14
== ~C-ARANJ~ ~[ARAN] For once, Anomen is right.~
== ~ANOMENJ~ ~[ANOMEN] You agree with me? Are you ill, Whitehand?~
== ~C-ARANJ~ ~[ARAN] No. I doubt it wll happen again. But I done lived my whole life wi' th' motto "Th' Only Good Drow be a Dead Drow". I have seen naught to contradict that position.~
END

/* 287 ~A commendable spirit, to help others... although with maturity, girl, you will come to realize that not all are worthy of such attention.~ */
I_C_T ~ANOMENJ~ 287 c-aanocon15
== ~C-ARANJ~ ~[ARAN] Aye, pay no attention to th' ba... th' kind gentleman, m'girl. He only opens his mouth when he wants to be changin' feet.~
END

/* 288 ~A commendable spirit, to help others... although with maturity, girl, you will come to realize that not all are worthy of such attention.~ */
I_C_T ~ANOMENJ~ 288 c-aanocon15
== ~C-ARANJ~ ~[ARAN] Aye, pay no attention to th' ba... th' kind gentleman, m'girl. He only opens his mouth when he wants to be changin' feet.~
END

 

That last one is not a misprint - 2 incidences of c-aanocon15. It sets the same variable and same line on to two separate branches. I have seen this a few places, but will need to reconfirm that this works in-game, because I can't remember without access to my notes if this compiles correctly or not - I believe it does. I will revisit when I have confirmation.

 

OK, so we have interjected on some lines - we also have two banters that are sort of "sparky". We also have an outright declaration of intent set up - by setting the variable up front about the conflict through dialog, we have pre-disposed the player to take an interpretation of conflict, and see one where there isn't one, too. So, what can capstone this?

 

Romance Breaks

 

If this were a traditional mod, there would be a specific Romance Active dialog, where there was a chance for Aran to be snippy to Anomen and vice versa, possibly one with the reverse, and then there would be one where Player1 is asked to take sides. The answer to this, or the startup of another romance, would script out a "Romance Cutoff". Here are some examples:

 

Using .baf to deactivate other romances: example from Tsjuatha, TSJUATH.BAF

IF
Global("TsujathaRomanceActive","GLOBAL",2)
OR(2)
Global("AnomenRomanceActive","GLOBAL",1)
Global("AnomenRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("AnomenRomanceActive","GLOBAL",3)
END

IF
Global("TsujathaRomanceActive","GLOBAL",2)
OR(2)
Global("H#ValygarRomanceActive","GLOBAL",1)
Global("H#ValygarRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("H#ValygarRomanceActive","GLOBAL",3)
END

IF
Global("TsujathaRomanceActive","GLOBAL",2)
OR(2)
Global("imoenromanceactive","GLOBAL",1)
Global("imoenromanceactive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("imoenromanceactive","GLOBAL",4)
END

IF
Global("TsujathaRomanceActive","GLOBAL",2)
OR(2)
Global("E3FadeRomanceActive","GLOBAL",1)
Global("E3FadeRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("E3FadeRomanceActive","GLOBAL",3)
END

IF
Global("TsujathaRomanceActive","GLOBAL",2)
OR(2)
Global("ChloeRomanceActiveCR","GLOBAL",1)
Global("ChloeRomanceActiveCR","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("ChloeRomanceActiveCR","GLOBAL",3)
END

IF
Global("TsujathaRomanceActive","GLOBAL",2)
OR(2)
Global("EdwinRomanceActive","GLOBAL",1)
Global("EdwinRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("EdwinRomanceActive","GLOBAL",3)
END

IF
Global("TsujathaRomanceActive","GLOBAL",2)
OR(2)
Global("J#KelseyRomanceActive","GLOBAL",1)
Global("J#KelseyRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("J#KelseyRomanceActive","GLOBAL",3)
END

IF
Global("TsujathaRomanceActive","GLOBAL",2)
Global("TsujathaAnomenJealousy","GLOBAL",1)
THEN
RESPONSE #100
SetGlobal("TsujathaAnomenJealousy","GLOBAL",2)
END


IF
Global("TsujathaRomanceActive","GLOBAL",1)
Global("AnomenRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("TsujathaRomanceActive","GLOBAL",3)
END

Hmmm... I thought Chloe was only interested in other folks... it looks like N & S added Chloe into the mix, and Fade... oh. I get it. This is to stop Multi-Romancers with tweak, etc. Basically, the code is designed to stop Tsjuatha from pursuing a romance with someone who is already in a romance, and stop other romances progressing if Tsjuatha is being romanced, regardless of gender. I'm not that interested in that, but if your NPC is, that might be useful.

 

Anther quick note - they set up specific conditions for special "jealosy talks", if the conditions were right and everyone is still at the "dating" stage. We might be able to use this idea, a little bit, with Aran. It is probably best to keep these mostly "What do you see in him, when I am around and very obviously willing and ready to please.." PC <> Aran talks.

 

OK, another example, Angelo is a much more modern mod, code-wise, let's see what happens there...

// Anomen script kill
IF 
Global("ADAngelWonAnomen","GLOBAL",0)
Global("ADAngelRomanceActive","GLOBAL",2)
OR(2)
Global("AnomenRomanceActive","GLOBAL",1)
Global("AnomenRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("ADAngelWonAnomen","GLOBAL",1)
SetGlobal("AnomenRomanceActive","GLOBAL",3)
END

IF 
Global("ADAngelLostAnomen","GLOBAL",0)
Global("AnomenRomanceActive","GLOBAL",2)
Global("ADAngelRomanceActive","GLOBAL",1)
THEN
RESPONSE #100
SetGlobal("ADAngelLostAnomen","GLOBAL",1)
SetGlobal("ADAngelRomanceActive","GLOBAL",3)
END

 

Heh. Short and sweet, Chief. Just like that. Player choice RULZ. I have never played the romance with Anjelo, but I can tell from this that there is conflict and discussion, because the pair of variables that trigger conflict resolution so PC and Anomen and Angelo don't end up occupying the same bedspace at night is based on an introduced variable that is not in the .baf, Global("ADAngelWonAnomen","GLOBAL",0) and Global("ADAngelLostAnomen","GLOBAL",0), a simple and straightforward win for the "player choice" camp! No opportunity for a rollback to Angelo being available for romance if Anomen screws it all up or gets killed or whatever, but that makes sense from Angelo's story standpoint. He is a worldy man, and leery of being romantically attached to a much younger former adversary.

 

OK, what about a mod that really needs to control this tightly, for character reasons? Nathaniel's auto-conflict resolution is scripted out this way:

 

//Romance kill script

IF
InParty("FHNAT")
Global("NathMatch","GLOBAL",1)
!Global("NathRomanceActive","GLOBAL",3)
OR(13)
Global("AerieRomanceActive","GLOBAL",2)
Global("JaheiraRomanceActive","GLOBAL",2)
Global("ViconiaRomanceActive","GLOBAL",2)
Global("M#AmberRomanceActive","GLOBAL",2)
Global("E3FadeRomanceActive","GLOBAL",2)
Global("FHFarenRomanceActive","GLOBAL",2)
Global("imoenromanceactive","GLOBAL",2)
Global("KiaraRomanceActive","GLOBAL",2)
Global("PGNaliaRomanceActive","GLOBAL",2)
Global("SaerilethRomanceActive","GLOBAL",2)
Global("SimeRomanceActive","GLOBAL",2)
GlobalGT("SolaTalk","GLOBAL",13)
Global("TashiaRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("NathRomanceActive","GLOBAL",3)
END

IF
InParty("FHNAT")
Global("NathMatch","GLOBAL",1)
Global("NathRomanceActive","GLOBAL",2)
Global("AerieRomanceActive","GLOBAL",1)
THEN
RESPONSE #100
SetGlobal("AerieRomanceActive","GLOBAL",3)
END

IF
InParty("FHNAT")
Global("NathMatch","GLOBAL",1)
Global("NathRomanceActive","GLOBAL",2)
Global("JaheiraRomanceActive","GLOBAL",1)
THEN
RESPONSE #100
SetGlobal("JaheiraRomanceActive","GLOBAL",3)
END

IF
InParty("FHNAT")
Global("NathMatch","GLOBAL",1)
Global("NathRomanceActive","GLOBAL",2)
Global("ViconiaRomanceActive","GLOBAL",1)
THEN
RESPONSE #100
SetGlobal("ViconiaRomanceActive","GLOBAL",3)
END

Not so useful for Aran, per se, as Nathaniel wears the flower in the other ear (FR referent for homosexual) - the list here checks RA against available females, not males. But the concept is clear - look for a romance going active, and cut off the NPC if there is one already "committed" one. Notice that scripts 1 and 3 run continuously, rechecking the variables, but they have no "re-enable romance" - once it is set to 3 "unmatched, over, done with", the setting stays. Script 2 sets a variable, so the check is only once. This is common practivce, on the assumption that if you are playing a game and your romance is killed, you will probably reload. Or start a new game. Somehow, almost completing one romance, your interest getting whacked to pieces, and then having another party member immediately start hitting on you creeps folks out. Mostly. There are some exceptions to everything, I suppose.

Link to comment

Can we use this gathered information for Aran? Well, not so much. See, he isn't about to turn PC down for sack-time - it is the long term contract that scares him silly. In that respect, he is a little too close to reality. It is a rough and tumble world, you take what you can get, and as long as PC is calling the party shots and has not specifically told him "Hands off, boyo, I am in love with someone else", more than once, even - he will be in the background, wishing she would pay more attention to him. And if PC wants him, she can probably have him, regardless of what romance she is involved with. If she stays exclusive towards the end of the game, and invests some time in him, he might even come around to falling deeply enough for the PC and actually understanding what he could bring to the relaionship that he moves from "henchman" or "sideckick" to "consort" or "husband" - but frankly, he is all about PC's choices, not his, until pretty late in the game, when he realizes the woman is always going to be far more powerful than he is, and at that point he has some choices to make. Will he be cool with that? What does he think of PC and what she needs of him? Then comes the negotiation.

 

So, while this is useful for many mods and NPCs, it is not directly applicable beyond some obvious jealousy points. We can peel off a few -

 

IF
Global("c-aanoconflict","GLOBAL",0)
Global("c-aranjealous1","GLOBAL",0)
Global("c-aranromance","GLOBAL",2)
OR(2)
	Global("AnomenRomanceActive","GLOBAL",1)
	Global("AnomenRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
	SetGlobal("c-aranjealous1","GLOBAL",1)
END

IF
Global("c-aranjealous2","GLOBAL",0)
Global("c-aranromance","GLOBAL",2)
Global("TsujathaRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
	SetGlobal("c-aranjealous2","GLOBAL",1)
END

IF
Global("c-aranjealous3","GLOBAL",0)
Global("c-aranromance","GLOBAL",2)
OR(2)
	Global("H#ValygarRomanceActive","GLOBAL",1)
	Global("H#ValygarRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
	SetGlobal("c-aranjealous3","GLOBAL",1)
END

IF
Global("c-aranjealous4","GLOBAL",0)
Global("c-aranromance","GLOBAL",2)
Global("NathRomanceActive","GLOBAL",2)
THEN
RESPONSE #100
	SetGlobal("c-aranjealous4","GLOBAL",1)
END

IF
Global("c-aranjealous5","GLOBAL",0)
Global("c-aranromance","GLOBAL",2)
GlobalGT("SolaTalk","GLOBAL",13)
THEN
RESPONSE #100
	SetGlobal("c-aranjealous5","GLOBAL",1)
END

 

I need to write up those talks, which may or may not include the related NPCs. Probably not. And I probably want to come back and add in a few more. A sample, since this is PC-Choice-Land:

 

/* Valygar Jealousy */

[ARAN] You seem to be spendin' a good deal o' time wi' that grim ranger. I thought you and I had us a negotiation goin' on, romance-wise.

[PC] We do. Valygar is a passing fling, and nothing more.

[PC] That is all in your mind, Aran. It has always been Valygar, and you seem to have misconstrued what I wanted.

[PC] I... I have fallen for him, Aran. Is that going to damage our relationship?

[PC] I spend my time with whom I please, when I please. Why are you asking me such a stupid question? Are you going to threaten to leave me if I want you both?

[PC] I spend some time with him, yes. But I think of you constantly. I will find a way to let him down gently.

 

 

[ARAN] Hey, you don't owe me naught in th' way of explination, <CHARNAME>. I'm not without a mite bit o' playin' th' field myself. I even was courtin' a mother an' her daughter at th' same time, once, an' that were a story, that were. I just be sayin', what be sauce for th' goose be sauce for th' gander.

= [ARAN] I'm fine wi' whatever you want to do. A little thing like him gettin' into a deep romance wi' you won't stop me chasin' you right proper. Th' only thing what will do that is if you tell me to stop flirtin', an' tell me you just want to be friends. But Valygar, he might not see it th' same way.

END

 

/* Slaufein Jealousy */

[ARAN] Shar's Slavering Spikes, You seem to be courtin' that gods blighted Drow bastard. An' I thought we had us somethin' goin' on a bit more interestin' then friendship. What is wrong wi' you, <CHARNAME>?

[PC] We have something special, Aaran. Solaufein is fascinating, but just a diversion to entertain me.

[PC] You misunderstood our relationship, Aran. I never really felt that way about you.

[PC] I... I have fallen for him, Aran. Is that going to damage our relationship?

[PC] I spend my time with whom I please, when I please. Why are you asking me such a stupid question? Are you going to threaten to leave me if I want you both?

[PC] I spend some time with him, yes. But I think of you constantly. I will find a way to let him down gently.

 

 

[ARAN] <CHARNAME>, I back you whatever you choose. An' if you want to spend time wi' a Drow, well, you know your own mind, I suppose. It makes me burn right angry every time he looks your direction, though. I don't trust no Drow bastard, none, ever.

= [ARAN] Him gettin' into a deep romance wi' you, that makes me downright sick to my stomach, it does. It won't stop me chasin' you right proper. Th' only thing what will do that is if you tell me to stop flirtin', an' tell me you just want to be friends. But I'm not a bloody happy man, not one bit. You got some problems in that strange head o' yours, <CHARNAME>. It's not right. It be just plain wrong. DO {SetGlobal, aran = mad SetGlobalTimer aran = apologize}

END

 

Hopefully, the first line is clear enough for Multi-Romancers to be able to keep roleplaying their character having these multiple affairs. I suspect I should have one for the female PC romancing other females through use of BG2 Tweaks, too, which really only means Jaheira and Aerie. Possibly Sarah. But to tell you the truth, I don't know yet how he would react - still thinking.

 

Anyways, that kind of prompting might be needed for folks who do not usually use the PIDs. The magic RA = 2 is the standard setting for "committed romance" for most other NPCs. For Aran, it just marks the time when he begins to try to figure out what his role eventually will be. It will be a bit wild for the Multi-Romancer, because there may be more than one of these active at any given time, but in the worst case scenario {PC, Aran, Anomen, Ajantis, Edwin, Angelo} or some other multiple romancer's dreamteam, without a tweak, many of these others NPC mod's code will cancel eachother out before they get to fire off. If a player altered to allow all romances (which takes some doing - Tweaks deals with BioWare, not mod-added), there will be up to 4 of these mini-conversations, and given the differences between mods it might not line up all happening at the same time.

 

So far, we have a smattering of optional conflict interjections. We have a reaction to Anomen and Aran sharing the party hat can toggle them on and off, and we have a PID response for players who change their mind. We have a good start on some minor "jealosy" talks, PC <> ARAN. I guess the only thing left is a talk or two sparring over <CHARNAME>.

 

Romance Conflict Banters

Some of these are well rec'd, others hated. For good reason - playing both sides of this conflict is treading thin ice - players like the characters, or they would not have them in the party. There is also the mantra of "Let The Player Choose" to follow. Let's see if we can walk the line, and make both boys sympathetic...

 

// Romance Conflict 1

[ARAN] Get out o' my way, you tin-plated bastard.

[ANOMEN] I think I shall not, Whitehand. I see the way that you look at <CHARNAME>. I will travel where you do, and stand where I will be able to protect her from your insolent gaze.

[ARAN] She needs no protection, Delryn. She is a grown woman, an' can make up her own mind.

[ANOMEN] You seem not to understand. She is a grown woman who deserves the respect and admiration of a colleague, not the leering lust of an unkempt cur.

[ARAN] Perhaps, perhaps not. But you don't rightly understand either. Th' lady has the choice, not you. If she doesn't want th' attention, I am hers to command. You treat her as if she were someone to protect an' shelter, to correct an' scold. Me, I just want to be near her and watch her back, both literal an' figurative.

[ANOMEN] You aim too high. You have nothing to offer her. No status, no title, nothing. If she looks my way, I have much to offer her.

[ARAN] Aye, that be th' truth. All I have is me, myself, an' I. But I wouldn't be shared wi' Helm, Torm, or no 'Order'. I'd be all hers.

 

// Romance Conflict 2

[ANOMEN] I will stand watch with <CHARNAME> tonight.

[ARAN] Bugger that. It be my turn at watch.

[ANOMEN] I think you spend too much time in her presence.

[ARAN] An' I think you do.

[ANOMEN] You have been measured, and found wanting. Walk away from her.

[ARAN] I measure myself, an' find I am not so bad after all. Are you claimin' her as property?

[ANOMEN] I am claiming that I am her suitor, and that I find your attentions are unseemly and unbecoming of a gentleman.

[ARAN] That be fine by me, on account o' I never claimed to be no 'gentleman'.

 

Dammnt, I need one where Anomen really wins, or this whole balancing is off - I'll take suggestions, I guess. There are two there, but the way I read it, Aran wins both times. This is why this conflict stuff gets tough to deal with, I guess - the Anomen I have inferred from BioWare has big faults that are easy to exploit. Aran's are all there out in the open. Bleh!!!!

 

 

 

I will come back to this after some rumination and hopefully a suggestion or two, I guess.

 

 

Moving on for now....

 

OK, I am ready - How do we get this stuff all in the game, or just part of it? What was that about Separate Components?

 

People are picky. Sometimes, they are so picky that they only want a certain 10% of your content, and they want to scrp the rest. Or, they want a specific "install choice" - content separated out as optional at install time. This has advantages, and drawbacks, like everything else, and deserves some balance considerations. Consider the following set of install choices:

 

Install Anomen Conflict With Aran With Fight? [y] [n]

Install Anomen Conflict With Aran Without Fight? [y] [n]

Install Anomen Conflict With Aran Banters? [y] [n]

Install Anomen Conflict With Aran Interjections? [y] [n]

Install Anomen Conflict With Aran When Solaufein Is in The Party? [y] [n]

Install Anomen Conflict With Aran With Fight? [y] [n]

 

Easy to code - and in my opinion, about the stupidest waste of player and modder time out there. Even with the use of READLN to give options and create one component with all these choices, it is a serious PITA, given that most folks don't read README's and are just going to install everything all in one fell swoop. Besides, if you have incorporated player choice into your mod, then they probably have a way out of the stuff they don't like anyways :rolleyes:

 

So one extreme is old-skool "install one big component, and players will play what I wrote." This has advantages that include simple and short install times for players, clean and easily understood relationships of code in the mod, easy troubleshooting, etc. It has the drawbacks of being slightly inflexible, which is why WeiDU is the preffered method of mod distribution for i.e. games - it provides flexible, customized installation of content that allows othermods to be installed at the same time.

 

At the other end of the extreme is the "make lots of very small, very detailed components, and allow players to make the choice". For the most part, NPC mods do not go very far towards this - this is reserved for mods like SCS, SCSII, BG2 Tweaks, etc. It has immense advantages for players in terms of adding exactly the type of experience wanted, with the precision of a surgeon. On an NPC mod, it means that perhaps the NPC is not a single story, adding on to the gameworld, but a short series of vignettes. It also means more things that can be installed in the wrong order, more things that can go wrong in general.

 

As usual, the middle ground is a pretty cool place to be with this stuff. Many NPC mods allow 3 basic player choices at install - 1. the basic mod, 2. the romance materials, 3. alternate portraits. If we wanted to be really specific with our player choices, we could even break down into 6 -

 

1. configuration of NPC, 2. basic mod content (friendtaks and quest), 3. Romance, 4. Romance conflicts, 5. portrait choices, 6. extras

 

To code this particular Romance Conflict as part of the main mod, with no player choice about wthether it gets in the game, we just add the stuff into the regular .d and .baf files, and go to it. No problem.

 

To break the choices out a bit, we can separate these parts off, just as we have to for SoA vs ToB installs, following the same basic format:

 

setup-myMod.tp2

BEGIN ~Anomen Conflict With Aran With Fight~
<< copy/cmpile only those files>>

BEGIN ~Anomen Conflict With Aran Without Fight~
<< copy/cmpile only those files>>

BEGIN ~Anomen Conflict With Aran Banters~
<< copy/cmpile only those files>>

BEGIN ~Anomen Conflict With Aran Interjections~
<< copy/cmpile only those files>>

BEGIN ~Anomen Conflict With Aran When Solaufein Is in The Party~
<< copy/cmpile only those files>>

BEGIN ~Anomen Conflict With Aran With Fight~
<< copy/cmpile only those files>>

This is one of those times where WeiDU makes little sense with the BEGIN, because there is no END.

 

 

 

Having each of those as a component can be awkward, becasue you have to use either SUBCOMPONENT or FORCED_SUBCOMPONENT to make sure you don't have a player jusyt install every single component all at once, meaning you get double interjections, etc. because they added files that do the same thing in two separate places. Unlike the Portrait mods, where poeple accidentally overwite the same subcomponent picture but it does no harm to their install, doing that with dialog and scripts can mess up your mod.

 

To avoid this, and avoid a bunch of independent components that have to be reorganized via WeiDU, you could make it a little easier, and use READLN instad of individual components or even SUBCOMPONENT:

 

from a section setting Aran's Friend Talk and Love Talk timers,

/* Arn's Romance Talk Timer */
PRINT ~Select Aran's Romance Speed:~ */

PRINT ~Please choose one of the following:
[1] 1 hour real time (standard) minimum between LoveTalks
[2] 45 minutes real time minimum between LoveTalks
[3] 30 minutes real time minimum between LoveTalks
[4] 15 minutes real time minimum between LoveTalks
[5] 1 hour 30 minutes (extended) real time minimum between LoveTalks~

OUTER_SPRINT ~arantimer~ ~placeholder_value~
OUTER_WHILE (!(IS_AN_INT ~arantimer~) OR (~arantimer~ > 0x5) OR (~arantimer~ < 0x1)) BEGIN
PRINT ~Please select 1, 2, 3, 4, or 5 and press enter.~ 
ACTION_READLN ~arantimer~
END
ACTION_IF ("arantimer" = 1) THEN BEGIN
	APPEND ~gtimes.ids~ ~3600 ARAN_LTT~
	  PRINT ~Lovetalks will have a minimum of 1 hour real time between them.~
END
ACTION_IF ("arantimer" = 2) THEN BEGIN
	APPEND ~gtimes.ids~ ~2700 ARAN_LTT~
	PRINT ~Lovetalks will have a minimum of 45 minutes real time between them.~
END
ACTION_IF ("arantimer" = 3) THEN BEGIN
	APPEND ~gtimes.ids~ ~1800 ARAN_LTT~
	PRINT ~Lovetalks will have a minimum of 30 minutes real time between them.~
END
ACTION_IF ("arantimer" = 4) THEN BEGIN
	APPEND ~gtimes.ids~ ~900 ARAN_LTT~
	PRINT ~Lovetalks will have a minimum of 15 minutes real time between them.~
END
ACTION_IF ("arantimer" = 5) THEN BEGIN
	APPEND ~gtimes.ids~ ~5400 ARAN_LTT~
	PRINT ~Lovetalks will have a minimum of 1 hour 30 minutes real time between them.~
END

/* Aran's Friend Talk Timer */
PRINT ~Select Aran's Friend Talk Speed:~ */

PRINT ~Please choose one of the following:
[1] 1 hour real time (standard) minimum between FriendTalks
[2] 45 minutes real time minimum between FriendTalks
[3] 30 minutes real time minimum between FriendTalks
[4] 15 minutes real time minimum between FriendTalks
[5] 1 hour 30 minutes (extended) real time minimum between FriendTalks~

OUTER_SPRINT ~arantimer1~ ~placeholder_value~
OUTER_WHILE (!(IS_AN_INT ~arantimer1~) OR (~arantimer1~ > 0x5) OR (~arantimer1~ < 0x1)) BEGIN
PRINT ~Please select 1, 2, 3, 4, or 5 and press enter.~ 
ACTION_READLN ~arantimer1~
END
ACTION_IF ("arantimer1" = 1) THEN BEGIN
	APPEND ~gtimes.ids~ ~3600 ARAN_FTT~
	  PRINT ~Friendtalks will have a minimum of 1 hour real time between them.~
END
ACTION_IF ("arantimer1" = 2) THEN BEGIN
	APPEND ~gtimes.ids~ ~2700 ARAN_FTT~
	PRINT ~Friendtalks will have a minimum of 45 minutes real time between them.~
END
ACTION_IF ("arantimer1" = 3) THEN BEGIN
	APPEND ~gtimes.ids~ ~1800 ARAN_FTT~
	PRINT ~Friendtalks will have a minimum of 30 minutes real time between them.~
END
ACTION_IF ("arantimer1" = 4) THEN BEGIN
	APPEND ~gtimes.ids~ ~900 ARAN_FTT~
	PRINT ~Friendtalks will have a minimum of 15 minutes real time between them.~
END
ACTION_IF ("arantimer1" = 5) THEN BEGIN
	APPEND ~gtimes.ids~ ~5400 ARAN_FTT~
	PRINT ~Friendtalks will have a minimum of 1 hour 30 minutes real time between them.~
END

This code assigns each of the choices a variable, and then reads the variable from the line the player responds on (so it means what it looks like; "READLINE = READLN"). It gives more flexibility than SUBCOMPONENT or FORCED_SUBCOMPONENT, because it allows you to mix and match varous tyes of information. It also avoids the silliness of a user installing multiple SUBCOMPONENTs that all do the same thing, or simply skipping out on a choice or two you need them to make. A full player choice READLN might be as wildly inappropriately stupid as this:

~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #1, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #1, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #1, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #2, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #2, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #2, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #3, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #3, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, with Anomen Conflict, with Portrait #3, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #1, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #1, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #1, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #2, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #2, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #2, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #3, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #3, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in swords and bows, without Anomen Conflict, with Portrait #3, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #1, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #1, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #1, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #2, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #2, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #2, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #3, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #3, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, with Anomen Conflict, with Portrait #3, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #1, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #1, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #1, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #2, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #2, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #2, Starting in Umar Hills.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #3, Starting in Trademeet.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #3, Starting in Athlaka.~
~Aran as the Thinker, with red eyes and green hair, equipped with a long sword, proficient in spear and crossbow, without Anomen Conflict, with Portrait #3, Starting in Umar Hills.~

ok, you get the idea - I will stop going through the iterations, because you can see how it doubles with each change - it probably is alot better to confine those choices, or to separate them out into smaller sections, like a READLN for proficiency/equipment, a READLN for portraits, a READLN for starting location, etc. I am stopping this line of inquiry here, because choosing *exactly* what you want the player to be able to install and what you want to have them be able to change mid-game without reinstalling is a question best left for another topic. The short story is that you can install a section of your code separated out and independent from the main project, to allow players the global choice of seeing the content/avoiding the content. To be clear, the choice structure for adding Anomen Conflict materials could be as simple as

 

PRINT ~Aran and Anomen Conflicts:~ */

PRINT ~Please choose one of the following:
[1] Just install Anomen and Aran's Romance conflicts and interjections
[2] Just install Anomen and Aran's Friendship conflicts and interjections
[3] Install All Conflicts
[4] Install none of the conflicts between Anomen and Aran.
OUTER_SPRINT ~arananomen~ ~placeholder_value~
OUTER_WHILE (!(IS_AN_INT ~arananomen~) OR (~arananomen~ > 0x4) OR (~arantimer1~ < 0x1)) BEGIN
PRINT ~Please select 1, 2, or 3 and press enter.~ 
ACTION_READLN ~arananomen~
END
ACTION_IF ("arananomen" = 1) THEN BEGIN
	COMPILE EVALUATE_BUFFER  ~c-arananomenconflictromance.d~
	EXTEND_BOTTOM ~c-aran.bcs~ ~aran\baf\annoconflictromance.baf~
END
ACTION_IF ("arananomen" = 2) THEN BEGIN
	COMPILE EVALUATE_BUFFER  ~c-arananomenconflict.d~
	EXTEND_BOTTOM ~c-aran.bcs~ ~aran\baf\annoconflict.baf~
END
ACTION_IF ("arananomen" = 3) THEN BEGIN
	COMPILE EVALUATE_BUFFER  ~c-arananomenconflict.d~
	COMPILE EVALUATE_BUFFER  ~c-arananomenconflictromance.d~
	EXTEND_BOTTOM ~c-aran.bcs~ ~aran\baf\annoconflictromance.baf~
	EXTEND_BOTTOM ~c-aran.bcs~ ~aran\baf\annoconflict.baf~
END
ACTION_IF ("arananomen" = 4) THEN BEGIN
	PRINT ~Skipping all files related to Anomen and Aran infighting.~
END

 

A reminder about the SUBCOMPONENT oor FORCED_SUBCOMPONENT recast - if you want the choice to show up in the weiDU.log, then choose the older (SUBCOMPONENT) method. I am not writing it up, because there are a zillion examples out there, and some tutorials, and all the modern portrait mods use variations on this, but you could do it that way if you chose to.

 

But frankly, for this entire Anomen thing, I am just installing the Anomen Conflict as an integral part of the mod. In fact, since I am blending romance stuff into friendship stuff, and friendship stuff into romance stuff, there may not even be a traditional mod setup with a separate Romance portion to install. I think for Aran, I am going to save the install choices for setting up his creature file and possibly alternate portraits, location, proficiencies, etc. - perhas even an optional 'banter with other NPCs' component if there is not enough interest/feedback on crossmod, but the vast majority of the content gets installed - and then player choice within the mod will turn on and off what they don't like, to the extent I can make that happen.

 

That means that all of the materials above end up inthe original project files, and we save the READLN for other uses. We have given player choice withn the mod itself, and ltherefore there is no real reason to separate it out as a separate player choice on install.

Link to comment

I'm a proponent of SUBCOMPONENT vs. READLN; partially because in the past, there have been troubles with auto-installers such as SMM and BiG World (though the BiG folks have since come up with a solution)--and partially because I personally find it far simpler. Check this out, from Iylos:

 

// --------------------------------------------
// Iylos' Talk Timers
// --------------------------------------------
// 15 minutes
BEGIN @79
 REQUIRE_COMPONENT ~iylos.tp2~			 ~0~ @80
 SUBCOMPONENT @81
COPY_EXISTING ~gtimes.ids~ ~gtimes.ids~
  REPLACE_TEXTUALLY ~3600 IYLOS_TIMER~ ~900 IYLOS_TIMER~

// 20 minutes
BEGIN @82
 REQUIRE_COMPONENT ~iylos.tp2~			 ~0~ @80
 SUBCOMPONENT @81
COPY_EXISTING ~gtimes.ids~ ~gtimes.ids~
  REPLACE_TEXTUALLY ~3600 IYLOS_TIMER~ ~1200 IYLOS_TIMER~

// 30 minutes
BEGIN @83
 REQUIRE_COMPONENT ~iylos.tp2~			 ~0~ @80
 SUBCOMPONENT @81
COPY_EXISTING ~gtimes.ids~ ~gtimes.ids~
  REPLACE_TEXTUALLY ~3600 IYLOS_TIMER~ ~1800 IYLOS_TIMER~

// 45 minutes
BEGIN @84
 REQUIRE_COMPONENT ~iylos.tp2~			 ~0~ @80
 SUBCOMPONENT @81
COPY_EXISTING ~gtimes.ids~ ~gtimes.ids~
  REPLACE_TEXTUALLY ~3600 IYLOS_TIMER~ ~2700 IYLOS_TIMER~

// 60 minutes
BEGIN @85
 REQUIRE_COMPONENT ~iylos.tp2~			 ~0~ @80
 SUBCOMPONENT @81
COPY_EXISTING ~gtimes.ids~ ~gtimes.ids~
  REPLACE_TEXTUALLY ~3600 IYLOS_TIMER~ ~3600 IYLOS_TIMER~

 

As far as I'm aware, it's not actually possible to install multiple components from the same subcomponent group. I could be wrong--I'm definitely no WeiDU guru--but I've never encountered that problem.

 

What are the arguments for using READLN vs. SUBCOMPONENT?

Link to comment
What are the arguments for using READLN vs. SUBCOMPONENT?

In general or in this case? In this case, using READLN probably isn't any better.

 

In general:

 

PRO READLN

  • allows selection of any arbitrary values within an acceptable range instead of predetermined ones
  • can code multiple selection paths and loops that would get way too complicated with components

ANTI READLN

  • information isn't saved in weidu.log

Link to comment

Hmmm... let me think back to that set of materials/discuussions...

 

ok.

 

Originally in bg1npc we introduced variable timers.

 

The original implementation was as you put above, with SUBCOMPONENT.

 

The problem was, you could skip the timers/not install them, which was Bad For Business, so we moved to FORCED_SUBCOMPONENT. That meant that for each one of the grouped subcomponents, you were forced to install one of the choices.

 

I also remember this and GROUP set the ASK_EVERY_COMPONENT flag by default, meaning you lost the ability to install/uninstall in one fell swoop - you had to go through each choice, just like BG2 Fixpack or BG2 Tweaks.

 

So we added flag files and a REQUIRE_PREDICATE, which is actually more elegantly done in your example above. (Well, except that I would move those puppies to F_C, so no silly personplayer chooses not to install the timer, leaving you with the error report "Hey, he just ran through all his banters at once!!" because they never set the GTIMES value, so all the TimerExpired stuff is always true!!!!!!) I never did get around to recoding that the way Nythrun suggested and you have coded above, with the REQUIRE_COMPONENT - probably because we figured it was too dangerous to mess with component numbers from versions before DESIGNATED came into play with the PIDs, etc - just like we have not moved the .tp2 down to the cleaner level inside of the folder, like most modern mods do, because it would mean a user who did not uninstall and delete the upper level .tp2 would end up trying to install the new stuff using the old .tp2.

 

After the R_C/R_F etc. is in play, you can R_C each of the components while using SUBCOMPONENT and FORCED_SUBCOMPONENT, meaning you can automatically rip out the whole mod when the first (or whatever component you want) is uninstalled, thus having your cake and eating it to... using SUBCOMPONENT, FORCED_SUBCOMPONENT, GROUP - and the only loss is you can't do an "Ask Every Component/Install All" choice at the top of the mod. You can pull it all out by the roots, but you still have to plant components one at a time and make those choices. Unless you learn how to command-line or batch-file your install, in which case, you are a pretty serious player and read the readme's - and we are trying to control for players who *don't* do that :rolleyes:

 

So, one strength of READLN is that you should be able to do the Install All, and get your choices presented, but not go through and chose out individual components.

 

One drawback is the choices set up by READLN do not get written into the weidu.log. I'd have to check if they got into the individual .DEBUG; that's why I usually do a PRINT afterwards (something Macready taught me way back, when he was trying to show me how to work with soundsets and explaining his "soundset extractor" tool.

 

I suspect the answer is that FORCED_SUBCOMPONENT or SUBCOMPONENT are useful and complete, but they still operate as separate individual components within your mod. For great examples of what would be S or F_S hell, Level1NPCs is the standard - trying to build all the combinations, even if they were

 

BEGIN ~Anomen as Cleric/Mage~
SUBCOMPONENT ~Change Anomen's Class?~
 SPRINT anom_class = 1

BEGIN ~Anomen as Fighter~
SUBCOMPONENT ~Change Anomen's Class?~
 SPRINT anom_class = 2

leaves you with hundresd of little blocks, and worse - unless you organize the choices into waves, and use FORCED_SUBCOMPONENT, someone can choose to not kmake a choice, leaving you with a messed up install! You could correct for this by coding a "default" setting if the subcomponent is skipped, but that means an extra line of code on everything for each of the possible skips - bigtime exponential scriptig bloat. So F_C would be a better choice.

 

But better yet, if you are using READLN you can mess with combinations inside of one component, and not have to go through and manually set each option with choice after choice after choice. Here's what CamDawg did with the Tweakpack, as another extreme example -

 

the romance cheats, where instead of going through subcomponents individually, he set a couple of choices for the player, then applied them across multiple types and sets of code (remember, all READLN does is give the modder a variable set by the user - one you can use all over the place, until something resets that variable):

/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////												  \\\\\
///// Romance Cheats								   \\\\\
/////												  \\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\

BEGIN @318300 DESIGNATED 3183
GROUP @4
REQUIRE_PREDICATE NOT FILE_EXISTS_IN_GAME ~_sw1h01.itm~ @10 // non-Tutu

// this file does nothing, it just allows other mods to detect this component
COPY_EXISTING ~sw1h01.itm~ ~override/cdt3183.g3~

// fixes for Anomen's join dialogue
COMPILE ~bg2_tweaks/dlg/ano_rom_fix.d~

OUTER_SET "proceed" = 0
OUTER_SET "req_race" = 0
OUTER_SET "req_gender" = 0
OUTER_SET "multiple" = 0
OUTER_SET "no_kill" = 0
OUTER_SET "start_tob" = 0

OUTER_WHILE ("%proceed%" STRING_COMPARE_REGEXP "[Aa]") BEGIN
 OUTER_WHILE ("%req_race%" STRING_COMPARE_REGEXP "[AaBb]") BEGIN
PRINT @318301
ACTION_READLN req_race
 END
 OUTER_WHILE ("%req_gender%" STRING_COMPARE_REGEXP "[AaBb]") BEGIN
PRINT @318303
ACTION_READLN req_gender
 END
 OUTER_WHILE ("%multiple%" STRING_COMPARE_REGEXP "[AaBb]") BEGIN
PRINT @318305
ACTION_READLN multiple
 END
 ACTION_IF ("%multiple%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN // only offer no kill if multi-romance selected
OUTER_WHILE ("%no_kill%" STRING_COMPARE_REGEXP "[AaBb]") BEGIN
  PRINT @318307
  ACTION_READLN no_kill
END
 END
 ACTION_IF FILE_EXISTS_IN_GAME ~mel01.cre~ THEN BEGIN // tob
OUTER_WHILE ("%start_tob%" STRING_COMPARE_REGEXP "[AaBb]") BEGIN
  PRINT @318311
  ACTION_READLN start_tob
END
 END
 // print summary of options before proceeding
 PRINT @318309
 ACTION_IF ("%req_race%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN
PRINT @318302
 END
 ACTION_IF ("%req_gender%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN
PRINT @318304
 END
 ACTION_IF ("%multiple%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN
PRINT @318306
 END
 ACTION_IF ("%no_kill%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN
PRINT @318308
 END
 ACTION_IF ("%start_tob%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN
PRINT @318312
 END
 OUTER_WHILE ("%proceed%" STRING_COMPARE_REGEXP "[AaBb]") BEGIN
PRINT @318310
ACTION_READLN proceed
 END
 ACTION_IF ("%proceed%" STRING_COMPARE_CASE "b" = 0) THEN BEGIN
OUTER_SET "proceed" = 0
OUTER_SET "req_race" = 0
OUTER_SET "req_gender" = 0
OUTER_SET "multiple" = 0
OUTER_SET "no_kill" = 0
OUTER_SET "start_tob" = 0
 END
END

// take care of tob_start
// this will also take care of any romance requirement adjustments on the ToB side while we're here
ACTION_IF ("%start_tob%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN

 EXTEND_TOP ~aeri25.bcs~ ~bg2_tweaks/baf/aeri25_start_tob.baf~

 COMPILE ~BG2_Tweaks/dlg/rom_start_tob.d~

 ACTION_IF ("%req_gender%" STRING_COMPARE_CASE "b" = 0) THEN BEGIN // if gender reqs intact

COMPILE ~BG2_Tweaks/dlg/rom_start_tob_gender.d~

 END

 ACTION_IF ("%req_race%" STRING_COMPARE_CASE "b" = 0) THEN BEGIN // if  race reqs intact

COMPILE ~BG2_Tweaks/dlg/rom_start_tob_race.d~

 END

 ACTION_IF ("%multiple%" STRING_COMPARE_CASE "b" = 0) THEN BEGIN // if no multi allowed

COMPILE ~BG2_Tweaks/dlg/rom_start_tob_multi.d~

 END

END

// removing gender and/or racial requirements
// note that ToB doesn't need to be adjusted here--romance either continues from SoA, or is adjusted in the ToB start patches above
ACTION_IF (("%req_race%" STRING_COMPARE_CASE "a" = 0) AND ("%req_gender%" STRING_COMPARE_CASE "a")) THEN BEGIN // if only gender reqs intact

 EXTEND_TOP ~aerie.bcs~   ~bg2_tweaks/baf/aerie_rom_reqs.baf~
 EXTEND_TOP ~anomen.bcs~  ~bg2_tweaks/baf/anomen_rom_reqs.baf~
 EXTEND_TOP ~jaheira.bcs~ ~bg2_tweaks/baf/jaheira_rom_reqs.baf~
 EXTEND_TOP ~viconia.bcs~ ~bg2_tweaks/baf/viconia_rom_reqs.baf~

 COPY_EXISTING ~aerie.bcs~   ~override~
			~jaheira.bcs~ ~override~
			~viconia.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~Global("CDRomanceFoo","LOCALS",0)~
  ~Gender(Player1,MALE)~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

 COPY_EXISTING ~anomen.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~Global("CDRomanceFoo","LOCALS",0)~
  ~Gender(Player1,FEMALE)~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

END

ACTION_IF (("%req_race%" STRING_COMPARE_CASE "a") AND ("%req_gender%" STRING_COMPARE_CASE "a" = 0)) THEN BEGIN // if only race reqs intact

 EXTEND_TOP ~aerie.bcs~   ~bg2_tweaks/baf/aerie_rom_reqs.baf~
 EXTEND_TOP ~anomen.bcs~  ~bg2_tweaks/baf/anomen_rom_reqs.baf~
 EXTEND_TOP ~jaheira.bcs~ ~bg2_tweaks/baf/jaheira_rom_reqs.baf~
 EXTEND_TOP ~viconia.bcs~ ~bg2_tweaks/baf/viconia_rom_reqs.baf~

 COPY_EXISTING ~aerie.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~Global("CDRomanceFoo","LOCALS",0)~
  ~OR(5) Race(Player1,HUMAN) Race(Player1,HALF_ELF) Race(Player1,ELF) Race(Player1,HALFLING) Race(Player1,GNOME)~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

 COPY_EXISTING ~anomen.bcs~  ~override~
			~jaheira.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~Global("CDRomanceFoo","LOCALS",0)~
  ~OR(4) Race(Player1,HUMAN) Race(Player1,HALF_ELF) Race(Player1,ELF) Race(Player1,HALFLING)~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

 COPY_EXISTING ~viconia.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~Global("CDRomanceFoo","LOCALS",0)~
  ~OR(4) Race(Player1,HUMAN) Race(Player1,HALF_ELF) Race(Player1,HALFLING) Race(Player1,HALFORC)~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

END

ACTION_IF (("%req_race%" STRING_COMPARE_CASE "a" = 0) AND ("%req_gender%" STRING_COMPARE_CASE "a" = 0)) THEN BEGIN // if no reqs, just clean up

 EXTEND_TOP ~aerie.bcs~   ~bg2_tweaks/baf/aerie_rom_reqs.baf~
 EXTEND_TOP ~anomen.bcs~  ~bg2_tweaks/baf/anomen_rom_reqs.baf~
 EXTEND_TOP ~jaheira.bcs~ ~bg2_tweaks/baf/jaheira_rom_reqs.baf~
 EXTEND_TOP ~viconia.bcs~ ~bg2_tweaks/baf/viconia_rom_reqs.baf~

 COPY_EXISTING ~aerie.bcs~   ~override~
			~anomen.bcs~  ~override~
			~jaheira.bcs~ ~override~
			~viconia.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~Global("CDRomanceFoo","LOCALS",0)~ ~~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

END

// allow multiple romances
ACTION_IF ("%multiple%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN // if no reqs, just clean up

 // stop disabling aerie's romance
 COPY_EXISTING ~jaheira.bcs~ ~override~
			~viconia.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~\bGlobal("AerieRomanceActive","GLOBAL",[12])~ ~False()~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

 // stop disabling jaheira's romance
 COPY_EXISTING ~aerie.bcs~   ~override~
			~viconia.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~\bGlobal("JaheiraRomanceActive","GLOBAL",[12])~ ~False()~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

 // stop disabling viconia's romance
 COPY_EXISTING ~aerie.bcs~   ~override~
			~jaheira.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
  REPLACE_TEXTUALLY ~\bGlobal("ViconiaRomanceActive","GLOBAL",[12])~ ~False()~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

 ACTION_IF FILE_EXISTS_IN_GAME ~mel01.cre~ THEN BEGIN

// stop disabling aerie's romance
COPY_EXISTING ~jahe25.bcs~ ~override~
			  ~vico25.bcs~ ~override~
  DECOMPILE_BCS_TO_BAF
	REPLACE_TEXTUALLY ~\bGlobal("AerieRomanceActive","GLOBAL",[12])~ ~False()~
  COMPILE_BAF_TO_BCS
  BUT_ONLY_IF_IT_CHANGES

// stop disabling jaheira's romance
COPY_EXISTING ~aeri25.bcs~ ~override~
			  ~vico25.bcs~ ~override~
  DECOMPILE_BCS_TO_BAF
	REPLACE_TEXTUALLY ~\bGlobal("JaheiraRomanceActive","GLOBAL",[12])~ ~False()~
  COMPILE_BAF_TO_BCS
  BUT_ONLY_IF_IT_CHANGES

// stop disabling viconia's romance
COPY_EXISTING ~aeri25.bcs~ ~override~
			  ~jahe25.bcs~ ~override~
  DECOMPILE_BCS_TO_BAF
	REPLACE_TEXTUALLY ~\bGlobal("ViconiaRomanceActive","GLOBAL",[12])~ ~False()~
  COMPILE_BAF_TO_BCS
  BUT_ONLY_IF_IT_CHANGES

// wraith punish
COPY_EXISTING ~aeri25.bcs~ ~override~
			  ~anom25.bcs~ ~override~
			  ~jahe25.bcs~ ~override~
			  ~vico25.bcs~ ~override~
  DECOMPILE_BCS_TO_BAF
	REPLACE_TEXTUALLY ~GlobalGT("WraithPunish","GLOBAL",0)~ ~False()~
  COMPILE_BAF_TO_BCS
  BUT_ONLY_IF_IT_CHANGES

EXTEND_TOP ~aeri25.bcs~ ~BG2_Tweaks/baf/aeri25_rom2.baf~
EXTEND_TOP ~anom25.bcs~ ~BG2_Tweaks/baf/anom25_rom2.baf~
EXTEND_TOP ~jahe25.bcs~ ~BG2_Tweaks/baf/jahe25_rom2.baf~
EXTEND_TOP ~vico25.bcs~ ~BG2_Tweaks/baf/vico25_rom2.baf~

 END

 // no kill
 ACTION_IF ("%no_kill%" STRING_COMPARE_CASE "a" = 0) THEN BEGIN // if no reqs, just clean up

EXTEND_TOP ~aerie.bcs~   ~BG2_Tweaks/baf/aerie_rom3.baf~
EXTEND_TOP ~anomen.bcs~  ~BG2_Tweaks/baf/anomen_rom3.baf~
EXTEND_TOP ~jaheira.bcs~ ~BG2_Tweaks/baf/jaheira_rom3.baf~
EXTEND_TOP ~viconia.bcs~ ~BG2_Tweaks/baf/viconia_rom3.baf~

ACTION_IF FILE_EXISTS_IN_GAME ~mel01.cre~ THEN BEGIN

  EXTEND_TOP ~aeri25.bcs~ ~BG2_Tweaks/baf/aeri25_rom3.baf~
  EXTEND_TOP ~anom25.bcs~ ~BG2_Tweaks/baf/anom25_rom3.baf~
  EXTEND_TOP ~jahe25.bcs~ ~BG2_Tweaks/baf/jahe25_rom3.baf~
  EXTEND_TOP ~vico25.bcs~ ~BG2_Tweaks/baf/vico25_rom3.baf~

END

 END

END

 

Of course, he also as older code which uses SUBCOMMPONENT effectively; the multiple choices for Druid/Cleric spell progressions in BG2 Tweaks has stuff like this:

 

/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////															\\\\\
///// save penalties for powerful spellcasters				   \\\\\
/////															\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\

/////															\\\\\
///// arcane only												\\\\\
/////															\\\\\

BEGIN @231001 DESIGNATED 2310
GROUP @9
SUBCOMPONENT @231000 // arcane save penalties

// this file does nothing, it just allows other mods to detect this component
COPY_EXISTING ~sw1h01.itm~ ~override/cdt02310.g3~

INCLUDE ~BG2_Tweaks/lib/saves_macro.tpa~

COPY_EXISTING_REGEXP GLOB ~^.+\.spl$~ ~override~
 READ_SHORT 0x1c "spell_type" ELSE 0
 PATCH_IF ("%spell_type%" = 1) BEGIN // arcane only
LAUNCH_PATCH_MACRO ~save_via_level~ // contains rest of patch
 END
 BUT_ONLY_IF_IT_CHANGES

/////															\\\\\
///// divine only												\\\\\
/////															\\\\\

BEGIN @231100 DESIGNATED 2311
GROUP @9
SUBCOMPONENT @231000 // divine

// this file does nothing, it just allows other mods to detect this component
COPY_EXISTING ~sw1h01.itm~ ~override/cdt02311.g3~

INCLUDE ~BG2_Tweaks/lib/saves_macro.tpa~

COPY_EXISTING_REGEXP GLOB ~^.+\.spl$~ ~override~
//COPY_EXISTING ~spin692.spl~ ~override~
 READ_SHORT 0x1c "spell_type" ELSE 0
 PATCH_IF ("%spell_type%" = 2) BEGIN // divine only
LAUNCH_PATCH_MACRO ~save_via_level~ // contains rest of patch
 END
 BUT_ONLY_IF_IT_CHANGES

/////															\\\\\
///// arcane & divine											\\\\\
/////															\\\\\

BEGIN @231200 DESIGNATED 2312
GROUP @9
SUBCOMPONENT @231000 // both

// this file does nothing, it just allows other mods to detect this component
COPY_EXISTING ~sw1h01.itm~ ~override/cdt02312.g3~

INCLUDE ~BG2_Tweaks/lib/saves_macro.tpa~

// first fix spin692 so it won't muck up the search
COPY_EXISTING ~spin692.spl~ ~override~
 READ_LONG 0x64 "abil_off"
 WRITE_SHORT ("%abil_off%" + 0x10) 1 // set first ability header to have minimum level of 1
 BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING_REGEXP GLOB ~^.+\.spl$~ ~override~
 READ_SHORT 0x1c "spell_type" ELSE 0
 PATCH_IF (("%spell_type%" = 1) OR ("%spell_type%" = 2)) BEGIN // arcane & divine only
LAUNCH_PATCH_MACRO ~save_via_level~ // contains rest of patch
 END
 BUT_ONLY_IF_IT_CHANGES

 

So it really depends on what you think you are going to need, and which you think is easier for the end-user.

 

Edit: damit - something is wrong with my computer/commection again - Mike1072's post didn't show up for me. What he said. He took a few words, I took a thousand. Go figure :mwaha:

Link to comment

Sorry to hijakc this thread -

the "problem" with subcomponent I have is that the player could chose [n] not install - so I'd have to provide a "default" case that is already installed with the core mod?

 

To the two Aran - Anomen conflict dialogues ("Get out o' my way, you tin-plated bastard.", etc.) - gha, does it have to be Anomen who sais "protect her from your (...)" and "You have been measured, and found (...)"? That is Kelsey / Solaufein (?) Anomen interpretation, and I hated it. I don't think Anomen would act this way out fo jelousy, that is my problem. He would say something like that to an evil NPC that really threatens the PC by his mere presence. But jelous Anomen would not believe that he is the measure of PC's needs. I don't think so. I took your original idea and rephrased and changed as little as I could. Hope it's OK if I post this here.

 

// Romance Conflict 1

[ARAN] Get out o' my way, you tin-plated bastard.

[ANOMEN] Watch your tongue, hired man-at-arms. The way you act I will travel where you do, and stand where I will be able to protect lady <CHARNAME> from your offending presence. Also spare yourself those insolent gazes you stow upon her!

[ARAN] Oh, I don't think I am that unbearable. And by the way: she needs no protection, Delryn. She is a grown woman, an' can make up her own mind.

[ANOMEN] She is a grown and strong woman indeed, but you seem not to understand. She is a woman who deserves the respect and admiration of a colleague, not the leering lust of an unkempt cur.

[ARAN] Perhaps, perhaps not. But you don't rightly understand either. Th' lady has the choice, not you. If she doesn't want th' attention, I am hers to command. You treat her as if she were someone to protect an' shelter, to correct an' scold. Me, I just want to be near her and watch her back, both literal an' figurative.

[ANOMEN] So you admit it! You aim too high, Whitehand. You have nothing to offer her. No status, no title, nothing.

[ARAN] Aye, that be th' truth. All I have is me, myself, an' I. But I wouldn't be shared wi' Helm, Torm, or no 'Order'. I'd be all hers.

 

 

// Romance Conflict 2

[ANOMEN] I will stand watch with <CHARNAME> tonight.

[ARAN] Bugger that. It be my turn at watch.

[ANOMEN] I think you spent enough time in her presence.

[ARAN] An' I think so did you.

[ANOMEN] I won't leave lady <CHARNAME> alone with you insolent bastard tonight, Whitehand. Not unless she orders me away.

[ARAN] Seems it will be a three-way watch, then.

 

// Romance Conflict 3

[ANOMEN] You have been measured, and found wanting, Whitehand.

[ARAN] I measure myself, an' find I am not so bad after all.

[ANOMEN] Don't try me. Walk away from lady <CHARNAME>.

[ARAN] Are you claimin' her as property?

[ANOMEN] I am claiming that I am her suitor, and that I find your attentions are unseemly and unbecoming of a gentleman.

[ARAN] That be fine by me, on account o' I never claimed to be no 'gentleman'.

[ANOMEN] No, indeed you did not.

Link to comment

Jastey, no problem, not a hijack at all - right on topic,for the coding blog. I agree on the SUBCOMPONENT loophole for installs :rolleyes:

 

As for the conflict banters, let's play with your versions, and see what folks can do with them. The problem is that I do see the Kelsey/Solaufein model at play, which is where I am stinking this conflict all up. I want it to be a fair fight, without one clear winner. Yours is closer, but still leaves Aran as the dude who seems to win in all three cases - we need one where Ajantis can make a clear argument that he really is the better choice for <CHARNAME>.

 

 

It is perfectly fine to completely reword them!

 

What we have so far:

 

// Romance Conflict 1

[ARAN] Get out o' my way, you tin-plated bastard.

[ANOMEN] Watch your tongue, hired man-at-arms. The way you act I will travel where you do, and stand where I will be able to protect lady <CHARNAME> from your offending presence. Also spare yourself those insolent gazes you stow upon her!

[ARAN] Oh, I don't think I am that unbearable. And by the way: she needs no protection, Delryn. She is a grown woman, an' can make up her own mind.

[ANOMEN] She is a grown and strong woman indeed, but you seem not to understand. She is a woman who deserves the respect and admiration of a colleague, not the leering lust of an unkempt cur.

[ARAN] Perhaps, perhaps not. But you don't rightly understand either. Th' lady has the choice, not you. If she doesn't want th' attention, I am hers to command. You treat her as if she were someone to protect an' shelter, to correct an' scold. Me, I just want to be near her and watch her back, both literal an' figurative.

[ANOMEN] So you admit it! You aim too high, Whitehand. You have nothing to offer her. No status, no title, nothing.

[ARAN] Aye, that be th' truth. All I have is me, myself, an' I. But I wouldn't be shared wi' Helm, Torm, or no 'Order'. I'd be all hers.

 

 

// Romance Conflict 2

[ANOMEN] I will stand watch with <CHARNAME> tonight.

[ARAN] Bugger that. It be my turn at watch.

[ANOMEN] I think you spent enough time in her presence.

[ARAN] An' I think so did you.

[ANOMEN] I won't leave lady <CHARNAME> alone with you insolent bastard tonight, Whitehand. Not unless she orders me away.

[ARAN] Seems it will be a three-way watch, then.

 

// Romance Conflict 3

[ANOMEN] You have been measured, and found wanting, Whitehand.

[ARAN] I measure myself, an' find I am not so bad after all.

[ANOMEN] Don't try me. Walk away from lady <CHARNAME>.

[ARAN] Are you claimin' her as property?

[ANOMEN] I am claiming that I am her suitor, and that I find your attentions are unseemly and unbecoming of a gentleman.

[ARAN] That be fine by me, on account o' I never claimed to be no 'gentleman'.

[ANOMEN] No, indeed you did not.

Link to comment
Guest Guest
- we need one where Ajantis can make a clear argument that he really is the better choice for <CHARNAME>.
Totally agreed! Oh, you meant Anomen? :rolleyes:
Link to comment
Guest Guest
[ANOMEN] I am claiming that I am her suitor, and that I find your attentions are unseemly and unbecoming of a gentleman.
I just realized what "suitor" means. Hm, I think I would like to rephrase that to "Of course not. No one should even try to think such a thing about lady <CHARNAME>. Your attentions are unseemly and unbecoming of a gentleman."

 

Er, it's me. Just not logging in because I am at work..

Link to comment

To quote Bill The cat... "AAAACKKKPPThhhhhhtkptht....."

 

Yes, I meant Anomen not Ajantis!! In my mind, I have the following setup -

Anomen as a pretender, who wants the position (and if he doesn't get it he changes alignment and goes a little nuts) [the world is good or evil, and my job is to punish the offenders, and I deserve recognition];

Ajantis as the real deal, who would be the same guy if someone told him tomorrow that he was no longer a knight [the world is good or evil, and I need to show how to be on the side of good by example, and recognition is immaterial] ;

Mazzy as the real deal, who might never be knighted but completely lives the job [the world is good or evil, and I'm not evil, so that is that];

Keldorn as the wizened and seasoned knight who has learned that things are more complicated than good vs evil, [the world is good *and* evil, law *and* chaos, and sometimes good people end up doing things that are hard to put into categories - "Shades of Grey", Billy Joel].

Link to comment

Ideas from Jastey, to play around with, posted with her permission:

 

Conflict talk 1: Like before (reprinted for convenience)

[ARAN] Get out o' my way, you tin-plated bastard.

[ANOMEN] Watch your tongue, hired man-at-arms. The way you act I will travel where you do, and stand where I will be able to protect lady <CHARNAME> from your offending presence. Also spare yourself those insolent gazes you stow upon her!

[ARAN] Oh, I don't think I am that unbearable. And by the way: she needs no protection, Delryn. She is a grown woman, an' can make up her own mind.

[ANOMEN] She is a grown and strong woman indeed, but you seem not to understand. She is a woman who deserves the respect and admiration of a colleague, not the leering lust of an unkempt cur.

[ARAN] Perhaps, perhaps not. But you don't rightly understand either. Th' lady has the choice, not you. If she doesn't want th' attention, I am hers to command. You treat her as if she were someone to protect an' shelter, to correct an' scold. Me, I just want to be near her and watch her back, both literal an' figurative.

[ANOMEN] So you admit it! You aim too high, Whitehand. You have nothing to offer her. No status, no title, nothing.

[ARAN] Aye, that be th' truth. All I have is me, myself, an' I. But I wouldn't be shared wi' Helm, Torm, or no 'Order'. I'd be all hers.

 

Conflict talk 2:

[ANOMEN] So, you think you would be enough to please and care for a woman, Whitehand.

[ARAN] I believe so, yes. As I said, I would be all hers.

[ANOMEN] Just don't make the mistake of thinking that she would be all yours.

[ARAN] Now you lost me, Delryn.

[ANOMEN] It is easy for a godless, Order-less man to delve into his arrogance and egotism. A man who serves a god has learned to be humble, Whitehand. He knows where his place is, and that his wishes are not everything that counts.

= A real man should have learned this before courting a woman.

[ARAN] A real man, yes. but I know certain wanna-bes, that do not fulfill this criterion...

[ANOMEN] Watch your tongue. It is always easier to mock than to admit.

 

Conflict talk 3:

[ARAN] So, you say that I am not humble enough to please a woman, Delryn. What if she doesn't want a humble man?

[ANOMEN] Let me explain it to you. It makes no difference whether she would be strong, demanding or in need of protection.

= In every case, she expects you to know and fulfill her wishes, whatever they may be.

[ARAN] Oh, and you think you would be the right man for that? Last time I looked...

[ANOMEN] Careful, Whitehand.

[ARAN] But dammit, you are right there. If you don't know and respect your mistress' wishes, the relationship implodes.

= Hey, I showed comprehension to my opponent's arguments. Maybe not all hope is lost for my humbleness, Delryn?

[ANOMEN] (grunt)

 

Conflict 4

[ARAN] What would you say if I say that a man that follows a god and the rules of an Ordr can be delving into his arrogance quite nicely himself, maybe even stronger than a man without, because he thinks he has justification for his actions?

[ANOMEN] Then I would say that you are a bloody bastard who is trying to insult me again.

[ARAN] Why would you think I am talking about you, Delryn?

[ANOMEN] As I said, Whitehand. Feel your own mortal inferiority and you learn to realize that you are not perfect. I know I am far from perfect, but at least *I* am trying.

 

Conflict 5 (former Conflict 2, reprinted for convenience):

[ANOMEN] I will stand watch with <CHARNAME> tonight.

[ARAN] Bugger that. It be my turn at watch.

[ANOMEN] I think you spent enough time in her presence.

[ARAN] An' I think so did you.

[ANOMEN] I won't leave lady <CHARNAME> alone with you insolent bastard tonight, Whitehand. Not unless she orders me away.

[ARAN] Seems it will be a three-way watch, then.

 

Conflict 6 (Anomen, Aran, PC all near):

[ARAN] Funny, how we are not only making three-way watch but also three-way marching, as it seems.

[ANOMEN] I am here to protect lady <CHARNAME>, Whitehand.

[ARAN] Come on, you are not saying you have to protect her from me, do you?

[ANOMEN] Not yet, but I am not sure this will stay this way. No, if you would take a step back from your feelings of self-importance you would realize that as a follower of Helm, I am guarding and watching everything around us, prepared for any nasty surprises.

= You, on the other hand, seem to constantly stare at lady <CHARNAME>. I think I know who will see the evil sneaking from behind first.

[ARAN] You can tell me a lot of things, but not that I am not doing my job properly.

[ANOMEN] Just make sure you are worth your money, man-at-arms, and go guarding. Somewhere far away.

 

Conflict 7

[ANOMEN] Step away from lady <CHARNAME>, Whitehand.

[ARAN] Are you claimin' her as property?

[ANOMEN] Of course not. No-one should ever even think such a thing about lady <CHARNAME>. I am claiming that I am her protector and your are unseemly and unbecoming of a gentleman.

[ARAN] That be fine by me, on account o' I never claimed to be no 'gentleman'.

 

Conflict 8

[ANOMEN] You have been measured, and found wanting, Whitehand.

[ARAN] I measure myself, an' find I am not so bad after all.

[ANOMEN] Never short of an insolent reply, are you?

[ARAN] I have learned to reply to arrogant snooty-nosed little upstarts.

[ANOMEN] Probably trained in front of a mirror.

[ARAN] If I wouldn't think you were such a bloody bastard, that would have been nearly a funny reply.

 

I like these, and it brings up a question - how much conflict should roll into this?

Link to comment

Thanks for the info, cmorgan and Mike--I appreciate it! :rolleyes:

 

The one thing that strikes me with those Anomen conflict banters is, uh, there's an awful lot of them. You might drown the player in them, unless you're only going to show some of them each time.

Link to comment

The banters are logically connected, so reducing would mean taking the last ones out. I don't think it's too many: Let them play say every two real time hours. That would make one conflict banter per 4 LTs (2 per man). The player sees as much as the romances take before a decision has to be made. My opinion: I prefer the two men having their bickering while both romances are active, without being forced to chose in such a conflict talk. So there can't be too many conflict talks, as long as they fire once in a while for active romances.

Link to comment

There is also the point that the conflict might last the entire game -

 

Aran never shuts down *anyone's* romance. He might be unhappy at a multi-romancer, but he isn't going anywhere - if PC says "Hey, i have a permanent relationship with Anomen, but I may decide your friendship has some benefits I want to take advantage of", well, that's her business. It would not be the first time a dude (or dudette) was played with that way in RL, and that is fantasy - if a player wants to have Anomen go committed to her, and play-act an affair, then she can (though I strongly suggest not trying this in RL, in any way, shape ofr form - really hurtful all the way around, in my opinion). In player terms, the multi-romance cheats allow folks to have the oddity of romancing *all* BioWare NPCs at once (not my cup of tea, but hey, player choice is the mantra). So, technically, in a Mega- install, how many hours of gameplay needs to be covered?

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...