Jump to content

Reputation Modification in BG1 NPC


jastey

Recommended Posts

Edited by Cmorgan, Nov 7, 2006 : This is a continuation of http://forums.gibberlings3.net/index.php?s...ost&p=70721 based on Tameron the Dragoon's experiences playing through the BG1 NPC Project.

 

Summary: Reputation gains and losses cause Viconia (and other NPCs) to leave the party prematurely. Good reputation can be purchased at temples; bad can be found by killing innocents. Instead of breaking party alignemt or installing a "Happy Patch", we ae looking for a way a player can "manage" their reputation ingame and within the roleplaying aspects so that they can keep party members around! This would also solve some unanticipated behavior in Jaheira's Quest.

 

 

Funny thing! I made a small cheat mod that introduces a character, who, if spoken to, would increase or decrease the Party's reputation. I needed it to test the reputation reactions, as there is no implemented cheat for changing the repuation (at least not that I know of). I never thought there could be a need for something like that for players, though! Imagine a Mr. X with enough connections: Pay him enough money and he will spread bad news about the party to lower the reputation, similar to reputation increase in temples. That would give a possibility to balance the "lots of rep increase for quest solving" BG structure and help keeping Jaheira & Co. in the party for neutral PCs (i.e. those who do *not* find pleasure in killing innocent people). :)

Would there be interest in such a minimod for Tutu? The guy could be located in an inn of an easy accessible city, e.g. Beregost.

Link to comment

I like it. To get it even more interesting, introducing two or three NPCs like that could work: one in Nashkel, one in Friendly Arm Inn, and one somewhere in Baldur's Gate. Maybe even as BG2 Tweaks component...

 

I can just imagine CHARNAME asking dumbly: "Why would I pay someone to malign me?" and Viconia's prompt answer: "Why, jaluk, to spread word of your dark prowess, of course! Or do you wish to conceal your fearsome might from these rivven, hmm?"

Link to comment

I like this idea tremendously more than actively disabling the reputation-related LeaveParty() stuff; I know an arguement can be made that a player could escape all of this by applying the Happy Patch in Tweaks, and SCS or (Tweaks? Divine Remix?) "Change Jaheira to Neutral Good", but personally I am looking forward to the day when Virtue works on Tutu.

 

I do know (think - unless someone teaches me how) that I can't actually fix this "feature" of BG1 NPC in general terms without basically forcing players to have the Happy Patch (by ripping off the code). For Jaheira, I could delay the inevitable by moving all rep gains/ losses to an independent "quest evaluation" block set in Jaheira's BCS, with all of that material evaluated and aplied as a final reward; this would mean that if you did everything the way Jaheira wants and you start with a 16 or higher rep, she would bail on you after the quest was evaluated instead of during the quest. That is only marinally better, and requires some tricky quest rebuilding (as Domi wrote good, dual-track code that covers most eventualities with very few variables, which means creating "marker" variables to track what rewards/penalties to assign... not a 1 weekend project, and probably not feasible before next summer)

Link to comment
I like it. To get it even more interesting, introducing two or three NPCs like that could work: one in Nashkel, one in Friendly Arm Inn, and one somewhere in Baldur's Gate. Maybe even as BG2 Tweaks component...

 

I can just imagine CHARNAME asking dumbly: "Why would I pay someone to malign me?" and Viconia's prompt answer: "Why, jaluk, to spread word of your dark prowess, of course! Or do you wish to conceal your fearsome might from these rivven, hmm?"

 

This sounds great to me! I HATE having to worry constantly about how to deal with my reputation. A few people like this is such a good idea, methinks.

Link to comment

