Jump to content

Recommended Posts

Taking ideas for spawn points - as befits a Companion Mod, it could be malleable (chosen on install, it is just a simple area script extension so it can go anywhere). So far, the obvious ones are Promenade (Den of 7 Veils, hitting on Sheri and drinking with Laran, but the place is pretty crowded) or Trademeet (hitting on Tashia, but *that* is a little crowded too). Looking for good pickup/dropoff points from different player's perspectives. I have added Brynlaw to the list, if he were stranded there. Me, I'd pick him up on the Promenade or any of the immediate city districts, but I want him around for the whole game. Most folks seem to do the pickup and dropoff routine nowadays. And since he is a multi-romance-neutral dude with a player starting/stopping LT/Flirt setup, he is pretty amenable to that king of utility usage. Part of his charm, you know.

 

respondents:

- Delosar's in the Bridge District, avoiding Captain What's-his-name?

- Laran's in the Mithrest. It's Jolun that's in the Den of the Seven Vales. But Nathaniel goes to the Mithrest if you don't pick him up right away and the general go-to-point for the G3 Anniversary Mod is there. The inns are all getting pretty crowded, really. Or maybe he could be in the docks, looking at the ships, or in the Slums, getting thrown out of the Copper Coronet.

- Imnesvale?

- Crooked crane, or however that is spelt, in the Gate part of Athkatla is fairly empty if my memory of it is correct, which it probably isn't since it's so late here. The adventurer's mart could be another option - could be annoying Ribald for something to do? Technically I guess having a lot of NPC's in the same inn is good is some ways - means the PC has a choice of who to choose to join the party, but sooner or later those inns are bound to run out of ale, so maybe the less crowded the better

- The Crooked Crane presents spawining challenges because of script assignment complications, but there's no reason Aran couldn't be spawned in the Gates and use his own override script to move him to the Crooked Crane once he's spawned. That's what I had to do with the various NPCs associated with Gavin. Because the Beregost area script is so packed, I didn't want to add more stuff to it, so I spawned everybody with the Temple area script and then moved them.

- request for coordinates fulfilled:

~Meet Aran at CreateCreature("c-aran",[2958.1259],3) // AR0300 ; just outside the Temple of Oghma, in front of the stairs

~Meet Aran at CreateCreature("c-aran",[2500.2187],3) // AR0300 ; just outside of the Sea's Bounty, nearby a sketchy-looking man and a prostitute (don't like this location quite as much, but there's a little niche by the stairs in the Sea's Bounty that I don't -think- anyone's used yet)

~Meet Aran at CreateCreature("c-aran",[4536.3123],3) // AR0300 ; if he's taking up fishing, he might as well be nearby the water, hmm?

 

Well, I started awhile ago on this, asking folks for input, and got some, so it is probably time to figure out where he really goes.

 

Synopsis

We want to tell the game where Aran is supposed to meet the party - where he "spawns" in-game. To do that, we use WeiDU to add him in, first having researched area, x.y coordinates, and extended that area's script with the instructions to do so. In addition, we want to allow players to choose where he goes, but they have to choose one area out of the pool of choices, and the instructions must be run out (can' be skipped or uninstalled without replacement, or he will never spawn for players).

 

Starting at Providing Choices In The .tp2

 

There are some cool ways of getting player input, including very customizable things like ACTION_READLN and setting up multiple components. There are some advantages to READLN we have already discussed, so let's go to a simple way of adding a player choice to an install - SUBCOMPONENT and FORCED_SUBCOMPONENT.

 

Regular WeiDU installation Choices; Simple. Effective. And They Can Roll Back.

In our regular WeiDU installation, the easiest way to let things work is to create a separate component and let players choose what they want to install, like this:

 

BEGIN ~This is the first component in my mod.~

BEGIN ~This is the second component in my mod.~

 

Simple enough, though sometimes it feels odd to do a BEGIN without an END, but don't complain to the bigg - that is way way legacy stuff that can't be changed without messing up about everything out there already coded. He didn't write it like that - it came that way from back in the day, and we need it to say how the game will play. Darn - almost made that work, but it got confusing. Basically, if we want to be able to use older mods, we need backwards compatibility, and the bigg has to stick within certain constraints, this being one of them.

 

With this example above, all we are saying is

 

"WeiDU, do this first set of instructions."

 

"WeiDU, do this second set of instructions."

 

So, a mod .tp2 might have something like

 

BEGIN ~This is the first coponent in my mod. Aran is starting in Candlekeep.~
 EXTEND_BOTTOM ~CANDLEKEEP.ARE~ ~aranw/baf/starting_area.baf~

BEGIN ~This is the second coponent in my mod. Aran is starting in East Timbuktoo~
 EXTEND_BOTTOM ~EAST_TIMBUKTOO.ARE~ ~aranw/baf/starting_area.baf~

 

This lets the player choose to install component 1, Candlekeep start, or to install component 2, African Safari start, and we have accomplished our mission.

 

Except...

 

under this configuration, the player could choose 1 AND 2. They could choose 1 OR 2.They could choose 1. They could choose 2. Or they could skip both. Worst of all from a mod author's standpoint, they could choose both, then uninstall them both, and then come complaining when Aran doesn't show up in the game...

 

so we probably do not want to do the installation choice this way.

 

HEY - why don't we use READLN? I mean, it is simple enough - the code is out there, and wee have already gone through it in another post - why would we *not* use that fancy way of creating choice for the player in this instance?

 

Two words...

 

Weidu.

 

Log.

 

When WeiDU puts out the central log of everything, it sees components that are installed. The .DEBUG created from your mod install has lots of cool information for troubleshooting, but standard practice for troubleshooting is to get the big, obvious text file in the game folder named "weidu.log" and use it to determine if things have gone right or wrong in a player's game. Those entries are *only* mod components installed, not the READLN choices, because the WeiDU.log serves a cool purpose - it helps weidu operate. Cluttering it up with inner actions of a component would mess it up, as will PRINT and other commands within your .tp2. Basically, it is an index of mod components, not a listing of every single change to your game in great detail.

 

Here is a sample entry in the weidu.log after installation:

 

// Log of Currently Installed WeiDU Mods

// The top of the file is the 'oldest' mod

// ~TP2_File~ #language_number #component_number // [subcomponent Name -> ] Component Name [ : Version]

~TYRISFLARE/SETUP-TYRISFLARE.TP2~ #0 #0 // Tyris Flare NPC: v2

 

Now, I can go with a "list every component approach, like Fixpack:

 

// Log of Currently Installed WeiDU Mods

// The top of the file is the 'oldest' mod

