Jump to content

Variable difficulty in Watcher's Keep doesn't quite work like it should


jmerry

Recommended Posts

Level 1 of Watcher's Keep has a trigger in the area script to adjust its difficulty. If the party is too small or too low-level, half of the statues are removed. In addition, each of the four spawn points is replaced by a counterpart in exactly the same place that spawns easier monsters - mephits instead of mists, two sword spiders and two ettercaps instead of five sword spiders and three phase spiders, and so on.

The problem? For the spawn points, this is done by deactivating the "hard" spawn points and activating the "easy" ones. That means that there's a brief window when you first enter the area before the script has a chance to run in which the "hard" spawn points are active. And one of those spawn points (the one that spawns a pack of mist creatures) is close enough to the entrance that it's likely to spawn its creatures during that window. If the creatures are already spawned, deactivating the spawn point they came from doesn't remove them. Have fun fighting vampiric wraiths with your undersized/underleveled party.

Clearly, those mists aren't supposed to spawn when the party doesn't meet the size/level requirements (5+ party members, average level 14). But quite frequently (as attested by the no-reload thread at Beamdog), they do.

What can be done about this longstanding bug? I'd say the best bet is to rework the difficulty trigger and have all of the spawn points start inactive. Activate the easy spawn points if it's a small or low-level party, activate the hard spawn points if it's a full party with sufficient levels.

On the script side, follow this block:

Spoiler
IF
	Global("SetDifficulty","AR3001",0)  // Watcher's Keep -- Altar level
	Global("StartMP","GLOBAL",0)
	OR(3)
		NumInPartyLT(5)
		GlobalGT("XPGiven","GLOBAL",500000)
		LevelPartyLT(14)
THEN
	RESPONSE #100
		SetGlobal("SetDifficulty","AR3001",1)  // Watcher's Keep -- Altar level
		ActionOverride("gorsta03",DestroySelf())
		ActionOverride("gorsta04",DestroySelf())
		ActionOverride("gorsta05",DestroySelf())
		ActionOverride("gorsta06",DestroySelf())
		ActionOverride("gorsta11",DestroySelf())
		ActionOverride("gorsta12",DestroySelf())
		SetGlobal("SPRITE_IS_DEADgorsta03","GLOBAL",1)
		SetGlobal("SPRITE_IS_DEADgorsta04","GLOBAL",1)
		SetGlobal("SPRITE_IS_DEADgorsta05","GLOBAL",1)
		SetGlobal("SPRITE_IS_DEADgorsta06","GLOBAL",1)
		SetGlobal("SPRITE_IS_DEADgorsta11","GLOBAL",1)
		SetGlobal("SPRITE_IS_DEADgorsta12","GLOBAL",1)
		SpawnPtActivate("SpawnPoint5")
		SpawnPtActivate("SpawnPoint6")
		SpawnPtActivate("SpawnPoint7")
		SpawnPtActivate("SpawnPoint8")
		SpawnPtDeactivate("SpawnPoint1")
		SpawnPtDeactivate("SpawnPoint2")
		SpawnPtDeactivate("SpawnPoint3")
		SpawnPtDeactivate("SpawnPoint4")
END

 

with this one:

Spoiler
IF
	Global("SetDifficulty","AR3001",0)  // Watcher's Keep -- Altar level
	Global("ActivateSpawns","AR3001",0)  // Watcher's Keep -- Altar level
THEN
	RESPONSE #100
		SetGlobal("ActivateSpawns","AR3001",1)  // Watcher's Keep -- Altar level
		SpawnPtActivate("SpawnPoint1")
		SpawnPtActivate("SpawnPoint2")
		SpawnPtActivate("SpawnPoint3")
		SpawnPtActivate("SpawnPoint4")
END

Or maybe that new "ActivateSpawns" variable gets a prefix. Since "SetDifficulty" is also tested by the altar's script, I needed a new variable to ensure this block only runs once.

On the area side, the first four spawn points get their "Is active" fields flipped from 1 to 0. Sadly, there aren't any functions for altering spawn points in base WeiDU, so this needs either a new library addition or low-level work. I went low-level in my mod's spawn point components, so I don't have that new function ready to go.

Link to comment

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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...