Safest thing would be to make it equal to the temple donations (though I don't know that number), or perhaps the Sword Coast is such that bad news is easier to spread? A reduction of 50% from temple "raise a point" costs?

Link to comment

Excellent idea. All points are on the main road there, so the bad fame will spread nice and wide from there. They can become very cool characters, these 'reputation-sellers'. How about one of them is an obnoxious kind of guy/gal who would try to sell you his/her services as the bard to glorify you, and *if* you refuse, then s/he starts defaming you - for FREE!

 

Then every time you come back you have to either pay him/her off for raising your rep, or try to force her/him to stop spreading lies for more reputation lowering. Or, and he can actually travel between two places if you inslut or threaten him. S/he'll be the best suited for BG itself, it has plenty of inns s/he can perform in!

Link to comment

Domi: My plans did not include added content that would develop differently than the PC expects it. (I like the idea of what you said, though, just don't feel responsible to implement it. :))

 

Safest thing would be to make it equal to the temple donations (though I don't know that number), or perhaps the Sword Coast is such that bad news is easier to spread? A reduction of 50% from temple "raise a point" costs?
That was exactly my train of thought, but give me numbers! :)
Link to comment

Well, now, let's see here. I have a thread with

  1. three awesome cool women who have extensive modding experience and are important BG1 NPC Project Team leaders/contributors,
  2. a willing person (me) to do grunty stuff like recode and help find playtesters/coordinate stuff/put stuff up on the development wikki,
  3. three very active Tutu playtesters/modders/helpers on the Tutu side and two on the BGT side who cross both Windows and Mac platforms(Yes, berelide, gorilym, Miloch, Chev, and hopefully Riviera, I'm talking about you :))
  4. a plot for a minimod that could have both of their ideas, the equivalent of a One-Day-NPC (3 .cres or just 1, moving between known areas using straightforward code, with either 1 D file with some extended CHAINs or if wanted up to 3 separate bards)
  5. Three existing in-game NPC Lake Poet Bards that only have a cameo appearance if you have a bard in the party who might *jump* at the chance to have another cameo appearance (I will talk to their agent),
  6. A simple, fun, non-intrusive, non-forced solution to a bloody intractable persistent annoyance that has dogged the project with false "bug" reports in Jaheira's quest
  7. did I say 3 beautiful, wonderful, experienced master modders from all corners of the world who can code in their sleep (and will have to, as some of them are moms!) and even more importantly write extremely compelling dialogue and storylines, as evidenced by the popularity of thier work?

Hmmm....

 

 

I do believe these ingredients can be combined to create either a stand-alone minimod or an extension of the Lake Poets, which technically could be worked in under the category of "bugfix" rather than "new content".

 

I will go sort through back posts on various forums and see if anyone has figured out what the triggers are/costs are for increasing reputation at temples. I am not sure we can trust printed materials, but I will start with Dudleyville and Dan Simpson' walkthrough; it also sounds like someone may have asked about this on Sorcerer's Net or such!

 

EDIT: strike that; they are already at it! Let me know how I can help please :)

Link to comment

Just in case it is useful;

 

currently in BG1 NPC .tp2

ACTION_IF FILE_EXISTS_IN_GAME ~FW0100.are~ THEN BEGIN
/* creatures */
COPY_EXISTING ~_VOLO.CRE~ ~override/X#LAKEP1.CRE~
		  ~_VOLO.CRE~ ~override/X#LAKEP2.CRE~
		  ~_VOLO.CRE~ ~override/X#LAKEP3.CRE~
 SAY NAME1 @292
 SAY NAME2 @293
 SAY INITIAL_MEETING @294
 SAY UNHAPPY_BREAKING @295
 SAY BATTLE_CRY1 @296
 SAY BATTLE_CRY2 @296
 SAY BATTLE_CRY3 @296
 SAY BATTLE_CRY4 @296
 SAY BATTLE_CRY5 @296
 SAY DAMAGE @297
 SAY DYING @298
 SAY SELECT_COMMON1 @299
 SAY SELECT_COMMON2 @300
 SAY SELECT_COMMON3 @301
 SAY SELECT_COMMON4 @302
 SAY DIALOGUE_DEFAULT @299
 WRITE_EVALUATED_ASCII 0x2CC ~%DEST_RES%~ #8 // dialog
 WRITE_EVALUATED_ASCII 0x280 ~%DEST_RES%~ #32 // death variable

COPY_EXISTING ~X#LAKEP2.CRE~ ~override~
 SAY NAME1 @303
 SAY NAME2 @304

COPY_EXISTING ~X#LAKEP3.CRE~ ~override~
 SAY NAME1 @305
 SAY NAME2 @306

/* area script changes */
EXTEND_BOTTOM ~_AR2400.BCS~ ~BG1NPC/Phase2/BAF/X#LAKEP.BAF~

/* dialogue */
COMPILE ~BG1NPC/Phase2/DLG/X#LAKE.D~
END ELSE BEGIN /* BGT Versions */
/* creatures */
COPY_EXISTING ~VOLO.CRE~ ~override/X#LAKEP1.CRE~
		  ~VOLO.CRE~ ~override/X#LAKEP2.CRE~
		  ~VOLO.CRE~ ~override/X#LAKEP3.CRE~
 SAY NAME1 @292
 SAY NAME2 @293
 SAY INITIAL_MEETING @294
 SAY UNHAPPY_BREAKING @295
 SAY BATTLE_CRY1 @296
 SAY BATTLE_CRY2 @296
 SAY BATTLE_CRY3 @296
 SAY BATTLE_CRY4 @296
 SAY BATTLE_CRY5 @296
 SAY DAMAGE @297
 SAY DYING @298
 SAY SELECT_COMMON1 @299
 SAY SELECT_COMMON2 @300
 SAY SELECT_COMMON3 @301
 SAY SELECT_COMMON4 @302
 SAY DIALOGUE_DEFAULT @299
 WRITE_EVALUATED_ASCII 0x2CC ~%DEST_RES%~ #8 // dialog
 WRITE_EVALUATED_ASCII 0x280 ~%DEST_RES%~ #32 // death variable

COPY_EXISTING ~X#LAKEP2.CRE~ ~override~
 SAY NAME1 @303
 SAY NAME2 @304

COPY_EXISTING ~X#LAKEP3.CRE~ ~override~
 SAY NAME1 @305
 SAY NAME2 @306

ACTION_IF FILE_EXISTS ~data/BG1ARE.bif~ THEN BEGIN
COPY_EXISTING ~X#LAKEP1.CRE~ ~override~
COPY_EXISTING ~X#LAKEP2.CRE~ ~override~
COPY_EXISTING ~X#LAKEP3.CRE~ ~override~
PATCH_IF (SOURCE_SIZE > 0x2d3) BEGIN
  LAUNCH_PATCH_MACRO ~tutu_items_to_bgt~
END
END

 

So existing .cres have X#LAKEP1 X#LAKEP2 X#LAKEP3 as both DV and Dialogue file; curently none have an independent .BCS

 

 

Current dialogue file content for X#LAKE.D

BEGIN X#LAKEP1

APPEND X#LAKEP1

IF ~NumTimesTalkedTo(0)~ THEN BEGIN Sam0
SAY @0
= @1
IF ~~ THEN EXIT
END


IF ~NumTimesTalkedTo(1)~ THEN BEGIN Sam1
SAY @2
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(2)~ THEN BEGIN Sam2
SAY @3
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(3)~ THEN BEGIN Sam3
SAY @4
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(4)~ THEN BEGIN Sam4
SAY @5
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(5)~ THEN BEGIN Sam5
SAY @6
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedToGT(5)~ THEN BEGIN Sam6
SAY @7
IF ~~ THEN DO ~SetGlobal("X#TalkedLP1","GLOBAL",1)~ EXIT
END

END

BEGIN X#LAKEP2

APPEND X#LAKEP2

IF ~NumTimesTalkedTo(0)~ THEN BEGIN Rob0
SAY @8
= @9
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(1)~ THEN BEGIN Rob1
SAY @10
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(2)~ THEN BEGIN Rob2
SAY @11
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(3)~ THEN BEGIN Rob3
SAY @12
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(4)~ THEN BEGIN Rob4
SAY @13
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(5)~ THEN BEGIN Rob5
SAY @14
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(6)~ THEN BEGIN Rob6
SAY @15
IF ~~ THEN DO ~SetGlobal("X#TalkedLP2","GLOBAL",1)~ EXIT
END

IF ~NumTimesTalkedToGT(6)~ THEN BEGIN Rob7
SAY @15
IF ~~ THEN EXIT
END

END

BEGIN X#LAKEP3

APPEND X#LAKEP3

IF ~NumTimesTalkedTo(0)~ THEN BEGIN Willy0
SAY @16
= @17
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(1)~ THEN BEGIN Willy1
SAY @18
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(2)~ THEN BEGIN Willy2
SAY @19
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(3)~ THEN BEGIN Willy3
SAY @20
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(4)~ THEN BEGIN Willy4
SAY @21
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(5)~ THEN BEGIN Willy5
SAY @22
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(6)~ THEN BEGIN Willy6
SAY @23
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(7)~ THEN BEGIN Willy7
SAY @24
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedTo(8)~ THEN BEGIN Willy8
SAY @25
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedToGT(8) Global("X#TalkedLP1","GLOBAL",1) Global("X#TalkedLP2","GLOBAL",1) Global("X#TalkedLP3","GLOBAL",0)~ THEN BEGIN Willy9
SAY @26
IF ~RandomNum(3,1)~ THEN DO ~GiveItemCreate("MISC3O",Player1,1,0,0) SetGlobal("X#TalkedLP3","GLOBAL",1)~ EXIT
IF ~RandomNum(3,2)~ THEN DO ~GiveItemCreate("MISC3N",Player1,1,0,0) SetGlobal("X#TalkedLP3","GLOBAL",1)~ EXIT
IF ~RandomNum(3,3)~ THEN DO ~GiveItemCreate("MISC3M",Player1,1,0,0) SetGlobal("X#TalkedLP3","GLOBAL",1)~ EXIT
END

IF ~NumTimesTalkedToGT(8) OR(2) Global("X#TalkedLP1","GLOBAL",0) Global("X#TalkedLP2","GLOBAL",0) ~ THEN BEGIN Willy10
SAY @27
IF ~~ THEN EXIT
END

IF ~Global("X#TalkedLP3","GLOBAL",1)~ THEN BEGIN Willy11
SAY @28
IF ~~ THEN EXIT
END

END

I can provide dialogue entries if they help, but will avoid them until you folks tell me to (spoilerish :) )

Link to comment

:) Thank you cmorgan, for the compliments.

I didn't understand point 5, about the three existing in-game NPC Lake Poet Bards. I see you posted code while I was typing this post. Are these three added bards from BG1NPC that you would suggest to use for this?

 

I give this to discussion:

What I had in mind was a simple possibility to reduce the reputation by "buying" the reputation loss. The NPC(s) I imagined to be more of a thief appearance (assuming some dark connections), but bards sounds great, too, and makes a lot of sense. (Anti-bards, hehe ;)).

The dialogue would go something like:

NPC: Ah, I only heard good news about you.

PC: Yes, and that surely annoyes me!

NPC: I could "help" you there, for an appropriate contribution towards expenses, of course.

 

He (they) would offer reputation reductions by 1 or 2 points. It will be more expensive for high reputation ("What do you expect? This needs careful realisation. They *like* you!"), and there will be a warning if the rep would go down below to the value where the Amnish guards start attacking (I think it was 3).

 

If anyone has comments and / or would like to contribute to make this minimod less of a tool but more of a quest encounter, please step foreward. :)

 

Sorry for hijacking the thread btw., Tameon.

Link to comment

Archived

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

×
×
  • Create New...