// ~TP2_File~ #language_number #component_number // [subcomponent Name -> ] Component Name [ : Version]

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #0 // BG2 Fixpack - Core Fixes: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #1000 // BG2 Fixpack - Game Text Update -> GTU Light (by Wisp): v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #100 // Party Gets XP for Sending Keldorn to Reconcile With Maria: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #101 // Improved Spell Animations: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #102 // Cromwell's Forging Actually Takes a Day: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #106 // Giants Receive Penalties When Attacking Halflings, Dwarves, and Gnomes: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #107 // Remove Dual-Classing Restriction from Archers and Stalkers: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #108 // Remove Second Attribute Bonus for Evil Path in Wrath Hell Trial: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #109 // Corrected Summoned Demon Behavior: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #110 // Additional Script Fixes: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #111 // Bard Song Fixes: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #112 // Wizard Slayers Cause Miscast Magic on Ranged Attacks: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #113 // Additional Alignment Fixes: v9.01

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #114 // Change Free Action to Protect Against Stun: v9.01

 

but we just figured out I don't want that approach, because with Fixpack we want players to be able to install and uninstall various things as they choose. With the spawining area, this is not such a good idea. Not only do we want players to choose one, we want them to be required to choose one of several choices, or have the mod pull itself out - because if you can't spawn him, it is just as bad if you have him popping up in a dozen areas, all coming up to various versions of himself like in Multiplicity, saying "Hey, you look familiar - what a handsome dude you are. You got any work?" And READLN doesn't leave a clue in the weidu.log as to which choice the player has made, so 3/4 of the way through a Mega-BGT-BP, when a player is completely confsed, and wants to go pick up Aran, We can't go "gee... do you remember where you told him to spawn, three months ago, while you were spending hours staring at your computer screen willing the installation to move faster?"

 

So we want

 

1. a way that weidu will ask the player to choose from a panel of choices

2. allow weidu the ability to report which choice was made

3. require/demand/insist/not proceed until the player chooses one of the panel of choices.

 

Enter the world of

 

SUBCOMPONENT | FORCED_SUBCOMPONENT

 

(tadaa!)

 

Let's go back to Grim Squeaker's Tyris Flare mod for a second. I only posted a portion of the Weidu.log. The full entry for Tyris looks like this:

 

// Log of Currently Installed WeiDU Mods

// The top of the file is the 'oldest' mod

// ~TP2_File~ #language_number #component_number // [subcomponent Name -> ] Component Name [ : Version]

~TYRISFLARE/SETUP-TYRISFLARE.TP2~ #0 #0 // Tyris Flare NPC: v2

~TYRISFLARE/SETUP-TYRISFLARE.TP2~ #0 #104 // Alternate Tyris Portraits -> Alternate Portrait 4: v2

 

Now, that is pretty cool. Grim Squeaker has a second component, that allows players to choose an alternate portrait. Let's look at how it got coded:

 

BEGIN ~Alternate Portrait 1~
 DESIGNATED 101
 REQUIRE_COMPONENT ~Setup-TyrisFlare.tp2~ ~0~ ~NPC is not installed, therefore skipping alternate portraits...~
 SUBCOMPONENT ~Alternate Tyris Portraits~
 COPY ~TyrisFlare/Portraits/Alternate1/G#TYRISL.bmp~ ~override/G#TYRISL.bmp~
   ~TyrisFlare/Portraits/Alternate1/G#TYRISM.bmp~ ~override/G#TYRISM.bmp~
   ~TyrisFlare/Portraits/Alternate1/G#TYRISS.bmp~ ~override/G#TYRISS.bmp~

BEGIN ~Alternate Portrait 2~
 SUBCOMPONENT ~Alternate Tyris Portraits~
 COPY ~TyrisFlare/Portraits/Alternate2/G#TYRISL.bmp~ ~override/G#TYRISL.bmp~
   ~TyrisFlare/Portraits/Alternate2/G#TYRISM.bmp~ ~override/G#TYRISM.bmp~
   ~TyrisFlare/Portraits/Alternate2/G#TYRISS.bmp~ ~override/G#TYRISS.bmp~

BEGIN ~Alternate Portrait 3~
 SUBCOMPONENT ~Alternate Tyris Portraits~
 COPY ~TyrisFlare/Portraits/Alternate3/G#TYRISL.bmp~ ~override/G#TYRISL.bmp~
   ~TyrisFlare/Portraits/Alternate3/G#TYRISM.bmp~ ~override/G#TYRISM.bmp~
   ~TyrisFlare/Portraits/Alternate3/G#TYRISS.bmp~ ~override/G#TYRISS.bmp~

BEGIN ~Alternate Portrait 4~
 SUBCOMPONENT ~Alternate Tyris Portraits~
 COPY ~TyrisFlare/Portraits/Alternate4/G#TYRISL.bmp~ ~override/G#TYRISL.bmp~
   ~TyrisFlare/Portraits/Alternate4/G#TYRISM.bmp~ ~override/G#TYRISM.bmp~
   ~TyrisFlare/Portraits/Alternate4/G#TYRISS.bmp~ ~override/G#TYRISS.bmp~

 

The initial DESIGNATED 101 is a way of telling weidu that the modder wants this component to be labled 101, even if it is component 2 of 2. Ordinarily, Weidu decides component numbers on the fly, based on what it sees - a component can get swapped around in install order over the course of development, etc. This DESIGNATED locks the component number. You might want to do this if you are making sure things remain available to check for over time by other modders, so that if they put something like line 2, REQUIRE_COMPONENT, or FORBID_COMPONNT, or anything else in that series of choices, the numbering is right.

 

Here, an example. Pretend I made a mod that Grim Squeaker had contributed to that already had Tyris' portarit choice in it. Because he put DESIGNATED 101, I can use that number to avoid duplication -

 

 FORBID_COMPONENT ~Setup-TyrisFlare.tp2~ ~101~ ~Tyris Flare's Alternate Portraits are already installed, therefore skipping alternate Tyris portraits...~

 

