You need a script block that moves the creature to the party's location, then you need to extend every single area script in the game with that block, or patch it into areas without a script. Sure, you could be lazy and extend baldur.bcs but that's lame
.
From Haiass, the script block for haiare.baf:
IF
Global("HaiassJumpOn","GLOBAL",1)
Global("HaiassSeUne","GLOBAL",1)
!InActiveArea("haiass")
!See("haiass")
!Dead("haiass")
THEN
RESPONSE #100
MoveGlobalObject("haiass",Protagonist)
END
And then the mod .tp2 code to extend that to all the area scripts:
COMPILE ~haiass/append/haiare.baf~
COPY_EXISTING_REGEXP GLOB ~^\([^xX].*\|[xX][^rR].*\|[xX][rR][^2].*\|[xX][rR]2[^46].*\)\.are$~ ~override~
PATCH_IF SOURCE_SIZE > 0x11b BEGIN
READ_ASCII 0x94 ~rsc~ //Area script
TO_LOWER rsc
PATCH_IF (~%rsc%~ STRING_EQUAL ~none~ = 0) AND (~%rsc%~ STRING_EQUAL ~~ = 0) BEGIN //If not a null script
PATCH_IF NOT VARIABLE_IS_SET $df(EVALUATE_BUFFER ~%rsc%~) BEGIN //And hasn't been buffered already
SPRINT $df(EVALUATE_BUFFER ~%rsc%~) ~%rsc%~ //Add to buffer
END
END ELSE BEGIN
SPRINT ~rsc~ ~%SOURCE_RES%~ //Area script
PATCH_IF FILE_EXISTS_IN_GAME ~%rsc%.bcs~ BEGIN
WRITE_ASCIIE 0x94 ~%rsc%~ #8 //Write it to the area file
SPRINT $df(EVALUATE_BUFFER ~%rsc%~) ~%rsc%~ //Add to buffer
END ELSE BEGIN
INNER_ACTION BEGIN
COPY_EXISTING ~haiare.bcs~ ~override/%rsc%.bcs~
END
WRITE_ASCIIE 0x94 ~%rsc%~ #8 //Write it to the area file
END
END
END
BUT_ONLY_IF_IT_CHANGES
ACTION_PHP_EACH df AS i => xs BEGIN //Extend all scripts in buffer
EXTEND_BOTTOM ~%xs%.bcs~ ~override/haiare.bcs~
END
Change the variable and creature names as relevant. It's worth noting that "haiass" in this case is the creature's scripting name (also called death variable) not the filename (it's that too but it needs to be the scripting name).