Jump to content

Making changes to existing game data #2


St_Vitruvius

Recommended Posts

Now that I think I've got the hang of changing exisiting dialogue I'm off to the next thing: Scripts!

 

After having killed Irenicus you're supposed to be able to walk around in Suldanessellar. At the moment People can walk around in AR2812, The Temple of Rillifane, and do what ever they like.. But if they LEAVE the temple they cannot return from AR2800 to AR2812, but will end up in AR2803, e.g. they cannot complete the game.. And they risk stumpling into a monster not yet killed in Suldanessellar..

 

So does anyone know if it's possible to edit the area scripts and the cut-scene scripts in a non-destructive manner?

Link to comment

If no-one know if I it's possible to edit scripts in a non-destructive manner, then I'll assume it's not possible..

 

Therefore I ask if anyone knows of any mods changeing the following list of scripts:

  • AR2800.BCS
  • AR2801.BCS
  • AR2802.BCS
  • AR2803.BCS
  • AR2804.BCS
  • AR2805.BCS
  • AR2806.BCS
  • AR2807.BCS
  • AR2808.BCS
  • AR2809.BCS
  • AR2812.BCS
  • CUT59A.BCS

and any changes to ANYTHING in area 2812..

Link to comment

Yes you can change scripts in a non-destructive manner. It's more or less the same as changing a dialogue.

 

You need to find out where the code is that makes the changes in the current game and stop it from happening by inserting a global check (in the same way you entered the False() into the dialogue to stop the reply from firing.

 

You change your global when you are ready to go.

 

In this case you may need to do more checking because I think the Temple room in which Ellesime does her final speech is not linked to from the main city area. They didn't need to do this because it is the last area you visit in SoA. You will need more changes than mere scripting. You will need to add a new door trigger in AR2800 that goes to AR2812 and that only becomes active after your new dialogue with Ellesime. You will also need to deactivate the door that goes to AR2803.

Link to comment

I was thinking of changing the destination from Hell, vi cut59a, to ar2803 and adding a lot of conditions. But if I'm able to change the the conditions for the door triggers, then I'll do that.. But how do I do it?

 

I've looked through the WeiDU documentation and found APPLY_BCS_PATCH_OR_COPY, APPEND_FILE, INSERT_FILE.. But I'm not sure which to use.. Is there a mod doing this that can give me a hint?

Link to comment

If you want to cut into the ending of the game just to end a guy who would train elven characters and give them new bonuses, maybe you could do it before? For example, Elhan could be waiting for PC at the temple entrance, after the avatar has been summoned, thank him for preventing the city's destruction, and introduce him to an elven weapon master.

Link to comment
I've looked through the WeiDU documentation and found APPLY_BCS_PATCH_OR_COPY, APPEND_FILE, INSERT_FILE.. But I'm not sure which to use.. Is there a mod doing this that can give me a hint?
You probably just want to DECOMPILE_BCS_TO_BAF and REPLACE_TEXTUALLY what you want to replace or append. It's probably the least "non-destructive" way anyhow. We do a lot of that in the BG1 Fixpack. Depending on what you want to do, EXTEND_BOTTOM might be more appropriate. If you post a script and a description of what you want to do to it, it might be easier to give examples.
Link to comment

If, as Kulyok said, you are only adding one extra character to the city I would suggest you do it before going to Hell. It would save you a lot of work. Also if you can explore the city after returning from Hell it might seem a little odd if none of the residents have anything to say about it and behave as though the city is still under threat.

Link to comment

One mod springs to mind for changes like these, but it is changing the end of BG1 content to BG2 content - BGT. Other mods which alter the way the map works include Sirine's Call (adds new areas and maps their related entrance/exit triggers), several of the Big Mods (NeJ, etc., etc.) and a new mod out called Tower of Deception (Kulyok did some work assisting on this one, so you could ask her if it is on-topic enough for you - I have not had a chance to review it and study it yet).

 

For less intrusive "steal the party temporarily and do some stuff before allowing the regular end of the game to occur", the cutscenes in The BG1 NPC Project dealing with the end of Dynaheir's Romance" come to mind.

 

I agree with both Kulyok and Miloch. The least destructive way is simply to add the materials to existing NPCs already present, or bring in a temporary NPC, do a cutscene in place, and then you don't have to worry about massive work and editing. And as far as REPLACE_BCS_BLOCK et al, there are many, many old threads at PPG in various forums that warn of the fragility of R_B_B - you will only have success if the blocks exactly match, so if a mod changes something, your changes will not get made. Decompiling and using R_T is great, as is simply extending the script (which is much more easily approached if you follow Kulyok's advice...)

