Jump to content

Epilogue


WizWom

Recommended Posts

Q:hi wizwom this theacefes from G3. Do you by chance, know the dialogue file for the epilogues in ToB?

 

A:Well, it's not a dialog, it's a 2DA - it seems to be <scriptname>ND.2DA if there is no romance, and <sciptname>ND1 if they are romancable but not in a romance and <scriptname>ND2 if they are in an active romance at the end.

 

The first collumn is the RACES and CLASSES, second is labeled 0, and is the chapter number for the header (71020 is "Chapter 8:") and the third collumn is labeled 1 and is the text to use for the case of a protaganist matching column 1, that is, you could have a different epilogue for a dwarf or a thief. The first active row is SWITCH, which seems to be DEFAULT in all cases I can see. I don't know what the proper entry would be to have different text for different races or classes.

 

From text strings found in the exe:

720E60: SWITCH

720E68: DEFAULT

720E70: RACE

720E78: CLASS

720E80: REPUTATION

720E8C: NONE

720E94: GOOD_REPUTATION

720EA4: BAD_REPUTATION

720EB4: GOOD_POWER

720EC0: BAD_POWER

 

So I suspect you could use at the least CLASS and RACE, and possibly REPUTATION, but I'm not sure of that.

 

Kelsey does NOT use this format, so I'm trying to figure out how he got his FWKels01 - 08 to actually be used, and where he's doing the switch. Ah, they are spec'd in AR6200.BCS and then called up with a TextScreen...

Funny that the whole set of possibilities of rance/chose essence aren't developed for epilogues for the Bioware NPCs, but I guess the only way you can save an NPC from thier non-romance fate is to romance them and then decline godhood.

Link to comment

Basically all you need for an epilogue 2da is the following:

 