and he he could add

 

 [FORBID_COMPONENT ~setup-cmorgans_massive_portrait_pack.tp2~ ~27~ ~Sorry, you already chose Tyris' portrait, therefore skipping alternate portraits...~

 

Of course, if I did not use DESIGNATED 27, and I added another component, it would become component 28, and then Grim is messed up bad - so usig DESIGNATED can help with things like this.

 

 

Why not just do it Old Skool, and go with

 

BEGIN ~Alternate Portrait 1~

BEGIN ~Alternate Portrait 2~

BEGIN ~Alternate Portrait 3~

BEGIN ~Alternate Portrait 4~

 

Well... becuse players dont want to be bothered with picking and choosing components for every mod. Some folks would just install everything. Under that setup, Tyris would have her original portrait. Then Alternate 1 would be added. Then Alternate 2, then 3, then 4, each overwriting the last. And the end result would be that most installs of Tyris Flare would use Alternate Portrait v4, and there would be a bunch of extra lines in the weidu.log, and it would be silly. So, putting these into

 

So, next line is already covered. He has 4 components,

 

BEGIN ~Alternate Portrait 1~

BEGIN ~Alternate Portrait 2~

BEGIN ~Alternate Portrait 3~

BEGIN ~Alternate Portrait 4~

 

 

Why not just do it Old Skool, and go with this as is?

 

Well... because players don't want to be bothered with picking and choosing components for every mod. Or reading README's and figuring out that they are installing something that does exactly the same thing over the top of what they just chose. Some folks would just install everything. Under that setup, Tyris would have her original portrait. Then Alternate 1 would be added. Then Alternate 2, then 3, then 4, each overwriting the last. And the end result would be that most installs of Tyris Flare would use Alternate Portrait v4, and there would be a bunch of extra lines in the weidu.log, and it would be silly. So, putting these into a new format wuill avoid this.

 

As a side note, he has made them all dependent on Tyris being installed, which is generally a good thing for mod-specific content changes. You don't want players adding stuff that has no use in-game, or worse - if this component had tried to edit Tyris' .cre, the mod component would fail and stop installation with an error message about missing the .cre. So, a line that requires that the central component of Tyris Flare be installed, looking for component ~0~. Adding this line back into our deconstruction -

 

BEGIN ~Alternate Portrait 1~
 DESIGNATED 101
 REQUIRE_COMPONENT ~Setup-TyrisFlare.tp2~ ~0~ ~NPC is not installed, therefore skipping alternate portraits...~

BEGIN ~Alternate Portrait 2~


BEGIN ~Alternate Portrait 3~


BEGIN ~Alternate Portrait 4~

 

Now things get fancy. He makes each of these components into be a subset of another component, so that what we originally had as four separate install choices become one of a small group of choices:

 

BEGIN ~Alternate Portrait 1~
 DESIGNATED 101
 REQUIRE_COMPONENT ~Setup-TyrisFlare.tp2~ ~0~ ~NPC is not installed, therefore skipping alternate portraits...~
 SUBCOMPONENT ~Alternate Tyris Portraits~

BEGIN ~Alternate Portrait 2~
 SUBCOMPONENT ~Alternate Tyris Portraits~

BEGIN ~Alternate Portrait 3~
 SUBCOMPONENT ~Alternate Tyris Portraits~


BEGIN ~Alternate Portrait 4~
 SUBCOMPONENT ~Alternate Tyris Portraits~

 

 

So far, beautiful. I can adapt the same idea, and go crazy! Except... why SUBCOMPONENT? What happened to the FORCED_ ?

 

Well, Grim Squeaker sent Tyris Flare out into the world with an existing portrait. No player *has* to install *any* of the alternate portrait choices. So under this configuration, the player can choose to skip the whole thing, or choose one of the portraits. I can't do that for Aran's spawning - I only want one of him, and I insist that the player choose one.

 

So, simple enough edit - with Tyris, all I would have to do to make a player not be able to complete the install without the choice being made, is change that SUBCOMPONENT into FORCED_SUBCOMPONENT. Logical, huh.

Edited by cmorgan

Share this post


Link to post

So I am going to end up with something very similar to the above code:

 

setup-aranw.tp2

BEGIN ~The City Gates, AR0020~
 REQUIRE_COMPONENT ~setup-aranw.tp2~ ~0~ ~Aran Whitehand is not installed, therefore skipping his spawn point...~
 FORCED_SUBCOMPONENT ~First Meet Aran At...~

BEGIN ~The Bridge District, AR0500~
 FORCED_SUBCOMPONENT ~First Meet Aran At...~

BEGIN ~Waukeen's Promenade, AR0700~
 FORCED_SUBCOMPONENT ~First Meet Aran At...~


BEGIN ~Trademeet's Inn, AR2010~
 FORCED_SUBCOMPONENT ~First Meet Aran At...~

 

Now to the next step. We have to actually fill in something that puts him in-ame to put under all those choices, and possibly more. There are some different ways of doing this. Some folks patch an area and add the .cre directly to the .gam file, some folks create the .cre in an uncrowded area and then move them within the game into the area they want, some folks even create new areas and build the .cre into the file, but almost all modders choose to do the simplest thing of all - add the creation to an area script.

 

Here is the simplest way - EXTEND_BOTTOM on the area script using a .baf like this:

 

Add_To_AR0020.baf

IF
 !Global("c-aranspawned","AR0020",1)
THEN
 RESPONSE #1
SetGlobal("c-aranspawned","AR1100",1)
CreateCreature("c-aran",[1234.4321],"AR1100")
END

 

A fancier example, with some probably better/more robust coding, but

 

SKIP THIS EXAMPLE IF YOU ARE NOT ADVANCED. IT MIGHT BE CONFUSING!

 

If you are relatively easily following this, stuff, though, check this out as a way cool idea.

 

Don't keep following Tyris Flare as an example of how to get simple NPC creation done, because Grim does some way cool things - his actually does not start with a standard "spawn the creature file" - he creates a cutscene, develops an interaction, and then at the end of the interaction he uses AR1105 to "respawn" Tyris.

 

First, a .baf to create an interaction - E:\TEST1\TyrisFlare\Scripts\G#TFSPWN.baf

IF
 See(Player1)
 TimeOfDay(DAY)
 XPLT(Player1,400001)
THEN
 RESPONSE #1   
SetGlobal("G#TF.TyrisSpawn","GLOBAL",1)
StartCutSceneMode()
MoveViewPoint([2861.1175],VERY_FAST)
Wait(1)
PlaySound("EFF_108")
ScreenShake([2818.1113],5)
CreateVisualEffect("SPBASERD",[2818.1113])
CreateVisualEffect("SPBASERD",[2914.1048])
CreateVisualEffect("SPBASERD",[2861.1175])
SmallWait(3)
CreateCreature("G#TYRS8",[2818.1113],9)
CreateCreature("G#TFSKL1",[2914.1048],1)
CreateCreature("G#TFSKL2",[2861.1175],7)
StartCutScene("G#TFCUT1")
DestroySelf()
END

IF
 See(Player1)
 TimeOfDay(DAY)
 XPGT(Player1,400000)
 XPLT(Player1,800001)
THEN
 RESPONSE #1   
SetGlobal("G#TF.TyrisSpawn","GLOBAL",2)
StartCutSceneMode()
MoveViewPoint([2861.1175],VERY_FAST)
Wait(1)
PlaySound("EFF_108")
ScreenShake([2818.1113],5)
CreateVisualEffect("SPBASERD",[2818.1113])
CreateVisualEffect("SPBASERD",[2914.1048])
CreateVisualEffect("SPBASERD",[2861.1175])
SmallWait(3)
CreateCreature("G#TYRS10",[2818.1113],9)
CreateCreature("G#TFSKL1",[2914.1048],1)
CreateCreature("G#TFSKL2",[2861.1175],7)
StartCutScene("G#TFCUT1")
DestroySelf()
END

IF
 See(Player1)
 TimeOfDay(DAY)
 XPGT(Player1,800000)
 XPLT(Player1,1200001)
THEN
 RESPONSE #1 
SetGlobal("G#TF.TyrisSpawn","GLOBAL",3)
StartCutSceneMode()
MoveViewPoint([2861.1175],VERY_FAST)
Wait(1)
PlaySound("EFF_108")
ScreenShake([2818.1113],5)
CreateVisualEffect("SPBASERD",[2818.1113])
CreateVisualEffect("SPBASERD",[2914.1048])
CreateVisualEffect("SPBASERD",[2861.1175])
SmallWait(3)
CreateCreature("G#TYRS12",[2818.1113],9)
CreateCreature("G#TFSKL1",[2914.1048],1)
CreateCreature("G#TFSKL2",[2861.1175],7)
StartCutScene("G#TFCUT1")
DestroySelf()
END

IF
 See(Player1)
 TimeOfDay(DAY)
 XPGT(Player1,1200000)
THEN
 RESPONSE #1   
SetGlobal("G#TF.TyrisSpawn","GLOBAL",4)
StartCutSceneMode()
MoveViewPoint([2861.1175],VERY_FAST)
Wait(1)
PlaySound("EFF_108")
ScreenShake([2818.1113],5)
CreateVisualEffect("SPBASERD",[2818.1113])
CreateVisualEffect("SPBASERD",[2914.1048])
CreateVisualEffect("SPBASERD",[2861.1175])
SmallWait(3)
CreateCreature("G#TYRS13",[2818.1113],9)
CreateCreature("G#TFSKL1",[2914.1048],1)
CreateCreature("G#TFSKL2",[2861.1175],7)
StartCutScene("G#TFCUT1")
DestroySelf()
END

 

Then an invisible .cre to trigger it

 

E:\TEST1\TyrisFlare\Setup-TyrisFlare.tp2

  COPY_EXISTING ~invisabo.cre~ ~override/G#TFSPWN.cre~
WRITE_ASCII SCRIPT_OVERRIDE ~G#TFSPWN~

 

then add the invisible .cre the way most folks just add the original NPC:

 

E:\TEST1\TyrisFlare\Scripts\AreaScripts\AR1100.baf

IF
 !Global("G#TF.CreatedTyrisSpawn","AR1100",1)
THEN
 RESPONSE #1
ClearAllActions()
SetGlobal("G#TF.CreatedTyrisSpawn","AR1100",1)
CreateCreature("G#TFSPWN",[2818.1113],"AR1100")
END

Rather than just adding his NPC and using her script to level her up, and as a backup to his original spawn, he frontloads the work using the area script instead of having references to npclevel.2da or even putting the check in her regular script...

 

side notes: he uses Continue() because he has researched the script or simply been very cautious - he is using EXTEND_TOP to an area script. Scripting without the Continue() would break any OnCreation() calls further down the script, busting up other peoples mods and even the vanilla game in some areas. Other folks choose to use EXTEND_BOTTOM. That is fine too, but only if someone hasn't done stupid things like putting an always-true block, halting script evaluation...

 

but to continue,

 

H:\TyrisFlare\Scripts\AreaScripts\AR1105.baf

IF
 Exists("G#Tyris")
 !Dead("G#Tyris")
 !Global("G#TF.TyrisSpawn","GLOBAL",1)
 !Global("G#TF.TyrisJoined","GLOBAL",1)
 XPLT(Player1,400001)
THEN
 RESPONSE #1
ActionOverride("G#Tyris",DestroySelf())
CreateCreature("G#TYRS8",[1063.262],4)
SetGlobal("G#TF.TyrisSpawn","GLOBAL",1)
Continue()
END

IF
 Exists("G#Tyris")
 !Dead("G#Tyris")
 !Global("G#TF.TyrisSpawn","GLOBAL",2)
 !Global("G#TF.TyrisJoined","GLOBAL",1)
 XPGT(Player1,400000)
 XPLT(Player1,800001)
THEN
 RESPONSE #1
ActionOverride("G#Tyris",DestroySelf())
CreateCreature("G#TYRS10",[1063.262],4)
SetGlobal("G#TF.TyrisSpawn","GLOBAL",2)
Continue()
END

IF
 Exists("G#Tyris")
 !Dead("G#Tyris")
 !Global("G#TF.TyrisSpawn","GLOBAL",3)
 !Global("G#TF.TyrisJoined","GLOBAL",1)
 XPGT(Player1,800000)
 XPLT(Player1,1200001)
THEN
 RESPONSE #1
ActionOverride("G#Tyris",DestroySelf())
CreateCreature("G#TYRS12",[1063.262],4)
SetGlobal("G#TF.TyrisSpawn","GLOBAL",3)
Continue()
END

IF
 Exists("G#Tyris")
 !Dead("G#Tyris")
 !Global("G#TF.TyrisSpawn","GLOBAL",4)
 !Global("G#TF.TyrisJoined","GLOBAL",1)
 XPGT(Player1,1200000)
THEN
 RESPONSE #1
ActionOverride("G#Tyris",DestroySelf())
CreateCreature("G#TYRS13",[1063.262],4)
SetGlobal("G#TF.TyrisSpawn","GLOBAL",4)
Continue()
END

 

START FOLLOWING AGAIN HERE FOR ARAN.

 

Well, fine, we have some ideas. There is no need to have an introduction to Aran any more splashy than having him standing around, trying to look for work. He doesn't need anything more than Anomen has; perhaps even less, but it might be fun to have him come up to the NPC. We know that the original pre-joining file assumes that he will be spawned in an inn or tavern, but we also know that those areas might be crowded. We also know that it is simple enough to change/vary his dialog using AreaCheck("AR2345") or something, or even tailoring a second or third pre-joined file based on where he gets put - so let's work on the premise that the dialog is readily tailored to wherever he shows up. Well, that was a nice exercise in procrastination, because every modder has his "I hate this" thing - and mine, well... let's just say messing about with CLUA and cheats to find a nice x.y coordinates feels to me like work. And I hate work. It is a four letter word, after all.

 

So i have to stop procrastinating, and do it. Now comes the very-not-fun part - finding a really, really specific place to put him. Down to the x.y coordinates and facing. Not my favorite activity, and certainly an immense PITA if a modder cares about being reasonable to Mega players or just wants to avoid messing with people by planting their NPC right next to an existing one - or on top of him/her. I am going to cut down on the CLUA'ing and such by choosing a few areas and then searching other mod's files for where they add things in the same area, making it less likely that I will inadvertently dump him on top of someone else's work in a mega install.

 

Some initial choices/ideas. We will whittle this down, because a number of these areas will end up being a bad choice for any number of reasons. But, here are a few:

 

Inns:

~First Meet Aran at the Sea's Bounty, AR0313~

~First Meet Aran at the Copper Coronet, AR0406~ // nope.

~First Meet Aran at the Five Flagons, AR0509~ // nope.

~First Meet Aran at the Five Flagons (Stronghold), AR0522~ // nope.

~First Meet Aran at the Mithrest Inn, AR0704~

~First Meet Aran at The Umar Inn, AR1105~

~First Meet Aran at The Vulgar Monkey, AR1602~

~First Meet Aran at Vyatri's Pub, Trademeet, AR2010~

~First Meet Aran at The Den of the Seven Vales 1st Floor, AR0709~

~First Meet Aran at Calbor's Inn at Bridge District 1st Floor, AR0513~

~First Meet Aran at The Crooked Crane 1st Floor, AR0021~ // nope.

~First Meet Aran at Brynnlaw's Inn, AR1602~

 

Other Possibilities:

~First Meet Aran at the City Gates, AR002s~

~First Meet Aran in The Bridge District, AR0500~

~First Meet Aran on Waukeen's Promenade, AR0700~

~First Meet Aran in The Adventurer's Mart, AR0702~

 

~First Meet Aran at the Imnesvale Inn, AR1105~

~First Meet Aran at Windspear Hills, AR1200~

~First Meet Aran in Trademeet, AR2000~

 

and some Forum suggestions with coordinates already discovered:

 

~First Meet Aran at The Docks, AR0300~

 

~Meet Aran at CreateCreature("c-aran",[2958.1259],3) // AR0300 ; just outside the Temple of Oghma, in front of the stairs

~Meet Aran at CreateCreature("c-aran",[2500.2187],3) // AR0300 ; just outside of the Sea's Bounty, nearby a sketchy-looking man and a prostitute (don't like this location quite as much, but there's a little niche by the stairs in the Sea's Bounty that I don't -think- anyone's used yet)

~Meet Aran at CreateCreature("c-aran",[4536.3123],3) // AR0300 ; if he's taking up fishing, he might as well be nearby the water, hmm?

 

Now, some searching through files for places to avoid. We can cut some of these immediately.

 

Crooked Crane has some massive overuse, and some scripting conflicts from back-in-the-day which I think are now resolved, but it just is too much to deal with. Likewise, the Copper Coronet. We can also wipe out the Five Flagons - Keto is just his type, and either he or she would have been thrown out by then - plus, it changes into a stronghold for bards, and messing about in areas that swap is just begging for trouble on bended knee.

 

The Seven Vales looks interesting, but has some things to check for - a ton of references found in any number of mods, a few posted here -

 

checking .tp2s, a few to research -

 

Search "AR0709" (28 hits in 12 files)

D:\ie_checkfiles\BG2SoA_v3\Setup-BG2SoA.tp2 (4 hits)

Line 19: // makes exit to ar0709 party required

Line 21: //COPY_EXISTING ~AR0709.ARE~ ~override~

Line 55: // PATCH_IF ("AR0709" STRING_COMPARE_CASE "%area%" = 0) BEGIN

Line 58: // PATCH_IF ("AR0709" STRING_COMPARE_CASE "%area%" = 0) BEGIN

D:\ie_checkfiles\BG2_Fixpack-v8\bg2fixpack\setup-bg2fixpack.tp2 (1 hits)

Line 26035: ~ar0709.are~ ~override~

D:\ie_checkfiles\BonsBrucev2\Setup-BonsBrucev2.tp2 (1 hits)

Line 396: EXTEND_TOP ~ar0709.bcs~ ~BonsBruce/scripts/appendar709.baf~

D:\ie_checkfiles\CtBv1.12\Setup-CtB.tp2 (1 hits)

Line 931: EXTEND_TOP ~AR0709.bcs~ ~CtB/scripts/append/aptp0709.BAF~

D:\ie_checkfiles\G3Anniversary-v5\G3Anniversary\Setup-G3Anniversary.tp2 (2 hits)

Line 117: EXTEND_BOTTOM ~ar0709.bcs~ ~G3Anniversary/baf/ar0709.baf~ // spawns Grim & Fitz

Line 117: EXTEND_BOTTOM ~ar0709.bcs~ ~G3Anniversary/baf/ar0709.baf~ // spawns Grim & Fitz

D:\ie_checkfiles\ImprovedAnvil_v5\Setup-ImprovedAnvil.tp2 (2 hits)

Line 8097: COPY_EXISTING ~ar0709.are~ ~override/ar0709.are~

Line 8097: COPY_EXISTING ~ar0709.are~ ~override/ar0709.are~

D:\ie_checkfiles\JZ_v2\BGII - SoA\jz\Setup-JZ.tp2 (2 hits)

Line 52: // Patch AR0709 - May God help me

Line 53: COPY_EXISTING ~ar0709.are~ ~override~

D:\ie_checkfiles\MarketPrices\BWQuest.tp2 (1 hits)

Line 46: EXTEND_TOP ~ar0709.bcs~ ~BWQuest/scripts/BW0709.BAF~

D:\ie_checkfiles\PlanarSphereMod26c\PlanarSphereMod26c\setup-planarspheremod.tp2 (4 hits)

Line 2374: COPY_EXISTING ~AR0709.bcs~ ~Override/AR0709.bcs~

Line 2374: COPY_EXISTING ~AR0709.bcs~ ~Override/AR0709.bcs~

Line 2375: EXTEND_TOP ~AR0709.bcs~ ~PlanarSphereMod/snip/psAR0709.baf~

Line 2375: EXTEND_TOP ~AR0709.bcs~ ~PlanarSphereMod/snip/psAR0709.baf~

D:\ie_checkfiles\PSModpc\Setup-PlanarSphereMod.tp2 (4 hits)

Line 2285: COPY_EXISTING ~AR0709.bcs~ ~Override/AR0709.bcs~

Line 2285: COPY_EXISTING ~AR0709.bcs~ ~Override/AR0709.bcs~

Line 2286: EXTEND_TOP ~AR0709.bcs~ ~PlanarSphereMod/snip/psAR0709.baf~

Line 2286: EXTEND_TOP ~AR0709.bcs~ ~PlanarSphereMod/snip/psAR0709.baf~

D:\ie_checkfiles\romantic_encounters_v4\RE\Setup-RE.tp2 (4 hits)

Line 243: EXTEND_TOP ~AR0709.bcs~ ~RE/Eldoth/AR0709.baf~

Line 243: EXTEND_TOP ~AR0709.bcs~ ~RE/Eldoth/AR0709.baf~

Line 827: EXTEND_TOP ~AR0709.bcs~ ~RE/Chandra/AR0709.baf~

Line 827: EXTEND_TOP ~AR0709.bcs~ ~RE/Chandra/AR0709.baf~

D:\ie_checkfiles\Teleport_v14\Teleport\Teleport.tp2 (2 hits)

Line 169: EXTEND_TOP ~AR0709.bcs~ ~Teleport/area-baf/AR0709.baf~

Line 169: EXTEND_TOP ~AR0709.bcs~ ~Teleport/area-baf/AR0709.baf~

 

Line 5810: D:\ie_checkfiles\BonsBrucev2\BonsBruce\d\subru.d(227,1): EscapeAreaMove("AR0709",658,426,14)~ EXIT

Line 5889: D:\ie_checkfiles\ChloeMod_v12\Chloe\D\ChloeDia.d(536,19): IF ~~ THEN DO ~EscapeAreaMove("AR0709",480,445,0)~ EXIT

Line 5893: D:\ie_checkfiles\Chloev1.5\Chloe\D\ChloeDia.d(536,19): IF ~~ THEN DO ~EscapeAreaMove("AR0709",480,445,0)~ EXIT

Line 5897: D:\ie_checkfiles\Chloe_v1.3\Chloe\D\ChloeDia.d(536,19): IF ~~ THEN DO ~EscapeAreaMove("AR0709",480,445,0)~ EXIT

Line 6014: D:\ie_checkfiles\Haldamir-v05\haldamir\dialogue\b!halp.d(22,79): IF ~~ THEN DO ~SetGlobal("B!HalKicked","GLOBAL",1) ChangeAIScript("",DEFAULT) EscapeAreaMove("AR0709",995,448,2)~ EXIT

E:\BG2_NPC\RE_v4\RE\Eldoth\AR0709.baf (1 hits)

Line 6: CreateCreature("RE_Eld",[459.492],0)

E:\BG2_NPC\RE_v4\RE\Chandra\AR0709.baf (1 hits)

Line 7: CreateCreature("RE_Chand",[280.543],0)

 

and a few more, I suspect, as this was a cursory search. in fact, it missed a bunch of things, including my Sheri thing in RE, and Berelinde's Laran - though I am not sure, as sometimes I get the Mithrest and Seven Vales mixed up in my head. But we are getting pretty crowded there, too. If it is that crowded, that means probably just outside on the Promenade might be an option.

 

 

Bridge District Research: some coordinates not to use -

 

Amber -

Line 12: CreateCreature("M#Girl1",[2820.2256],4)

Line 13: CreateCreature("M#Boy1",[2768.2253],12)

 

Angelo -

Line 6: CreateCreature("ADFox",[2418.1326],0)

 

Expanded Thief Stronghold

Line 8: CreateCreature("TSPick8",[3736.438],14)

Line 9: CreateCreature("TSPick4",[3011.1163],6)

Line 10: CreateCreature("TSPick5",[2543.2418],14)

Line 11: CreateCreature("TSPick3",[358.3387],6)

Line 12: CreateCreature("TSPick1",[4839.2126],14)

 

Hubelpot -

CreateCreature("Inspect",[4257.385],7)

Improved Anvil -

Line 36: CreateCreature("S!malbar",[4529.159],0) //

Line 44: CreateCreature("S!malba2",[4468.341],5) //

Keto -

Line 6: CreateCreature("keto08",[3602.2565],5)

Line 16: CreateCreature("keto10",[3602.2565],5)

Line 25: CreateCreature("keto12",[3602.2565],5)

RE: Ilona -

Line 6: CreateCreature("RE_Bync",[2551.1409],0)

Line 7: CreateCreature("RE_Mit",[2534.1451],6)

Vildra -

CreateCreature("T#Vil",[3964.116],4)

D:\ie_checkfiles\BDash168\Bdash\D_ToB\rHAJANOS.d(5,18): IF ~~ THEN DO ~EscapeAreaMove("ar0500",4398,1060,4)

D:\ie_checkfiles\BDash168\Bdash\D_ToB\rHAJANOS.d(6,26): ActionOverride("habrega",EscapeAreaMove("ar0500",4475,1037,5))~ EXIT

D:\ie_checkfiles\BG2_Fixpack-v8\bg2fixpack\compile\soa-dlg.d(62,58): REPLACE_ACTION_TEXT ~hajanos~ ~ActionOverride("habrega",EscapeAreaMove("ar0500",4475,1037,5)~ ~ActionOverride("habrega",EscapeAreaMove("ar0500",4475,1037,5))~

D:\ie_checkfiles\BG2_Fixpack-v8\bg2fixpack\compile\soa-dlg.d(62,58): REPLACE_ACTION_TEXT ~hajanos~ ~ActionOverride("habrega",EscapeAreaMove("ar0500",4475,1037,5)~ ~ActionOverride("habrega",EscapeAreaMove("ar0500",4475,1037,5))~

D:\ie_checkfiles\cliffhistory\CliffHistory\Compile\fonick.d(94,5): EscapeAreaMove("AR0500",3223,2189,15)~ EXIT

D:\ie_checkfiles\cliffhistory\CliffHistory\Compile\history.d(287,5): EscapeAreaMove("AR0500",3223,2189,15)~ EXIT

D:\ie_checkfiles\ding0_questpack_v23\questpack\potion\potiontra.d(610,86): IF ~~ THEN DO ~AddJournalEntry(@172,QUEST) SetGlobal("PotionJob","GLOBAL",5) EscapeAreaMove("ar0500",586,3809,8)~ EXIT

D:\ie_checkfiles\stivanthehunter_v001alpha\stivan\compile\stivan_dialogues.d(174,20): + ~Very well.~ DO ~EscapeAreaMove("AR0500",4845,2049,0)~ EXIT

 

And I have to quit for tonight. Gotta think more.

 

By the way, random fun ideas that got abandoned...

 

Spawn him from a glass bottle item found on the beach. (The Genie Spawn).

 

The first time PC takes a drink at an inn, he could be spawned in that inn right next to PC based on Intoxication stat checks in the relevant area script. (The Harvey The Pookha Spawn).

 

Created from Player1's dream script, first rest in an inn (The Really Bad Blind Date Spawn).

 

Created when the player first gets a Random Encounter and wins the battle (The Impossible To Troubleshoot And Probably Fails Most Times Spawn).

 

Created as a prisoner in Chateau Irenicus (The I Cloned Yoshimo And Am Taking over The Story Spawn).

 

Created in Spellhold (The Forget To Hire Aran Because I already have My Party Spawn).

Edited by cmorgan

Share this post


Link to post

Oooo it's intruiging to see commentary my code! Glad it helped!

 

Nice explanation of DESIGNATED, but not actually the reason I chose to use it. As it stands Tyris has effectively two components, the NPC and Alternate Portraits (an over simplificiation but it'll do for this example). By default these would be components 1 and 2.

 

Let's say I wanted to add a new component, say something along the lines of "explicit content" (or if I wanted to make ToB content a seperate component). In my mind, alternate portraits should be selected at the end because they're very much an optional, last-minute kind of decision. So for version 5, say, I'd now have three components: Tyris Flare NPC, Super Sexy Explicit Content (NB: May cause man reactions), Alternate Portraits (in that order). WeiDU would automatically label these components 1, 2 and 3 respectively.

 

This could now cause absolute hell for those people updating to the new version, because WeiDU only records the numbers of the components (not what they are). The second the new version is copied in, WeiDU thinks you currently have installed Tyris Flare NPC (component 1) and the Boner Content Extraordinaire (new component 2), whereas actually you installed the OLD component 2, which was an alternate portrait.

 

Therefore I designated the alternate portraits to start at component 101. That way if I add any new components between Tyris Flare NPC and Alternate Portrait 1, WeiDU can happily number them automatically without shafting anything.

Share this post


Link to post
The first time PC takes a drink at an inn, he could be spawned in that inn right next to PC based on Intoxication stat checks in the relevant area script. (The Harvey The Pookha Spawn).

I love this. To itty bitty pieces. It's just so good. No worries about conflicting with other mods, no worries about gathering coordinates, just one simple block in baldur.bcs, and it's done. All the player has to do is walk into a bar and get a couple drinks and there he is. Perfect!

Share this post


Link to post
Oooo it's intruiging to see commentary my code! Glad it helped!

 

Nice explanation of DESIGNATED, but not actually the reason I chose to use it. As it stands Tyris has effectively two components, the NPC and Alternate Portraits (an over simplificiation but it'll do for this example). By default these would be components 1 and 2.

 

Let's say I wanted to add a new component, say something along the lines of "explicit content" (or if I wanted to make ToB content a seperate component). In my mind, alternate portraits should be selected at the end because they're very much an optional, last-minute kind of decision. So for version 5, say, I'd now have three components: Tyris Flare NPC, Super Sexy Explicit Content (NB: May cause man reactions), Alternate Portraits (in that order). WeiDU would automatically label these components 1, 2 and 3 respectively.

 

This could now cause absolute hell for those people updating to the new version, because WeiDU only records the numbers of the components (not what they are). The second the new version is copied in, WeiDU thinks you currently have installed Tyris Flare NPC (component 1) and the Boner Content Extraordinaire (new component 2), whereas actually you installed the OLD component 2, which was an alternate portrait.

 

Therefore I designated the alternate portraits to start at component 101. That way if I add any new components between Tyris Flare NPC and Alternate Portrait 1, WeiDU can happily number them automatically without shafting anything.

 

Quoted for emphasis - this is why things like added Player-Initiated Dialogs should be DESIGNATED, to preserve a last-in-install-order float of component number when folks add on things to their mod, and why I think we might see more folks exploring use of DESIGNATED to preserve/lock in materials on install/uninstalls. This is way-important for batch installers like the BWP, but frankly, it is important for modders just supporting standard installs, too, if they are ever thinking of expanding components later. The pain of bg1npc backwards-compatibility on this point was not pretty.

Share this post


Link to post
Oooo it's intruiging to see commentary my code! Glad it helped!

 

Nice explanation of DESIGNATED, but not actually the reason I chose to use it. As it stands Tyris has effectively two components, the NPC and Alternate Portraits (an over simplificiation but it'll do for this example). By default these would be components 1 and 2.

 

Let's say I wanted to add a new component, say something along the lines of "explicit content" (or if I wanted to make ToB content a seperate component). In my mind, alternate portraits should be selected at the end because they're very much an optional, last-minute kind of decision. So for version 5, say, I'd now have three components: Tyris Flare NPC, Super Sexy Explicit Content (NB: May cause man reactions), Alternate Portraits (in that order). WeiDU would automatically label these components 1, 2 and 3 respectively.

 

This could now cause absolute hell for those people updating to the new version, because WeiDU only records the numbers of the components (not what they are). The second the new version is copied in, WeiDU thinks you currently have installed Tyris Flare NPC (component 1) and the Boner Content Extraordinaire (new component 2), whereas actually you installed the OLD component 2, which was an alternate portrait.

 

Therefore I designated the alternate portraits to start at component 101. That way if I add any new components between Tyris Flare NPC and Alternate Portrait 1, WeiDU can happily number them automatically without shafting anything.

 

Quoted for emphasis - this is why things like added Player-Initiated Dialogs should be DESIGNATED, to preserve a last-in-install-order float of component number when folks add on things to their mod, and why I think we might see more folks exploring use of DESIGNATED to preserve/lock in materials on install/uninstalls. This is way-important for batch installers like the BWP, but frankly, it is important for modders just supporting standard installs, too, if they are ever thinking of expanding components later. The pain of bg1npc backwards-compatibility on this point was not pretty.

 

The tp2 for Divine Remix is still the ultimate example. DESIGNATEDs everywhere, so we could insert new components all over the place.

Share this post


Link to post
The first time PC takes a drink at an inn, he could be spawned in that inn right next to PC based on Intoxication stat checks in the relevant area script. (The Harvey The Pookha Spawn).

I love this. To itty bitty pieces. It's just so good. No worries about conflicting with other mods, no worries about gathering coordinates, just one simple block in baldur.bcs, and it's done. All the player has to do is walk into a bar and get a couple drinks and there he is. Perfect!

 

 

really? I am so blasted scared of adding things to baldur.bcs at all - but perhaps I could do that with the area scripts, or just have some serious maoddarz-folks check and recheck my work. Or the area scripts.

 

Hey, you are right - this does make things more fun for me, too. But some thought-discussion things -

 

-would this mess with people trying to get an NPC drunk? Perhaps I need to be more creative and look at Gavin's and Tyris' spawning scripts, and make sure it is a cutscene.

 

-Players are used to seeing their NPC and bypassing them. But... hey. I could still have him spawn, then leverage the "wait at an inn" code to send him there, I guess. Something like "hey, if you ever need someone, I be your man. I needs be leavin' here now, but you look a right good prospect. Where would be a good place to check back wi' you to see if you wanted to hire me on?" with PC responses like "wait here" or "what about outside the 5 flagons" or whatever.

 

Hmmmm.... perhaps I was too hasty in dropping this particular idea. It would even cut down on the need to have player choice.

 

-what about non-drinking PCs? Perhaps I could have a Rumor added to bartenders that sets a variable and then area or baldur spawns at [-1,1] . Or a note to be given. Hmmmm.

Share this post


Link to post

It's great that you're concerned about keeping the clutter in baldur.bcs down, but you don't have to be paranoid about it. But then again, most of the inns and taverns have their own area scripts, so you'll probably be alright if you add it to all of them instead.

 

If the PC's aversion to alcohol is too great to have a drink, she probably isn't going to find Aran all that entertaining, anyway, unless she wants to turn him away from his evil ways, of course. Somehow, I don't see Aran going for that.

Share this post


Link to post

Refinements added about 10k lines to baldur.bcs in 2004 without noticeable performance issues (and it might add over 50k lines in a mega mod). The only performance issue is with *HasItem*() checks.

Share this post


Link to post

the bigg, that makes me feel better about it - as long as I keep Continue() in the script, adding a single block then would not have any real repercussions. I have followed the discussions about OnCreation() and such, and I can be sure that if I mess up with a trigger that will block evaluation any number of modders will remind me before it goes out there; I guess I just have always had a "don't ever ever mess with this unless you are one of the big boyz and girlz" attitude. I'll go poke about and see what I can come up with.

Share this post


Link to post
-Players are used to seeing their NPC and bypassing them. But... hey. I could still have him spawn, then leverage the "wait at an inn" code to send him there, I guess. Something like "hey, if you ever need someone, I be your man. I needs be leavin' here now, but you look a right good prospect. Where would be a good place to check back wi' you to see if you wanted to hire me on?" with PC responses like "wait here" or "what about outside the 5 flagons" or whatever.

That's me in a nutshell. I really don't like automatic approaches where I feel I'm rejecting the npc just because I'm not ready to pick them up yet. It's like buying a horse. You want to give them a good look over, prepare the stable/feed etc., check the fences and make sure you have all the supplies you need and then introduce them to the party/herd slowly. Okay, probably not the best analogy as I imagine if my pc checks Aran out and lightly slaps his haunches he might get entirely the wrong idea.

 

I like the idea of the drinking at the Inn spawn, as long as Aran isn't grumpy like Haer'Dalis can get if you choose to not put him in the party immediately and meet up with him later.

Share this post


Link to post
... Okay, probably not the best analogy as I imagine if my pc checks Aran out and lightly slaps his haunches he might get entirely the wrong idea.
This is Aran we're talking about. He probably wouldn't mind one bit if you checked out his teeth and he might even be disappointed if you *didn't* slap his haunches.

 

I like the idea of the drinking at the Inn spawn, as long as Aran isn't grumpy like Haer'Dalis can get if you choose to not put him in the party immediately and meet up with him later.

I like the idea of him just strolling up to the PC and starting up a conversation, but I'd kind of expect to be able to tell him to go find himself a table and I'll stop by once I've had a chance to think this out a bit.

 

With most NPCs, I really hate it when the NPC initiates dialogue on sight (none of my NPCs do this). For one thing, it doesn't give you a chance to strip down the NPC you want to boot. But in Aran's case, it would be more fun if he was the one who started the dialogue. You can always tell him you'll get back to him later.

Share this post


Link to post
Now comes the very-not-fun part - finding a really, really specific place to put him. Down to the x.y coordinates and facing. Not my favorite activity, and certainly an immense PITA if a modder cares about being reasonable to Mega players or just wants to avoid messing with people by planting their NPC right next to an existing one - or on top of him/her. I am going to cut down on the CLUA'ing and such by choosing a few areas and then searching other mod's files for where they add things in the same area, making it less likely that I will inadvertently dump him on top of someone else's work in a mega install.
This is very easy to do with DLTCEP (Edit > Area, Load Area, Actors tab, Set position, Show all). That will show you where all actors are in any chosen area, on the actual area map. You can also plot your exact coordinates that way without entering the game (just click on the map and it'll show the coordinates in the title bar). It doesn't account for script-added actors, but you could just look at the area scripts in a megamod install, or even mod a utility like the one I did for erebusant to do that automatically (by parsing all the CreateCreature references in it).

 

But I guess you decided on a different approach (only scanned this whole thing - kinda in the middle of bashing Infinity Animations and/or WeiDU into tiny pieces). If you want him to spawn at a bar after a couple drinks, I'd extend the bar scripts explicitly, regardless of how cool or uncool extending baldur.bcs might be. There are some mod items (in Aurora for one) that increase intoxication, and you don't just want him popping up out of nowhere in the wild, or in Karaea's private medicinal herb garden, or maybe you do, in which case I guess you may as well extend baldur.bcs.

Share this post


Link to post

Well, I still need to leverage your work with erebusant's stuff, Miloch, because the manual hunt&seek through all those blasted NPC spawns is getting tricky - and I think what I need is to do it on an unplayably large Mega with all the bells and whistles if I want to avoid problems with coordinates.

 

Good point on extending the bar scripts.

I am pretty sure if an actor is sent to/spawned at an identical coordinate, it 'moves over" - I think that is why the bg1npc "sent to an inn" component ends up with a big block of NPCs if you collect them all in one inn. I need to go back and research that, too - yet another thing that I used to know like he back of my hand that has escaped my mind :p

Share this post


Link to post

Actually, I'm not sure about stackable NPCs. Rupert spawns right on top of Sir William Thorpe, or whatever the guy in Keldorn's family quest is called. It isn't game breaking because the talk still fires as it should, but it's funny to see the lines coming from a dude with blue hair.

Share this post


Link to post
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...