Link to comment

Ahh.. But my intension IS to add new creatures, new quests, new items ect. and to allow players the possibility to finish other quests in the rest of the game before going to ToB..

 

First of: Is it easier to make the door to the temple go to ar2803 before killing Jon, and ar2812 after OR to move all the actors from ar2812 to ar2803 and have cut59a send the players there?

 

I've had a look through the script for area 2800:

 

IF
OnCreation()
Global("TurnOffTrigger","AR2800",0)
THEN
RESPONSE #100
	FadeToColor([1.0],0)
	StartMovie("FLYTHR03")
	SmallWait(1)
	IncrementChapter("")
	TextScreen("SCRTXT08")
	SmallWait(1)
	FadeFromColor([20.0],0)
	StartCutSceneMode()
	SetGlobal("TurnOffTrigger","AR2800",1)
	TriggerActivation("Tran2805",FALSE)
	Explore()
	AddJournalEntry(23513,INFO)
	Wait(1)
	ActionOverride("suelhan",StartDialogueNoSet(Player1))
END

IF
GlobalGT("ElvenSpirits","GLOBAL",0)
Global("ChangeAmbientSound","AR2800",0)
THEN
RESPONSE #100
	SetGlobal("ChangeAmbientSound","AR2800",1)
	SoundActivate("Mainambiencedaynofight",TRUE)
	SoundActivate("Mainambiencenightnofight",TRUE)
	SoundActivate("Mainambiencedayfight",FALSE)
	SoundActivate("Mainambiencenightfight",FALSE)
END

IF
Global("StopWaterfall","GLOBAL",3)
THEN
RESPONSE #100
	SetGlobal("StopWaterfall","GLOBAL",4)
	TriggerActivation("Tran2804",FALSE)
	TriggerActivation("Tran2805",TRUE)
END

IF
Global("ElvenSpirits","GLOBAL",3)
Global("DeactivateScenes","AR2800",0)
THEN
RESPONSE #100
	SetInterrupt(FALSE)
	SetGlobal("DeactivateScenes","AR2800",1)
	TriggerActivation("Scene1a",FALSE)
	TriggerActivation("Scene1b",FALSE)
	TriggerActivation("Scene1c",FALSE)
	TriggerActivation("Scene2a",FALSE)
	TriggerActivation("Scene2b",FALSE)
	TriggerActivation("Scene2c",FALSE)
	TriggerActivation("Scene3a",FALSE)
	TriggerActivation("Scene3b",FALSE)
	TriggerActivation("Scene3c",FALSE)
	TriggerActivation("Scene3d",FALSE)
	TriggerActivation("Scene4a",FALSE)
	TriggerActivation("Scene4b",FALSE)
	CreateCreature("M05SPIR1",[2139.1768],6) // Elven Spirit
	CreateCreature("M05SPIR1",[2878.2797],6) // Elven Spirit
	CreateCreature("GOLSAN01",[2227.1526],0) // Sand Golem
	CreateCreature("ELAIRL01",[2747.2691],0) // Lesser Air Elemental
	SetInterrupt(TRUE)
END

IF
Global("ElvenAvatar","GLOBAL",1)
Global("DeactivateRest","AR2800",0)
THEN
RESPONSE #100
	SetGlobal("DeactivateRest","AR2800",1)
	SetRestEncounterProbabilityDay(0)
	SetRestEncounterProbabilityNight(0)
END

IF
Global("ElvenAvatar","GLOBAL",1)
!Dead("suelf10") // Reirra
Global("SpawnSuelf10","AR2800",0)
THEN
RESPONSE #100
	SetGlobal("SpawnSuelf10","AR2800",1)
	ActionOverride("suelf10",DestroySelf())
	Wait(2)
	CreateCreatureDoor("suelf10",[4071.2061],8) // Reirra
END

 

If I wanted to add a global variable, making sure the huge block with ElvenSpirits and TriggerActivation, is not run after killing Irenicus, how would I do that?

 

It's not all the monsters that's created using the script as I can see. And as I'm not sure how to make changes in an are-file, I don't know how to make sure they're gone when Irenicus is killed..

Link to comment

That block will run before making it to hell; it doesn't need to be disabled.

 

Pick a variable that you're going to use to check whether the PC has killed Irenicus yet (probably just looking at helljon would suffice) and EXTEND_BOTTOM the area script with ActionOverride(*,DestroySelf()) for all the actors you want to sweep away.

Link to comment

Archived

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

×
×
  • Create New...