The attached 2da which I'd put in AurenAseph/2DAs. You'll have to unzip it first obviously (the board wouldn't let me upload a .2da).

 

COPY ~AurenAseph/2DAs/BlankEpilogue.2da~ ~override/K#AURND.2da~
	REPLACE_TEXTUALLY ~PORTRAIT~ ~K#AURENL~ // Their biggest portrait file
	REPLACE 99999 ~Blah blah blah... ~  // The actual epilogue writing itself

 

You can then use the same template 2DA file if you wanted a second epilogue e.g. when she romances Nalia

 

COPY ~AurenAseph/2DAs/BlankEpilogue.2da~ ~override/K#AURND1.2da~
	REPLACE_TEXTUALLY ~PORTRAIT~ ~K#AURENL~ // Their biggest portrait file
	REPLACE 99999 ~Blah blah blah... ~  // The actual epilogue writing itself

 

Note all that's different is I've changed the name from K#AURND.2da to K#AURND1.2da. The rest of the stuff is done entirely on the fly so it doesn't need a second 2da file to be packaged with the mod.

 

Then you extend AR6200.bcs with this kind of code (in my example I'll pretend again that you have two epilogues one for the Nalia romance, one without). This is the code that actually makes the epilogue play (despite BioWare having a naming scheme, none of it is automatic):

 

IF
Global("StartEndBios","AR6200",1)
InParty("K#Auren")
!Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
Global("K#AurenBio","GLOBAL",0)
THEN
RESPONSE #100
	SetGlobal("K#AurenBio","GLOBAL",1)
	TextScreen("K#AURND")
	SmallWait(1)
	Continue()
END

IF
Global("StartEndBios","AR6200",1)
InParty("K#Auren")
Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
Global("K#AurenBio","GLOBAL",0)
THEN
RESPONSE #100
	SetGlobal("K#AurenBio","GLOBAL",1)
	TextScreen("K#AURND1")
	SmallWait(1)
	Continue()
END

 

If you've got an alternate one for romancing Nalia, obviously you'd want a seperate epilogue for Nalia as well.

 

COPY_EXISTING ~naliand.2da~ ~override/k#nalnd1.2da~ //i.e. we make a new 2da for epilogue
	REPLACE_TEXTUALLY ~PORTRAIT~ ~NALIAL~		
	REPLACE 99999 ~Blah blah blah... ~  // The actual epilogue writing itself

 

This next code adds an extra condition to already existing Nalia epilogues so that they only run if Auren and Nalia are NOT in a romance (make sure you have this bit of code before your EXTENDs). Technically this step isn't necessary as your EXTENDed code will end up above the current Nalia block, but this makes the finished result slightly more readable.

 

COPY_EXISTING ~ar6200.bcs~ ~override/arc6200.bcs~
	DECOMPILE_BCS_TO_BAF
	REPLACE_TEXTUALLY ~Global("NaliaBio","GLOBAL",0)~ ~!Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
 Global("NaliaBio","GLOBAL",0)~
	COMPILE_BAF_TO_BCS

 

Then obviously at the end of that bit of scripting code I gave you above you'd want your new Nalia epilogue:

 

IF
Global("StartEndBios","AR6200",1)
InParty("Nalia")
Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
Global("NaliaBio","GLOBAL",0)
THEN
RESPONSE #100
	SetGlobal("NaliaBio","GLOBAL",1)
	TextScreen("K#NALND1")
	SmallWait(1)
	Continue()
END

 

Okay, so that's it. Your tp2 code looks a bit like this:

 

COPY ~AurenAseph/2DAs/BlankEpilogue.2da~ ~override/K#AURND.2da~
	REPLACE_TEXTUALLY ~PORTRAIT~ ~K#AURENL~ // Their biggest portrait file
	REPLACE 99999 ~Blah blah blah... ~  // The actual epilogue writing itself

COPY ~AurenAseph/2DAs/BlankEpilogue.2da~ ~override/K#AURND1.2da~
	REPLACE_TEXTUALLY ~PORTRAIT~ ~K#AURENL~ // Their biggest portrait file
	REPLACE 99999 ~Blah blah blah... ~  // The actual epilogue writing itself

COPY ~AurenAseph/2DAs/BlankEpilogue.2da~ ~override/k#nalnd1.2da~
	REPLACE_TEXTUALLY ~PORTRAIT~ ~NALIAL~		
	REPLACE 99999 ~Blah blah blah... ~  // The actual epilogue writing itself

COPY_EXISTING ~ar6200.bcs~ ~override/arc6200.bcs~
	DECOMPILE_BCS_TO_BAF
	REPLACE_TEXTUALLY ~Global("NaliaBio","GLOBAL",0)~ ~!Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
 Global("NaliaBio","GLOBAL",0)~
	COMPILE_BAF_TO_BCS

EXTEND_TOP ~ar6200.bcs~ ~AurenAseph/Scripts/AR6200.baf~

 

And AR6200.baf contains:

 

IF
Global("StartEndBios","AR6200",1)
InParty("K#Auren")
!Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
Global("K#AurenBio","GLOBAL",0)
THEN
RESPONSE #100
	SetGlobal("K#AurenBio","GLOBAL",1)
	TextScreen("K#AURND")
	SmallWait(1)
	Continue()
END

IF
Global("StartEndBios","AR6200",1)
InParty("K#Auren")
Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
Global("K#AurenBio","GLOBAL",0)
THEN
RESPONSE #100
	SetGlobal("K#AurenBio","GLOBAL",1)
	TextScreen("K#AURND1")
	SmallWait(1)
	Continue()
END

IF
Global("StartEndBios","AR6200",1)
InParty("Nalia")
Global("K#NALIAROMANCEVARIABLE","GLOBAL",1)
Global("NaliaBio","GLOBAL",0)
THEN
RESPONSE #100
	SetGlobal("NaliaBio","GLOBAL",1)
	TextScreen("K#NALND1")
	SmallWait(1)
	Continue()
END

 

Hope that helps!

Zipped_2da_file.zip

Link to comment
Er..thank you but was posting the query in public really necessary?

Didn't mean to cause you any embarrassment :-)

 

I honestly didn't know when you asked, and decided to find out. And since pretty much anyone making a full-arc character will want one, I decided making it a public post would be helpful.

Link to comment

Theacefes, I for one am extremely happy to see this stuff out there -- I understand the need for Workrooms and private spaces, because project teams need to make private decisions on materials, because some questions are community hot-topics where folks need to vent to people they trust not to spread the rant around, and because there are times when code posts deal with stuff that could seriously mislead newcomers or scare the garbage out of them.

 

For absolutely any technical questions, though, it is awesome to see the query and the response. Then the community guru-types can comment and fix, making sure an error in logic or coding is examined and dealt with before getting buried, and the rest of us can figure out related problems in our code (or fix the darned things ourselves if we don't code!).

 

Of course, I have absolutely no pride. I just wanna learn how to make it work, so will take pretty much any commentary, good, bad, indifferent, hostile, or just plain mean, if it means I get one more bug off the list...

Link to comment

Archived

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

×
×
  • Create New...