BACKUP ~scs/backup~ AUTHOR ~david.wallace@magd.ox.ac.uk~ ALLOW_MISSING ~a#murn.cre~ ~j#indi01.cre~ ~j#indi03.cre~ ~j#indi04.cre~ ~sufinch1.cre~ ~sufinch2.cre~ ~sufinch4.cre~ ~a#murnp.dlg~ ~j#indip.dlg~ ~sufinchp.dlg~ ~a#murn.bcs~ ~j#indi.bcs~ ~sufinch.bcs~ ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////// ALWAYS INCLUDE ~scs/crossplatform.tph~ INCLUDE ~scs/genai/genai.tph~ INCLUDE ~scs/macro.tph~ APPEND ~STATE.IDS~ ~0x8010202D STATE_DISABLED~ UNLESS ~0x8010202D STATE_DISABLED~ /// includes Helpless, Stunned, Panic, Sleeping, Charmed, Feebleminded, Confused APPEND ~STATE.IDS~ ~0x00000029 STATE_IMMOBILE~ UNLESS ~0x00000029 STATE_IMMOBILE~ /// includes Helpless, Stunned, Sleeping APPEND ~STATE.IDS~ ~0x00400010 STATE_NOT_TARGETTABLE~ UNLESS ~0x00400010 STATE_NOT_TARGETTABLE~ /// includes Improved Invisibility and plain Invisibility // define null symbol to use in strings OUTER_INNER_PATCH ~13~ BEGIN WRITE_BYTE 1 0 READ_ASCII 1 null (1) END // define necessary extra regexp symbols - copied directly from SCSBGT, unsure what it's for OUTER_INNER_PATCH ~12~ BEGIN WRITE_BYTE 1 0x09 READ_ASCII 1 tab (1) // 0x09, tab WRITE_BYTE 1 0x0a READ_ASCII 1 lnl (1) // 0x0a, Linux WRITE_BYTE 0 0x0d READ_ASCII 0 mnl (1) // 0x0d, Mac READ_ASCII 0 wnl (2) // 0x0d0a, Windows END ////CODE below was blatantly hijacked from King Diamond, his weidu version of Horred the Plague's BP DetectStats package// //// & borrowed by David, in lieu of SCS's crude overwrite COPY_EXISTING ~STATS.IDS~ ~override~ // SET_2DA_ENTRY 0 0 1 ~1~ //that's a trick for WeiDU to handle row numbers properly - removes all leading empty rows COUNT_2DA_ROWS 2 "rows_cnt" FOR( cnt=1; cnt<"%rows_cnt%"+1; cnt=cnt+1 ) BEGIN READ_2DA_ENTRY (cnt+0xffffffff) 0 2 "id" PATCH_IF( "%id%" = 109 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_HALLOW~ END PATCH_IF( "%id%" = 110 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_ARMOR_OF_FAITH~ END PATCH_IF( "%id%" = 116 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_SPELL_DEFLECTION~ END PATCH_IF( "%id%" = 117 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~PROTECTION_FROM_EVIL~ END PATCH_IF( "%id%" = 118 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~TRUE_SIGHT~ END PATCH_IF( "%id%" = 119 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_CHAOTIC_COMMANDS~ END PATCH_IF( "%id%" = 120 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_INSECT_PLAGUE~ END PATCH_IF( "%id%" = 121 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_BLADE_BARRIER~ END PATCH_IF( "%id%" = 122 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_PHYSICAL_MIRROR~ END PATCH_IF( "%id%" = 123 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_SHIELD_OF_THE_ARCHONS~ END PATCH_IF( "%id%" = 124 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_REGENERATION~ END PATCH_IF( "%id%" = 125 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_FIRE_SHIELD~ END PATCH_IF( "%id%" = 126 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_PROTECTION_FROM_MAGIC_ENERGY~ END PATCH_IF( "%id%" = 127 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_MISLEAD~ END PATCH_IF( "%id%" = 128 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_PROTECTION_FROM_MAGIC_WEAPONS~ END PATCH_IF( "%id%" = 129 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_SPELL_TURNING~ END PATCH_IF( "%id%" = 130 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_PROTECTION_FROM_THE_ELEMENTS~ END PATCH_IF( "%id%" = 131 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_FREE_ACTION~ END PATCH_IF( "%id%" = 132 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_KHELBANS_WARDING_WHIP~ END PATCH_IF( "%id%" = 133 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~CLERIC_DEFENSIVE_HARMONY~ END PATCH_IF( "%id%" = 134 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~LEVELDRAIN~ END PATCH_IF( "%id%" = 156 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~SCRIPTINGSTATE1~ END PATCH_IF( "%id%" = 157 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~SCRIPTINGSTATE2~ END PATCH_IF( "%id%" = 158 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~SCRIPTINGSTATE3~ END PATCH_IF( "%id%" = 159 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~SCRIPTINGSTATE4~ END PATCH_IF( "%id%" = 160 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~SCRIPTINGSTATE5~ END PATCH_IF( "%id%" = 161 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~SCRIPTINGSTATE6~ END PATCH_IF( "%id%" = 162 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_SPELL_IMMUNITY~ END PATCH_IF( "%id%" = 163 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_PROTECTION_FROM_ENERGY~ END PATCH_IF( "%id%" = 164 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_SPELL_TRAP~ END PATCH_IF( "%id%" = 165 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_IMPROVED_ALACRITY~ END PATCH_IF( "%id%" = 176 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_PROTECTION_FROM_PETRIFICATION~ END PATCH_IF( "%id%" = 177 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_SPELL_SHIELD~ END PATCH_IF( "%id%" = 178 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_RESIST_FEAR~ END PATCH_IF( "%id%" = 179 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_PROTECTION_FROM_NORMAL_MISSILES~ END PATCH_IF( "%id%" = 180 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_GREATER_MALISON~ END PATCH_IF( "%id%" = 181 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_PROTECTION_FROM_NORMAL_WEAPONS~ END PATCH_IF( "%id%" = 182 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~WIZARD_TENSERS_TRANSFORMATION~ END PATCH_IF( "%id%" = 200 ) BEGIN SET_2DA_ENTRY cnt 1 2 ~LEVELDRAIN_WRONG~ END END BUT_ONLY_IF_IT_CHANGES APPEND ~STATS.IDS~ ~176 WIZARD_PROTECTION_FROM_PETRIFICATION~ UNLESS ~WIZARD_PROTECTION_FROM_PETRIFICATION~ APPEND ~STATS.IDS~ ~177 WIZARD_SPELL_SHIELD~ UNLESS ~WIZARD_SPELL_SHIELD~ APPEND ~STATS.IDS~ ~178 WIZARD_RESIST_FEAR~ UNLESS ~WIZARD_RESIST_FEAR~ APPEND ~STATS.IDS~ ~179 WIZARD_PROTECTION_FROM_NORMAL_MISSILES~ UNLESS ~WIZARD_PROTECTION_FROM_NORMAL_MISSILES~ APPEND ~STATS.IDS~ ~180 WIZARD_GREATER_MALISON~ UNLESS ~WIZARD_GREATER_MALISON~ APPEND ~STATS.IDS~ ~181 WIZARD_PROTECTION_FROM_NORMAL_WEAPONS~ UNLESS ~WIZARD_PROTECTION_FROM_NORMAL_WEAPONS~ APPEND ~STATS.IDS~ ~182 WIZARD_TENSERS_TRANSFORMATION~ UNLESS ~WIZARD_TENSERS_TRANSFORMATION~ APPEND ~STATS.IDS~ ~183 WIZARD_PROTECTION_FROM_MAGIC_ENERGY~ UNLESS ~WIZARD_PROTECTION_FROM_MAGIC_ENERGY~ APPEND ~STATS.IDS~ ~184 WIZARD_MISLEAD~ UNLESS ~WIZARD_MISLEAD~ APPEND ~STATS.IDS~ ~185 WIZARD_PROTECTION_FROM_MAGIC_WEAPONS~ UNLESS ~WIZARD_PROTECTION_FROM_MAGIC_WEAPONS~ APPEND ~STATS.IDS~ ~186 WIZARD_SPELL_IMMUNITY~ UNLESS ~WIZARD_SPELL_IMMUNITY~ APPEND ~STATS.IDS~ ~187 WIZARD_PROTECTION_FROM_THE_ELEMENTS~ UNLESS ~WIZARD_PROTECTION_FROM_THE_ELEMENTS~ APPEND ~STATS.IDS~ ~199 STONESKINSGOLEM~ UNLESS ~STONESKINSGOLEM~ ACTION_IF NOT FILE_EXISTS ~override/%tutu_var%dwexhe.itm~ THEN BEGIN COPY_EXISTING ~potn52.itm~ ~override/%tutu_var%dwexhe.itm~ END ACTION_IF NOT FILE_EXISTS ~override/dw#noptn.itm~ THEN BEGIN // marker to pick out characters who don't get potions COPY_EXISTING ~misc16.itm~ ~override/dw#noptn.itm~ WRITE_LONG 0x18 0 END ACTION_IF NOT FILE_EXISTS ~override/dw#magat.itm~ THEN BEGIN // marker to pick out characters who don't get potions COPY_EXISTING ~misc16.itm~ ~override/dw#magat.itm~ WRITE_LONG 0x18 0 END ACTION_IF NOT FILE_EXISTS ~override/dw#silin.spl~ THEN BEGIN // invisibility spell that doesn't display a string COPY ~scs/misc/dw#silin.spl~ ~override~ END ACTION_IF NOT FILE_EXISTS ~override/dw#attac.itm~ THEN BEGIN // marker to pick out priests who attack immediately COPY_EXISTING ~misc16.itm~ ~override/dw#attac.itm~ WRITE_LONG 0x18 0 END ACTION_IF NOT FILE_EXISTS ~override/dw#mgsee.spl~ THEN BEGIN // makes wizards and priests able to target area-effect spells on improved-invisible foes COPY ~scs/misc/dw#mgsee.spl~ ~override~ END END LANGUAGE "English" "scs/tra/english" ~scs/tra/english/english.tra~ LANGUAGE "Espanol (www.clandlan.net)" "scs/tra/spanish" ~scs/tra/english/english.tra~ ~scs/tra/spanish/spanish.tra~ LANGUAGE "Deutsch (Leonardo Watson)" "scs/tra/german" ~scs/tra/english/english.tra~ ~scs/tra/german/german.tra~ LANGUAGE "Polski (Nugrud)" "scs/tra/polish" ~scs/tra/english/english.tra~ ~scs/tra/polish/polish.tra~ ///////////////////////////////////////////////////////////////////////////////// BEGIN @1 DESIGNATED 10 // Correct various errors on race, class et al ///////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#1.xxx~ //installation marker //These are fairly definitively bugfixes COPY_EXISTING ~%tutu_var%davaeo.cre~ ~override~ WRITE_BYTE 0x271 1 // Davaeorn is humanoid, not a monster (save metaphorically) WRITE_BYTE 0x272 1 // He certainly isn't an ankheg! BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%krysti.cre~ ~override~ WRITE_BYTE 0x273 1 //Krystin is a mage, not a thief BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%daitel.cre~ ~override~ WRITE_BYTE 0x271 255 //Daitel is undead, but has to be listed as "Monster" so he can't be turned WRITE_BYTE 0x273 1 // and a mage COPY_EXISTING ~%tutu_var%andris.cre~ ~override~ WRITE_BYTE 0x271 1 //Andris is humanoid COPY_EXISTING ~%tutu_var%barwlf.cre~ ~override~ WRITE_BYTE 0x273 255 //not a mage COPY_EXISTING ~%tutu_var%krysti.cre~ ~override~ WRITE_BYTE 0x273 1 //but she is COPY_EXISTING ~%tutu_var%tellan.cre~ ~override~ WRITE_BYTE 0x273 13 //Tellan is a pure thief, not a mage-thief WRITE_BYTE 0x270 128 //and needs to start off neutral BUT_ONLY_IF_IT_CHANGES END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // TUTU COPY_EXISTING ~_kelwa02.cre~ ~override~ // skeleton warriors aren't human (but must be listed as "monster" to avoid turning) ~_kelwa03.cre~ ~override~ WRITE_BYTE 0x271 255 END // this is already done in BGT COPY_EXISTING ~%tutu_var%jellgr.cre~ ~override~ // these are all slimes ~%tutu_var%jellmu.cre~ ~override~ ~%tutu_var%jellmul.cre~ ~override~ ~%tutu_var%jelloc.cre~ ~override~ ~%tutu_var%jellygr.cre~ ~override~ ~%tutu_var%jellymu.cre~ ~override~ ~%tutu_scriptj%ellygr2.cre~ ~override~ WRITE_BYTE 0x272 77 BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%jellspa.cre~ ~override~ WRITE_BYTE 0x272 77 BUT_ONLY_IF_IT_CHANGES END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // TUTU COPY_EXISTING_REGEXP GLOB ~_.*\.CRE~ ~override~ // none of these are mages. Technically not all are ~no class~ but nothing seems to hang on it READ_BYTE ~0x273~ ~class~ READ_BYTE ~0x271~ ~gen~ WRITE_BYTE ~0x273~ ~255~ IF_EVAL (~%class%~=~0x1~ AND (NOT ( ~%gen%~=~0x1~))) BUT_ONLY_IF_IT_CHANGES END ELSE BEGIN // none of these are mages. Technically not all are ~no class~ but nothing seems to hang on it COPY_EXISTING ~AIRASPEC.CRE~ ~override~ ~BAT_IN.CRE~ ~override~ ~CATP.CRE~ ~override~ ~CHICKE.CRE~ ~override~ ~CHICKER.CRE~ ~override~ ~CORPSE1.CRE~ ~override~ ~CORPSE2.CRE~ ~override~ ~COWH.CRE~ ~override~ ~DOOMDUR.CRE~ ~override~ ~JELLGR.CRE~ ~override~ ~JELLYGR2.CRE~ ~override~ ~JELLYGR.CRE~ ~override~ ~JELLYMU.CRE~ ~override~ ~RUFIE.CRE~ ~override~ ~SCHLUM.CRE~ ~override~ ~STALKE.CRE~ ~override~ ~WOLFCH.CRE~ ~override~ ~WYVERBA.CRE~ ~override~ ~WYVERN.CRE~ ~override~ ~WYVERNBI.CRE~ ~override~ READ_BYTE ~0x273~ ~class~ READ_BYTE ~0x271~ ~gen~ PATCH_IF (~%class%~=~0x1~ AND (NOT ( ~%gen%~=~0x1~))) BEGIN WRITE_BYTE ~0x273~ ~255~ // NO CLASS END BUT_ONLY_IF_IT_CHANGES END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // TUTU COPY_EXISTING_REGEXP GLOB ~_.*\.CRE~ ~override~ // lycanthropes are classified as ~humanoid~ where ~monster~ seems better // apart from the aesthetics, otherwise they'll drink potions in the combat scripts READ_BYTE ~0x272~ ~race~ WRITE_BYTE ~0x271~ ~255~ IF_EVAL (~%race%~=~0x7a~) BUT_ONLY_IF_IT_CHANGES COPY_EXISTING_REGEXP GLOB ~_.*\.CRE~ ~override~ // same problem, various race-wolf creatures are gen-humanoid (eg Kryla, Palin, Vampiric Wolf) READ_BYTE ~0x272~ ~race~ READ_BYTE ~0x271~ ~gen~ WRITE_BYTE ~0x271~ ~255~ IF_EVAL (~%race%~=~0x75~ AND ~%gen%~=~0x1~) BUT_ONLY_IF_IT_CHANGES END ELSE BEGIN // lycanthropes are classified as ~humanoid~ where ~monster~ seems better // apart from the aesthetics, otherwise they'll drink potions in the combat scripts COPY_EXISTING_REGEXP GLOB ~DAESE.CRE~ ~override~ ~DAESEWLF.CRE~ ~override~ ~DALTON.CRE~ ~override~ ~DELAIN[2]?.CRE~ ~override~ ~DURLYL[2]?.CRE~ ~override~ ~EVALT.CRE~ ~override~ ~FARTHI.CRE~ ~override~ ~FTOWUB_[CD].CRE~ ~override~ ~[FM]TOWWI[_]?[A-E]?.CRE~ ~override~ ~GATEWERE.CRE~ ~override~ ~JONDALW.CRE~ ~override~ ~JORIN.CRE~ ~override~ ~KAISH[2A].CRE~ ~override~ ~KAISHWLF.CRE~ ~override~ ~KAROUG.CRE~ ~override~ ~KRYLA.CRE~ ~override~ ~LAHL.CRE~ ~override~ ~LOUPGAR.CRE~ ~override~ ~MENDAS[23]?.CRE~ ~override~ ~MEYM.CRE~ ~override~ ~PALIN.CRE~ ~override~ ~SOLIA1.CRE~ ~override~ ~TAILAS.CRE~ ~override~ ~TALOUN.CRE~ ~override~ ~WEREWO.CRE~ ~override~ ~WOLFWE[G]?[LR]?.CRE~ ~override~ READ_BYTE ~0x272~ ~race~ READ_BYTE ~0x271~ ~gen~ PATCH_IF ((~%race%~=~0x7a~) AND (NOT (~%gen%~ = ~255~))) BEGIN WRITE_BYTE ~0x271~ ~255~ // MONSTER END BUT_ONLY_IF_IT_CHANGES END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // TUTU COPY_EXISTING_REGEXP GLOB ~_.*\.CRE~ ~override~ //doppelgangers are classified as ~humanoid~ where ~monster~ seems better // apart from the aesthetics, otherwise they'll drink potions READ_BYTE ~0x272~ ~race~ WRITE_BYTE ~0x271~ ~255~ IF_EVAL (~%race%~=~0x6a~) BUT_ONLY_IF_IT_CHANGES END ELSE BEGIN COPY_EXISTING_REGEXP GLOB ~G?DOP.*\.CRE~ ~override~ READ_BYTE ~0x272~ ~race~ PATCH_IF (~%race%~=~0x6a~) BEGIN WRITE_BYTE ~0x271~ ~255~ END BUT_ONLY_IF_IT_CHANGES END COPY_EXISTING ~%tutu_var%wolfva.cre~ ~override~ WRITE_BYTE 0x271 255 //vampiric wolves have too many limbs to be human WRITE_BYTE 0x272 117 // Race: WOLF WRITE_BYTE 0x273 147 //and aren't known for their spellcasting proficiency BUT_ONLY_IF_IT_CHANGES // Turn various supposed fighter-mages and thief-mages into pure mages COPY_EXISTING ~%tutu_var%joia.cre~ ~override~ ~%tutu_var%sakul.cre~ ~override~ ~%tutu_var%vayya.cre~ ~override~ WRITE_BYTE 0x273 1 BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%cuchol.cre~ ~override~ ~%tutu_var%beyn.cre~ ~override~ ~%tutu_var%dezkie.cre~ ~override~ ~%tutu_var%garan.cre~ ~override~ WRITE_BYTE 0x273 1 BUT_ONLY_IF_IT_CHANGES END // Correct classes for some supposed clerics who aren't COPY_EXISTING ~%tutu_var%beland.cre~ ~override~ ~%tutu_var%jamie.cre~ ~override~ WRITE_BYTE 0x273 255 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%amaran.cre~ ~override~ ~%tutu_var%druid3.cre~ ~override~ ~%tutu_var%fahrin.cre~ ~override~ ~%tutu_var%izefia.cre~ ~override~ ~%tutu_var%takiyah.cre~ ~override~ WRITE_BYTE 0x273 11 BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%dopkie.cre~ ~override~ WRITE_BYTE 0x273 111 COPY_EXISTING ~%tutu_var%baresh.cre~ ~override~ ~%tutu_var%baresh2.cre~ ~override~ ~%tutu_var%kaish2.cre~ ~override~ ~%tutu_var%kaisha.cre~ ~override~ WRITE_BYTE 0x273 157 BUT_ONLY_IF_IT_CHANGES END ACTION_IF !FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // BGT COPY_EXISTING ~KAISH2.CRE~ ~OVERRIDE~ WRITE_ASCII 0x250 "KAISHA" #8 BUT_ONLY_IF_IT_CHANGES END // Give Genthore some melee cababilities! // (atm he has five points in ~missile~ speciality but no melee ability at all, and doesn't actually know how // to use his handaxes. This replaces his dagger with a battleaxe and changes his proficiencies from ~5 missile~ to // ~4 axe~. ) COPY_EXISTING ~%tutu_var%gentho.cre~ ~override~ WRITE_BYTE 0x75 0 // set missile proficiency to zero WRITE_BYTE 0x74 4 // set axe proficiency to four READ_LONG 0x2b8 ~itemslot~ READ_LONG 0x2bc ~itemoffset~ SET ~currentloc~=~itemoffset~ WHILE (~currentloc~<~itemslot~) BEGIN READ_ASCII ~currentloc~ ~itemcarried~ PATCH_IF !(~%itemcarried%~ STRING_COMPARE_CASE ~%tutu_var%DAGG05~) THEN BEGIN WRITE_EVALUATED_ASCII ~currentloc~ ~%tutu_var%ax1h04~ WRITE_SHORT ~currentloc~+0xa 5 END PATCH_IF !(~%itemcarried%~ STRING_COMPARE_CASE ~%tutu_var%DART01~) THEN BEGIN WRITE_EVALUATED_ASCII ~currentloc~ ~%tutu_var%ax1h04~ WRITE_SHORT ~currentloc~+0xa 5 END PATCH_IF !(~%itemcarried%~ STRING_COMPARE_CASE ~%tutu_var%DAGG01~) THEN BEGIN WRITE_EVALUATED_ASCII ~currentloc~ ~%tutu_var%ax1h01~ WRITE_SHORT ~currentloc~+0xa 1 END SET ~currentloc~=~currentloc~+0x14 END BUT_ONLY_IF_IT_CHANGES // Deal with the fact that wizards Yago and Resar have for some reason been given no spells // at all! // // as of v6, we do this in a slightly more principled way OUTER_SPRINT ~filename~ ~scs/misc/yagospells.2da~ COPY_EXISTING ~%tutu_var%yago.cre~ ~override~ LAUNCH_PATCH_MACRO ~wipe_and_reset_spells~ OUTER_SPRINT ~filename~ ~scs/misc/resarspells.2da~ COPY_EXISTING ~%tutu_var%resar.cre~ ~override~ LAUNCH_PATCH_MACRO ~wipe_and_reset_spells~ ACTION_IF NOT FILE_EXISTS ~override/macinit.bcs~ THEN BEGIN //Correct Gretek encounter so they more reliably go hostile COPY_EXISTING ~%tutu_var%pargus.cre~ ~override~ ~%tutu_var%wilf.cre~ ~override~ ~%tutu_var%nader.cre~ ~override~ ~%tutu_var%arlin.cre~ ~override~ ~%tutu_var%catura.cre~ ~override~ WRITE_ASCII 0x248 ~gretek~ BUT_ONLY_IF_IT_CHANGES COMPILE ~scs/misc/gretek.baf~ COMPILE EVALUATE_BUFFER ~scs/misc/gretek.d~ END //Correct Cyrdremac encounter, ditto EXTEND_TOP ~%tutu_scriptb%anditcy.bcs~ ~scs/misc/bancyadd.baf~ COMPILE EVALUATE_BUFFER ~scs/misc/cyderm.d~ // More accurate choices of level for (non-party) NPCs, based on their memorised spells COPY_EXISTING ~%tutu_var%hafiz.cre~ ~override~ WRITE_BYTE 0x234 6 // has L3 spells & uses them COPY_EXISTING ~%tutu_var%vayya.cre~ ~override~ WRITE_BYTE 0x234 9 // has L5 spells & uses them COPY_EXISTING ~%tutu_var%rielta.cre~ ~override~ WRITE_BYTE 0x234 7 // has L4 spell COPY_EXISTING ~%tutu_var%aasim.cre~ ~override~ WRITE_BYTE 0x234 10 // has 2 L5 spells and uses them COPY_EXISTING ~%tutu_var%diyab.cre~ ~override~ WRITE_BYTE 0x234 10 // has 2 L5 spells and uses them COPY_EXISTING ~%tutu_var%alai.cre~ ~override~ WRITE_BYTE 0x234 9 // has L5 spell and uses it COPY_EXISTING ~%tutu_var%jalant.cre~ ~override~ WRITE_BYTE 0x234 10 //has 2 L5 spells and uses them COPY_EXISTING ~%tutu_var%voltin.cre~ ~override~ WRITE_BYTE 0x234 9 //has L5 spell and uses it COPY_EXISTING ~%tutu_var%sakul.cre~ ~override~ WRITE_BYTE 0x234 9 //has L5 spell and uses it ACTION_IF FILE_EXISTS_IN_GAME ~fw1500.are~ // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%cult2.cre~ ~override~ WRITE_BYTE 0x234 5 // listed as L15?! COPY_EXISTING ~%tutu_var%dezkie.cre~ ~override~ WRITE_BYTE 0x234 12 COPY_EXISTING ~%tutu_var%andris.cre~ ~override~ WRITE_BYTE 0x234 12 WRITE_BYTE 0x23d 16 COPY_EXISTING ~%tutu_var%marcel.cre~ ~override~ WRITE_BYTE 0x234 9 COPY_EXISTING ~%tutu_var%beyn.cre~ ~override~ WRITE_BYTE 0x234 11 COPY_EXISTING ~%tutu_var%cuchol.cre~ ~override~ WRITE_BYTE 0x234 11 COPY_EXISTING ~%tutu_var%garan.cre~ ~override~ WRITE_BYTE 0x234 12 END COPY_EXISTING //ogre mages should be L7, essentially all use L4 magic ~%tutu_var%droth.cre~ ~override~ ~%tutu_scripto%grema02.cre~ ~override~ ~%tutu_scripto%grema03.cre~ ~override~ ~%tutu_scripto%grema_a.cre~ ~override~ ~%tutu_scripto%grema_b.cre~ ~override~ ~%tutu_scripto%grema_c.cre~ ~override~ ~%tutu_scripto%grema_d.cre~ ~override~ ~%tutu_var%ogrema.cre~ ~override~ ~%tutu_var%ogrmba.cre~ ~override~ WRITE_BYTE ~0x234~ ~7~ BUT_ONLY_IF_IT_CHANGES // Make the mad mages of the Ice Island non-hostile at start, for effect and as their dialogues seem to require ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COMPILE EVALUATE_BUFFER ~scs/misc/andris.d~ COPY_EXISTING ~%tutu_var%andris.cre~ ~override~ WRITE_BYTE 0x270 128 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%beyn.cre~ ~override~ WRITE_BYTE 0x270 128 WRITE_ASCII 0x248 ~dw#andho~ BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%marcel.cre~ ~override~ WRITE_BYTE 0x270 128 WRITE_ASCII 0x248 ~dw#andho~ BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%dezkie.cre~ ~override~ ~%tutu_var%cuchol.cre~ ~override~ ~%tutu_var%garan.cre~ ~override~ WRITE_BYTE 0x270 128 BUT_ONLY_IF_IT_CHANGES END COMPILE ~scs\scriptmisc\dw#andho.baf~ // COMPILE ~scs\misc\andrisadd.d~ COPY_EXISTING ~%tutu_var%ichary.cre~ ~override~ // Some skeletons get their immunities missed off ~%tutu_scripts%kelet03.cre~ ~override~ ~%tutu_scriptk%nightsk.cre~ ~override~ ~%tutu_var%skeletb.cre~ ~override~ ~%tutu_var%skelets.cre~ ~override~ WRITE_BYTE 0x60 50 WRITE_BYTE 0x62 50 WRITE_BYTE 0x63 90 BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%iskelet.cre~ ~override~ WRITE_BYTE 0x60 50 WRITE_BYTE 0x62 50 WRITE_BYTE 0x63 90 BUT_ONLY_IF_IT_CHANGES END //Give the Roe ogrillon a non-wander script COPY_EXISTING ~%tutu_scripto%gremiri.cre~ ~override~ WRITE_EVALUATED_ASCII 0x268 ~%tutu_scriptw%tasight~ BUT_ONLY_IF_IT_CHANGES //The Shield Amulet is supposed to duplicate Shield but it doesn't grant immunity to Magic Missile. We fix this. // Don't patch if BG2 Fixpack is installed - it already does this and more (only relevant for BGT) ACTION_IF NOT FILE_EXISTS_IN_GAME ~cdbehbla.pro~ THEN BEGIN COPY_EXISTING ~%tutu_var%amul15.itm~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~206~ //protection from spell WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~1~ //Power=1 WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability WRITE_ASCII (~editloc~+0x14) ~spwi112~ //Magic Missile END //Potions of Freedom fail to protect against Hold Person (this already corrected in easyTUTU) ACTION_IF NOT FILE_EXISTS ~override/macinit.bcs~ THEN BEGIN // thanks to pro5 for improved code COPY_EXISTING ~%tutu_var%potn45.itm~ ~override~ READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" READ_LONG 0x6a "fx_off" SET "loops" = 0 SET "delta" = 0 SET "found" = 0 WHILE ("%abil_num%" > "%loops%") BEGIN // looks for magical ability header READ_BYTE ("%abil_off%" + (("%loops%" + "%delta%") * 0x38)) "type" READ_SHORT ("%abil_off%" + 0x20 + (("%loops%" + "%delta%") * 0x38)) "abil_fx_idx" WRITE_SHORT ("%abil_off%" + 0x20 + (("%loops%" + "%delta%") * 0x38)) ("%abil_fx_idx%" + "%delta%") PATCH_IF (("%type%" = 3) AND ("%delta%" = 0)) BEGIN // magical ability check READ_SHORT ("%abil_off%" + 0x1e + (("%loops%" + "%delta%") * 0x38)) "abil_fx_num" WHILE ("%abil_fx_num%" > 0) BEGIN SET "abil_fx_num" = ("%abil_fx_num%" - 1) READ_SHORT ("%fx_off%" + (("%abil_fx_idx%" + "%abil_fx_num%" + "%delta%") * 0x30)) "fx_type" READ_LONG ("%fx_off%" + 0x08 + (("%abil_fx_idx%" + "%abil_fx_num%" + "%delta%") * 0x30)) "immunity" PATCH_IF (("%fx_type%" = 101) AND ("%immunity%" = 175)) BEGIN SET "found" = 1 END END PATCH_IF ("%found%" = 0) BEGIN // if Immunity to Hold Creature Type not present READ_SHORT ("%abil_off%" + 0x1e + (("%loops%" + "%delta%") * 0x38)) "abil_fx_num" WRITE_SHORT ("%abil_off%" + 0x1e + (("%loops%" + "%delta%") * 0x38)) ("%abil_fx_num%" + 1) INSERT_BYTES ("%fx_off%" + (("%abil_fx_idx%" + "%delta%") * 0x30)) 0x30 WRITE_SHORT ("%fx_off%" + ("%abil_fx_idx%" * 0x30)) 101 // Immunity to Effect (101) WRITE_BYTE ("%fx_off%" + 0x02 + ("%abil_fx_idx%" * 0x30)) 1 // target:self WRITE_BYTE ("%fx_off%" + 0x03 + ("%abil_fx_idx%" * 0x30)) 4 // power WRITE_LONG ("%fx_off%" + 0x08 + ("%abil_fx_idx%" * 0x30)) 175 // Effect: Hold Creature Type WRITE_BYTE ("%fx_off%" + 0x0d + ("%abil_fx_idx%" * 0x30)) 1 // Dispel/Not bypass res. WRITE_LONG ("%fx_off%" + 0x0e + ("%abil_fx_idx%" * 0x30)) 600 // duration WRITE_BYTE ("%fx_off%" + 0x12 + ("%abil_fx_idx%" * 0x30)) 100 // probability SET "delta" = ("%delta%" + 1) END END SET "loops" = ("%loops%" + 1) END BUT_ONLY_IF_IT_CHANGES END //Monster Summoning doesn't penetrate magic protection. This is silly - the summoning spell is being cast in the vicinity //of the target, not actually at the target. (It's exacirbated in the TUTUfix summons since some of them are too-low a level). //We modify all summons to be L10 spells. COPY_EXISTING ~sppr301.spl~ ~override~ ~sppr402.spl~ ~override~ ~sppr501.spl~ ~override~ ~spwi309.spl~ ~override~ ~spwi407.spl~ ~override~ ~spwi501.spl~ ~override~ ~spwi504.spl~ ~override~ ~spwi601.spl~ ~override~ SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x28+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN WRITE_BYTE (~effoffset~+~numeffsofar~*0x30+0x3) 10 SET ~numeffsofar~=~numeffsofar~+1 END BUT_ONLY_IF_IT_CHANGES //Khalid and Jaheira EscapeArea if you kick them out in the FAI (misfiring script intended to get rid of them if you never meet them before Chapter 2) //Ditto Xzar and Montaron on the Candlekeep Road //the K and J bit is fixed in BGT. I'm postponing fixing the M and X bit in BGT. ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // TUTU COPY_EXISTING ~_ar2301.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Exists("khalid")~ ~Exists("khalid") Global("khalid","GLOBAL",0)~ REPLACE_TEXTUALLY ~Exists("jaheira")~ ~Exists("jaheira") Global("jaheira","GLOBAL",0)~ COMPILE_BAF_TO_BCS COPY_EXISTING ~_ar2700.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Exists("montaron")~ ~Exists("montaron") Global("montaron","GLOBAL",0)~ REPLACE_TEXTUALLY ~Exists("xzar")~ ~Exists("xzar") Global("xzar","GLOBAL",0)~ COMPILE_BAF_TO_BCS /// The EasyTutu version of Strength of One targets the party, not the area effect, which causes monsters to buff the party! COPY_EXISTING ~sppr312.spl~ ~override~ READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabils~ READ_LONG 0x6a ~effoffset~ READ_SHORT 0x70 ~numeffects~ SET ~absofar~=0 WHILE ~%absofar%~<~%numabils%~ BEGIN SET ~loc~=~%aboffset%~+0x28*~%absofar%~ READ_SHORT ~%loc%~+0x1e ~effectshere~ SET ~numeffects~=~numeffects~+~%effectshere%~ SET ~absofar~=~%absofar%~+1 WRITE_SHORT 0x26+~%loc%~ 160 END SET ~effsofar~=0 WHILE ~%effsofar%~<~%numeffects%~ BEGIN SET ~loc~=~%effoffset%~+0x30*~%effsofar%~ WRITE_BYTE ~%loc%~+0x2 2 SET ~effsofar~=~%effsofar%~+1 END END // Traps no longer get set off by monsters COPY_EXISTING ~%tutu_var%GTAR.BCS~ ~override~ ~%tutu_var%GTAR10.BCS~ ~override~ ~%tutu_var%GTAR2.BCS~ ~override~ ~%tutu_var%GTAR6.BCS~ ~override~ ~%tutu_var%GTAR7.BCS~ ~override~ ~%tutu_var%GTAR8.BCS~ ~override~ ~%tutu_var%GTAR9.BCS~ ~override~ ~%tutu_var%GTAS.BCS~ ~override~ ~%tutu_var%GTCK.BCS~ ~override~ ~%tutu_var%GTCL.BCS~ ~override~ ~%tutu_var%GTCON.BCS~ ~override~ ~%tutu_var%GTCORB.BCS~ ~override~ ~%tutu_var%GTFB.BCS~ ~override~ ~%tutu_var%GTFB2.BCS~ ~override~ ~%tutu_var%GTFB3.BCS~ ~override~ ~%tutu_var%GTFS.BCS~ ~override~ ~%tutu_var%GTGW.BCS~ ~override~ ~%tutu_var%GTHP.BCS~ ~override~ ~%tutu_var%GTLB.BCS~ ~override~ ~%tutu_var%GTMM.BCS~ ~override~ ~%tutu_var%GTSC.BCS~ ~override~ ~%tutu_var%GTSI.BCS~ ~override~ ~%tutu_var%GTST.BCS~ ~override~ ~%tutu_var%GTWEB.BCS~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Entered(\[ANYONE\])~ ~Entered([GOODCUTOFF])~ COMPILE_BAF_TO_BCS ////These are arguably tweaks: they modify THAC0 etc to fit the character's official level or his demonstrated abilities // Correct inaccurately low THAC0 for (non-party) fighters COPY_EXISTING ~%tutu_var%alai.cre~ ~override~ WRITE_BYTE 0x52 13 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%angelo.cre~ ~override~ WRITE_BYTE 0x52 10 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%brunos.cre~ ~override~ WRITE_BYTE 0x52 12 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%canto.cre~ ~override~ WRITE_BYTE 0x52 15 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%drasus.cre~ ~override~ WRITE_BYTE 0x52 13 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%gardus.cre~ ~override~ WRITE_BYTE 0x52 15 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%gretek.cre~ ~override~ WRITE_BYTE 0x52 12 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%iron2.cre~ ~override~ WRITE_BYTE 0x52 18 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%iron3.cre~ ~override~ WRITE_BYTE 0x52 18 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%jenkal.cre~ ~override~ WRITE_BYTE 0x52 17 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%nevill.cre~ ~override~ WRITE_BYTE 0x52 15 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%prat.cre~ ~override~ WRITE_BYTE 0x52 13 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%sakul.cre~ ~override~ WRITE_BYTE 0x52 13 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%slythe.cre~ ~override~ WRITE_BYTE 0x52 8 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%tam.cre~ ~override~ WRITE_BYTE 0x52 13 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%telano.cre~ ~override~ WRITE_BYTE 0x52 12 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%wilf.cre~ ~override~ WRITE_BYTE 0x52 14 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%zhalim.cre~ ~override~ WRITE_BYTE 0x52 10 BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%beyn.cre~ ~override~ WRITE_BYTE 0x52 13 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING_REGEXP GLOB ~%tutu_var%crew[1-7].cre~ ~override~ WRITE_BYTE 0x52 15 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%cultt1.cre~ ~override~ WRITE_BYTE 0x52 6 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%kieres.cre~ ~override~ WRITE_BYTE 0x52 14 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING_REGEXP GLOB ~%tutu_var%leaggu[1-7].cre~ ~override~ WRITE_BYTE 0x52 15 BUT_ONLY_IF_IT_CHANGES END //Correct inaccurately low saves for CRE files COPY_EXISTING ~%tutu_var%dratan.cre~ ~override~ ~%tutu_var%iron2.cre~ ~override~ ~%tutu_var%iron3.cre~ ~override~ ~%tutu_scripti%ronguar.cre~ ~override~ WRITE_BYTE 0x55 15 WRITE_BYTE 0x58 16 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%flamang.cre~ ~override~ ~%tutu_var%iron5.cre~ ~override~ ~%tutu_var%raemon.cre~ ~override~ ~%tutu_var%tralit.cre~ ~override~ WRITE_BYTE 0x55 13 WRITE_BYTE 0x58 14 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%brunos.cre~ ~override~ ~%tutu_var%desret.cre~ ~override~ ~%tutu_var%carsto.cre~ ~override~ ~%tutu_var%gantol2.cre~ ~override~ ~%tutu_var%gardus.cre~ ~override~ ~%tutu_var%gretek.cre~ ~override~ ~%tutu_var%haseo.cre~ ~override~ ~%tutu_var%rahvin.cre~ ~override~ WRITE_BYTE 0x55 10 WRITE_BYTE 0x58 11 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%zhalim.cre~ ~override~ WRITE_BYTE 0x55 9 WRITE_BYTE 0x58 10 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%bassil.cre~ ~override~ ~%tutu_var%izefia.cre~ ~override~ ~%tutu_var%takiyah.cre~ ~override~ WRITE_BYTE 0x55 11 WRITE_BYTE 0x58 12 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%galtok.cre~ ~override~ ~%tutu_var%halaca.cre~ ~override~ ~%tutu_var%kirian.cre~ ~override~ WRITE_BYTE 0x55 11 WRITE_BYTE 0x58 12 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%marek.cre~ ~override~ ~%tutu_var%nimbul.cre~ ~override~ ~%tutu_var%nortua.cre~ ~override~ ~%tutu_var%prat.cre~ ~override~ WRITE_BYTE 0x55 9 WRITE_BYTE 0x58 10 BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%crew1.cre~ ~override~ ~%tutu_var%crew3.cre~ ~override~ ~%tutu_var%crew5.cre~ ~override~ ~%tutu_var%crew6.cre~ ~override~ ~%tutu_var%leaggu3.cre~ ~override~ ~%tutu_var%leaggu4.cre~ ~override~ ~%tutu_var%leaggu5.cre~ ~override~ ~%tutu_var%leaggu6.cre~ ~override~ WRITE_BYTE 0x55 13 WRITE_BYTE 0x58 14 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%kieres.cre~ ~override~ ~%tutu_scriptbg%rook.cre~ ~override~ WRITE_BYTE 0x55 12 WRITE_BYTE 0x58 13 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_scriptbg%tarnor.cre~ ~override~ WRITE_BYTE 0x55 10 WRITE_BYTE 0x58 11 BUT_ONLY_IF_IT_CHANGES END ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%daitel.cre~ ~override~ WRITE_BYTE 0x59 100 //Daitel is immune only to _magic_ cold and fire?! WRITE_BYTE 0x5a 100 BUT_ONLY_IF_IT_CHANGES END ////These are definitely tweaks, albeit hopefully pretty innocuous ones //Remove the Nashkel merchant's amnesia COMPILE EVALUATE_BUFFER ~scs/misc/nashkelwolf.d~ // correct certain implausible ability scores etc~ COPY_EXISTING ~%tutu_var%naaman.cre~ ~override~ WRITE_BYTE 0x23c 17 //11 DEX for a mage/thief is pretty low BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%desret.cre~ ~override~ //Desreta seems to warrant a higher thief level WRITE_BYTE 0x235 8 BUT_ONLY_IF_IT_CHANGES // Take Niemain's ring of clumsiness off his finger COPY_EXISTING ~%tutu_var%niemai.cre~ ~override~ REPLACE_TEXTUALLY ~%tutu_var%RING04~ ~%tutu_var%RING10~ //since these are the same name we don't need a square ADD_CRE_ITEM ~%tutu_var%RING04~ #0 #0 #0 ~NONE~ ~INV15~ // Fix casting levels for wands~ COPY_EXISTING ~%tutu_var%wand02.itm~ ~override~ ~%tutu_var%wand03.itm~ ~override~ ~%tutu_var%wand08.itm~ ~override~ SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x38+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN WRITE_BYTE (~effoffset~+~numeffsofar~*0x30+0x3) 1 SET ~numeffsofar~=~numeffsofar~+1 END BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%wand05.itm~ ~override~ ~%tutu_var%wand07.itm~ ~override~ SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x38+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN WRITE_BYTE (~effoffset~+~numeffsofar~*0x30+0x3) 3 SET ~numeffsofar~=~numeffsofar~+1 END BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%wand12.itm~ ~override~ SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x28+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN WRITE_BYTE (~effoffset~+~numeffsofar~*0x30+0x3) 1 SET ~numeffsofar~=~numeffsofar~+1 END BUT_ONLY_IF_IT_CHANGES END ////This is a small fragment of "detectable spells" // immunity to fear (WIZARD_RESIST_FEAR). Extended to cover the cleric spell COPY_EXISTING ~sppr108.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~1~ //Power=1 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~22~ //State: WIZARD_RESIST_FEAR WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~spwi210.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~2~ //Power=2 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~22~ //State: WIZARD_RESIST_FEAR WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~spcl222.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~2~ //Power=1 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~22~ //State: WIZARD_RESIST_FEAR WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability BUT_ONLY_IF_IT_CHANGES // immunity to magic (mixed: L5 immunity and make-all-saves)(sharing with WIZARD_SPELL_DEFLECTION) // set to 1 by potn35, 2 by potn33 COPY_EXISTING ~%tutu_var%potn33.itm~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~0~ //Power=0 WRITE_LONG (~editloc~+0x4) ~2~ //Change state to 2 WRITE_LONG (~editloc~+0x8) ~5~ //State: WIZARD_SPELL_DEFLECTION WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~30~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability COPY_EXISTING ~%tutu_var%potn35.itm~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~4~ //Power=4 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~5~ //State: WIZARD_SPELL_DEFLECTION WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~180~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability // immunity to petrification (using WIZARD_PROTECTION_FROM_PETRIFICATION) COPY_EXISTING ~%tutu_var%scrl15.itm~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~4~ //Power=4 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~20~ //State: WIZARD_PROTECTION_FROM_PETRIFICATION WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~1800~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability COPY_EXISTING ~%tutu_var%potn38.itm~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~4~ //Power=4 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~20~ //State: WIZARD_PROTECTION_FROM_PETRIFICATION WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~60~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability COPY_EXISTING ~spwi108.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~4~ //Power=4 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~20~ //State: WIZARD_PROTECTION_FROM_PETRIFICATION WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability // Shield (sharing with WIZARD_SPELL_SHIELD on the grounds that hopefully they don't overlap too much in practice!) COPY_EXISTING ~spwi114.spl~ ~override~ ~%tutu_var%amul15.itm~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~1~ //Power=1 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~21~ //State: WIZARD_SPELL_SHIELD WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability // Protection from Normal Missiles COPY_EXISTING ~spwi311.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~3~ //Power=3 WRITE_LONG (~editloc~+0x4) ~1~ //Change state to 1 WRITE_LONG (~editloc~+0x8) ~23~ //State: WIZARD_PROTECTION_FROM_NORMAL_MISSILES WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability // Armor COPY_EXISTING ~spwi102.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~1~ //Power=1 WRITE_LONG (~editloc~+0x4) ~3~ //Change state to 3 WRITE_LONG (~editloc~+0x8) ~4~ //State: SCRIPTINGSTATE5 WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~3000~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability // Command [helps priests with targetting] - borrows SHIELD_OF_THE_ARCHONS (set to 7), which isn't likely // to come up much here. NB this actually tags the target even if they make their save. I don't think this // matters. COPY_EXISTING ~sppr102.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~282~ //modify scripting state WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~1~ //Power=1 WRITE_LONG (~editloc~+0x4) ~7~ //Change state to 7 WRITE_LONG (~editloc~+0x8) ~17~ //State: CLERIC_SHIELD_OF_THE_ARCHONS WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~1~ //Dispel/Not Bypass resistance WRITE_LONG (~editloc~+0xe) ~6~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability /////////////////////////////////////////////////////////////////////// BEGIN @4 DESIGNATED 20 //Make elemental arrows more like BG2 /////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#4.xxx~ //installation marker ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // TUTU //place_needing_attention? leave for now COPY_EXISTING ~_arow04.itm~ ~override~ WRITE_BYTE 0xca 3 SAY DESC @201 COPY_EXISTING ~_arow08.itm~ ~override~ WRITE_BYTE 0xca 3 SAY DESC @202 COPY_EXISTING ~_arow09.itm~ ~override~ WRITE_BYTE 0xca 3 SAY DESC @203 COPY_EXISTING ~_bolt03.itm~ ~override~ WRITE_BYTE 0xc6 1 WRITE_BYTE 0xf6 1 SAY DESC @204 END ELSE BEGIN COPY_EXISTING ~bolt03.itm~ ~override~ SAY DESC @204 READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" READ_LONG 0x6a "fx_off" SET "aindex" = 0 WHILE ("%abil_num%" > "%aindex%") BEGIN // looks for ranged ability header READ_BYTE ("%abil_off%" + ("%aindex%" * 0x38)) "type" PATCH_IF ("%type%" = 2) BEGIN READ_SHORT ("%abil_off%" + 0x1e + ("%aindex%" * 0x38)) "abil_fx_num" READ_SHORT ("%abil_off%" + 0x20 + ("%aindex%" * 0x38)) "abil_fx_idx" FOR (fxindex = 0; fxindex < "%abil_fx_num%"; fxindex = fxindex + 1) BEGIN READ_SHORT ("%fx_off%" + (("%abil_fx_idx%" + "fxindex") * 0x30)) "fx_type" PATCH_IF ("%fx_type%" = 12) BEGIN WRITE_LONG ("%fx_off%" + 0x1c + (("%abil_fx_idx%" + "fxindex") * 0x30)) 1 END END END SET "aindex" = "aindex" + 1 END BUT_ONLY_IF_IT_CHANGES END /////////////////////////////////////////////////////////////////////// BEGIN @5 DESIGNATED 30 //Make Protection from Normal Missiles affect magical missiles /////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#5.xxx~ //installation marker //The existing spell gives immunity to the following projectile types: //ARROWHVY (4), AXE (9), BOLT (14), BULLET (19), DAGGER (26), and DART (34). //We add to this ARROWFLM (3), ARROWFLB (102), BOLT (16) [this one used only by Bolts of Lightning] // COPY_EXISTING ~spwi311.spl~ ~override~ SAY UNIDENTIFIED_DESC @304 READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+3) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x90 WRITE_SHORT ~editloc~ ~83~ //immunity to projectile WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~3~ //Power=3 WRITE_LONG (~editloc~+0x8) ~3~ //ARROWFLM WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability WRITE_SHORT (~editloc~+0x30) ~83~ //immunity to projectile WRITE_BYTE (~editloc~+0x32) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x33) ~3~ //Power=3 WRITE_LONG (~editloc~+0x38) ~102~ //ARROWFLB WRITE_BYTE (~editloc~+0x3c) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0x3d) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0x3e) ~300~ //Duration WRITE_LONG (~editloc~+0x42) ~100~ //Probability WRITE_SHORT (~editloc~+0x60) ~83~ //immunity to projectile WRITE_BYTE (~editloc~+0x62) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x63) ~3~ //Power=3 WRITE_LONG (~editloc~+0x68) ~16~ //BOLT WRITE_BYTE (~editloc~+0x6c) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0x6d) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0x6e) ~300~ //Duration WRITE_LONG (~editloc~+0x72) ~100~ //Probability COPY_EXISTING ~%tutu_scriptm%agebrac.itm~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x70 ~numeffects~ WRITE_SHORT 0x70 (~numeffects~+3) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x90 WRITE_SHORT ~editloc~ ~83~ //immunity to projectile WRITE_BYTE (~editloc~+0x2) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x3) ~3~ //Power=3 WRITE_LONG (~editloc~+0x8) ~3~ //ARROWFLM WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0xe) ~300~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability WRITE_SHORT (~editloc~+0x30) ~83~ //immunity to projectile WRITE_BYTE (~editloc~+0x32) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x33) ~3~ //Power=3 WRITE_LONG (~editloc~+0x38) ~102~ //ARROWFLB WRITE_BYTE (~editloc~+0x3c) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0x3d) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0x3e) ~300~ //Duration WRITE_LONG (~editloc~+0x42) ~100~ //Probability WRITE_SHORT (~editloc~+0x60) ~83~ //immunity to projectile WRITE_BYTE (~editloc~+0x62) ~2~ //TargetPresetTarget WRITE_BYTE (~editloc~+0x63) ~3~ //Power=3 WRITE_LONG (~editloc~+0x68) ~16~ //BOLT WRITE_BYTE (~editloc~+0x6c) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0x6d) ~3~ //Dispel/Bypass resistance WRITE_LONG (~editloc~+0x6e) ~300~ //Duration WRITE_LONG (~editloc~+0x72) ~100~ //Probability COPY_EXISTING ~%tutu_var%scrl1n.itm~ ~override~ SAY IDENTIFIED_DESC @304 //Axes - actually the only throwing axe is already marked as nonmagical but this is a bug which someone else //might fix, so we'll redo it anyway COPY_EXISTING ~%tutu_var%AX1H05.ITM~ ~override~ //throwing axe +2 WRITE_SHORT 0x9c 10 //Arrows COPY_EXISTING ~%tutu_var%AROW04.ITM~ ~override~ //acid arrows ~%tutu_var%AROW05.ITM~ ~override~ //arrows of biting ~%tutu_var%AROW10.ITM~ ~override~ //arrows of piercing ~%tutu_var%AROW11.ITM~ ~override~ //arrows +2 ~%tutu_var%AROW12.ITM~ ~override~ //hobgoblin arrows of biting ~%tutu_var%AROW16.ITM~ ~override~ //Angelo's electrical arrows WRITE_SHORT 0x9c 5 //Arrows that DO go through PNM - new descriptions to say so COPY_EXISTING ~%tutu_var%AROW03.ITM~ ~override~ SAY DESC @301 COPY_EXISTING ~%tutu_var%AROW06.ITM~ ~override~ SAY DESC @302 COPY_EXISTING ~%tutu_var%AROW07.ITM~ ~override~ SAY DESC @303 //Bolts COPY_EXISTING ~%tutu_var%BOLT02.ITM~ ~override~ //bolts +1 ~%tutu_var%BOLT04.ITM~ ~override~ //bolts of biting ~%tutu_var%BOLT05.ITM~ ~override~ //bolts of polymorphing ~%tutu_var%BOLT06.ITM~ ~override~ //bolts +2 WRITE_SHORT 0x9c 15 //Bullets COPY_EXISTING ~%tutu_var%BULL02.ITM~ ~override~ //bullets+1 ~%tutu_var%BULL03.ITM~ ~override~ //bullets+2 WRITE_SHORT 0x9c 20 //Darts COPY_EXISTING ~%tutu_var%DART02.ITM~ ~override~ //darts+1 ~%tutu_var%DART03.ITM~ ~override~ //darts of stunning ~%tutu_var%DART04.ITM~ ~override~ //darts of wounding WRITE_SHORT 0x9c 35 //Flame Arrow spell - which should penetrate (we borrow ARROWFLI.PRO, which is unused, and recolour it) COPY_EXISTING ~ARROWFLI.PRO~ ~override~ WRITE_BYTE 0x124 67 WRITE_BYTE 0x12c 65 WRITE_BYTE 0x12d 65 WRITE_BYTE 0x12e 65 WRITE_BYTE 0x12f 65 WRITE_BYTE 0x130 65 WRITE_BYTE 0x131 65 WRITE_BYTE 0x132 65 COPY_EXISTING ~spwi303.spl~ ~override~ READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ SET ~numsofar~=0 WHILE (~numsofar~<~numabil~) BEGIN WRITE_SHORT (~aboffset~+~numsofar~*0x28 +0x26) 188 SET ~numsofar~=~%numsofar%~+1 END ////////////////////////////////////////////////////////////////////////////////// BEGIN @72 DESIGNATED 40//Fine weapons are affected by the iron crisis SUBCOMPONENT @6 //Replace many magic weapons with fine-quality ones /////////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE (!(FILE_EXISTS_IN_GAME ~dw#fine_weapons.mrk~)=1) @4006// for BGT - avoid clash with SCSII component COPY_EXISTING ~misc01.itm~ ~override/dw#6.xxx~ //installation marker ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY ~scs/nonmagic~ ~override~ OUTER_SET ~ironcrisis~=1 LAUNCH_ACTION_MACRO ~Fineweapons_TUTU~ END ELSE BEGIN EXTEND_BOTTOM ~DPLAYER2.BCS~ ~SCS/BGT/shatter.baf~ EXTEND_BOTTOM ~DPLAYER3.BCS~ ~SCS/BGT/shatter.baf~ OUTER_SET "shatter" = 1 LAUNCH_ACTION_MACRO ~Fineweapons_BGT~ END ////////////////////////////////////////////////////////////////////////////////// BEGIN @73 DESIGNATED 41//Fine weapons are immune to the iron crisis SUBCOMPONENT @6 //Replace many magic weapons with fine-quality ones /////////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE (!(FILE_EXISTS_IN_GAME ~dw#fine_weapons.mrk~)=1) @4006 // for BGT - avoid clash with SCSII component COPY_EXISTING ~misc01.itm~ ~override/dw#6.xxx~ //installation marker ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY ~scs/nonmagic~ ~override~ OUTER_SET ~ironcrisis~=0 LAUNCH_ACTION_MACRO ~Fineweapons_TUTU~ END ELSE BEGIN OUTER_SET "shatter" = 0 LAUNCH_ACTION_MACRO ~Fineweapons_BGT~ END //////////////////////////////////////////////////////////////////////// BEGIN @8 DESIGNATED 50//Reintroduce potions of extra-healing //////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#8.xxx~ //installation marker COPY_EXISTING ~%tutu_var%TEM2304.sto~ ~override~ // Temple at the FAI ADD_STORE_ITEM ~%tutu_var%dwexhe~ #1 #0 #0 ~IDENTIFIED~ #2 UNLESS ~%tutu_var%dwexhe~ COPY_EXISTING ~%tutu_var%TEM3402.sto~ ~override~ // Song of the Morning ADD_STORE_ITEM ~%tutu_var%dwexhe~ #1 #0 #0 ~IDENTIFIED~ #3 UNLESS ~%tutu_var%dwexhe~ COPY_EXISTING ~%tutu_var%TEM0132.STO~ ~override~ // Lady's temple ADD_STORE_ITEM ~%tutu_var%dwexhe~ #1 #0 #0 ~IDENTIFIED~ #3 UNLESS ~%tutu_var%dwexhe~ COPY_EXISTING ~%tutu_var%TEM0131.sto~ ~override~ // High Hall of Wonders ADD_STORE_ITEM ~%tutu_var%dwexhe~ #1 #0 #0 ~IDENTIFIED~ #5 UNLESS ~%tutu_var%dwexhe~ ////////////////////////////////////////////////////////////////////////// BEGIN @74 DESIGNATED 55 //Remove BG2-only spells ////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE FILE_EXISTS_IN_GAME ~fw0100.are~ @4001 COPY_EXISTING ~spwi120.spl~ ~override~ ~spwi125.spl~ ~override~ ~spwi220.spl~ ~override~ ~spwi221.spl~ ~override~ ~spwi223.spl~ ~override~ ~spwi224.spl~ ~override~ ~spwi302.spl~ ~override~ ~spwi318.spl~ ~override~ ~spwi319.spl~ ~override~ ~spwi320.spl~ ~override~ ~spwi321.spl~ ~override~ ~spwi322.spl~ ~override~ ~spwi324.spl~ ~override~ ~spwi325.spl~ ~override~ ~spwi403.spl~ ~override~ ~spwi404.spl~ ~override~ ~spwi409.spl~ ~override~ ~spwi410.spl~ ~override~ ~spwi417.spl~ ~override~ ~spwi418.spl~ ~override~ ~spwi419.spl~ ~override~ ~spwi420.spl~ ~override~ ~spwi421.spl~ ~override~ ~spwi423.spl~ ~override~ ~spwi424.spl~ ~override~ ~spwi425.spl~ ~override~ ~spwi510.spl~ ~override~ ~spwi511.spl~ ~override~ ~spwi512.spl~ ~override~ ~spwi513.spl~ ~override~ ~spwi514.spl~ ~override~ ~spwi515.spl~ ~override~ ~spwi516.spl~ ~override~ ~spwi517.spl~ ~override~ ~spwi518.spl~ ~override~ ~spwi519.spl~ ~override~ ~spwi520.spl~ ~override~ ~spwi521.spl~ ~override~ ~spwi522.spl~ ~override~ ~spwi523.spl~ ~override~ WRITE_LONG 0x34 9 COPY ~scs/misc/spells.2da~ ~override~ //////////////////////////////////////////////////////////////////////////// BEGIN @9 DESIGNATED 60 //Faster bears //////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE (!(FILE_EXISTS_IN_GAME ~dw#fastbears.mrk~)=1) @4006 COPY_EXISTING ~misc01.itm~ ~override/dw#9.xxx~ //installation marker COPY ~scs/misc/dw#bfst.spl~ ~override~ EXTEND_TOP ~%tutu_var%bear.bcs~ ~scs/scriptmisc/dw#bear.baf~ EXTEND_TOP ~%tutu_var%cbear.bcs~ ~scs/scriptmisc/dw#bear.baf~ COMPILE ~scs/scriptmisc/dw#bear.baf~ COPY_EXISTING ~%tutu_var%ursa.cre~ ~override~ WRITE_ASCII 0x248 ~dw#bear~ #8 BUT_ONLY_IF_IT_CHANGES <<<<<<<< .../scsII-inline/dw#bearlist.2da bearblsu bearbrsu beargrsu bearcasu spirbear >>>>>>>> COPY ~.../scsII-inline/dw#bearlist.2da~ ~override~ COUNT_2DA_ROWS 1 ~rowcount~ FOR(i=0;i<~%rowcount%~;i=i+1) BEGIN READ_2DA_ENTRY ~%i%~ 0 1 ~bearname~ PATCH_IF FILE_EXISTS_IN_GAME ~%bearname%.CRE~ THEN BEGIN INNER_ACTION BEGIN COPY_EXISTING ~%bearname%.cre~ ~override~ WRITE_ASCII 0x250 ~dw#bear~ #8 BUT_ONLY_IF_IT_CHANGES END END END BUT_ONLY_IF_IT_CHANGES ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%kaldran.cre~ ~override~ WRITE_ASCII 0x248 ~dw#bear~ #8 BUT_ONLY_IF_IT_CHANGES END COPY_EXISTING ~spcl611.spl~ ~override~ ~spcl613.spl~ ~override~ ~spwi497.spl~ ~override~ ~spwi498.spl~ ~override~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~126~ //movement rate WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~0~ //Power=0 WRITE_LONG (~editloc~+0x4) ~8~ //Set speed as 8 WRITE_LONG (~editloc~+0x8) ~1~ //Type: set WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~2~ //Not dispel/Not Bypass resistance WRITE_LONG (~editloc~+0xe) ~3600000~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability BUT_ONLY_IF_IT_CHANGES COPY ~scs/priest/dw#bear.spl~ ~override~ // An NPC shapechange spell, used in ~Smarter Priests~ READ_LONG 0x6a ~effectsoffset~ READ_SHORT 0x90 ~numeffects~ WRITE_SHORT 0x90 (~numeffects~+1) SET ~editloc~=~%effectsoffset%~+~%numeffects%~*0x30 INSERT_BYTES ~editloc~ 0x30 WRITE_SHORT ~editloc~ ~126~ //movement rate WRITE_BYTE (~editloc~+0x2) ~1~ //TargetSelf WRITE_BYTE (~editloc~+0x3) ~84~ //Power=0 WRITE_LONG (~editloc~+0x4) ~8~ //Set speed as 8 WRITE_LONG (~editloc~+0x8) ~1~ //Type: set WRITE_BYTE (~editloc~+0xc) ~0~ //Instant/Limited WRITE_BYTE (~editloc~+0xd) ~2~ //Not dispel/Not Bypass resistance WRITE_LONG (~editloc~+0xe) ~3600000~ //Duration WRITE_LONG (~editloc~+0x12) ~100~ //Probability BUT_ONLY_IF_IT_CHANGES ///////////////Part B - NPC management //////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// BEGIN @10 DESIGNATED 70 //Allow player to choose NPC proficiencies and skills //////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#10.xxx~ //installation marker ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY ~scs\bgt\j#hp1.spl~ ~override~ END COPY_EXISTING ~j#hp1.spl~ ~override/dw#hp.spl~ WRITE_SHORT ~0x9e~ ~-20~ WRITE_BYTE ~0xa7~ ~0~ //to avoid Viconia's MR causing problems! COPY ~scs/misc/dw#rang.spl~ ~override~ //grants rangers' 2-weapon proficiencies COPY_EXISTING ~%tutu_var%ajanti.cre~ ~override~ ~%tutu_var%ajanti4.cre~ ~override~ ~%tutu_var%ajanti6.cre~ ~override~ ~%tutu_var%alora.cre~ ~override~ ~%tutu_var%alora6.cre~ ~override~ ~%tutu_var%branwe.cre~ ~override~ ~%tutu_var%branwe5.cre~ ~override~ ~%tutu_var%coran.cre~ ~override~ ~%tutu_var%coran5.cre~ ~override~ ~%tutu_var%dynahe.cre~ ~override~ ~%tutu_var%dynahe2.cre~ ~override~ ~%tutu_var%dynahe4.cre~ ~override~ ~%tutu_var%dynahe6.cre~ ~override~ ~%tutu_var%edwin.cre~ ~override~ ~%tutu_var%edwin2.cre~ ~override~ ~%tutu_var%edwin4.cre~ ~override~ ~%tutu_var%edwin6.cre~ ~override~ ~%tutu_var%eldoth.cre~ ~override~ ~%tutu_var%eldoth5.cre~ ~override~ ~%tutu_var%faldor.cre~ ~override~ ~%tutu_var%faldor5.cre~ ~override~ ~%tutu_var%garric.cre~ ~override~ ~%tutu_var%garric2.cre~ ~override~ ~%tutu_var%garric4.cre~ ~override~ ~%tutu_var%garric6.cre~ ~override~ ~%tutu_var%imoen1.cre~ ~override~ ~%tutu_var%imoen2.cre~ ~override~ ~%tutu_var%imoen4.cre~ ~override~ ~%tutu_imoen6%.cre~ ~override~ ~%tutu_var%jaheir.cre~ ~override~ ~%tutu_var%jaheir2.cre~ ~override~ ~%tutu_var%jaheir4.cre~ ~override~ ~%tutu_var%jaheir6.cre~ ~override~ ~%tutu_var%kagain.cre~ ~override~ ~%tutu_var%kagain2.cre~ ~override~ ~%tutu_var%kagain4.cre~ ~override~ ~%tutu_var%kagain6.cre~ ~override~ ~%tutu_var%khalid.cre~ ~override~ ~%tutu_var%khalid2.cre~ ~override~ ~%tutu_var%khalid4.cre~ ~override~ ~%tutu_var%khalid6.cre~ ~override~ ~%tutu_var%kivan.cre~ ~override~ ~%tutu_var%kivan4.cre~ ~override~ ~%tutu_var%kivan6.cre~ ~override~ ~%tutu_var%minsc.cre~ ~override~ ~%tutu_var%minsc2.cre~ ~override~ ~%tutu_var%minsc4.cre~ ~override~ ~%tutu_var%minsc6.cre~ ~override~ ~%tutu_var%montar.cre~ ~override~ ~%tutu_var%montar2.cre~ ~override~ ~%tutu_var%montar4.cre~ ~override~ ~%tutu_var%montar6.cre~ ~override~ ~%tutu_scriptbg%quayle.cre~ ~override~ ~%tutu_var%quayle4.cre~ ~override~ ~%tutu_var%quayle6.cre~ ~override~ ~%tutu_var%safana.cre~ ~override~ ~%tutu_var%safana4.cre~ ~override~ ~%tutu_var%safana6.cre~ ~override~ ~%tutu_var%sharte.cre~ ~override~ ~%tutu_var%sharte4.cre~ ~override~ ~%tutu_var%sharte6.cre~ ~override~ ~%tutu_var%skie.cre~ ~override~ ~%tutu_var%skie6.cre~ ~override~ ~%tutu_var%tiax.cre~ ~override~ ~%tutu_var%tiax4.cre~ ~override~ ~%tutu_var%tiax6.cre~ ~override~ ~%tutu_var%viconi.cre~ ~override~ ~%tutu_var%viconi4.cre~ ~override~ ~%tutu_viconi6%.cre~ ~override~ ~%tutu_scriptbg%xan.cre~ ~override~ ~%tutu_var%xan4.cre~ ~override~ ~%tutu_var%xan6.cre~ ~override~ ~%tutu_scriptbg%xzar.cre~ ~override~ ~%tutu_var%xzar2.cre~ ~override~ ~%tutu_var%xzar4.cre~ ~override~ ~%tutu_var%xzar6.cre~ ~override~ ~%tutu_var%yeslic.cre~ ~override~ ~%tutu_var%yeslic5.cre~ ~override~ ~a#murn.cre~ ~override~ ~sufinch1.cre~ ~override~ ~sufinch2.cre~ ~override~ ~sufinch4.cre~ ~override~ ~j#indi01.cre~ ~override~ ~j#indi03.cre~ ~override~ ~j#indi04.cre~ ~override~ PATCH_IF (SOURCE_SIZE>0x1) THEN BEGIN WRITE_LONG 0x18 0 //current XP WRITE_BYTE 0x24 20 //current hp WRITE_BYTE 0x26 20 //max hp // a somewhat notional guess so that potentially antagonistic NPCS // (e.g. Minsc or Shar-Teel) aren't easy kills! WRITE_BYTE 0x234 0 //level (first class) WRITE_BYTE 0x235 0 //level (second class) WRITE_BYTE 0x45 0 //hide in shadows WRITE_BYTE 0x64 0 //detect illusions WRITE_BYTE 0x65 0 //set traps WRITE_BYTE 0x66 0 //lore WRITE_BYTE 0x67 5 //open locks WRITE_BYTE 0x68 0 //move silently WRITE_BYTE 0x69 10 //find traps WRITE_BYTE 0x6a 0 //pick pockets READ_BYTE 0x33 "eff_version" READ_LONG 0x2c4 ~aboffset~ //proficiencies READ_SHORT 0x2c8 ~#ab~ SET ~loc~=~%aboffset%~ SET ~currentab~=0 WHILE (~%currentab%~<~%#ab%~ AND ~%eff_version%~=0) BEGIN READ_BYTE ~%loc%~ ~%profcheck%~ PATCH_IF (~%profcheck%~=233) THEN BEGIN WRITE_BYTE (~%loc%~+0x4) 0 END SET ~loc~=~%loc%~+0x30 SET ~currentab~=~%currentab%~+1 END WHILE (~%currentab%~<~%#ab%~ AND ~%eff_version%~=1) BEGIN READ_BYTE (~%loc%~+0x8) ~%profcheck%~ PATCH_IF (~%profcheck%~=233) THEN BEGIN WRITE_BYTE (~%loc%~+0x14) 0 END SET ~loc~=~%loc%~+0x108 SET ~currentab~=~%currentab%~+1 END END BUT_ONLY_IF_IT_CHANGES // Ajantis, Minsc, and Shar-Teel, who plausibly fight the party before / instead of joining it, get a faux-magic weapon // to compensate for their lack of proficiency. COPY_EXISTING ~sw1h41.itm~ ~override/dw#npcl0.itm~ //based on the BG2 item to avoid breakage issues WRITE_BYTE 0x18 0 //not droppable WRITE_LONG 0x60 0 // remove enchantment WRITE_SHORT 0x84 5 // remove speed bonus WRITE_SHORT 0x86 4 //+4 to hit WRITE_SHORT 0x8c 2 //+2 to damage COPY_EXISTING ~%tutu_var%sharte.cre~ ~override~ ~%tutu_var%sharte4.cre~ ~override~ ~%tutu_var%sharte6.cre~ ~override~ ~%tutu_var%ajanti.cre~ ~override~ ~%tutu_var%ajanti4.cre~ ~override~ ~%tutu_var%ajanti6.cre~ ~override~ ~%tutu_var%minsc.cre~ ~override~ ~%tutu_var%minsc2.cre~ ~override~ ~%tutu_var%minsc4.cre~ ~override~ ~%tutu_var%minsc6.cre~ ~override~ ADD_CRE_ITEM ~dw#npcl0~ #0 #0 #0 ~IDENTIFIED~ ~WEAPON1 WEAPON2 WEAPON3 WEAPON4~ EQUIP EXTEND_BOTTOM ~%AJANTIS_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%ALORA_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%BRANWEN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%CORAN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%DYNAHEIR_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%EDWIN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%ELDOTH_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%FALDORN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%GARRICK_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%IMOEN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%JAHEIRA_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%KAGAIN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%KHALID_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%KIVAN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%MINSC_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%MONTARON_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%QUAYLE_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%SAFANA_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%SKIE_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%SHARTEEL_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%TIAX_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%VICONIA_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%XAN_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%XZAR_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~%YESLICK_BCS%.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~a#murn.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~j#indi.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 EXTEND_BOTTOM ~sufinch.bcs~ ~scs\misc\levelup.baf~ REPLACE ~444444~ @501 ///////////////////////////////////////////////////////////////////////////// BEGIN @11 DESIGNATED 80 // Allow NPC pairs to separate ///////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE FILE_EXISTS_IN_GAME ~fw0100.are~ @4001 COPY_EXISTING ~misc01.itm~ ~override/dw#11.xxx~ //installation marker ACTION_IF NOT FILE_CONTAINS ~override/_jaheip.dlg~ ~DMWWpairsepinstalled~ THEN BEGIN COMPILE ~scs/misc/pairsep.d~ END ////////////////////////////////////////////////////////////////////////////// BEGIN @12 DESIGNATED 90 // NPCs go to inns ////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE FILE_EXISTS_IN_GAME ~fw0100.are~ @4001 FORBID_FILE ~override/X#WaitAtInn.G3~ @66 COPY_EXISTING ~_misc01.itm~ ~override/dw#12.xxx~ //installation marker ACTION_IF NOT FILE_CONTAINS ~override/_ajantp.dlg~ ~IslandTravel~ // a check to see if we've already installed! THEN BEGIN COPY ~scs/misc/depart.d~ ~override/dw#ajant.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_ajantp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~810~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~824,961~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~766,966~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~602,463~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~537,704~ COMPILE ~override/dw#ajant.d~ COPY ~scs/misc/depart.d~ ~override/dw#finch.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~sufinchp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~3~ REPLACE_TEXTUALLY ~dmwwresponse~ ~840~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~818,970~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~800,980~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~590,448~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~568,717~ COMPILE ~override/dw#finch.d~ COPY ~scs/misc/depart.d~ ~override/dw#imoen.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_imoenp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~811~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~812,980~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~814,1006~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~573,436~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~598,737~ COMPILE ~override/dw#imoen.d~ COPY ~scs/misc/depart.d~ ~override/dw#murneth.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~a#murnp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~841~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~806,990~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~760,900~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~453,433~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~630,730~ COMPILE ~override/dw#murneth.d~ COPY ~scs/misc/depart.d~ ~override/dw#kagain.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_kagaip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~812~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~800,1000~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~721,790~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~247,431~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~661,726~ COMPILE ~override/dw#kagain.d~ COPY ~scs/misc/depart.d~ ~override/dw#indira.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~j#indip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~842~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~794,1010~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~740,768~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~264,444~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~677,694~ COMPILE ~override/dw#indira.d~ COPY ~scs/misc/depart.d~ ~override/dw#edwin.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_edwinp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~813~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~788,1020~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~778,754~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~284,454~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~692,664~ COMPILE ~override/dw#edwin.d~ COPY ~scs/misc/depart.d~ ~override/dw#branwen.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_branwp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~814~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~776,1040~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~479,634~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~461,394~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~637,621~ COMPILE ~override/dw#branwen.d~ COPY ~scs/misc/depart.d~ ~override/dw#safana.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_safanp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~815~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~764,1060~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~523,595~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~429,411~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~783,732~ COMPILE ~override/dw#safana.d~ COPY ~scs/misc/depart.d~ ~override/dw#garrick.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_garrip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~816~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~752,1080~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~575,562~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~367,580~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~837,783~ COMPILE ~override/dw#garrick.d~ COPY ~scs/misc/depart.d~ ~override/dw#coran.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_coranp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~817~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~740,1100~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~614,521~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~402,613~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~772,853~ COMPILE ~override/dw#coran.d~ COPY ~scs/misc/depart.d~ ~override/dw#kivan.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_kivanp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~818~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~730,1128~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~1070,663~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~260,307~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~686,843~ COMPILE ~override/dw#kivan.d~ COPY ~scs/misc/depart.d~ ~override/dw#yeslick.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_yeslip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~819~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~820,1110~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~1117,697~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~251,351~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~653,782~ COMPILE ~override/dw#yeslick.d~ COPY ~scs/misc/depart.d~ ~override/dw#xan.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_xanp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~820~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~860,965~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~1178,738~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~531,392~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~702,736~ COMPILE ~override/dw#xan.d~ COPY ~scs/misc/depart.d~ ~override/dw#alora.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_alorap~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~821~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~850,985~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~1224,761~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~525,428~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~806,455~ COMPILE ~override/dw#alora.d~ COPY ~scs/misc/depart.d~ ~override/dw#faldorn.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_faldop~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~822~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~840,1005~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~817,720~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~448,423~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~825,517~ COMPILE ~override/dw#faldorn.d~ COPY ~scs/misc/depart.d~ ~override/dw#quayle.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_quaylp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~823~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~830,1025~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~802,686~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~440,473~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~875,538~ COMPILE ~override/dw#quayle.d~ COPY ~scs/misc/depart.d~ ~override/dw#sharteel.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_shartp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~824~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~820,1045~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~880,745~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~515,550~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~921,525~ COMPILE ~override/dw#sharteel.d~ COPY ~scs/misc/depart.d~ ~override/dw#tiax.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_tiaxp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~825~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~810,1065~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~939,718~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~480,525~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~1004,605~ COMPILE ~override/dw#tiax.d~ COPY ~scs/misc/depart.d~ ~override/dw#viconia.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_viconp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~826~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~800,1085~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~789,759~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~444,505~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~745,674~ COMPILE ~override/dw#viconia.d~ //now the pairs. This isn't the most efficient way to do it, but it works COPY ~scs/misc/depart.d~ ~override/dw#jaheira.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_jaheip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~831~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~790,1105~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~701,903~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~669,161~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~440,713~ COMPILE ~override/dw#jaheira.d~ COPY ~scs/misc/depart.d~ ~override/dw#jaheira.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_jaheip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~831~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~790,1105~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~701,903~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~669,161~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~440,713~ COMPILE ~override/dw#jaheira.d~ COPY ~scs/misc/depart.d~ ~override/dw#khalid.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_khalip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~832~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~808,1138~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~726,924~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~729,199~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~471,690~ COMPILE ~override/dw#khalid.d~ COPY ~scs/misc/depart.d~ ~override/dw#khalid.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_khalip~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~832~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~808,1138~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~726,924~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~729,199~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~471,690~ COMPILE ~override/dw#khalid.d~ COPY ~scs/misc/depart.d~ ~override/dw#dynaheir.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_dynahp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~833~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~894,970~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~316,611~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~850,277~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~595,476~ COMPILE ~override/dw#dynaheir.d~ COPY ~scs/misc/depart.d~ ~override/dw#dynaheir.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_dynahp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~833~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~894,970~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~316,611~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~850,277~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~595,476~ COMPILE ~override/dw#dynaheir.d~ COPY ~scs/misc/depart.d~ ~override/dw#minsc.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_minscp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~834~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~882,990~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~356,641~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~839,318~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~617,507~ COMPILE ~override/dw#minsc.d~ COPY ~scs/misc/depart.d~ ~override/dw#minsc.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_minscp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~834~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~882,990~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~356,641~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~839,318~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~617,507~ COMPILE ~override/dw#minsc.d~ COPY ~scs/misc/depart.d~ ~override/dw#xzar.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_xzarp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~835~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~870,1010~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~682,684~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~747,362~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~692,421~ COMPILE ~override/dw#xzar.d~ COPY ~scs/misc/depart.d~ ~override/dw#xzar.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_xzarp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~835~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~870,1010~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~682,684~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~747,362~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~692,421~ COMPILE ~override/dw#xzar.d~ COPY ~scs/misc/depart.d~ ~override/dw#montar.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_montap~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~836~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~855,1030~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~667,725~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~706,396~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~734,397~ COMPILE ~override/dw#montar.d~ COPY ~scs/misc/depart.d~ ~override/dw#montar.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_montap~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~836~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~855,1030~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~667,725~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~706,396~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~734,397~ COMPILE ~override/dw#montar.d~ COPY ~scs/misc/depart.d~ ~override/dw#skie.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_skiep~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~837~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~846,1050~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~571,428~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~583,260~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~822,355~ COMPILE ~override/dw#skie.d~ COPY ~scs/misc/depart.d~ ~override/dw#skie.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_skiep~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~837~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~846,1050~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~571,428~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~583,260~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~822,355~ COMPILE ~override/dw#skie.d~ COPY ~scs/misc/depart.d~ ~override/dw#eldoth.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_eldotp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~0~ REPLACE_TEXTUALLY ~dmwwresponse~ ~838~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~834,1070~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~621,466~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~535,278~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~873,377~ COMPILE ~override/dw#eldoth.d~ COPY ~scs/misc/depart.d~ ~override/dw#eldoth.d~ REPLACE_TEXTUALLY ~dmwwscriptname~ ~_eldotp~ REPLACE_TEXTUALLY ~dmwwstatenumber~ ~1~ REPLACE_TEXTUALLY ~dmwwresponse~ ~838~ REPLACE_TEXTUALLY ~dmwwbereloc~ ~834,1070~ REPLACE_TEXTUALLY ~dmwwfailoc~ ~621,466~ REPLACE_TEXTUALLY ~dmwwnashloc~ ~535,278~ REPLACE_TEXTUALLY ~dmwwelfloc~ ~873,377~ COMPILE ~override/dw#eldoth.d~ END ////////////////////////////////////////////////////////////////////////// BEGIN @3058 DESIGNATED 95 // Easier party NPC management ////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE !FILE_EXISTS_IN_GAME ~fw0100.are~ @4002 LAUNCH_ACTION_MACRO ~party_management_BGT~ //////////////////////////////////////////////////////////////////////// BEGIN @14 DESIGNATED 100 //Allow Yeslick to use axes //////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#14.xxx~ //installation marker COPY_EXISTING_REGEXP GLOB ~.+\.itm$~ ~override~ PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN // protects against invalid files - borrowed from TutuTweaks READ_SHORT 0x1c ~wpntype~ PATCH_IF (~%wpntype%~ = 25) BEGIN WRITE_BYTE ~0x1f~ ~151~ END END BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~clasweap.2da~ ~override~ //add axe general-weapon type to fighter-cleric SET_2DA_ENTRY 0 0 4 ~ROWNAME SMALL_SWORD~ //(don't know if it's necessary, but...) SET_2DA_ENTRY 10 7 4 1 SET_2DA_ENTRY 0 0 4 ~~ COPY_EXISTING ~weapprof.2da~ ~override~ //give fighter-clerics the ability to specialise in axes SET_2DA_ENTRY 0 0 4 ~ROWNAME ID~ SET_2DA_ENTRY 7 13 4 2 SET_2DA_ENTRY 12 13 4 2 SET_2DA_ENTRY 0 0 4 ~~ /////////////////////////////////////////////////////////////////// BEGIN @16 DESIGNATED 110 //Move NPCs to more convenient locations /////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#16.xxx~ //installation marker ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN //more sophisticated code borrowed from the BG1NPC project //moves Shar-Teel COPY_EXISTING ~baldur.gam~ ~override~ READ_LONG 0x30 non_joined_npcs_off READ_LONG 0x34 non_joined_npcs_count FOR (i = 0; i < non_joined_npcs_count; i+=1) BEGIN SET cre_offset = non_joined_npcs_off + i * 0x160 READ_ASCII 0xc + cre_offset ~CREName~ PATCH_IF !(~%CREName%~ STRING_COMPARE_CASE ~_SHARTE~) BEGIN WRITE_ASCII cre_offset + 0x18 ~FW4300~ #8 WRITE_SHORT cre_offset + 0x20 1391 WRITE_SHORT cre_offset + 0x22 2524 END END BUT_ONLY_IF_IT_CHANGES //moves Viconia COPY_EXISTING ~baldur.gam~ ~override~ READ_LONG 0x30 non_joined_npcs_off READ_LONG 0x34 non_joined_npcs_count FOR (i = 0; i < non_joined_npcs_count; i+=1) BEGIN SET cre_offset = non_joined_npcs_off + i * 0x160 READ_ASCII 0xc + cre_offset ~CREName~ PATCH_IF !(~%CREName%~ STRING_COMPARE_CASE ~_VICONI~) BEGIN WRITE_ASCII cre_offset + 0x18 ~FW3800~ #8 WRITE_SHORT cre_offset + 0x20 1455 WRITE_SHORT cre_offset + 0x22 253 END END BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~_viconi.dlg~ ~override~ DECOMPILE_DLG_TO_D REPLACE_TEXTUALLY ~605\.901~ ~1620.420~ REPLACE_TEXTUALLY ~507\.806~ ~1520.320~ COMPILE_D_TO_DLG //moves Eldoth ACTION_IF NOT FILE_EXISTS ~override/X#EldothMove.G3~ THEN BEGIN COPY_EXISTING ~baldur.gam~ ~override~ READ_LONG 0x30 non_joined_npcs_off READ_LONG 0x34 non_joined_npcs_count FOR (i = 0; i < non_joined_npcs_count; i+=1) BEGIN SET cre_offset = non_joined_npcs_off + i * 0x160 READ_ASCII 0xc + cre_offset ~CREName~ PATCH_IF !(~%CREName%~ STRING_COMPARE_CASE ~_ELDOTH~) BEGIN WRITE_ASCII cre_offset + 0x18 ~FW2800~ #8 WRITE_SHORT cre_offset + 0x20 753 WRITE_SHORT cre_offset + 0x22 872 END END BUT_ONLY_IF_IT_CHANGES END ELSE BEGIN PRINT @63 END //moves Tiax ACTION_IF NOT FILE_EXISTS ~override/X#TiaxMove.G3~ THEN BEGIN COPY_EXISTING ~baldur.gam~ ~override~ READ_LONG 0x30 non_joined_npcs_off READ_LONG 0x34 non_joined_npcs_count FOR (i = 0; i < non_joined_npcs_count; i+=1) BEGIN SET cre_offset = non_joined_npcs_off + i * 0x160 READ_ASCII 0xc + cre_offset ~CREName~ PATCH_IF !(~%CREName%~ STRING_COMPARE_CASE ~_TIAX~) BEGIN WRITE_ASCII cre_offset + 0x18 ~FW3300~ #8 WRITE_SHORT cre_offset + 0x20 2115 WRITE_SHORT cre_offset + 0x22 2203 END END BUT_ONLY_IF_IT_CHANGES END ELSE BEGIN PRINT @64 END //moves Quayle ACTION_IF NOT FILE_EXISTS ~override/X#QuayleMove.G3~ THEN BEGIN COPY_EXISTING ~baldur.gam~ ~override~ READ_LONG 0x30 non_joined_npcs_off READ_LONG 0x34 non_joined_npcs_count FOR (i = 0; i < non_joined_npcs_count; i+=1) BEGIN SET cre_offset = non_joined_npcs_off + i * 0x160 READ_ASCII 0xc + cre_offset ~CREName~ PATCH_IF !(~%CREName%~ STRING_COMPARE_CASE ~_QUAYLE~) BEGIN WRITE_ASCII cre_offset + 0x18 ~FW4900~ #8 WRITE_SHORT cre_offset + 0x20 1870 WRITE_SHORT cre_offset + 0x22 3081 END END BUT_ONLY_IF_IT_CHANGES END ELSE BEGIN PRINT @65 END END ELSE BEGIN LAUNCH_ACTION_MACRO ~move_NPCs_BGT~ END ////////////Part C - encounters /////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// BEGIN @18 DESIGNATED 120 // Smarter general AI ////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#18.xxx~ //installation marker ACTION_IF NOT FILE_EXISTS ~dw#olwta.bcs~ THEN BEGIN COPY_EXISTING ~%tutu_scriptw%tasight.bcs~ ~override/dw#olwta.bcs~ END ACTION_IF NOT FILE_EXISTS ~dw#olwtr.bcs~ THEN BEGIN COPY_EXISTING ~%tutu_var%wtarsgt.bcs~ ~override/dw#olwtr.bcs~ END ACTION_IF NOT FILE_EXISTS ~dw#olwda.bcs~ THEN BEGIN COMPILE ~scs/genai/dw#olwda.baf~ END ACTION_IF NOT FILE_EXISTS ~dw#olwdr.bcs~ THEN BEGIN COMPILE ~scs/genai/dw#olwdr.baf~ END COPY_EXISTING ~dw#olwtr.bcs~ ~override/dmww_wtr.bcs~ COPY_EXISTING ~dw#olwdr.bcs~ ~override/dmww_wta.bcs~ //legacy /// The modified SCSII genai macro LAUNCH_ACTION_MACRO ~genai_core~ //modify a few of the game's existing scripts to ensure that they use the new ones COPY_EXISTING ~%tutu_var%catura.cre~ ~override~ ~%tutu_var%gretek.cre~ ~override~ ~%tutu_var%nader.cre~ ~override~ WRITE_ASCII 0x250 ~~ #8 // These guys will now not deliberately target Gorpel Hind, but they'll fight back COMPILE ~scs/genai/_opspell.baf~ //allows doppelgangers to use the new scripts (previously they //had an automatic-attack which overrode it) COMPILE ~scs/genai/_reywolf.baf~ //ditto Greywolf ACTION_IF !FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~_reywolf.bcs~ ~override/greywolf.bcs~ ~_opspell.bcs~ ~override/dopspell.bcs~ END COPY_EXISTING ~%tutu_scriptbg%gorf.cre~ ~override~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_scriptw%tasight~ COPY_EXISTING ~%tutu_var%ghast.cre~ ~override~ ~%tutu_var%ghasts.cre~ ~override~ WRITE_ASCII 0x248 ~~ #8 ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_scriptg%houllor.cre~ ~override~ WRITE_ASCII 0x258 ~~ #8 END // create the ~don't move~ object that some creatures use COPY_EXISTING ~misc16.itm~ ~override/dw#move0.itm~ WRITE_LONG 0x18 0 // BP compatibility ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~misc01.itm~ ~override/dw#comp1.xxx~ // installation marker 1 INCLUDE ~SCS/bgt/bpcomgen.tph~ END ///////////////////////////////////////////////////////////////////////////////////////////// BEGIN @19 DESIGNATED 130 // Better calls for help /////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#19.xxx~ //installation marker // step 0: solve Coaster's weird bug ACTION_IF !(FILE_EXISTS_IN_GAME ~dw#18.xxx~) THEN BEGIN COMPILE ~scs\genai\dw#olwdr.baf~ COMPILE ~scs\genai\dw#olwdr.baf~ COPY_EXISTING ~dw#olwda.bcs~ ~override\%tutu_scriptw%dasight.bcs~ COPY_EXISTING ~dw#olwdr.bcs~ ~override\%tutu_var%wdarsgt.bcs~ END // Step 1: assemble the scripts COMPILE ~scs/help/dw#help.baf~ COPY_EXISTING ~dw#help.bcs~ ~override/dw#help2.bcs~ EXTEND_BOTTOM ~dw#help.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~1~ REPLACE_TEXTUALLY ~XXXXX~ ~~ EXTEND_BOTTOM ~dw#help.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~2~ REPLACE_TEXTUALLY ~XXXXX~ ~~ EXTEND_BOTTOM ~dw#help.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~3~ REPLACE_TEXTUALLY ~XXXXX~ ~~ EXTEND_BOTTOM ~dw#help.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~4~ REPLACE_TEXTUALLY ~XXXXX~ ~~ EXTEND_BOTTOM ~dw#help.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~5~ REPLACE_TEXTUALLY ~XXXXX~ ~~ EXTEND_BOTTOM ~dw#help.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~6~ REPLACE_TEXTUALLY ~XXXXX~ ~~ EXTEND_BOTTOM ~dw#help2.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~1~ REPLACE_TEXTUALLY ~XXXXX~ ~Range(LastHeardBy(Myself),15)~ EXTEND_BOTTOM ~dw#help2.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~2~ REPLACE_TEXTUALLY ~XXXXX~ ~Range(LastHeardBy(Myself),15)~ EXTEND_BOTTOM ~dw#help2.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~3~ REPLACE_TEXTUALLY ~XXXXX~ ~Range(LastHeardBy(Myself),15)~ EXTEND_BOTTOM ~dw#help2.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~4~ REPLACE_TEXTUALLY ~XXXXX~ ~Range(LastHeardBy(Myself),15)~ EXTEND_BOTTOM ~dw#help2.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~5~ REPLACE_TEXTUALLY ~XXXXX~ ~Range(LastHeardBy(Myself),15)~ EXTEND_BOTTOM ~dw#help2.bcs~ ~scs/help/helpadd.baf~ REPLACE_TEXTUALLY ~KKK~ ~6~ REPLACE_TEXTUALLY ~XXXXX~ ~Range(LastHeardBy(Myself),15)~ //Step 2: construct individual help scripts. //NB naming conventions aren't ideal for public release COPY ~override/dw#help.bcs~ ~override/dw#undef.bcs~ REPLACE_TEXTUALLY ~777~ ~61~ REPLACE_TEXTUALLY ~888~ ~81~ COPY ~override/dw#help.bcs~ ~override/%tutu_var%gnollf.bcs~ REPLACE_TEXTUALLY ~777~ ~62~ REPLACE_TEXTUALLY ~888~ ~82~ COPY ~override/dw#help.bcs~ ~override/%tutu_var%hobgoba.bcs~ //hobgoblins use the same help code as SHOUT, so that the hobgobs in the Cloakwood help the Throne humans REPLACE_TEXTUALLY ~777~ ~99~ REPLACE_TEXTUALLY ~888~ ~98~ COPY ~override/dw#help.bcs~ ~override/%tutu_var%hobgobf.bcs~ REPLACE_TEXTUALLY ~777~ ~99~ REPLACE_TEXTUALLY ~888~ ~98~ COPY ~override/dw#help.bcs~ ~override/%tutu_var%kobolda.bcs~ REPLACE_TEXTUALLY ~777~ ~64~ REPLACE_TEXTUALLY ~888~ ~84~ COPY ~override/dw#help.bcs~ ~override/%tutu_var%koboldf.bcs~ REPLACE_TEXTUALLY ~777~ ~64~ REPLACE_TEXTUALLY ~888~ ~84~ COPY ~override/dw#help.bcs~ ~override/dw#ogref.bcs~ REPLACE_TEXTUALLY ~777~ ~65~ REPLACE_TEXTUALLY ~888~ ~85~ COPY ~override/dw#help2.bcs~ ~override/dw#spidf.bcs~ REPLACE_TEXTUALLY ~777~ ~66~ REPLACE_TEXTUALLY ~888~ ~86~ COPY ~override/dw#help.bcs~ ~override/%tutu_var%tasloif.bcs~ REPLACE_TEXTUALLY ~777~ ~67~ REPLACE_TEXTUALLY ~888~ ~87~ COPY ~override/dw#help.bcs~ ~override/dw#weref.bcs~ REPLACE_TEXTUALLY ~777~ ~68~ REPLACE_TEXTUALLY ~888~ ~88~ COPY ~override/dw#help2.bcs~ ~override/dw#wolff.bcs~ REPLACE_TEXTUALLY ~777~ ~68~ REPLACE_TEXTUALLY ~888~ ~88~ COPY ~override/dw#help.bcs~ ~override/dw#wowef.bcs~ REPLACE_TEXTUALLY ~777~ ~69~ REPLACE_TEXTUALLY ~888~ ~89~ COPY ~override/dw#help.bcs~ ~override/dw#wyvef.bcs~ REPLACE_TEXTUALLY ~777~ ~70~ REPLACE_TEXTUALLY ~888~ ~90~ COPY ~override/dw#help.bcs~ ~override/dw#xvarf.bcs~ REPLACE_TEXTUALLY ~777~ ~71~ REPLACE_TEXTUALLY ~888~ ~71~ // by setting these the same, we ensure that Xvarts in the village all rally together COPY ~override/dw#help.bcs~ ~override/%tutu_var%gibber.bcs~ REPLACE_TEXTUALLY ~777~ ~72~ REPLACE_TEXTUALLY ~888~ ~92~ EXTEND_TOP ~%tutu_var%gibber.bcs~ ~scs/help/gibber.baf~ COPY ~override/dw#help2.bcs~ ~override/dw#dogf.bcs~ REPLACE_TEXTUALLY ~777~ ~73~ REPLACE_TEXTUALLY ~888~ ~93~ EXTEND_TOP ~%tutu_var%wardog.bcs~ ~override/dw#dogf.bcs~ EXTEND_TOP ~%tutu_var%wilddog.bcs~ ~override/dw#dogf.bcs~ COPY ~override/dw#help2.bcs~ ~override/dw#basif.bcs~ REPLACE_TEXTUALLY ~777~ ~74~ REPLACE_TEXTUALLY ~888~ ~94~ COPY ~override/dw#help.bcs~ ~override/dw#bandf.bcs~ //bandit-camp alert REPLACE_TEXTUALLY ~777~ ~75~ REPLACE_TEXTUALLY ~888~ ~75~ //all the camp should come forward COPY ~override/dw#help.bcs~ ~override/%tutu_var%cultsht.bcs~ REPLACE_TEXTUALLY ~777~ ~76~ REPLACE_TEXTUALLY ~888~ ~96~ ACTION_IF FILE_EXISTS ~override/macinit.bcs~ THEN BEGIN //is EasyTutu installed? COPY ~override/dw#help.bcs~ ~override/macshout.bcs~ REPLACE_TEXTUALLY ~777~ ~99~ REPLACE_TEXTUALLY ~888~ ~98~ EXTEND_TOP ~macshout.bcs~ ~scs/help/hostile.baf~ //the shout script includes a go-hostile component END ELSE BEGIN COPY ~override/dw#help.bcs~ ~override/_shout.bcs~ //NOT AN ACCIDENT that there is no tutu_var here REPLACE_TEXTUALLY ~777~ ~99~ REPLACE_TEXTUALLY ~888~ ~98~ EXTEND_TOP ~_shout.bcs~ ~scs/help/hostile.baf~ //the shout script includes a go-hostile component END //Step 2.5: modify the wtasight and wtarsgt blocks so that monsters have an active stop-calling-for-help //step. This is only needed if smarter AI isn't also installed. ACTION_IF NOT FILE_EXISTS ~override/dw#wtacor.bcs~ //check for smarter AI THEN BEGIN EXTEND_BOTTOM ~%tutu_scriptw%tasight.bcs~ ~scs/genai/stayput.baf~ EXTEND_BOTTOM ~%tutu_var%wtarsgt.bcs~ ~scs/genai/stayput.baf~ END //Step 3: allocate the scripts to creatures. COPY_EXISTING ~%tutu_var%basilg.cre~ ~override~ ~%tutu_scriptbg%basill.cre~ ~override~ ~%tutu_scriptb%asilmut.cre~ ~override~ ~%tutu_var%mutami.cre~ ~override~ WRITE_ASCII 0x248 ~dw#basif~ COPY_EXISTING ~%tutu_var%wyverba.cre~ ~override~ ~%tutu_var%wyvern.cre~ ~override~ WRITE_ASCII 0x248 ~dw#wyvef~ #8 COPY_EXISTING ~%tutu_var%tasloi.cre~ ~override~ WRITE_EVALUATED_ASCII 0x248 ~%tutu_var%tasloif~ #8 COPY_EXISTING ~%tutu_var%ghoul.cre~ ~override~ ~%tutu_var%ghast.cre~ ~override~ ~%tutu_var%ghasts.cre~ ~override~ ~%tutu_var%iskelet.cre~ ~override~ ~%tutu_skeleton_warrior%02.cre~ ~override~ ~%tutu_skeleton_warrior%03.cre~ ~override~ ~%tutu_scripts%kelet_a.cre~ ~override~ ~%tutu_scripts%kelet_b.cre~ ~override~ ~%tutu_scripts%kelet_c.cre~ ~override~ ~%tutu_scripts%kelet03.cre~ ~override~ ~%tutu_var%skelet.cre~ ~override~ ~%tutu_var%skelets.cre~ ~override~ ~%tutu_scriptbg%skelwa.cre~ ~override~ ~%tutu_var%zombie.cre~ ~override~ ~%tutu_scriptz%ombie_a.cre~ ~override~ ~%tutu_scriptz%ombie_b.cre~ ~override~ ~%tutu_scriptz%ombie_c.cre~ ~override~ ~%tutu_scriptz%ombie_d.cre~ ~override~ ~%tutu_scriptz%ombie_e.cre~ ~override~ ~%tutu_var%zombiew.cre~ ~override~ WRITE_ASCII 0x248 ~dw#undef~ ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_scriptg%houllor.cre~ ~override~ ~%tutu_scripts%kelfire.cre~ ~override~ ~%tutu_var%skelaci.cre~ ~override~ ~%tutu_var%skeldis.cre~ ~override~ ~%tutu_var%skelice.cre~ ~override~ WRITE_ASCII 0x248 ~dw#undef~ END COPY_EXISTING ~%tutu_var%spidgi.cre~ ~override~ ~%tutu_var%spidhu.cre~ ~override~ ~%tutu_scripts%pidland.cre~ ~override~ ~%tutu_var%spidsw.cre~ ~override~ ~%tutu_var%spidwr.cre~ ~override~ ~%tutu_var%etterc.cre~ ~override~ ~%tutu_var%etterc1.cre~ ~override~ WRITE_ASCII 0x248 ~dw#spidf~ COPY_EXISTING ~%tutu_var%spidph.cre~ ~override~ WRITE_ASCII 0x250 ~dw#spidf~ ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_scripts%pidphas.cre~ ~override~ WRITE_ASCII 0x250 ~dw#spidf~ END COPY_EXISTING ~%tutu_scriptbg%wolf.cre~ ~override~ //we don't do winter wolves - they're loners ~%tutu_var%worg.cre~ ~override~ ~%tutu_var%wolfdi.cre~ ~override~ ~%tutu_var%wolfdr.cre~ ~override~ ~%tutu_var%wolfva.cre~ ~override~ WRITE_ASCII 0x248 ~dw#wolff~ COPY_EXISTING ~%tutu_var%worgar.cre~ ~override~ WRITE_ASCII 0x250 ~dw#wolff~ COPY_EXISTING ~%tutu_var%ogre.cre~ ~override~ ~%tutu_var%ogre02.cre~ ~override~ ~%tutu_scripto%greberz.cre~ ~override~ ~%tutu_scripto%grebjor.cre~ ~override~ ~%tutu_scripto%gremiri.cre~ ~override~ ~%tutu_var%ogregr.cre~ ~override~ ~%tutu_scripto%gregr_b.cre~ ~override~ ~%tutu_scripto%gregr_c.cre~ ~override~ ~%tutu_scripto%gregr_d.cre~ ~override~ ~%tutu_var%ogreha.cre~ ~override~ ~%tutu_scripto%greha_b.cre~ ~override~ WRITE_ASCII 0x248 ~dw#ogref~ COPY_EXISTING ~%tutu_var%ogres.cre~ ~override~ ~%tutu_var%arghai.cre~ ~override~ WRITE_ASCII 0x250 ~dw#ogref~ COPY_EXISTING ~%tutu_scripto%grema02.cre~ ~override~ WRITE_ASCII 0x250 ~dw#ogref~ ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_scriptd%aesewlf.cre~ ~override~ ~%tutu_var%werewo.cre~ ~override~ WRITE_ASCII 0x248 ~dw#weref~ COPY_EXISTING ~%tutu_var%wolfwe.cre~ ~override~ ~%tutu_scriptw%olfwegl.cre~ ~override~ ~%tutu_scriptw%olfwegr.cre~ ~override~ WRITE_ASCII 0x248 ~dw#wowef~ END EXTEND_TOP ~%tutu_var%xvart.bcs~ ~override/dw#xvarf.bcs~ COPY_EXISTING ~%tutu_var%ursa.cre~ ~override~ WRITE_ASCII 0x250 ~dw#xvarf~ //Ursa the cave bear! COPY_EXISTING ~%tutu_scriptk%obola_a.cre~ ~override~ ~%tutu_scriptk%obola_b.cre~ ~override~ ~%tutu_scriptk%obola_c.cre~ ~override~ ~%tutu_scriptk%obola_d.cre~ ~override~ ~%tutu_scriptk%obola_e.cre~ ~override~ ~%tutu_scriptk%obold_a.cre~ ~override~ ~%tutu_scriptk%obold_b.cre~ ~override~ ~%tutu_scriptk%obold_c.cre~ ~override~ ~%tutu_scriptk%obold_d.cre~ ~override~ ~%tutu_scriptk%obold_e.cre~ ~override~ ~%tutu_scriptk%oboldab.cre~ ~override~ ~%tutu_scriptk%oboldal.cre~ ~override~ ~%tutu_scriptk%oboldfl.cre~ ~override~ ~%tutu_var%kobold3.cre~ ~override~ ~%tutu_var%kobold7.cre~ ~override~ ~%tutu_var%kobolda.cre~ ~override~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%koboldf~ #8 COPY_EXISTING ~%tutu_scriptk%obola_e.cre~ ~override~ WRITE_EVALUATED_ASCII 0x260 ~%tutu_var%wdarsgt~ COPY_EXISTING ~%tutu_var%kobcomm.cre~ ~override~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%koboldf~ COPY_EXISTING ~%tutu_var%kobold3.cre~ ~override~ ~%tutu_var%kobold7.cre~ ~override~ ~%tutu_scriptk%obold_a.cre~ ~override~ ~%tutu_scriptk%obold_b.cre~ ~override~ ~%tutu_scriptk%obold_c.cre~ ~override~ ~%tutu_scriptk%obold_d.cre~ ~override~ ~%tutu_scriptk%obold_e.cre~ ~override~ WRITE_EVALUATED_ASCII 0x268 ~%tutu_scriptw%tasight~ COPY_EXISTING ~%tutu_var%hobgo5.cre~ ~override~ ~%tutu_var%hobgob.cre~ ~override~ ~%tutu_var%hobgoba.cre~ ~override~ ~%tutu_var%hobgobc.cre~ ~override~ ~%tutu_scripth%obgob_a.cre~ ~override~ ~%tutu_scripth%obgob_b.cre~ ~override~ ~%tutu_scripth%obgob_c.cre~ ~override~ ~%tutu_scripth%obgob_d.cre~ ~override~ ~%tutu_scripth%obgob_e.cre~ ~override~ ~%tutu_scripth%obgoa_a.cre~ ~override~ ~%tutu_scripth%obgoa_b.cre~ ~override~ ~%tutu_scripth%obgoa_c.cre~ ~override~ ~%tutu_scripth%obgoa_d.cre~ ~override~ ~%tutu_scripth%obgoa_e.cre~ ~override~ ~%tutu_scripth%obelite.cre~ ~override~ ~%tutu_var%geltik.cre~ ~override~ ~%tutu_var%malkax.cre~ ~override~ WRITE_EVALUATED_ASCII 0x248 ~%tutu_var%hobgobf~ #8 COPY_EXISTING ~%tutu_var%bhobgob.cre~ ~override~ ~%tutu_var%hobgobc.cre~ ~override~ ~%tutu_var%bandcr.cre~ ~override~ ~%tutu_var%credus.cre~ ~override~ ~%tutu_var%taugos.cre~ ~override~ ~%tutu_var%glart.cre~ ~override~ WRITE_ASCII 0x248 ~dw#bandf~ COPY_EXISTING ~%tutu_var%ardeno.cre~ ~override~ ~%tutu_var%banditc.cre~ ~override~ WRITE_ASCII 0x248 ~dw#bandf~ // Step 4 - special cases COMPILE ~scs/help/dw#slyth.baf~ COPY_EXISTING ~dw#slyth.bcs~ ~override/dw#kryst.bcs~ COPY_EXISTING ~%tutu_var%slythe.cre~ ~override~ WRITE_ASCII 0x248 ~dw#slyth~ COPY_EXISTING ~%tutu_var%krysti.cre~ ~override~ WRITE_ASCII 0x248 ~dw#kryst~ // Nashkel guards - shoot Nimbul COPY_EXISTING ~%tutu_var%amnis.cre~ ~override~ ~%tutu_var%bardol.cre~ ~override~ REPLACE_TEXTUALLY CASE_INSENSITIVE ~%tutu_scripts%eeenemy~ ~dw#nimso~ (8) COMPILE ~scs\misc\dw#nimso.baf~ COPY_EXISTING ~%LonelyPeaks%.are~ ~override~ REPLACE_TEXTUALLY ~%tutu_scripth%obelite~ ~dw#oghob~ // Hobgoblin elites in this area are working with the ogres COPY_EXISTING ~%tutu_scripth%obelite.cre~ ~override/dw#oghob.cre~ WRITE_ASCII 0x248 ~dw#ogref~ // one or two creatures should call for help but not respond to others' calls - they have an item which prevents them responding COPY_EXISTING ~misc16.itm~ ~override/dw#nohlp.itm~ WRITE_LONG 0x18 0 COPY_EXISTING ~%tutu_var%iron3.cre~ ~override~ ~%tutu_var%iron4.cre~ ~override~ ~%tutu_var%iron11.cre~ ~override~ ADD_CRE_ITEM ~dw#nohlp~ #0 #0 #0 ~IDENTIFIED~ ~INV2~ // BP compatibility for BGT ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~misc01.itm~ ~override/dw#comp2.xxx~ // installation marker 2 INCLUDE ~SCS/bgt/comshout.tph~ END /////////////////////////////////////////////////////////////////////////////////////// BEGIN @20 DESIGNATED 140// Potions for NPCs /////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#20.xxx~ //installation marker // Stage 1 - install the potion block and make potion-free copies of the combat scripts ACTION_IF NOT FILE_EXISTS ~override/dw#wtanp.bcs~ // have we been here before? THEN BEGIN COPY_EXISTING ~%tutu_scriptw%tasight.bcs~ ~override/dw#wtanp.bcs~ COPY_EXISTING ~%tutu_var%wtarsgt.bcs~ ~override/dw#wtrnp.bcs~ EXTEND_TOP ~%tutu_scriptw%tasight.bcs~ ~scs/scriptmisc/potion.baf~ EVALUATE_BUFFER EXTEND_TOP ~%tutu_scriptw%dasight.bcs~ ~scs/scriptmisc/potion.baf~ EVALUATE_BUFFER EXTEND_TOP ~%tutu_var%wtarsgt.bcs~ ~scs/scriptmisc/potion.baf~ EVALUATE_BUFFER EXTEND_TOP ~%tutu_var%wdarsgt.bcs~ ~scs/scriptmisc/potion.baf~ EVALUATE_BUFFER END // Stage 2 - equip some creatures with the potion-free scripts COPY_EXISTING ~%tutu_scripti%ronelit.cre~ ~override~ //only relevant if we're using the tougher BTEs from the patch~ ~%tutu_scripti%ronguar.cre~ ~override~ WRITE_ASCII 0x250 ~dw#wtrnp~ COPY_EXISTING ~%tutu_var%irongu.cre~ ~override~ // ditto WRITE_ASCII 0x250 ~dw#wtanp~ COPY_EXISTING ~%tutu_var%centeo.cre~ ~override~ WRITE_ASCII 0x268 ~dw#wtanp~ // Stage 3 - deal with some specific allocations (notably, high-level thieves who should get invisibility potions) COPY_EXISTING ~%tutu_var%desret.cre~ ~override~ ~%tutu_var%slythe.cre~ ~override~ ~%tutu_var%jenkal.cre~ ~override~ ADD_CRE_ITEM ~%tutu_var%potn10~ #3 #0 #0 ~IDENTIFIED~ ~QITEM1~ COPY_EXISTING ~%tutu_var%zargal.cre~ ~override~ ADD_CRE_ITEM ~_potn08~ #2 #0 #0 ~IDENTIFIED~ ~QITEM1~ COMPILE EVALUATE_BUFFER ~scs/scriptmisc/_zargal.baf~ ACTION_IF !FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~_zargal.bcs~ ~override/zargal.bcs~ END ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%riggilo.cre~ ~override~ ADD_CRE_ITEM ~%tutu_var%potn10~ #3 #0 #0 ~IDENTIFIED~ ~QITEM1~ END // GiveItem scrambles people's choice of what arrow to use first (bizarrely...) // So Rahvin and Angelo, who use arrows of detonation, get potions manually COPY_EXISTING ~%tutu_var%rahvin.cre~ ~override~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ADD_CRE_ITEM ~%tutu_var%dwexhe~ #2 #0 #0 ~IDENTIFIED~ ~INV2~ ADD_CRE_ITEM ~%tutu_var%potn35~ #0 #0 #0 ~IDENTIFIED~ ~INV3~ ADD_CRE_ITEM ~%tutu_var%potn41~ #0 #0 #0 ~IDENTIFIED~ ~INV4~ COPY_EXISTING ~%tutu_var%galdor.cre~ ~override~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ADD_CRE_ITEM ~%tutu_var%dwexhe~ #2 #0 #0 ~IDENTIFIED~ ~INV2~ ADD_CRE_ITEM ~%tutu_var%potn34~ #0 #0 #0 ~IDENTIFIED~ ~INV3~ ACTION_IF NOT FILE_EXISTS ~override/%tutu_var%dwexhe.itm~ THEN BEGIN COPY_EXISTING ~%tutu_var%potn52.itm~ ~override/%tutu_var%dwexhe.itm~ END ACTION_IF NOT FILE_EXISTS ~override/dw#noptn.itm~ THEN BEGIN // marker to pick out characters who don't get potions COPY_EXISTING ~misc16.itm~ ~override/dw#noptn.itm~ WRITE_LONG 0x18 0 END ///////////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @70 DESIGNATED 150//Improved C3 assassin deployment ///////////////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#C3assassin.xxx~ //installation marker //this deletes the Gullykin assassins COPY_EXISTING ~%Gullykin%.are~ ~override~ READ_LONG 0x54 ~actoroffset~ READ_SHORT 0x58 ~actornum~ SET ~numsofar~=0 SET ~numdeleted~=0 WHILE (~%numsofar%~<~%actornum%~) BEGIN //go through each actor, deleting them if they have the wrong CRE name READ_ASCII (~%numsofar%~*0x110 + ~%actoroffset%~+0x80) ~actorname~ PATCH_IF !(~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%DRAKAR~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%HALACA~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%MORVIN~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%MOLKAR~) THEN BEGIN DELETE_BYTES (~%numsofar%~*0x110 +~%actoroffset%~) 0x110 SET ~actornum~=~%actornum%~-1 SET ~numsofar~=~%numsofar%~-1 SET ~numdeleted~=~%numdeleted%~+1 //count up the number deleted END SET ~numsofar~=~%numsofar%~+1 END READ_LONG 0x5c ~offset~ // go through each offset, and if it's larger than the actor offset, decrease it by 0x110 times the number of actors deleted PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x5c (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x60 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x60 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x68 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x68 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x70 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x70 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x78 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x78 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x7c ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x7c (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x84 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x84 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x88 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x88 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xa0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xa0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xa8 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xa8 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xb0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xb0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xb8 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xb8 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xbc ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xbc (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xc0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xc0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xc4 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xc4 (~%offset%~-~%numdeleted%~*0x110) END WRITE_SHORT 0x58 ~actornum~ //write in the new number of actors //this deletes the Amazons COPY_EXISTING ~%ValleyoftheTombs%.are~ ~override~ READ_LONG 0x54 ~actoroffset~ READ_SHORT 0x58 ~actornum~ SET ~numsofar~=0 SET ~numdeleted~=0 WHILE (~%numsofar%~<~%actornum%~) BEGIN //go through each actor, deleting them if they have the wrong CRE name READ_ASCII (~%numsofar%~*0x110 + ~%actoroffset%~+0x80) ~actorname~ PATCH_IF !(~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%LAMALH~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%ZEELA~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%TELKA~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%MANEIR~) THEN BEGIN DELETE_BYTES (~%numsofar%~*0x110 +~%actoroffset%~) 0x110 SET ~actornum~=~%actornum%~-1 SET ~numsofar~=~%numsofar%~-1 SET ~numdeleted~=~%numdeleted%~+1 //count up the number deleted END SET ~numsofar~=~%numsofar%~+1 END READ_LONG 0x5c ~offset~ // go through each offset, and if it's larger than the actor offset, decrease it by 0x110 times the number of actors deleted PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x5c (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x60 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x60 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x68 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x68 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x70 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x70 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x78 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x78 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x7c ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x7c (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x84 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x84 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x88 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x88 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xa0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xa0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xa8 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xa8 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xb0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xb0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xb8 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xb8 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xbc ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xbc (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xc0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xc0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xc4 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xc4 (~%offset%~-~%numdeleted%~*0x110) END WRITE_SHORT 0x58 ~actornum~ //write in the new number of actors EXTEND_TOP ~baldur.bcs~ ~scs\scriptmisc\assassinadd.baf~ EVALUATE_BUFFER COMPILE ~scs\scriptmisc\dw#c3as1.baf~ COPY_EXISTING ~dw#c3as1.bcs~ ~override\dw#c3as2.bcs~ REPLACE_TEXTUALLY ~dmwwC3asshostileA~ ~dmwwC3asshostileB~ COPY_EXISTING ~%tutu_var%lamalh.cre~ ~override~ ~%tutu_var%maneir.cre~ ~override~ ~%tutu_var%telka.cre~ ~override~ ~%tutu_var%zeela.cre~ ~override~ WRITE_BYTE 0x270 128 WRITE_ASCII 0x248 ~dw#c3as1~ COPY_EXISTING ~%tutu_var%drakar.cre~ ~override~ ~%tutu_var%halaca.cre~ ~override~ ~%tutu_var%molkar.cre~ ~override~ ~%tutu_var%morvin.cre~ ~override~ WRITE_BYTE 0x270 128 WRITE_ASCII 0x248 ~dw#c3as2~ ///////////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @21 DESIGNATED 160 //Smarter Mages ///////////////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#21.xxx~ //installation marker //Step 1: Copy some spells and resources required COPY_EXISTING ~misc16.itm~ ~override/dw#area.itm~ // undroppable marker to pick out mages who will use area-effect WRITE_LONG 0x18 0 // magic even though not alone // Inactive versions of the various items that give protection spells - this is subsumed by the script COPY ~scs/mage/_mage03.itm~ ~override/%tutu_var%mage03.itm~ COPY ~scs/mage/_ageamul.itm~ ~override/%tutu_scriptm%ageamul.itm~ ACTION_IF NOT FILE_EXISTS ~override/dw#mabr.itm~ THEN BEGIN COPY_EXISTING ~%tutu_scriptm%agebrac.itm~ ~override/dw#mabr.itm~ //this is a real Pro/NM item COPY ~scs/mage/_agebrac.itm~ ~override/%tutu_scriptm%agebrac.itm~ END //trivial blocks, only there to facilitate replacements later COMPILE ~scs/mage/dw#replace.baf~ COMPILE ~scs/mage/dw#mbuff.baf~ COMPILE ~scs/mage/dw#trivial.baf~ //Step 2: change some creatures that actually need their special items - //COPY_EXISTING ~%tutu_var%flamsco.cre~ ~override~ WRITE_ASCII 0x5a0 ~dw#mabra~ // non-wizard //Step 3: assemble the mage script and any variants needed later COPY ~scs/mage/magecore.baf~ ~override/dw#mage.baf~ REPLACE_TEXTUALLY ~AREATARGETCHECK~ ~OR(2) NumCreature([ENEMY],1) HasItem("dw#area",Myself) ~ COMPILE EVALUATE_BUFFER ~override/dw#mage.baf~ EXTEND_TOP ~dw#mage.bcs~ ~scs/mage/magepot.baf~ EVALUATE_BUFFER EXTEND_TOP ~dw#mage.bcs~ ~scs/mage/magetop.baf~ EVALUATE_BUFFER // main script now has everything except pre-battle castings. COPY ~override/dw#mage.bcs~ ~override/dw#magnp.bcs~ //~no-prep~ version without battle preps EXTEND_TOP ~dw#mage.bcs~ ~scs/mage/dw#mbuff.baf~ EVALUATE_BUFFER//placeholder for the pre-battle prep component //Step 4: set up a variant version for Davaeorn, to be installed if ~harder end of C4~ is wanted COPY ~scs/mage/magecore.baf~ ~override/dw#davcr.baf~ REPLACE_TEXTUALLY ~AREATARGETCHECK~ ~~ COMPILE EVALUATE_BUFFER ~override/dw#davcr.baf~ //Step 5: put in the string refs COPY ~override/dw#mage.bcs~ ~override~ ~override/dw#magnp.bcs~ ~override~ ~override/dw#davcr.bcs~ ~override~ REPLACE ~777701~ @1101 REPLACE ~777702~ @1102 REPLACE ~777703~ @1103 REPLACE ~7777041~ @1104 REPLACE ~7777042~ @1105 REPLACE ~7777043~ @1106 REPLACE ~7777044~ @1107 REPLACE ~444444~ @1108 REPLACE ~333333~ @1109 REPLACE ~222222~ @1110 REPLACE ~999908~ @1008 REPLACE ~999910~ @1010 REPLACE ~999999~ @1099 REPLACE ~999934~ @1034 REPLACE ~999935~ @1035 REPLACE ~999945~ @1045 REPLACE ~999914~ @1014 REPLACE ~999907~ @1007 REPLACE ~999906~ @1006 REPLACE ~999905~ @1005 REPLACE ~999904~ @1004 REPLACE ~999912~ @1012 REPLACE ~999903~ @1003 REPLACE ~999941~ @1041 REPLACE ~999909~ @1009 REPLACE ~999911~ @1011 REPLACE ~999924~ @1024 REPLACE ~999928~ @1028 REPLACE ~999942~ @1042 REPLACE ~999917~ @1017 REPLACE ~999920~ @1020 //Step 6: install the core mage scripts COPY ~override/dw#mage.bcs~ ~override/_mage1.bcs~ REPLACE_BCS_BLOCK ~override/dw#replace.bcs~ ~override/dw#trivial.bcs~ COPY ~override/_mage1.bcs~ ~override/_mage2.bcs~ COPY ~override/_mage1.bcs~ ~override/_mage3.bcs~ COPY ~override/_mage1.bcs~ ~override/_mage4.bcs~ COPY ~override/_mage1.bcs~ ~override/_mage5.bcs~ COPY ~override/_mage1.bcs~ ~override/_mage6.bcs~ COPY ~override/_mage1.bcs~ ~override/_mage7.bcs~ COPY ~override/_mage1.bcs~ ~override/_mage8.bcs~ COPY ~override/_mage1.bcs~ ~override/_gremage.bcs~ //Step 7: some enemy mages have dialog and it's a bit weird if they do it while invisible. //This bit makes sure those mages don't go invisible before battle COPY ~override/_mage1.bcs~ ~override/dw#magni.bcs~ EXTEND_TOP ~dw#magni.bcs~ ~scs/mage/noinvis.baf~ ACTION_IF FILE_EXISTS_IN_GAME ~FW1500.are~ // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%tracea.cre~ ~override~ WRITE_ASCII 0x258 ~dw#magni~ END //Step 8: Once in a while it's impossible for plot reasons for a mage to have done advance casting. They // get the dw#magnp script. COPY_EXISTING ~%tutu_var%arlin.cre~ ~override~ ~%tutu_var%pargus.cre~ ~override~ WRITE_ASCII 0x258 ~dw#magnp~ //Step 10: individual mages //The 5 ogre magi should use area-effect magic. So should the ogre mage in Firewine Bridge: //his minions might get zapped a bit, but he doesn't care. // Ditto Natasha. Plenty more hobgoblins where those came from! COPY_EXISTING ~%tutu_scripto%grema_a.cre~ ~override~ ~%tutu_scripto%grema_b.cre~ ~override~ ~%tutu_scripto%grema_c.cre~ ~override~ ~%tutu_scripto%grema_d.cre~ ~override~ ~%tutu_scripto%grema02.cre~ ~override~ ~%tutu_var%ogrema.cre~ ~override~ ~%tutu_var%natash.cre~ ~override~ ADD_CRE_ITEM ~dw#area~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ //Silke: uses the standard mage scripts, but there's a chunk to add at the top. Also, she's L10, which is //fine for a bard but will confuse the mage script level-checks. So we set her level to 6 (nothing else //is really affected by this). And she has a pointless script which lets her attack her own summons - we remove it. COPY ~override/dw#magnp.bcs~ ~override/%tutu_var%silke.bcs~ EXTEND_TOP ~%tutu_var%silke.bcs~ ~scs/mage/silkeadd.baf~ EXTEND_BOTTOM ~%tutu_var%silke.bcs~ ~override/%tutu_scriptw%tasight.bcs~ COPY_EXISTING ~%tutu_var%silke.cre~ ~override~ WRITE_BYTE 0x234 6 WRITE_ASCII 0x248 ~~ #8 //Tarnesh: would be a damn sight more effective if he swapped one of his MMs for Sleep //this code swaps the first MM for a sleep; there's only so much we can do to anticipate other people COPY_EXISTING ~%tutu_var%tarnes.cre~ ~override~ READ_LONG 0x2b0 ~spelloffset~ //memorised spells READ_LONG 0x2b4 ~numspells~ SET ~numsofar~=0 WHILE (~numsofar~<~numspells~) BEGIN READ_ASCII (~%spelloffset%~+0xc*~%numsofar%~) ~spellname~ PATCH_IF !(~%spellname%~ STRING_COMPARE_CASE ~SPWI112~) THEN BEGIN WRITE_ASCII (~%spelloffset%~+0xc*~%numsofar%~) ~SPWI116~ SET ~numsofar~=~%numspells%~ END SET ~numsofar~=~numsofar~+1 END ADD_KNOWN_SPELL ~spwi116~ #0 ~wizard~ // Similarly for Nimbul //this code swaps the first two MMs for a sleep; there's only so much we can do to anticipate other people COPY_EXISTING ~%tutu_var%nimbul.cre~ ~override~ READ_LONG 0x2b0 ~spelloffset~ //memorised spells READ_LONG 0x2b4 ~numspells~ SET ~numsofar~=0 SET ~numswaps~=0 WHILE (~numsofar~<~numspells~ AND ~numswaps~<2) BEGIN READ_ASCII (~%spelloffset%~+0xc*~%numsofar%~) ~spellname~ PATCH_IF !(~%spellname%~ STRING_COMPARE_CASE ~SPWI112~) THEN BEGIN WRITE_ASCII (~%spelloffset%~+0xc*~%numsofar%~) ~SPWI116~ SET ~numswaps~=~numswaps~+1 END SET ~numsofar~=~numsofar~+1 END ADD_KNOWN_SPELL ~spwi116~ #0 ~wizard~ // Mutamin: tries to dispel protection-from-petrification magic COPY ~override/dw#mage.bcs~ ~override/dw#mut.bcs~ REPLACE_BCS_BLOCK ~override/dw#replace.bcs~ ~scs/mage/mutami.baf~ COPY_EXISTING ~%tutu_var%mutami.cre~ ~override~ WRITE_ASCII 0x258 ~dw#mut~ // Centeol: presumably has lost her magic, but might as well use her frost wand EXTEND_BOTTOM ~%tutu_var%centeol.bcs~ ~scs/mage/centeadd.baf~ EVALUATE_BUFFER REPLACE ~444444~ @1108 COPY_EXISTING ~%tutu_var%centeo.cre~ ~override~ ADD_CRE_ITEM ~%tutu_var%wand06~ #17 #0 #0 ~NONE~ ~QITEM1~ //this swaps the wand on the ground for a minor gem - there's a certain amount of laziness here, I don't //particularly want to have to shuffle the whole ARE file around. COPY_EXISTING ~%CloakwoodNestSpiderNest%.are~ ~override~ REPLACE_TEXTUALLY ~wand06~ ~misc32~ // Lendarn and the Firewine Ogre Mage // We take seriously the Cone of Cold spell in Lendarn's file. As such we raise him to L9. // Lendarn begins out of sight, with a Wizard Eye securing his original position COPY ~override/_mage1.bcs~ ~override/dw#lend.bcs~ EXTEND_TOP ~dw#lend.bcs~ ~scs/mage/noinvis.baf~ EXTEND_TOP ~dw#lend.bcs~ ~scs/mage/lendarn.baf~ COMPILE ~scs/mage/dw#lespy.baf~ COPY ~scs/mage/dw#lenwi.cre~ ~override~ SAY 0x8 ~Wizard Eye~ WRITE_ASCII 0x248 ~dw#lespy~ COPY_EXISTING ~%tutu_var%lendar.cre~ ~override~ WRITE_ASCII 0x250 ~dw#lend~ WRITE_BYTE 0x234 9 //After a bit, the Ogre Mage comes to help, calling his ogres forward [deprecated] //COMPILE ~scs/mage/dw#firog.baf~ //COPY_EXISTING ~_grema02.cre~ ~override~ // WRITE_ASCII 0x250 ~dw#firog~ // Niemain: could usefully risk a fireball in the first round - // the tactical situation means it's probably // safe, and if not then Zhentarim apprentices can always be replaced COPY ~override/dw#mage.bcs~ ~override/dw#nie.bcs~ REPLACE_BCS_BLOCK ~override/dw#replace.bcs~ ~scs/mage/niemain.baf~ EVALUATE_BUFFER REPLACE ~444444~ @1108 COPY_EXISTING ~%tutu_var%niemai.cre~ ~override~ WRITE_ASCII 0x258 ~dw#nie~ ACTION_IF FILE_EXISTS_IN_GAME ~fw1500.are~ // if TotSC is installed THEN BEGIN // Andris: gets a block allowing him to DD away and re-buff, plus a necessary start-dialog block. // Also ~plays host~ to a block which creates a couple of invisible stalker servant/guards for dezkiel // Incidentally Andris has waaay too many spells, but presumably the designers knew what they were // doing COPY ~override/dw#mage.bcs~ ~override/%tutu_var%andris.bcs~ EXTEND_TOP ~%tutu_var%andris.bcs~ ~scs/mage/andris.baf~ EVALUATE_BUFFER COPY_EXISTING ~%tutu_var%andris.cre~ ~override~ ADD_CRE_ITEM ~monhp1~ #0 #0 #0 ~none~ ~RRING~ //keep him alive till his extra script detail kicks in SET ~effect_type_num~ = 101 // make him immune to confusion, to avoid script problems SET ~effect_subtype_num~ = 128 LAUNCH_PATCH_MACRO ~add_creature_effect~ COPY ~scs/mage/dw#andri.spl~ ~override~ WRITE_LONG 0x8 25942 // Daitel: just gets the standard script COPY_EXISTING ~%tutu_var%daitel.cre~ ~override~ WRITE_EVALUATED_ASCII 0x258 ~_mage5~ #8 END //more descriptive strings for armour spells COPY_EXISTING ~spwi317.spl~ ~override~ SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x28+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN READ_SHORT ~effoffset~+~numeffsofar~*0x30 ~effecttype~ PATCH_IF (~effecttype~=139) THEN BEGIN WRITE_LONG ~effoffset~+~numeffsofar~*0x30+0x4 12129 END SET ~numeffsofar~=~numeffsofar~+1 END COPY_EXISTING ~spwi414.spl~ ~override~ SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x28+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN READ_SHORT ~effoffset~+~numeffsofar~*0x30 ~effecttype~ PATCH_IF (~effecttype~=139) THEN BEGIN WRITE_LONG ~effoffset~+~numeffsofar~*0x30+0x4 22608 END SET ~numeffsofar~=~numeffsofar~+1 END // Step 11: rejig a few mages so that no noncombat script occurs after their mage script ACTION_IF FILE_EXISTS_IN_GAME ~fw1500.are~ // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%tellan.cre~ ~override~ WRITE_ASCII 0x250 ~dw#follo~ WRITE_ASCII 0x260 ~~ #8 COMPILE ~scs/mage/dw#follo.baf~ COPY_EXISTING ~%tutu_var%dopfue.cre~ ~override~ WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%movep1~ #8 WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%mage2~ #8 WRITE_EVALUATED_ASCII 0x260 ~%tutu_var%wtarsgt~ #8 END /// compatibility - for BGT ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~misc01.itm~ ~override/dw#comp3.xxx~ // installation marker 3 COPY ~override/_mage1.bcs~ ~override/mage1.bcs~ COPY ~override/_mage1.bcs~ ~override/mage2.bcs~ COPY ~override/_mage1.bcs~ ~override/mage3.bcs~ COPY ~override/_mage1.bcs~ ~override/mage4.bcs~ COPY ~override/_mage1.bcs~ ~override/mage5.bcs~ COPY ~override/_mage1.bcs~ ~override/mage6.bcs~ COPY ~override/_mage1.bcs~ ~override/mage7.bcs~ COPY ~override/_mage1.bcs~ ~override/mage8.bcs~ COPY ~override/_mage1.bcs~ ~override/ogremage.bcs~ INCLUDE ~SCS/bgt/compmage.tph~ END /////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @22 DESIGNATED 170 REQUIRE_COMPONENT ~setup-scs.tp2~ ~160~ ~Smarter Mages is required for this component~ //Mages pre-cast defensive spells /////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#22.xxx~ //installation marker // Step 1: Compile the prep script COMPILE ~scs/mage/dw#mageprep.baf~ COPY ~override/dw#mageprep.bcs~ ~override~ REPLACE ~777701~ @1101 REPLACE ~777702~ @1102 REPLACE ~777703~ @1103 // Step 2: Install it into mage scripts COPY_EXISTING ~_mage1.bcs~ ~override~ ~_mage2.bcs~ ~override~ ~_mage3.bcs~ ~override~ ~_mage4.bcs~ ~override~ ~_mage5.bcs~ ~override~ ~_mage6.bcs~ ~override~ ~_mage7.bcs~ ~override~ ~_mage8.bcs~ ~override~ ~_gremage.bcs~ ~override~ ~dw#mut.bcs~ ~override~ ~dw#lend.bcs~ ~override~ ~dw#nie.bcs~ ~override~ REPLACE_BCS_BLOCK ~override/dw#mbuff.bcs~ ~override/dw#mageprep.bcs~ //Step 3: There's an annoying delay between mages going hostile and their defences going up. // To solve this, where possible we move their defences in-dialog. //EDIT: this isn't actually needed any more, but it's a convenient way to select particular //defences, so we leave it. // EDIT: time to deprecate this, I think - we'll let the AI do it. //////////////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @23 DESIGNATED 180 //Smarter Priests //////////////////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#23.xxx~ //installation marker //Step 1: copy some resources COPY ~scs/priest/dw#iron.spl~ ~override~ //This is the Iron Skins spell, reintroduced into TUTU to even out battles with druids. ACTION_IF NOT FILE_EXISTS ~override/dw#bear.itm~ //if faster bears isn't installed THEN BEGIN COPY ~scs/priest/dw#bear.spl~ ~override~ // shapechange END //trivial block, only there to facilitate replacements later COMPILE ~scs/mage/dw#mbuff.baf~ //Step 2: compile the core script COMPILE EVALUATE_BUFFER ~scs/priest/dw#priest.baf~ EXTEND_TOP ~dw#priest.bcs~ ~scs/priest/priestpot.baf~ EVALUATE_BUFFER EXTEND_TOP ~dw#priest.bcs~ ~scs/priest/priesttop.baf~ //Step 3: We now have all the script except the pre-battle casting. So we take a copy for those rare //situations where there's clearly no chance to prepare. COPY ~override/dw#priest.bcs~ ~override/dw#prinp.bcs~ //Step 4: add battle prepping marker for next component EXTEND_TOP ~dw#priest.bcs~ ~scs/mage/dw#mbuff.baf~ //Step 5: add dialog strings COPY ~override/dw#priest.bcs~ ~override/_priest1.bcs~ ~override/dw#prinp.bcs~ ~override/dw#prinp.bcs~ REPLACE ~777703~ @1102 REPLACE ~777702~ @1103 REPLACE ~888803~ @1201 REPLACE ~8888041~ @1202 REPLACE ~8888042~ @1203 REPLACE ~8888043~ @1204 REPLACE ~8888044~ @1205 REPLACE ~999908~ @1008 REPLACE ~999908~ @1010 REPLACE ~999999~ @1099 REPLACE ~999934~ @1034 REPLACE ~999935~ @1035 REPLACE ~999945~ @1045 REPLACE ~999914~ @1014 REPLACE ~999907~ @1007 REPLACE ~999906~ @1006 REPLACE ~999905~ @1005 REPLACE ~999904~ @1004 REPLACE ~999912~ @1012 REPLACE ~999903~ @1003 REPLACE ~999941~ @1041 REPLACE ~999909~ @1009 REPLACE ~999911~ @1011 REPLACE ~999924~ @1024 REPLACE ~999928~ @1028 REPLACE ~999942~ @1042 REPLACE ~999917~ @1017 REPLACE ~999920~ @1020 REPLACE ~444444~ @1108 //Step 6: copy the script over COPY ~override/_priest1.bcs~ ~override/_priest2.bcs~ COPY ~override/_priest1.bcs~ ~override/_priest3.bcs~ COPY ~override/_priest1.bcs~ ~override/_priest4.bcs~ COPY ~override/_priest1.bcs~ ~override/_priest5.bcs~ //Step 7: allow for occasional priests who don't get a chance to prepare COPY_EXISTING ~%tutu_var%wilf.cre~ ~override~ WRITE_ASCII 0x258 ~dw#prinp~ //Step 8: specific priests //Seniyad is given no spells (his script cheats and uses Force-casting). //But he will actually fight passably well without being given any! //Seniyad's apprentices, however, do need their spells. COMPILE ~scs/priest/_seniyad.baf~ ACTION_IF !FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~_seniyad.bcs~ ~override/seniyad.bcs~ END EXTEND_BOTTOM ~%tutu_var%seniyad.bcs~ ~override/_priest1.bcs~ COMPILE ~scs/priest/_druid3.baf~ EXTEND_BOTTOM ~_druid3.bcs~ ~override/dw#prinp.bcs~ ACTION_IF !FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~_druid3.bcs~ ~override/druid3.bcs~ END COPY_EXISTING ~%tutu_var%druid3.cre~ ~override~ READ_LONG 0x8 ~name~ READ_LONG 0xa4 ~greeting~ READ_LONG 0xec ~damage~ READ_LONG 0xf0 ~dying~ READ_LONG 0x198 ~hostile~ COPY_EXISTING ~scs/priest/_druid3.cre~ ~override/%tutu_var%druid3.cre~ WRITE_LONG 0x8 ~%name%~ WRITE_LONG 0xa4 ~%greeting%~ WRITE_LONG 0xec ~%damage%~ WRITE_LONG 0xf0 ~%dying%~ WRITE_LONG 0x10c ~%greeting%~ WRITE_LONG 0x198 ~%hostile%~ WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%druid3~ #8 WRITE_EVALUATED_ASCII 0x268 ~%tutu_scriptw%tasight~ #8 ADD_CRE_ITEM ~dw#attac~ #0 #0 #0 ~NONE~ ~INV16~ COMPILE EVALUATE_BUFFER ~scs/priest/dw#seni.d~ // Corsone will attack his own summons unless his generic "_eeenemy" script is swapped for something cleverer COMPILE ~scs/priest/dw#corso.baf~ COPY_EXISTING ~%tutu_var%corsone.cre~ ~override~ WRITE_ASCII 0x248 ~dw#corso~ // compatibility - for BGT ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~misc01.itm~ ~override/dw#comp4.xxx~ // installation marker 4 COPY ~override/_priest1.bcs~ ~override/priest1.bcs~ COPY ~override/_priest1.bcs~ ~override/priest2.bcs~ COPY ~override/_priest1.bcs~ ~override/priest3.bcs~ COPY ~override/_priest1.bcs~ ~override/priest4.bcs~ COPY ~override/_priest1.bcs~ ~override/priest5.bcs~ INCLUDE ~SCS/bgt/compries.tph~ END ////////////////////////////////////////////////////////////////////////////// BEGIN @24 DESIGNATED 190 REQUIRE_COMPONENT ~setup-scs.tp2~ ~180~ ~Smarter Priests is required for this component~ // Priests Pre-Cast Defensive Spells ////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#24.xxx~ //installation marker // Step 1: Compile the prep script COMPILE ~scs/priest/dw#priestprep.baf~ COPY ~override/dw#priestprep.bcs~ ~override~ REPLACE ~777703~ @1102 REPLACE ~777702~ @1103 REPLACE ~888803~ @1201 // Step 2: Install it into mage scripts COPY_EXISTING ~_priest1.bcs~ ~override~ ~_priest2.bcs~ ~override~ ~_priest3.bcs~ ~override~ ~_priest4.bcs~ ~override~ ~_priest5.bcs~ ~override~ ~%tutu_var%seniyad.bcs~ ~override~ REPLACE_BCS_BLOCK ~override/dw#mbuff.bcs~ ~override/dw#priestprep.bcs~ ///////////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @25 DESIGNATED 200 //Smarter deployment /////////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#25.xxx~ //installation marker COPY_EXISTING ~%tutu_var%amaran.cre~ ~override~ ~%tutu_var%izefia.cre~ ~override~ ~%tutu_var%kahrk.cre~ ~override~ ~%tutu_var%nexlit.cre~ ~override~ ~%tutu_var%neira.cre~ ~override~ ~%tutu_var%nimbul.cre~ ~override~ ~%tutu_scripto%grema02.cre~ ~override~ ~%tutu_scripto%grema03.cre~ ~override~ ~%tutu_scripto%grema_d.cre~ ~override~ ~%tutu_var%ragefa.cre~ ~override~ ~%tutu_var%takiyah.cre~ ~override~ ~%tutu_var%tarnes.cre~ ~override~ ~%tutu_var%telano.cre~ ~override~ ~%tutu_var%teven.cre~ ~override~ WRITE_ASCII 0x248 ~SHOUTDLG~ // we use the BG2 version since non-ToTSC BG1 doesn't have ~shoutdlg~ COPY_EXISTING ~%tutu_var%benjy.cre~ ~override~ ~%tutu_var%coksmth.cre~ ~override~ ~%tutu_var%droth.cre~ ~override~ ~%tutu_var%mutami.cre~ ~override~ ~%tutu_var%ogrmba.cre~ ~override~ ~%tutu_var%osmadi.cre~ ~override~ ~%tutu_var%slythe.cre~ ~override~ ~%tutu_var%zordra.cre~ ~override~ WRITE_ASCII 0x250 ~SHOUTDLG~ ACTION_IF (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) // if TotSC is installed THEN BEGIN COPY_EXISTING ~%tutu_var%islsir.cre~ ~override~ WRITE_ASCII 0x248 ~SHOUTDLG~ END EXTEND_TOP ~%tutu_var%silke.bcs~ ~scs/sneak/silkeadd.baf~ EVALUATE_BUFFER EXTEND_TOP ~%tutu_var%tranzig.bcs~ ~scs/sneak/tranadd.baf~ EVALUATE_BUFFER EXTEND_TOP ~%tutu_var%mulahey.bcs~ ~scs/sneak/muleadd.baf~ EVALUATE_BUFFER COMPILE EVALUATE_BUFFER ~scs/sneak/tamoko.baf~ COPY_EXISTING ~%tutu_var%tamoko.cre~ ~override~ WRITE_ASCII 0x248 ~tamoko~ COMPILE EVALUATE_BUFFER ~scs/sneak/marek.baf~ COPY_EXISTING ~%tutu_var%marek.cre~ ~override~ WRITE_ASCII 0x248 ~marek~ #8 COPY_EXISTING ~%tutu_var%nevill.dlg~ ~override~ DECOMPILE_DLG_TO_D REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%HOBGOBA",\[3621.706\],0)~ ~CreateCreatureOffScreen("%tutu_var%HOBGOBA",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%HOBGOBA",\[3631.716\],0)~ ~CreateCreatureOffScreen("%tutu_var%HOBGOBA",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%HOBGOBA",\[3611.696\],0)~ ~CreateCreatureOffScreen("%tutu_var%HOBGOBA",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%HOBGOBA",\[3641.706\],0)~ ~CreateCreatureOffScreen("%tutu_var%HOBGOBA",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%HOBGOBA",\[3651.706\],0)~ ~CreateCreatureOffScreen("%tutu_var%HOBGOBA",0)~ COMPILE_D_TO_DLG COPY_EXISTING ~%tutu_var%baruk.dlg~ ~override~ DECOMPILE_DLG_TO_D REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%KOBCOMM",\[766.988\],0)~ ~CreateCreatureOffScreen("%tutu_var%KOBCOMM",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%KOBCOMM",\[776.998\],0)~ ~CreateCreatureOffScreen("%tutu_var%KOBCOMM",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%KOBCOMM",\[756.978\],0)~ ~CreateCreatureOffScreen("%tutu_var%KOBCOMM",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%KOBCOMM",\[746.988\],0)~ ~CreateCreatureOffScreen("%tutu_var%KOBCOMM",0)~ REPLACE_TEXTUALLY ~CreateCreature("%tutu_var%KOBCOMM",\[736.988\],0)~ ~CreateCreatureOffScreen("%tutu_var%KOBCOMM",0)~ COMPILE_D_TO_DLG ////////////////////////////////////////////////////////////////////////////////// BEGIN @26 DESIGNATED 210 //Harder spiders ////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#26.xxx~ //installation marker COMPILE ~scs/scriptmisc/dw#web.baf~ COMPILE ~scs/scriptmisc/_pspider.baf~ COPY_EXISTING ~_pspider.bcs~ ~override/pspider.bcs~ // for BGT COPY_EXISTING ~%tutu_var%centeo.cre~ ~override~ ADD_CRE_ITEM ~%tutu_var%antiweb~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ // make Centeol webproof COPY_EXISTING ~%tutu_var%spidgi.cre~ ~override~ ~%tutu_var%spidhu.cre~ ~override~ ~%tutu_var%etterc.cre~ ~override~ ~%tutu_var%etterc1.cre~ ~override~ WRITE_ASCII 0x250 ~dw#web~ #8 COPY_EXISTING ~spwi215.spl~ ~override/dw#web.spl~ // nonmagical version of web - you can't dispel spiderwebs! SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x28+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN WRITE_BYTE ~effoffset~+~numeffsofar~*0x30+0xd 2 SET ~numeffsofar~=~numeffsofar~+1 END //faster phase spider jump COPY_EXISTING ~spwi994.spl~ ~override~ SET ~numeffects~=0 SET ~numabilsofar~=0 READ_LONG 0x64 ~aboffset~ READ_SHORT 0x68 ~numabil~ WHILE (~numabilsofar~<~numabil~) BEGIN READ_SHORT (~aboffset~+~numabilsofar~*0x28+0x1e) ~effectadd~ SET ~numeffects~=~numeffects~+~effectadd~ SET ~numabilsofar~=~numabilsofar~+1 END READ_LONG 0x6a ~effoffset~ SET ~numeffsofar~=0 WHILE (~numeffsofar~<~numeffects~) BEGIN READ_SHORT ~effoffset~+~numeffsofar~*0x30 ~effecttype~ PATCH_IF (~effecttype~=124) THEN BEGIN WRITE_BYTE ~effoffset~+~numeffsofar~*0x30+0xc 1 WRITE_BYTE ~effoffset~+~numeffsofar~*0x30+0xe 0 END SET ~numeffsofar~=~numeffsofar~+1 END // modified spider bite ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY ~scs/misc/_spidgi1.itm~ ~override~ END ELSE BEGIN COPY ~scs/misc/_spidgi1.itm~ ~override/spidg1.itm~ END ////////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @27 DESIGNATED 220 //Dark Side-based kobold upgrade ////////////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#27.xxx~ //installation marker //Step 1: install the create-new-kobold script and install it COMPILE EVALUATE_BUFFER ~scs/kobold/dw#kobsp.baf~ // the DarkSide create-new-kobolds script (toned down a bit!) COPY_EXISTING // half of all the ordinary kobolds have it ~%tutu_scriptk%obola_a.cre~ ~override~ ~%tutu_scriptk%obola_c.cre~ ~override~ ~%tutu_scriptk%obola_e.cre~ ~override~ ~%tutu_scriptk%obold_a.cre~ ~override~ ~%tutu_scriptk%obold_c.cre~ ~override~ ~%tutu_scriptk%obold_e.cre~ ~override~ ~%tutu_var%kobolda.cre~ ~override~ ~%tutu_scriptk%oboldal.cre~ ~override~ WRITE_ASCII 0x248 ~dw#kobsp~ //Step 2: install the kobold creature files from DarkSide COPY_EXISTING ~%tutu_var%kobold.cre~ ~override~ READ_LONG ~0xc8~ ~battlecry~ READ_LONG ~0xec~ ~damage~ READ_LONG ~0xf0~ ~dying~ READ_LONG ~0x10c~ ~select~ READ_LONG ~0x1a0~ ~selectrare~ //these three .cre files COPY ~scs/kobold/dw#kobch.cre~ ~override~ //are the kobold shamans, guards, SAY 0x8 @1301 SAY 0xc @1301 //and chieftains used by DarkSide WRITE_LONG 0xc8 ~%battlecry%~ WRITE_LONG 0xcc ~%battlecry%~ WRITE_LONG 0xd0 ~%battlecry%~ WRITE_LONG 0xd4 ~%battlecry%~ WRITE_LONG 0xd8 ~%battlecry%~ WRITE_LONG 0xec ~%damage%~ WRITE_LONG 0xf0 ~%dying%~ WRITE_LONG 0x10c ~%select%~ WRITE_LONG 0x1a0 ~%selectrare%~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%koboldf~ #8 WRITE_EVALUATED_ASCII 0x268 ~%tutu_scriptw%tarsgt~ #8 COPY ~scs/kobold/dw#kobgd.cre~ ~override~ SAY 0x8 @1302 SAY 0xc @1302 WRITE_LONG 0xc8 ~%battlecry%~ WRITE_LONG 0xcc ~%battlecry%~ WRITE_LONG 0xd0 ~%battlecry%~ WRITE_LONG 0xd4 ~%battlecry%~ WRITE_LONG 0xd8 ~%battlecry%~ WRITE_LONG 0xec ~%damage%~ WRITE_LONG 0xf0 ~%dying%~ WRITE_LONG 0x10c ~%select%~ WRITE_LONG 0x1a0 ~%selectrare%~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%koboldf~ #8 WRITE_EVALUATED_ASCII 0x260 ~%tutu_scriptw%tasight~ #8 COPY ~scs/kobold/dw#kobsh.cre~ ~override~ SAY 0x8 @1303 SAY 0xc @1303 WRITE_LONG 0xc8 ~%battlecry%~ WRITE_LONG 0xcc ~%battlecry%~ WRITE_LONG 0xd0 ~%battlecry%~ WRITE_LONG 0xd4 ~%battlecry%~ WRITE_LONG 0xd8 ~%battlecry%~ WRITE_LONG 0xec ~%damage%~ WRITE_LONG 0xf0 ~%dying%~ WRITE_LONG 0x10c ~%select%~ WRITE_LONG 0x1a0 ~%selectrare%~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%koboldf~ #8 WRITE_EVALUATED_ASCII 0x260 ~%tutu_var%mage5~ #8 COPY ~scs/kobold/dw#kob01.itm~ ~override~ //poisoned daggers SAY 0x8 @1304 SAY 0xc @1305 SAY 0x50 @1306 SAY 0x54 @1307 COPY ~scs/kobold/dw#kob02.itm~ ~override~ //poisoned arrows for chieftain SAY 0x8 @1308 SAY 0xc @1308 SAY 0x50 @1309 SAY 0x54 @1309 ACTION_IF FILE_EXISTS ~override/dw#comp3.xxx~ THEN BEGIN COPY_EXISTING ~dw#kobsh.cre~ ~override~ WRITE_ASCII 0x260 ~_magee5~ #8 END //Step 3: set up kobold ambush ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_TOP ~_ar5403.bcs~ ~scs/kobold/_ar5403.baf~ COPY_EXISTING ~fw5403.are~ ~override~ WRITE_ASCII 0x94 ~_ar5403~ END ELSE BEGIN EXTEND_TOP ~ar4403.bcs~ ~scs/kobold/_ar5403.baf~ COPY_EXISTING ~ar4403.are~ ~override~ WRITE_ASCII 0x94 ~ar4403~ END COPY_EXISTING ~dw#kobch.cre~ ~override/dw#kbach.cre~ ~%tutu_var%kobcomm.cre~ ~override/dw#kbacm.cre~ ~dw#kobsh.cre~ ~override/dw#kbash.cre~ ~dw#kobgd.cre~ ~override/dw#kbagd.cre~ WRITE_ASCII 0x258 ~dw#kbamf~ ACTION_IF FILE_EXISTS_IN_GAME ~dw#help.bcs~ //Better calls for help installed THEN BEGIN COPY_EXISTING ~dw#help.bcs~ ~override/dw#kbamf.bcs~ REPLACE_TEXTUALLY ~777~ ~77~ REPLACE_TEXTUALLY ~888~ ~77~ END ELSE BEGIN COPY_EXISTING ~%tutu_var%koboldf.bcs~ ~override/dw#kbamf.bcs~ END //Step 3: This last beefs up the rather feeble kobold force chasing Galtok the gnome COMPILE EVALUATE_BUFFER ~scs/kobold/galtok.d~ //////////////////////////////////////////////////////////////////////////////////////////// BEGIN @28 DESIGNATED 230 //Smarter sirines and dryads //////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#28.xxx~ //installation marker COMPILE EVALUATE_BUFFER ~scs/sirdry/_irspell.baf~ EXTEND_TOP ~_irspell.bcs~ ~scs/sirdry/sirprep.baf~ EVALUATE_BUFFER ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_irspell.bcs~ ~override/sirspell.bcs~ END //We give the hamadryad of area 1700 a bit of initial defence magic to make //the fight a little more challenging ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_TOP ~_hama.bcs~ ~scs/sirdry/hamaprep.baf~ EVALUATE_BUFFER END ELSE BEGIN EXTEND_TOP ~hama.bcs~ ~scs/sirdry/hamaprep.baf~ EVALUATE_BUFFER END /////////////////////////////////////////////////////////////////////////////////////////// BEGIN @29 DESIGNATED 240 //~Slightly harder carrion crawlers~ ////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#29.xxx~ //installation marker COPY_EXISTING ~%tutu_var%carrio.cre~ ~override~ WRITE_BYTE 0x53 5 COMPILE ~scs/scriptmisc/_crawler.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_crawler.bcs~ ~override/crawler.bcs~ END ///////////////////////////////////////////////////////////////////////////////// BEGIN @30 DESIGNATED 250 //~Smarter basilisks~ ////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#30.xxx~ //installation marker COMPILE ~scs/scriptmisc/_basilsk.baf~ COMPILE ~scs/scriptmisc/_8_gbasi.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_basilsk.bcs~ ~override/lbasilsk.bcs~ COPY_EXISTING ~_8_gbasi.bcs~ ~override/gbasilsk.bcs~ COPY_EXISTING ~gbasilsk.bcs~ ~override/basilc.bcs~ END ////////////////////////////////////////////////////////////////////////////////// BEGIN @31 DESIGNATED 260 //~Improved doppelgangers~ ////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#31.xxx~ //installation marker EXTEND_TOP ~%tutu_var%tasight.bcs~ ~scs/doppelganger/doppeladd.baf~ COMPILE EVALUATE_BUFFER ~scs/doppelganger/_opspell.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_opspell.bcs~ ~override/dopspell.bcs~ END COPY ~scs/doppelganger/dw#grdop.itm~ ~override~ ACTION_IF (FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_doppgr.cre~ ~override~ REPLACE_TEXTUALLY ~_S1-12%null%%null%~ ~dw#grdop~ COPY_EXISTING ~_gdopp7.cre~ ~override~ ~_gdopp71.cre~ ~override~ ~_gdopp72.cre~ ~override~ ~_gdopp73.cre~ ~override~ ~_gdopp74.cre~ ~override~ ~_gdopp75.cre~ ~override~ REPLACE_TEXTUALLY ~_S1-12%null%%null%~ ~dw#grdop~ WRITE_ASCII 0x248 ~_opspell~ ACTION_IF FILE_EXISTS_IN_GAME ~fw1500.are~ // if TotSC is installed THEN BEGIN COPY_EXISTING ~_dopdop.cre~ ~override~ REPLACE_TEXTUALLY ~_S1-12%null%%null%~ ~dw#grdop~ COPY_EXISTING ~_dopdur.cre~ ~override~ ~_dopkie.cre~ ~override~ ~_dopfue.cre~ ~override~ ~_dopisl.cre~ ~override~ ADD_CRE_ITEM ~dw#nodop~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ END END ELSE BEGIN COPY_EXISTING ~doppgr.cre~ ~override~ REPLACE_TEXTUALLY ~S1-12%null%%null%%null%~ ~dw#grdop~ COPY_EXISTING ~gdopp7.cre~ ~override~ ~gdopp71.cre~ ~override~ ~gdopp72.cre~ ~override~ ~gdopp73.cre~ ~override~ ~gdopp74.cre~ ~override~ ~gdopp75.cre~ ~override~ REPLACE_TEXTUALLY ~S1-12%null%%null%%null%~ ~dw#grdop~ WRITE_ASCII 0x248 ~dopspell~ #8 COPY_EXISTING ~dopdop.cre~ ~override~ REPLACE_TEXTUALLY ~S1-12%null%%null%%null%~ ~dw#grdop~ COPY_EXISTING ~dopdur.cre~ ~override~ ~dopkie.cre~ ~override~ ~dopfue.cre~ ~override~ ~dopisl.cre~ ~override~ ADD_CRE_ITEM ~dw#nodop~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ END COPY_EXISTING // make Liia and Belt immune to Confusion and Fear ~%tutu_var%liia.cre~ ~override~ ~%tutu_var%belt.cre~ ~override~ SET ~effect_type_num~ = 101 SET ~effect_subtype_num~ = 128 LAUNCH_PATCH_MACRO ~add_creature_effect~ SET ~effect_type_num~ = 101 SET ~effect_subtype_num~ = 24 LAUNCH_PATCH_MACRO ~add_creature_effect~ COPY_EXISTING ~misc16.itm~ ~override/dw#nodop.itm~ WRITE_LONG 0x18 0 //////////////////////////////////////////////////////////// BEGIN @33 DESIGNATED 270 // ~Tougher Black Talons and Iron Throne guards~ //////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#33.xxx~ //installation marker COPY_EXISTING ~%tutu_scripti%ronelit.cre~ ~override~ // BTEs become by-the-book fifth level fighters ~%tutu_scripti%ronguar.cre~ ~override~ WRITE_BYTE 0x234 5 // raise level to 5 READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<33) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 33 //a few more hp WRITE_BYTE 0x26 33 END WRITE_SHORT 0x14 420 //slightly more XP COPY_EXISTING ~%tutu_var%irongu.cre~ ~override~ WRITE_BYTE 0x234 5 // raise level to 5 READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<33) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 33 //a few more hp WRITE_BYTE 0x26 33 END WRITE_SHORT 0x14 270 //slightly more XP ///////////////////////////////////////////////////////////////////////////////////////// BEGIN @34 DESIGNATED 280 //~Moved assassins~ ///////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#34.xxx~ //installation marker COMPILE EVALUATE_BUFFER ~scs/misc/eltan.d~ //what a lot of code just to delete five creatures from the ARE file of FW1201 COPY_EXISTING ~%BaldursGateDocks_OgreMagiHouse_L1%.are~ ~override~ READ_LONG 0x54 ~actoroffset~ READ_SHORT 0x58 ~actornum~ SET ~numsofar~=0 SET ~numdeleted~=0 WHILE (~%numsofar%~<~%actornum%~) BEGIN //go through each actor, deleting them if they have the wrong CRE name READ_ASCII (~%numsofar%~*0x110 + ~%actoroffset%~+0x80) ~actorname~ PATCH_IF !(~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%OGREMA~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_scripto%GREMA_A~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_scripto%GREMA_B~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_scripto%GREMA_C~ AND ~%actorname%~ STRING_COMPARE_CASE ~%tutu_scripto%GREMA_D~) THEN BEGIN DELETE_BYTES (~%numsofar%~*0x110 +~%actoroffset%~) 0x110 SET ~actornum~=~%actornum%~-1 SET ~numsofar~=~%numsofar%~-1 SET ~numdeleted~=~%numdeleted%~+1 //count up the number deleted END SET ~numsofar~=~%numsofar%~+1 END READ_LONG 0x5c ~offset~ // go through each offset, and if it's larger than the actor offset, decrease it by 0x110 times the number of actors deleted PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x5c (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x60 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x60 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x68 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x68 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x70 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x70 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x78 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x78 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x7c ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x7c (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x84 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x84 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0x88 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0x88 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xa0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xa0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xa8 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xa8 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xb0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xb0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xb8 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xb8 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xbc ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xbc (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xc0 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xc0 (~%offset%~-~%numdeleted%~*0x110) END READ_LONG 0xc4 ~offset~ PATCH_IF (~%offset%~>~%actoroffset%~) THEN BEGIN WRITE_LONG 0xc4 (~%offset%~-~%numdeleted%~*0x110) END WRITE_SHORT 0x58 ~actornum~ //write in the new number of actors COPY_EXISTING ~%tutu_scripto%grema_d.cre~ ~override~ ADD_CRE_ITEM ~dw#ogscr~ #0 #0 #0 ~none~ ~INV15~ COPY_EXISTING ~scrl2x.itm~ ~override/dw#ogscr.itm~ SAY UNIDENTIFIED_DESC @1501 SAY DESC @1501 COMPILE EVALUATE_BUFFER ~scs/misc/ogreambush.d~ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_TOP ~_ar2626.bcs~ ~scs/misc/ogreambush.baf~ EVALUATE_BUFFER END ELSE BEGIN EXTEND_TOP ~ar6526.bcs~ ~scs/misc/ogreambush.baf~ EVALUATE_BUFFER END ///////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @35 DESIGNATED 290 //~Improved Ulcaster~ ///////////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#35.xxx~ //installation marker //Icharyd first ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_TOP ~_ar3900.bcs~ ~scs/ulcaster/dw#ichstorm.baf~ //shut off weird weather when Icharyd dies COPY_EXISTING ~fw3900.are~ ~override~ WRITE_BYTE 0x4a 0 // make sure it's not raining - just for effect WRITE_ASCII 0x94 ~_ar3900~ END ELSE BEGIN EXTEND_TOP ~ar9799.bcs~ ~scs/ulcaster/dw#ichstorm.baf~ //shut off weird weather when Icharyd dies COPY_EXISTING ~ar9799.are~ ~override~ WRITE_BYTE 0x4a 0 // make sure it's not raining - just for effect END COMPILE ~scs/ulcaster/dw#ichar.baf~ //Icharyd's script COPY_EXISTING ~%tutu_var%ichary.cre~ ~override~ WRITE_BYTE 0x5d 90 //Icharyd is a sort of Skeleton Warrior, so deserves some magic resistance WRITE_SHORT 0x14 1500 //more experience...only fair WRITE_SHORT 0x24 80 //a few more hp WRITE_SHORT 0x26 80 WRITE_ASCII 0x250 ~dw#ichar~ ADD_CRE_ITEM ~dw#minhp~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ COPY_EXISTING ~minhp1.itm~ ~override/dw#minhp.itm~ WRITE_SHORT 0x1c 1 COPY ~scs/ulcaster/dw#ichar.spl~ ~override~ COMPILE EVALUATE_BUFFER ~scs/ulcaster/dw#ichar.d~ //Now the vampiric wolf COPY_EXISTING ~%tutu_var%wolfdr.cre~ ~override/dw#rewo.cre~ //its lackeys WRITE_ASCII 0x248 ~dw#rewol~ COMPILE ~scs/ulcaster/dw#rewol.baf~ COPY ~scs/ulcaster/dw#ulcgr.cre~ ~override~ //its ~howl-of-the-grave~ spell creature WRITE_ASCII 0x248 ~DW#ULCGR~ COMPILE EVALUATE_BUFFER ~scs/ulcaster/dw#ulcgr.baf~ COPY_EXISTING ~%tutu_var%wolfva.cre~ ~override/dw#ulcwo.cre~ WRITE_ASCII 0x248 ~dw#ulcwo~ SAY 0x8 @1705 SAY 0xc @1705 WRITE_SHORT 0x24 200 WRITE_SHORT 0x26 200 WRITE_SHORT 0x46 ~-2~ WRITE_BYTE 0x52 11 WRITE_BYTE 0x53 2 WRITE_SHORT 0x14 4000 COMPILE EVALUATAE_BUFFER ~scs/ulcaster/dw#ulcwo.baf~ COPY_EXISTING ~override/dw#ulcwo.bcs~ ~override~ REPLACE ~666601~ @1706 REPLACE ~666602~ @1707 REPLACE ~666603~ @1708 REPLACE ~666604~ @1709 REPLACE ~666605~ @1710 COPY_EXISTING ~%UlcasterRuins%.are~ ~override~ //we could have used REPLACE_TEXTUALLY, come to think of it. But then, what if someone added another vampiric wolf? READ_LONG ~0x54~ ~actors~ READ_SHORT ~0x58~ ~actornum~ SET ~editnum~=0 WHILE (~editnum~<~actornum~) BEGIN SET ~editloc~=~actors~+0x110*~editnum~+0x80 READ_ASCII ~editloc~ ~actorname~ PATCH_IF NOT (~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%wolfva~) THEN BEGIN SET ~editnum~=~actornum~ WRITE_ASCII ~editloc~ ~dw#ulcwo~ END SET ~editnum~=~editnum~+1 END ////////////////////////////////////////////////////////////////////////////////////////// BEGIN @36 DESIGNATED 300 //~Improved Balduran's Isle~ ////////////////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) @4000 COPY_EXISTING ~misc01.itm~ ~override/dw#36.xxx~ //installation marker //Step One: Correct the bug that Kaishas and Baresh are not immune to non-cold-iron weapons. Tone down //the regeneration power of the greater wolfweres and loup garous (though TUTUfix should already do this now... still, no harm in caution). COPY_EXISTING ~%tutu_scriptr%ingwolf.itm~ ~override~ ~%tutu_scriptr%ingwolf.itm~ ~override/%tutu_scriptr%ingloup.itm~ WRITE_LONG 0x76 3 COPY_EXISTING ~%tutu_scriptk%aishwlf.cre~ ~override~ ~%tutu_var%barwlf.cre~ ~override~ ADD_CRE_ITEM ~%tutu_scriptr%ingwolf.itm~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ //Step Two: make Daese a L8 mage COPY_EXISTING ~%tutu_var%daese.cre~ ~override~ ADD_MEMORIZED_SPELL ~spwi112~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi112~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi118~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi205~ #1 ~wizard~ ADD_MEMORIZED_SPELL ~spwi211~ #1 ~wizard~ ADD_MEMORIZED_SPELL ~spwi212~ #1 ~wizard~ ADD_MEMORIZED_SPELL ~spwi312~ #2 ~wizard~ ADD_MEMORIZED_SPELL ~spwi303~ #2 ~wizard~ ADD_MEMORIZED_SPELL ~spwi405~ #2 ~wizard~ WRITE_ASCII 0x248 ~daese~ #8 WRITE_EVALUATED_ASCII 0x250 ~_mage5~ #8 ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~LRING RRING~ ADD_CRE_ITEM ~minhp1~ #0 #0 #0 ~NONE~ ~LRING RRING~ COMPILE ~scs/werewolf/daese.baf~ // Step 3: give greater werewolves and greater wolfweres free action COPY_EXISTING ~ring09.itm~ ~override/dw#free.itm~ // create undroppable boots of free action WRITE_BYTE 0x18 0 WRITE_SHORT 0x1c 4 COPY_EXISTING ~%tutu_scriptk%aishwlf.cre~ ~override~ ~%tutu_var%loupgar.cre~ ~override~ ~%tutu_scriptw%olfwegr.cre~ ~override~ ~%tutu_var%barwlf.cre~ ~override~ ADD_CRE_ITEM ~dw#free~ #0 #0 #0 ~IDENTIFIED~ ~BOOTS~ // Step 4: make Baresh a proper L12 fighter COPY_EXISTING ~%tutu_var%baresh2.cre~ ~override~ WRITE_SHORT 0x24 81 WRITE_SHORT 0x26 81 WRITE_BYTE 0x52 9 WRITE_BYTE 0x53 2 WRITE_BYTE 0x73 5 WRITE_BYTE 0x271 1 WRITE_EVALUATED_ASCII 0x250 ~%tutu_scriptw%tasight~ ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~LRING~ ADD_CRE_ITEM ~minhp1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~baresh2.cre~ ~override~ WRITE_ASCII 0x250 ~_tasight~ #8 END COPY_EXISTING ~%tutu_var%barwlf.cre~ ~override~ WRITE_BYTE 0x271 255 WRITE_BYTE 0x272 122 WRITE_BYTE 0x273 157 COMPILE EVALUATE_BUFFER ~scs/werewolf/_baresh.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_baresh.bcs~ ~override/baresh.bcs~ END // Step 5: Make Selaad a L10 mage COPY_EXISTING ~%tutu_var%mendas3.cre~ ~override~ ADD_MEMORIZED_SPELL ~spwi112~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi112~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi118~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi118~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi205~ #1 ~wizard~ ADD_MEMORIZED_SPELL ~spwi210~ #1 ~wizard~ ADD_MEMORIZED_SPELL ~spwi211~ #1 ~wizard~ ADD_MEMORIZED_SPELL ~spwi303~ #2 ~wizard~ ADD_MEMORIZED_SPELL ~spwi304~ #2 ~wizard~ ADD_MEMORIZED_SPELL ~spwi401~ #3 ~wizard~ ADD_MEMORIZED_SPELL ~spwi505~ #4 ~wizard~ WRITE_EVALUATED_ASCII 0x268 ~%tutu_var%mage5~ #8 WRITE_ASCII 0x248 ~dw#selaa~ ACTION_IF FILE_EXISTS ~override/dw#comp3.xxx~ THEN BEGIN COPY_EXISTING ~mendas3.cre~ ~override~ WRITE_ASCII 0x268 ~_magee6~ #8 END COMPILE ~scs/werewolf/dw#selaa.baf~ // Step 5.5: make Baresh and Selaad attack as humans to start with COPY_EXISTING ~%tutu_var%menda4.dlg~ ~override~ DECOMPILE_DLG_TO_D REPLACE_TEXTUALLY ~ActionOverride("baresh",ApplySpell("baresh",KAISHAS_CHANGE))~ ~ActionOverride("baresh",Enemy())~ REPLACE_TEXTUALLY ~ForceSpell(Myself,LOUPGAR_CHANGE)~ ~Enemy()~ COMPILE_D_TO_DLG //deprecated // Step 6: make Balduran's Sword a longsword //COPY_EXISTING ~_sw1h18.itm~ ~override~ // SAY IDENTIFIED_DESC @1601 // SAY UNIDENTIFIED_DESC @1602 // SAY NAME1 @1603 // WRITE_BYTE 0x31 90 // WRITE_SHORT 0x88 8 // WRITE_SHORT 0x8a 1 // Step 7: Generate extra werewolves, and compile scripts, for Kaishas confrontation COPY_EXISTING ~%tutu_var%werewo.cre~ ~override/dw#wwolf.cre~ WRITE_ASCII 0x250 ~dw#hlpka~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_scriptw%tasight~ ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~werewo.cre~ ~override~ WRITE_ASCII 0x258 ~_tasight~ #8 END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_BOTTOM ~_ar1500.bcs~ ~scs/werewolf/werewolfadd.baf~ END ELSE BEGIN EXTEND_BOTTOM ~arw500.bcs~ ~scs/werewolf/werewolfadd.baf~ END COMPILE EVALUATE_BUFFER ~scs/werewolf/dw#hlpka.baf~ COMPILE EVALUATE_BUFFER ~scs/werewolf/dw#kcut1.baf~ COMPILE EVALUATE_BUFFER ~scs/werewolf/dw#kcut2.baf~ COMPILE EVALUATE_BUFFER~scs/werewolf/dw#kcut3.baf~ COPY_EXISTING ~%tutu_var%ship.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Dead("kaishwlf")~ ~OR(2) Dead("kaishwlf") Global("DMWWNoKillKaishas","GLOBAL",1)~ COMPILE_BAF_TO_BCS EXTEND_BOTTOM ~%tutu_var%kaisha.bcs~ ~scs/werewolf/kaishas.baf~ EVALUATE_BUFFER REPLACE 88881 @1637 REPLACE 88882 @1638 //Step 8: compile dialogue changes COMPILE EVALUATE_BUFFER ~scs/werewolf/werewolf.d~ ////////////////////////////////////////////////////////////////////////////////////////// BEGIN @37 DESIGNATED 310 //~Improved Durlag's Tower~ ////////////////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) @4000 COPY_EXISTING ~misc01.itm~ ~override/dw#37.xxx~ //installation marker /// Love Fight COPY_EXISTING ~%tutu_var%lovem.cre~ ~override~ WRITE_SHORT 0x24 120 // more HP for Love WRITE_SHORT 0x26 120 ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~LRING~ ADD_CRE_ITEM ~%tutu_var%ring95~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ COMPILE EVALUATE_BUFFER ~scs/durlag/_love.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_love.bcs~ ~override\love.bcs~ END COPY_EXISTING ~%tutu_var%fearm.cre~ ~override~ ADD_CRE_ITEM ~dw#frreg~ #0 #0 #0 ~IDENTIFIED~ ~BOOTS~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ COPY_EXISTING ~trollreg.itm~ ~override/dw#frreg.itm~ WRITE_SHORT 0x1c 4 COPY_EXISTING ~%tutu_scripta%varicem.cre~ ~override~ WRITE_SHORT 0x24 90 // more HP for Avarice WRITE_SHORT 0x26 90 WRITE_BYTE 0x234 12 WRITE_BYTE 0x235 12 ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~LRING~ ADD_CRE_ITEM ~%tutu_var%ring95~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ COMPILE ~scs/durlag/_greed.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_greed.bcs~ ~override\greed.bcs~ END COPY_EXISTING ~%tutu_var%pridem.cre~ ~override~ WRITE_SHORT 0x24 100 // more HP for Pride WRITE_SHORT 0x26 100 WRITE_BYTE 0x234 12 WRITE_BYTE 0x235 12 WRITE_BYTE 0x273 8 ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~LRING~ ADD_CRE_ITEM ~%tutu_var%ring95~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ COMPILE ~scs/durlag/_pride.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_pride.bcs~ ~override\pride.bcs~ END //// L2 doppelgangers /// Remove the Fuernebol doppelganger's chainmail (as pro5 points out, /// spellcasting isn't possible through armour) COPY_EXISTING ~%tutu_var%dopfue.cre~ ~override~ READ_LONG 0x2bc ~itemoffset~ READ_LONG 0x2b8 ~itemslotoffset~ READ_LONG 0x2c0 ~itemnum~ SET ~numsofar~=0 WHILE ~%numsofar%~<~%itemnum%~ BEGIN SET ~editloc~=~%itemoffset%~+0x14*~%numsofar%~ READ_ASCII ~%editloc%~ ~itemname~ PATCH_IF NOT ~%itemname%~ STRING_COMPARE_CASE ~%tutu_var%chan01~ THEN BEGIN SET ~chainnum~=~%numsofar%~ SET ~numsofar~=~%itemnum%~ END ELSE BEGIN SET ~numsofar~=~%numsofar%~+1 END END READ_SHORT ~itemslotoffset~+0x2 ~chaincheck~ PATCH_IF ~%chaincheck%~==~%chainnum%~ THEN BEGIN WRITE_SHORT ~itemslotoffset~+0x2 65535 END COMPILE EVALUATE_BUFFER ~scs/durlag/_dopdop.baf~ EXTEND_BOTTOM ~_dopdop.bcs~ ~override/%tutu_scriptd%opspell.bcs~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_dopdop.bcs~ ~override\dopdop.bcs~ END COMPILE EVALUATE_BUFFER ~scs/durlag/_dopdur.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_dopdur.bcs~ ~override\dopdur.bcs~ END COMPILE EVALUATE_BUFFER ~scs/durlag/_dopfue.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_dopfue.bcs~ ~override\dopfue.bcs~ END ACTION_IF FILE_EXISTS ~override/dw#21.xxx~ THEN BEGIN // Smarter Mages installed COPY_EXISTING ~%tutu_var%dopfue.cre~ ~override~ WRITE_ASCII 0x250 ~dw#magnp~ REPLACE_TEXTUALLY ~spwi102~ ~spwi112~ END ELSE BEGIN COPY_EXISTING ~%tutu_var%dopfue.cre~ ~override~ WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%mage2~ #8 REPLACE_TEXTUALLY ~spwi102~ ~spwi112~ END COMPILE EVALUATE_BUFFER ~scs/durlag/_dopisl.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_dopisl.bcs~ ~override\dopisl.bcs~ END ACTION_IF FILE_EXISTS ~override/dw#21.xxx~ THEN BEGIN // Smarter Mages installed COPY_EXISTING ~%tutu_var%dopisl.cre~ ~override~ WRITE_ASCII 0x258 ~dw#magnp~ #8 WRITE_EVALUATED_ASCII 0x260 ~%tutu_scriptw%tasight~ WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%movep1~ #8 END ELSE BEGIN COPY_EXISTING ~%tutu_var%dopisl.cre~ ~override~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%mage5~ #8 WRITE_EVALUATED_ASCII 0x260 ~%tutu_scriptw%tasight~ WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%movep1~ #8 END ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~dopisl.cre~ ~override~ WRITE_ASCII 0x260 ~_tasight~ #8 END COMPILE EVALUATE_BUFFER ~scs/durlag/_dopkie.baf~ ACTION_IF !(FILE_EXISTS_IN_GAME ~fw0100.are~) THEN BEGIN COPY_EXISTING ~_dopkie.bcs~ ~override\dopkie.bcs~ END ACTION_IF FILE_EXISTS ~override/dw#23.xxx~ THEN BEGIN // Smarter Priests installed COPY_EXISTING ~%tutu_var%dopkie.cre~ ~override~ WRITE_ASCII 0x258 ~dw#prinp~ WRITE_EVALUATED_ASCII 0x260 ~%tutu_scriptw%tasight~ #8 WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%movep1~ #8 END ELSE BEGIN COPY_EXISTING ~%tutu_var%dopkie.cre~ ~override~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%priest5~ #8 WRITE_EVALUATED_ASCII 0x260 ~%tutu_scriptw%tasight~ #8 WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%movep1~ #8 END ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~dopkie.cre~ ~override~ WRITE_ASCII 0x260 ~DWWTSIGT~ #8 END // Chess game COMPILE ~scs/durlag/dw#ches1.baf~ COMPILE ~scs/durlag/dw#ches2.baf~ COMPILE ~scs/durlag/dw#king.baf~ COPY_EXISTING ~%tutu_scriptbg%pawn.cre~ ~override~ WRITE_ASCII 0x258 ~dw#ches1~ WRITE_BYTE 0x271 1 WRITE_BYTE 0x5b 100 WRITE_SHORT 0x24 30 WRITE_SHORT 0x26 30 ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~LRING~ ADD_CRE_ITEM ~%tutu_var%ring95~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ COPY_EXISTING ~%tutu_var%ring95.itm~ ~override/dw#ches1.itm~ WRITE_SHORT 0x1c 1 COPY_EXISTING ~%tutu_scriptbg%knight.cre~ ~override~ WRITE_BYTE 0x6e 3 WRITE_BYTE 0x271 1 WRITE_ASCII 0x258 ~dw#ches1~ WRITE_BYTE 0x5b 100 ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ADD_CRE_ITEM ~dw#ches1~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ COPY_EXISTING ~%tutu_scriptbg%rook.cre~ ~override~ WRITE_BYTE 0x271 1 WRITE_ASCII 0x258 ~dw#ches2~ WRITE_EVALUATED_ASCII 0x268 ~%tutu_var%wtarsgt~ #8 WRITE_BYTE 0x5b 100 ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ADD_CRE_ITEM ~dw#ches1~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~bgrook.cre~ ~override~ WRITE_ASCII 0x268 ~DWWTRSGT~ #8 END COPY_EXISTING ~%tutu_scriptbg%bishop.cre~ ~override~ WRITE_BYTE 0x271 1 WRITE_EVALUATED_ASCII 0x248 ~%tutu_scriptk%ingdead~ WRITE_ASCII 0x250 ~dw#ches3~ WRITE_BYTE 0x5b 100 ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ADD_CRE_ITEM ~dw#ches1~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ADD_CRE_ITEM ~%tutu_var%blun04~ #0 #0 #0 ~IDENTIFIED~ ~WEAPON1~ EQUIP COPY_EXISTING ~%tutu_scriptbg%king.cre~ ~override~ WRITE_BYTE 0x6e 5 WRITE_BYTE 0x271 255 WRITE_BYTE 0x273 7 WRITE_BYTE 0x5b 100 READ_LONG 0x2b8 ~itemslotoffset~ WRITE_SHORT (~itemslotoffset~+0x12) 7 WRITE_SHORT (~itemslotoffset~+0x32) 65535 WRITE_BYTE 0x235 7 SET ~confusioncount~=0 READ_LONG 0x2b0 ~memorisedoffset~ READ_LONG 0x2b4 ~memorisednum~ SET ~numsofar~=0 WHILE (~numsofar~<~memorisednum~) BEGIN READ_ASCII (~memorisedoffset~+~numsofar~*0xc) ~spellname~ PATCH_IF (~%confusioncount%~=0 AND NOT ~%spellname%~ STRING_COMPARE_CASE ~spwi401~) THEN BEGIN WRITE_ASCII (~memorisedoffset~+~numsofar~*0xc) ~SPWI411~ SET ~confusioncount~=1 SET ~numsofar~=~numsofar~+1 END PATCH_IF (~%confusioncount%~=1 AND NOT ~%spellname%~ STRING_COMPARE_CASE ~spwi401~) THEN BEGIN WRITE_ASCII (~memorisedoffset~+~numsofar~*0xc) ~SPWI412~ SET ~confusioncount~=2 SET ~numsofar~=~numsofar~+1 END PATCH_IF (~%confusioncount%~=2 AND NOT ~%spellname%~ STRING_COMPARE_CASE ~spwi401~) THEN BEGIN SET ~confusioncount~=3 SET ~numsofar~=~numsofar~+1 END PATCH_IF (~%confusioncount%~=3 AND NOT ~%spellname%~ STRING_COMPARE_CASE ~spwi401~) THEN BEGIN WRITE_SHORT (~memorisedoffset~+~numsofar~*0xc+0x8) 0 SET ~numsofar~=~numsofar~+1 END SET ~numsofar~=~numsofar~+1 END WRITE_ASCII 0x250 ~dw#king~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%mage5~ #8 ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ADD_CRE_ITEM ~dw#ches1~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ACTION_IF FILE_EXISTS ~override/dw#18.xxx~ //check if smarter general AI installed THEN BEGIN COPY_EXISTING ~%tutu_scriptbg%king.cre~ ~override~ ADD_CRE_ITEM ~dw#move0~ #0 #0 #0 ~IDENTIFIED~ ~INV2~ END ELSE BEGIN COPY_EXISTING ~%tutu_scriptbg%king.cre~ ~override~ WRITE_ASCII 0x260 ~dw#move0~ COMPILE ~scs/scriptmisc/dw#move0.baf~ END ACTION_IF FILE_EXISTS ~override/dw#comp3.xxx~ THEN BEGIN COPY_EXISTING ~bgking.cre~ ~override~ WRITE_ASCII 0x258 ~_magee5~ #8 END COPY_EXISTING ~%tutu_scriptbg%queen.cre~ ~override~ WRITE_BYTE 0x234 8 SPRINT ~filename~ ~scs/durlag/queenspells.2da~ LAUNCH_PATCH_MACRO ~wipe_and_reset_spells~ ADD_CRE_ITEM ~%tutu_var%immune1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ADD_CRE_ITEM ~dw#ches1~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ COPY_EXISTING ~%tutu_scriptbg%queen.cre~ ~override/dw#queen.cre~ PATCH_IF FILE_EXISTS ~override/dw#21.xxx~ THEN BEGIN WRITE_ASCII 0x258 ~dw#magnp~ END COPY_EXISTING ~spwi942.spl~ ~override~ REPLACE_TEXTUALLY CASE_INSENSITIVE ~_queen~ ~dw#queen~ (8) REPLACE_TEXTUALLY CASE_INSENSITIVE ~queen~ ~dw#queen~ (8) COMPILE EVALUATE_BUFFER ~scs/durlag/chessdelay.d~ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~_ar0507.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Dead("jellspa")~ ~GlobalTimerExpired("DMWWChess","GLOBAL") Global("DMWWChessDelay","GLOBAL",2)~ REPLACE_TEXTUALLY ~ActionOverride(Player1,SetMasterArea("FW0500"))~ ~SetGlobal("DMWWChessDelay","GLOBAL",3) ActionOverride(Player1,SetMasterArea("FW0500"))~ COMPILE_BAF_TO_BCS EXTEND_TOP~_ar0507.bcs~ ~scs/durlag/chessdelay.baf~ EVALUATE_BUFFER REPLACE ~999999~ @1801 COPY_EXISTING ~fw0513.are~ ~override~ WRITE_ASCII 0x94 ~_ar0507~ END ELSE BEGIN COPY_EXISTING ~ARD007.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Dead("JELLSPA")~ ~GlobalTimerExpired("DMWWChess","GLOBAL") Global("DMWWChessDelay","GLOBAL",2)~ REPLACE_TEXTUALLY ~ActionOverride(Player1,SetMasterArea("ARD000"))~ ~SetGlobal("DMWWChessDelay","GLOBAL",3) ActionOverride(Player1,SetMasterArea("ARD000"))~ COMPILE_BAF_TO_BCS EXTEND_TOP ~ARD007.bcs~ ~SCS/durlag/chessdelay.baf~ EVALUATE_BUFFER REPLACE ~999999~ @1801 COPY_EXISTING ~ARD013.are~ ~override~ WRITE_ASCII 0x94 ~ARD007~ #8 END // Demon-knight battle // give the knight a little more staying power COPY_EXISTING ~%tutu_var%deathk.cre~ ~override~ ~%tutu_scriptg%ooddeat.cre~ ~override~ WRITE_SHORT 0x24 250 WRITE_SHORT 0x26 250 // Generate REAL copies of the party via a modified Simulacrum spell ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY ~scs/durlag/simulacr.spl~ ~override~ WRITE_ASCII 0xae ~dw#oppos~ COPY ~scs/durlag/dw#oppos.spl~ ~override~ COMPILE ~scs/durlag/dw#oppos.baf~ COPY_EXISTING ~_ar0516.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Exists(Player1)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player2)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player3)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player4)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player5)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player6)~ ~False()~ COMPILE_BAF_TO_BCS EXTEND_TOP ~_ar0516.bcs~ ~scs/durlag/mirror.baf~ END ELSE BEGIN // unfortunately, we need to remove immunity to restoration too - sorry Fixpack COPY ~SCS/bgt/simulacr.spl~ ~override~ WRITE_ASCII 0xae ~dw#oppos~ #8 COPY ~SCS/durlag/dw#oppos.spl~ ~override~ COMPILE ~SCS/bgt/dw#oppos.baf~ COPY_EXISTING ~ARD016.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~Exists(Player1)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player2)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player3)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player4)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player5)~ ~False()~ REPLACE_TEXTUALLY ~Exists(Player6)~ ~False()~ REPLACE_TEXTUALLY ~GlobalLT("mirrordone","GLOBAL",2)~ ~Global("mirrordone","GLOBAL",1)~ COMPILE_BAF_TO_BCS EXTEND_TOP ~ARD016.bcs~ ~SCS/durlag/mirror.baf~ END //This is the old (pre-Simulacrum) version of the mirror fiends //COPY_EXISTING // ~_uplica1.cre~ ~override~ // WRITE_ASCII 0x248 ~_shout~ // ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ // give the ettercap-style fiends more AC and hit-points and an invisibility power //COPY_EXISTING // ~_uplica2.cre~ ~override~ // ~_uplica4.cre~ ~override~ // ~_uplica5.cre~ ~override~ // WRITE_SHORT 0x24 100 // WRITE_SHORT 0x26 100 // WRITE_SHORT 0x46 0 // WRITE_SHORT 0x48 0 // WRITE_ASCII 0x248 ~_shout~ // WRITE_ASCII 0x250 ~dw#dupli~ // ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ // WRITE_LONG 0x14 2001 //COPY_EXISTING // ~_uplica3.cre~ ~override~ // ~_uplica6.cre~ ~override~ // WRITE_ASCII 0x248 ~_shout~ // WRITE_ASCII 0x250 ~_mage6~ // ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ // ADD_CRE_ITEM ~dw#nodop~ #0 #0 #0 ~IDENTIFIED~ ~INV2~ //COMPILE ~scs/durlag/dw#dupli.baf~ //////////////////////////////////////////////////////////////////////////////////////// BEGIN @38 DESIGNATED 320 //~Improved Demon Cult~ /////////////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) @4000 COPY_EXISTING ~misc01.itm~ ~override/dw#38.xxx~ //installation marker COMPILE ~scs/scriptmisc/dw#invis.baf~ COPY_EXISTING ~dw#invis.bcs~ ~override/%tutu_scriptc%ultmage.bcs~ COPY_EXISTING ~dw#invis.bcs~ ~override/%tutu_var%cultthf.bcs~ COPY_EXISTING ~%tutu_var%tracea.cre~ ~override~ WRITE_BYTE 0x54 11 WRITE_BYTE 0x55 7 WRITE_BYTE 0x56 9 WRITE_BYTE 0x57 11 WRITE_BYTE 0x58 8 WRITE_BYTE 0x234 11 SPRINT ~filename~ ~scs\cult\traceaspells.2da~ LAUNCH_PATCH_MACRO ~wipe_and_reset_spells~ ACTION_IF FILE_EXISTS ~override/dw#magni.bcs~ THEN BEGIN COPY_EXISTING ~%tutu_var%tracea.cre~ ~override~ WRITE_ASCII 0x250 ~dw#magni~ END COPY_EXISTING ~%tutu_var%cultd1.cre~ ~override~ ~%tutu_var%cultd2.cre~ ~override~ ~%tutu_var%cultd3.cre~ ~override~ ~%tutu_var%cultd4.cre~ ~override~ ~%tutu_var%cultd5.cre~ ~override~ ~%tutu_var%cultd6.cre~ ~override~ WRITE_EVALUATED_ASCII 0x248 ~%tutu_scriptw%tasight~ ADD_CRE_ITEM ~%tutu_var%mage05~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ ADD_CRE_ITEM ~dw#move0~ #0 #0 #0 ~IDENTIFIED~ ~INV2~ ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~cultd1.cre~ ~override~ ~cultd2.cre~ ~override~ ~cultd3.cre~ ~override~ ~cultd4.cre~ ~override~ ~cultd5.cre~ ~override~ ~cultd6.cre~ ~override~ WRITE_ASCII 0x248 ~_tasight~ #8 END COPY_EXISTING ~spin999.spl~ ~override~ READ_LONG 0x64 "abil_off" ELSE 0 READ_SHORT 0x68 "abil_num" ELSE 0 READ_LONG 0x6a "fx_off" ELSE 0 SET "count" = 0 SET "done" = 0 WHILE (("%count%" < "%abil_num%") AND ("%done%" = 0)) BEGIN READ_BYTE ("%abil_off%" + (0x28 * "%count%")) "type" PATCH_IF ("%type%" = 1) BEGIN // if melee ability WRITE_SHORT ("%abil_off%" + 0x26 + (0x28 * "%count%")) 158 // Projectile type: INAREAPA.PRO SET "done" = 1 END SET "count" = "count" + 1 END BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~%tutu_var%cult2.cre~ ~override~ WRITE_BYTE 0x234 8 REPLACE_TEXTUALLY ~WAND08~ ~WAND04~ COPY_EXISTING ~%tutu_var%cultt1.cre~ ~override~ READ_LONG ~0x8~ ~name~ READ_LONG ~0xa4~ ~sound1~ READ_LONG ~0xa8~ ~sound1a~ READ_LONG ~0xc8~ ~sound2~ READ_LONG ~0xec~ ~sound3~ READ_LONG ~0xf0~ ~sound4~ READ_LONG ~0x10c~ ~sound5~ COPY ~scs/cult/_cultt1.cre~ ~override/%tutu_var%cultt1.cre~ WRITE_LONG 0x8 ~%name%~ WRITE_LONG 0xc ~%name%~ WRITE_LONG 0xa4 ~%sound1%~ WRITE_LONG 0xa8 ~%sound1a%~ WRITE_LONG 0xc8 ~%sound2%~ WRITE_LONG 0xcc ~%sound2%~ WRITE_LONG 0xd0 ~%sound2%~ WRITE_LONG 0xd4 ~%sound2%~ WRITE_LONG 0xd8 ~%sound2%~ WRITE_LONG 0xec ~%sound3%~ WRITE_LONG 0xf0 ~%sound4%~ WRITE_LONG 0x10c ~%sound5%~ WRITE_EVALUATED_ASCII 0x248 ~%tutu_scriptc%ultsht~ #8 WRITE_EVALUATED_ASCII 0x250 ~%tutu_scriptc%ultmage~ #8 WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%mage5~ #8 WRITE_EVALUATED_ASCII 0x250 ~%tutu_scriptw%tasight~ #8 ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~cultt1.cre~ ~override~ WRITE_ASCII 0x260 ~_tasight~ #8 END ACTION_IF FILE_EXISTS ~override/dw#comp3.xxx~ THEN BEGIN COPY_EXISTING ~cultt1.cre~ ~override~ WRITE_ASCII 0x258 ~_magee5~ #8 END COPY_EXISTING ~%tutu_var%cultt2.cre~ ~override~ WRITE_SHORT 0x24 65 WRITE_SHORT 0x26 65 COPY_EXISTING ~%tutu_var%cultt3.cre~ ~override~ WRITE_SHORT 0x24 53 WRITE_SHORT 0x26 53 ADD_CRE_ITEM ~%tutu_var%potn10~ #3 #0 #0 ~IDENTIFIED~ ~QITEM1~ COPY_EXISTING ~%tutu_var%cultt4.cre~ ~override~ WRITE_SHORT 0x24 60 WRITE_SHORT 0x26 60 WRITE_BYTE 0x273 2 //////////////////////////////////////////////////////////////////////////////////////// BEGIN @39 DESIGNATED 330 //~Improved miscellaneous encounters~ //////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#39.xxx~ //installation marker //Makes the paladin's gibberling hunt slightly less ridiculous... COMPILE EVALUATE_BUFFER ~scs\misc\laureladd.d~ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~fw4600.are~ ~override~ WRITE_ASCII 0x94 ~_ar4600~ EXTEND_BOTTOM ~_ar4600.bcs~ ~scs\misc\laureladd.baf~ EVALUATE_BUFFER END ELSE BEGIN EXTEND_BOTTOM ~ar3499.bcs~ ~SCSBGT\misc\laureladd.baf~ END // The druids in chapter 4 are pushovers to a well-played party, despite supposedly // being ~shadow archdruids~. And the solo priests (Bassilus and Tamoko) don't have // any real chance either. // We add a few levels to them. This doesn't make any // difference in terms of spells (& we don't add anything to hp and saves in most // cases) but it triggers improvements via the auto-prep (and other) part of the new // priest script. In particular, it kicks a number of people past the Iron Skins // and/or Physical Mirror thresholds. // We also give each druid a couple of apprentices. Amarande gets apprentices [and also a // dryad companion when I get around to it.] COPY_EXISTING ~%tutu_var%corsone.cre~ ~override~ ~%tutu_var%izefia.cre~ ~override~ ~%tutu_var%osmadi.cre~ ~override~ ~%tutu_var%takiyah.cre~ ~override~ ~%tutu_var%laskal.cre~ ~override~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<55) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 55 //a few more hp WRITE_BYTE 0x26 55 END WRITE_BYTE 0x52 ~14~ WRITE_BYTE 0x234 ~9~ COPY_EXISTING ~%tutu_var%takiyah.cre~ ~override~ ~%tutu_var%izefia.cre~ ~override~ WRITE_ASCII 0x250 ~dw#druid~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%priest4~ #8 COPY_EXISTING ~%tutu_var%amaran.cre~ ~override~ WRITE_BYTE 0x234 ~9~ WRITE_ASCII 0x250 ~dw#amara~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%priest4~ #8 COPY_EXISTING ~%tutu_var%seniya.cre~ ~override~ WRITE_BYTE 0x234 ~11~ COMPILE ~scs/scriptmisc/dw#druid.baf~ COMPILE ~scs/scriptmisc/dw#amara.baf~ COMPILE ~scs/scriptmisc/dw#drhlp.baf~ COPY_EXISTING ~%tutu_var%izefia.cre~ ~override~ WRITE_ASCII 0x280 ~izefia~ COPY_EXISTING ~%tutu_var%amaran.cre~ ~override~ WRITE_ASCII 0x280 ~amaran~ COPY_EXISTING ~%tutu_var%druid3.cre~ ~override~ READ_LONG 0x8 ~name~ READ_LONG 0xa4 ~greeting~ READ_LONG 0xec ~damage~ READ_LONG 0xf0 ~dying~ READ_LONG 0x198 ~hostile~ ADD_CRE_ITEM ~dw#attac~ #0 #0 #0 ~NONE~ ~INV16~ COPY_EXISTING ~scs/priest/_druid3.cre~ ~override/dw#druid.cre~ WRITE_LONG 0x8 ~%name%~ WRITE_LONG 0xa4 ~%greeting%~ WRITE_LONG 0xec ~%damage%~ WRITE_LONG 0xf0 ~%dying%~ WRITE_LONG 0x10c ~%greeting%~ WRITE_LONG 0x198 ~%hostile%~ WRITE_ASCII 0x248 ~dw#drhlp~ WRITE_EVALUATED_ASCII 0x250 ~%tutu_var%priest3~ ADD_CRE_ITEM ~dw#attac~ #0 #0 #0 ~NONE~ ~INV16~ ACTION_IF FILE_EXISTS ~override/dw#comp4.xxx~ THEN BEGIN COPY_EXISTING ~amaran.cre~ ~override~ ~takiyah.cre~ ~override~ ~izefia.cre~ ~override~ WRITE_ASCII 0x258 ~_priest4~ #8 COPY_EXISTING ~dw#druid.cre~ ~override~ WRITE_ASCII 0x250 ~_priest4~ #8 WRITE_EVALUATED_ASCII 0x268 ~%tutu_scriptw%tasight~ #8 END COPY_EXISTING ~%tutu_var%tamoko.cre~ ~override~ WRITE_BYTE 0x234 ~14~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<84) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 84 //a few more hp WRITE_BYTE 0x26 84 END WRITE_BYTE 0x54 ~5~ WRITE_BYTE 0x55 ~9~ WRITE_BYTE 0x56 ~8~ WRITE_BYTE 0x57 ~11~ WRITE_BYTE 0x58 ~10~ WRITE_BYTE 0x52 ~12~ COPY_EXISTING ~%tutu_var%bassil.cre~ ~override~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<70) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 70 //a few more hp WRITE_BYTE 0x26 70 END WRITE_BYTE 0x52 ~14~ WRITE_BYTE 0x54 ~6~ WRITE_BYTE 0x55 ~10~ WRITE_BYTE 0x56 ~9~ WRITE_BYTE 0x57 ~12~ WRITE_BYTE 0x58 ~11~ WRITE_BYTE 0x72 ~1~ WRITE_BYTE 0x234 ~12~ ACTION_IF FILE_EXISTS ~dw#24.xxx~ THEN BEGIN /// priestly pre-buffing installed COMPILE EVALUATE_BUFFER ~scs/misc/bassiladd.d~ END EXTEND_TOP ~%tutu_var%skeletb.bcs~ ~scs/misc/bassiladd.baf~ EXTEND_TOP ~%tutu_var%zombieb.bcs~ ~scs/misc/bassiladd.baf~ COPY_EXISTING ~%tutu_var%bassil.dlg~ ~override~ DECOMPILE_DLG_TO_D REPLACE_TEXTUALLY ~Shout(1)~ ~SetGlobal("DMWWBassilUndead","GLOBAL",1)~ REPLACE_TEXTUALLY ~Shout(2)~ ~SetGlobal("DMWWBassilUndead","GLOBAL",2)~ COMPILE_D_TO_DLG //Tougher Drasus party COPY_EXISTING ~misc16.itm~ ~override/dw#noptn.itm~ // marker to pick out characters who don't get potions WRITE_LONG 0x18 0 COPY_EXISTING ~%tutu_var%drasus.cre~ ~override~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<89) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 89 //a few more hp WRITE_BYTE 0x26 89 END WRITE_BYTE 0x52 11 WRITE_BYTE 0x54 8 WRITE_BYTE 0x55 8 WRITE_BYTE 0x56 9 WRITE_BYTE 0x57 10 WRITE_BYTE 0x58 11 WRITE_BYTE 0x234 10 ADD_CRE_ITEM ~%tutu_var%potn35~ #0 #0 #0 ~IDENTIFIED~ ~INV1~ ADD_CRE_ITEM ~%tutu_var%potn04~ #0 #0 #0 ~IDENTIFIED~ ~INV2~ ADD_CRE_ITEM ~dw#noptn~ #0 #0 #0 ~IDENTIFIED~ ~INV3~ COPY_EXISTING ~%tutu_var%gentho.cre~ ~override~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<89) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 89 //a few more hp WRITE_BYTE 0x26 89 END WRITE_BYTE 0x52 11 WRITE_BYTE 0x54 8 WRITE_BYTE 0x55 8 WRITE_BYTE 0x56 9 WRITE_BYTE 0x57 10 WRITE_BYTE 0x58 12 WRITE_BYTE 0x234 9 COPY_EXISTING ~%tutu_var%kysus.cre~ ~override~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<38) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 38 //a few more hp WRITE_BYTE 0x26 38 END WRITE_BYTE 0x234 11 COPY_EXISTING ~%tutu_var%rezdan.cre~ ~override~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<33) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 33 //a few more hp WRITE_BYTE 0x26 33 END WRITE_BYTE 0x234 9 // A minor boost to the Red Wizards of Thay encountered in the NE region. // Each gains three levels. COPY_EXISTING ~%tutu_var%denak.cre~ ~override~ WRITE_BYTE 0x234 9 READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<35) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 35 //a few more hp WRITE_BYTE 0x26 35 END ADD_MEMORIZED_SPELL ~spwi303~ #2 ~wizard~ ADD_MEMORIZED_SPELL ~spwi407~ #3 ~wizard~ ADD_MEMORIZED_SPELL ~spwi507~ #4 ~wizard~ COPY_EXISTING ~%tutu_var%brenda.cre~ ~override~ WRITE_LONG 0x14 900 WRITE_BYTE 0x234 7 READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<26) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 26 //a few more hp WRITE_BYTE 0x26 26 END ADD_MEMORIZED_SPELL ~spwi312~ #2 ~wizard~ ADD_MEMORIZED_SPELL ~spwi316~ #2 ~wizard~ COPY_EXISTING ~%tutu_var%lasala.cre~ ~override~ WRITE_LONG 0x14 700 WRITE_BYTE 0x234 6 READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<21) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 21 //a few more hp WRITE_BYTE 0x26 21 END ADD_MEMORIZED_SPELL ~spwi118~ #0 ~wizard~ ADD_MEMORIZED_SPELL ~spwi306~ #2 ~wizard~ COPY_EXISTING ~%tutu_var%diana.cre~ ~override~ WRITE_LONG 0x14 1000 WRITE_BYTE 0x234 8 READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<28) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 28 //a few more hp WRITE_BYTE 0x26 28 END ADD_MEMORIZED_SPELL ~spwi401~ #3 ~wizard~ // Cythandria: she's too smart to get a couple of ogres as all her help against the party. Replace them with // stone golems COPY_EXISTING ~golsto01.cre~ ~override/%tutu_var%arghh.cre~ SAY 0x8 @1113 SAY 0xc @1113 WRITE_ASCII 0x280 ~arghh~ #16 REPLACE_TEXTUALLY ~immune2~ ~immune1~ //BG1 weapons all count as +1 so it's a bit unfair if golems are immune! COPY_EXISTING ~golsto01.cre~ ~override/%tutu_var%ughh.cre~ SAY 0x8 @1114 SAY 0xc @1114 WRITE_ASCII 0x280 ~ughh~ #16 REPLACE_TEXTUALLY ~immune2~ ~immune1~ //BG1 weapons all count as +1 so it's a bit unfair if golems are immune! /// Slythe: just one more level brings him into quadruple-damage territory /// Also, before the battle he has slugged a potion of invulnerability and received /// a Non-Detection spell COPY ~scs/misc/dw#slyth.itm~ ~override~ COPY_EXISTING ~%tutu_var%clck06.itm~ ~override/dw#slynd.itm~ WRITE_BYTE 0x18 0 COPY_EXISTING ~%tutu_var%slythe.cre~ ~override~ WRITE_BYTE 0x235 9 ADD_CRE_ITEM ~dw#slyth~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ ADD_CRE_ITEM ~dw#slynd~ #0 #0 #0 ~IDENTIFIED~ ~CLOAK~ COPY_EXISTING ~%tutu_var%slythe.cre~ ~override~ WRITE_ASCII 0x248 ~dw#slyth~ EXTEND_BOTTOM ~dw#slyth.bcs~ ~scs/scriptmisc/slythe_feedback.baf~ /// C7 Iron Throne assassin team COPY_EXISTING ~%tutu_var%shaldr.cre~ ~override~ WRITE_BYTE 0x234 13 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+4 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ COPY_EXISTING ~%tutu_var%haseo.cre~ ~override~ WRITE_BYTE 0x234 11 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+13 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ WRITE_BYTE 0x52 10 WRITE_BYTE 0x54 ~7~ WRITE_BYTE 0x55 ~9~ WRITE_BYTE 0x56 ~8~ WRITE_BYTE 0x57 ~8~ WRITE_BYTE 0x58 ~10~ ADD_CRE_ITEM ~%tutu_var%helm01~ #0 #0 #0 ~IDENTIFIED~ ~HELMET~ ADD_CRE_ITEM ~%tutu_var%plat04~ #0 #0 #0 ~IDENTIFIED~ ~ARMOR~ ADD_CRE_ITEM ~%tutu_var%shld04~ #0 #0 #0 ~NONE~ ~SHIELD~ COPY_EXISTING ~%tutu_var%rahvin.cre~ ~override~ WRITE_BYTE 0x234 11 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+13 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ WRITE_BYTE 0x6e 2 WRITE_BYTE 0x52 10 WRITE_BYTE 0x54 ~7~ WRITE_BYTE 0x55 ~9~ WRITE_BYTE 0x56 ~8~ WRITE_BYTE 0x57 ~8~ WRITE_BYTE 0x58 ~10~ COPY_EXISTING ~%tutu_var%wudei.cre~ ~override~ WRITE_BYTE 0x234 12 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+28 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ WRITE_BYTE 0x52 14 WRITE_BYTE 0x54 ~6~ WRITE_BYTE 0x55 ~10~ WRITE_BYTE 0x56 ~9~ WRITE_BYTE 0x57 ~12~ WRITE_BYTE 0x58 ~11~ // Micro-tweak to the Amazons: raise the archers' levels to 5 to buy sleep immunity COPY_EXISTING ~%tutu_var%MANEIR.CRE~ ~override~ ~%tutu_var%TELKA.CRE~ ~override~ WRITE_BYTE 0x234 5 WRITE_BYTE 0x235 5 // Jenkal (the halfling traitor): raise him from 4/4 to 6/6; let him flee the battle // and turn up in the ogre mage's home, and in due course with the sewer ogre mage COPY_EXISTING ~%tutu_var%jenkal.cre~ ~override~ WRITE_SHORT 0x24 48 WRITE_SHORT 0x26 48 WRITE_BYTE 0x52 15 WRITE_BYTE 0x54 11 WRITE_BYTE 0x55 12 WRITE_BYTE 0x56 11 WRITE_BYTE 0x57 13 WRITE_BYTE 0x58 13 WRITE_BYTE 0x234 6 WRITE_BYTE 0x235 6 WRITE_LONG 0x14 651 WRITE_ASCII 0x248 ~dw#jenka~ WRITE_ASCII 0x250 ~~ #8 COMPILE EVALUATE_BUFFER ~scs/scriptmisc/dw#jenka.baf~ COMPILE EVALUATE_BUFFER ~scs/misc/jenkal.d~ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~fw5201.are~ ~override~ WRITE_ASCII 0x94 ~_AR5201~ BUT_ONLY_IF_IT_CHANGES EXTEND_BOTTOM ~_ar5201.bcs~ ~scs/scriptmisc/ar5201_jenkal.baf~ EVALUATE_BUFFER EXTEND_BOTTOM ~_ar0226.bcs~ ~scs/scriptmisc/ar0226_jenkal.baf~ EVALUATE_BUFFER OUTER_SPRINT ~doorname~ ~DOOR5201~ END ELSE BEGIN EXTEND_BOTTOM ~ar3401.bcs~ ~scs/scriptmisc/ar5201_jenkal.baf~ EVALUATE_BUFFER EXTEND_BOTTOM ~ar7326.bcs~ ~scs/scriptmisc/ar0226_jenkal.baf~ EVALUATE_BUFFER OUTER_SPRINT ~doorname~ ~DOOR9901~ END COPY_EXISTING ~%Gullykin_JenkalsHouse_Cellar%.are~ ~override~ READ_LONG 0x5c ~infooffset~ READ_SHORT 0x5a ~numinfo~ SET ~infosofar~=0 WHILE (~infosofar~<~numinfo~) BEGIN READ_ASCII ~%infooffset%~+~%infosofar%~*0xc4 ~infoname~ PATCH_IF (~%infoname%~ STRING_EQUAL_CASE ~%doorname%~) THEN BEGIN WRITE_SHORT ~%infooffset%~+~%infosofar%~*0xc4+0x20 1 SAY ~%infooffset%~+~%infosofar%~*0xc4+0x64 @2507 END SET ~infosofar~=~%infosofar%~+1 END //////////////////////////////////////////////////////////////////////////////////////////// BEGIN @42 DESIGNATED 340 //Tougher chapter-two end battle //////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#42.xxx~ //installation marker COPY_EXISTING ~%tutu_var%kobold7.cre~ ~override~ //these are Mulahey's elite guards, so: WRITE_BYTE 0x23c 16 //modify their DEX to 16 WRITE_BYTE 0x6f 3 //make them double-specialised in the sword WRITE_BYTE 0x52 17 //in fairness make their THAC0 a bit more plausible WRITE_BYTE 0x234 4 //correct crazy levels WRITE_BYTE 0x235 1 WRITE_ASCII 0x250 ~dw#mulhp~ WRITE_LONG 0x14 50 //provide a reasonable experience reward WRITE_BYTE 0x270 128 //make them start out neutral SAY 0x8 @1310 //call them elite SAY 0xc @1310 COPY_EXISTING ~%NashkelMines_MulaheysCave%.are~ ~override~ // move Mulahey to somewhere more convenient READ_LONG ~0x54~ ~actors~ READ_SHORT ~0x58~ ~actornum~ SET ~editnum~=0 WHILE (~editnum~<~actornum~) BEGIN SET ~editloc~=~actors~+0x110*~editnum~+0x80 READ_ASCII ~editloc~ ~actorname~ PATCH_IF NOT (~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%mulahe~) THEN BEGIN SET ~editnum~=~actornum~ WRITE_SHORT ~editloc~+0x20 494 WRITE_SHORT ~editloc~+0x22 858 WRITE_SHORT ~editloc~+0x24 494 WRITE_SHORT ~editloc~+0x26 858 END SET ~editnum~=~editnum~+1 END COPY_EXISTING ~%tutu_var%mulahe.cre~ ~override~ READ_BYTE 0x24 ~hitpoints~ PATCH_IF (~%hitpoints%~<40) THEN BEGIN //don't override The Bigg's max-hp WRITE_BYTE 0x24 40 //a few more hp WRITE_BYTE 0x26 40 END ACTION_IF FILE_EXISTS_IN_GAME ~dw#24.xxx~ THEN BEGIN // pre-buff component installed EXTEND_BOTTOM ~%tutu_var%mulahey.bcs~ ~scs/C2end/muladd.baf~ //script add-on END ELSE BEGIN EXTEND_BOTTOM ~%tutu_var%mulahey.bcs~ ~scs/C2end/muladd_noprep.baf~ //script add-on END //enhance the allies whom Mulahey summons COPY_EXISTING ~%tutu_var%skelet.cre~ ~override/dw#mulsk.cre~ ~%tutu_var%skelet.cre~ ~override/dw#mulgh.cre~ //it was a ghoul at one point ~%tutu_var%kobcomm.cre~ ~override/dw#mulkc.cre~ ~%tutu_var%kobold.cre~ ~override/dw#mulkg.cre~ ~%tutu_var%kobold7.cre~ ~override/dw#mulko.cre~ ~%tutu_scriptk%obola_b.cre~ ~override/dw#mulka.cre~ WRITE_ASCII 0x248 ~dw#mulhp~ WRITE_BYTE 0x270 255 COMPILE ~scs/C2end/dw#mulhp.baf~ COMPILE EVALUATE_BUFFER ~scs/C2end/mulreplace.d~ ACTION_IF FILE_EXISTS ~override/dw#kobgd.cre~ THEN BEGIN //If ~dark side kobold upgrade~ is installed COPY_EXISTING ~dw#kobgd.cre~ ~override/dw#mulkg.cre~ //add some kobold guards to the reinforcements WRITE_ASCII 0x248 ~dw#mulhp~ COPY_EXISTING ~%tutu_var%kobold7.cre~ ~override~ REPLACE_TEXTUALLY CASE_INSENSITIVE ~%tutu_var%sw1h07~ ~dw#kob01~ (8) //equip the elites with poisoned daggers END //////////////////////////////////////////////////////////////////////// BEGIN @43 DESIGNATED 350 //Harder end-of-chapter-three battle /////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#43.xxx~ //installation marker COPY_EXISTING ~%tutu_var%britik.cre~ ~override~ WRITE_ASCII 0x248 ~dw#brit~ //gives him a strength potion WRITE_ASCII 0x258 ~dw#c3hst~ //make sure he goes hostile WRITE_EVALUATED_ASCII 0x260 ~%tutu_scriptw%tasight~ WRITE_BYTE 0x234 5 // now Britik is 5th level ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~britik.cre~ ~override~ WRITE_ASCII 0x260 ~_tasight~ #8 END COMPILE EVALUATE_BUFFER ~scs/C3end/dw#brit.baf~ COMPILE ~scs/C3end/dw#c3hst.baf~ COPY_EXISTING ~%tutu_var%raemon.cre~ ~override~ WRITE_ASCII 0x250 ~shoutdlg~ //stop Raemon coming forward COPY_EXISTING ~%tutu_var%hakt.cre~ ~override~ WRITE_ASCII 0x258 ~dw#c3hst~ //make sure he goes hostile WRITE_EVALUATED_ASCII 0x260 ~%tutu_var%wtarsgt~ #8 COPY_EXISTING ~%tutu_var%venkt.cre~ ~override~ WRITE_ASCII 0x250 ~dw#c3hst~ //make sure he goes hostile WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%mage5~ #8 //make sure he goes hostile ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~hakt.cre~ ~override~ WRITE_ASCII 0x260 ~dwwtrsgt~ #8 END ACTION_IF FILE_EXISTS ~override/dw#comp3.xxx~ THEN BEGIN COPY_EXISTING ~venkt.cre~ ~override~ WRITE_ASCII 0x258 ~_magee3~ #8 END COPY_EXISTING ~%BanditCamp_RaemonsTent%.are~ ~override~ READ_LONG 0x5c ~doorsoffset~ READ_SHORT 0x5a ~numdoors~ SET ~numsofar~=0 WHILE (~%numsofar%~<~%numdoors%~) BEGIN READ_ASCII (~doorsoffset~+0xc4*~numsofar~+0x38) ~exitloc~ PATCH_IF !(~%exitloc%~ STRING_COMPARE_CASE ~FW1900~) THEN BEGIN WRITE_BYTE (~doorsoffset~+0xc4*~numsofar~+0x60) 4 END SET ~numsofar~=~%numsofar%~+1 END WRITE_BYTE ~doorsoffset~+0x60 4 // make the tent party-required READ_LONG ~0x54~ ~actors~ READ_SHORT ~0x58~ ~actornum~ SET ~editnum~=0 WHILE (~editnum~<~actornum~) BEGIN SET ~editloc~=~actors~+0x110*~editnum~+0x80 READ_ASCII ~editloc~ ~actorname~ PATCH_IF NOT (~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%raemon~) THEN BEGIN //move Raemon back WRITE_SHORT ~editloc~+0x20 401 WRITE_SHORT ~editloc~+0x22 273 WRITE_SHORT ~editloc~+0x24 401 WRITE_SHORT ~editloc~+0x26 273 END PATCH_IF NOT (~%actorname%~ STRING_COMPARE_CASE ~%tutu_var%britik~) THEN BEGIN //move Britik back WRITE_SHORT ~editloc~+0x20 401 WRITE_SHORT ~editloc~+0x22 273 WRITE_SHORT ~editloc~+0x24 401 WRITE_SHORT ~editloc~+0x26 273 END SET ~editnum~=~editnum~+1 END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_BOTTOM ~_ar1901.bcs~ ~scs/C3end/tazoktent.baf~ // add a few BTEs and hobgoblin elites to the tent fight END ELSE BEGIN EXTEND_BOTTOM ~ar8701.bcs~ ~scs/C3end/tazoktent.baf~ // add a few BTEs and hobgoblin elites to the tent fight END COPY_EXISTING ~%tutu_scripth%obelite.cre~ ~override/dw#c3hb.cre~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%wtarsgt~ // hobgobs that don't wander randomly, have ~shout~, & are neutral at start WRITE_ASCII 0x250 ~dw#c3hst~ //make sure he goes hostile WRITE_EVALUATED_ASCII 0x248 ~%tutu_var%shout~ #8 WRITE_BYTE 0x270 128 ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~dw#c3hb.cre~ ~override~ WRITE_ASCII 0x258 ~dwwtrsgt~ #8 // hobgobs that don't wander randomly, have ~shout~, & are neutral at start END ACTION_IF FILE_EXISTS ~override/dw#comp2.xxx~ THEN BEGIN COPY_EXISTING ~dw#c3hb.cre~ ~override~ WRITE_ASCII 0x248 ~dwshout~ #8 END COPY_EXISTING ~%tutu_scripti%ronelit.cre~ ~override/dw#c3bt.cre~ //Black Talons who start non-hostile WRITE_BYTE 0x270 128 COMPILE ~scs/C3end/_bandit.baf~ // slightly more failsafe go-hostile block ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_TOP ~_hobgobc.bcs~ ~override/_bandit.bcs~ END ELSE BEGIN EXTEND_TOP ~hobgobc.bcs~ ~override/_bandit.bcs~ COPY_EXISTING ~_bandit.bcs~ ~override/bandit.bcs~ END COPY_EXISTING ~%tutu_var%credus.cre~ ~override~ // make sure all bandits have the go-hostile script ~%tutu_var%ardeno.cre~ ~override~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%bandit~ #8 COMPILE ~scs/C3end/dw#taug.baf~ // Taugosz sounds the alarm at start of ch. 4 COMPILE EVALUATE_BUFFER ~scs/C3end/dw#taug.d~ COPY_EXISTING ~%tutu_var%taugos.cre~ ~override~ WRITE_ASCII 0x250 ~dw#taug~ WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%bandit~ #8 COPY_EXISTING ~%BanditCamp%.are~ ~override~ READ_LONG 0x5c ~doorsoffset~ READ_SHORT 0x5a ~numdoors~ SET ~numsofar~=0 WHILE (~%numsofar%~<~%numdoors%~) BEGIN READ_ASCII (~doorsoffset~+0xc4*~numsofar~+0x38) ~exitloc~ PATCH_IF !(~%exitloc%~ STRING_COMPARE_CASE ~%BanditCamp_RaemonsTent%~) THEN BEGIN WRITE_BYTE (~doorsoffset~+0xc4*~numsofar~+0x60) 4 END SET ~numsofar~=~%numsofar%~+1 END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN OUTER_SPRINT ~doorname~ ~door1901~ END ELSE BEGIN OUTER_SPRINT ~doorname~ ~door8701~ END COMPILE EVALUATE_BUFFER ~scs/C3end/dmwwsealtent.baf~ COPY ~override/dmwwsealtent.bcs~ ~override~ REPLACE 888888 @1413 ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_BOTTOM ~_ar1900.bcs~ ~override/dmwwsealtent.bcs~ // lock Tazok's tent when party leaves it END ELSE BEGIN EXTEND_BOTTOM ~ar8700.bcs~ ~override/dmwwsealtent.bcs~ // lock Tazok's tent when party leaves it END //////////////////////////////////////////////////////////////////////// BEGIN @44 DESIGNATED 360 //Harder end-of-chapter-four battle /////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#44.xxx~ //installation marker ACTION_IF FILE_EXISTS ~override/dw#davcr.bcs~ THEN BEGIN //if ~Smarter Mages~ is installed //place_needing_attention? ...leave for now. We're basically almost-completely rewriting Davaeorn's spellset, it's hard to anticipate compatibility issues COPY_EXISTING ~%tutu_var%davaeo.cre~ ~override~ SPRINT ~filename~ ~scs\c4end\davaeornspells.2da~ LAUNCH_PATCH_MACRO ~wipe_and_reset_spells~ COPY_EXISTING ~dw#davcr.bcs~ ~override/%tutu_scriptd%avaeorn.bcs~ END COMPILE EVALUATE_BUFFER ~scs/C4end/dw#dav.baf~ COPY ~override/dw#dav.bcs~ ~override~ REPLACE ~666601~ @1111 REPLACE ~666602~ @1112 REPLACE ~666603~ @1017 EXTEND_TOP ~%tutu_scriptd%avaeorn.bcs~ ~override/dw#dav.bcs~ //Change Davaeorn's Horrors. It's very unwise for him to have them only turn up when a trap triggers. //Also in D&D Horrors can be made immune to 3 spells, so we choose Web, Fireball, LB. For fairness we //remove their 100% immunity to missiles COPY_EXISTING ~%tutu_var%antiweb.itm~ ~override/dw#vsweb.itm~ // we make our own copy of antiweb in case someone else's // script targets spiders using it. Horrors aren't spiders! COPY_EXISTING ~%tutu_var%battho.cre~ ~override/dw#davho.cre~ WRITE_BYTE 0x5b ~100~ WRITE_BYTE 0x59 ~100~ WRITE_BYTE 0x63 ~0~ ADD_CRE_ITEM ~dw#vsweb~ #0 #0 #0 ~NONE~ ~AMULET~ WRITE_ASCII 0x250 ~dw#davho~ COMPILE ~scs/C4end/dw#davho.baf~ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_TOP ~_ar1803.bcs~ ~scs/C4end/ar1803add.baf~ COPY_EXISTING ~fw1803.are~ ~override~ REPLACE_TEXTUALLY ~_attleho~ ~_gtmm%null%%null%%null%~ END ELSE BEGIN EXTEND_TOP ~AR8603.bcs~ ~SCS/C4end/ar1803add.baf~ COPY_EXISTING ~AR8603.are~ ~override~ REPLACE_TEXTUALLY ~battleho~ ~gtmm%null%%null%%null%%null%~ END //////////////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @45 DESIGNATED 370 // Harder end-of-chapter-5 battle //////////////////////////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#45.xxx~ //installation marker COMPILE ~scs/scriptmisc/dw#invis.baf~ COPY_EXISTING ~%tutu_var%lasala.cre~ ~override~ READ_LONG ~0xa4~ ~sound1~ READ_LONG ~0xec~ ~sound3~ READ_LONG ~0xf0~ ~sound4~ READ_LONG ~0x10c~ ~sound5~ COPY ~scs/C5end/dw#c51.cre~ ~override~ SAY 0x8 @1901 SAY 0xc @1901 WRITE_LONG 0xa4 ~%sound1%~ WRITE_LONG 0xec ~%sound3%~ WRITE_LONG 0xf0 ~%sound4%~ WRITE_LONG 0x10c ~%sound5%~ WRITE_ASCII 0x248 ~dw#invis~ WRITE_EVALUATED_ASCII 0x268 ~%tutu_scriptw%tasight~ ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~dw#c51.cre~ ~override~ WRITE_ASCII 0x268 ~_tasight~ #8 END COPY_EXISTING ~%tutu_var%thief.cre~ ~override~ READ_LONG ~0xa4~ ~sound1~ READ_LONG ~0xa8~ ~sound1a~ READ_LONG ~0xc8~ ~sound2~ READ_LONG ~0xec~ ~sound3~ READ_LONG ~0xf0~ ~sound4~ READ_LONG ~0x10c~ ~sound5~ COPY ~scs/C5end/dw#c52.cre~ ~override~ SAY 0x8 @1902 SAY 0xc @1902 WRITE_LONG 0xa4 ~%sound1%~ WRITE_LONG 0xa8 ~%sound1a%~ WRITE_LONG 0xc8 ~%sound2%~ WRITE_LONG 0xcc ~%sound2%~ WRITE_LONG 0xd0 ~%sound2%~ WRITE_LONG 0xd4 ~%sound2%~ WRITE_LONG 0xd8 ~%sound2%~ WRITE_LONG 0xec ~%sound3%~ WRITE_LONG 0xf0 ~%sound4%~ WRITE_LONG 0x10c ~%sound5%~ WRITE_ASCII 0x248 ~dw#invis~ ADD_CRE_ITEM ~%tutu_var%potn10~ #3 #0 #0 ~IDENTIFIED~ ~QITEM1~ WRITE_EVALUATED_ASCII 0x268 ~%tutu_scriptw%tasight~ ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~dw#c52.cre~ ~override~ WRITE_ASCII 0x268 ~_tasight~ #8 END ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_BOTTOM ~_ar0615.bcs~ ~scs/C5end/c5add.baf~ END ELSE BEGIN EXTEND_BOTTOM ~AR7615.bcs~ ~SCS/C5end/c5add.baf~ END COMPILE EVALUATE_BUFFER ~scs/C5end/c5end.d~ //////////////////////////////////////////////////////////////////////////////////////// BEGIN @46 DESIGNATED 380 //~Harder end-of-C6 battle //////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#46.xxx~ //installation marker // His strike team are invisible, and boosted by a couple of pre-summoned air elementals; they also // gain a couple of levels COMPILE ~scs/scriptmisc/dw#invis.baf~ COMPILE ~scs/scriptmisc/dw#elem.baf~ COMPILE EVALUATE_BUFFER ~scs/misc/prat.d~ EXTEND_TOP ~%tutu_var%prat.bcs~ ~scs/scriptmisc/prat.baf~ //place_needing_attention COPY_EXISTING ~elairl01.cre~ ~override/dw#prela.cre~ WRITE_ASCII 0x248 ~dw#invis~ WRITE_ASCII 0x250 ~dw#elem~ WRITE_BYTE 0x270 128 REPLACE_TEXTUALLY ~immune2~ ~immune1~ //BG1 weapons all count as +1 so it's a bit unfair if elementals are immune! COPY_EXISTING ~%tutu_var%prat.cre~ ~override~ WRITE_BYTE 0x234 10 WRITE_BYTE 0x235 10 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+14 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ WRITE_BYTE 0x52 11 WRITE_BYTE 0x54 ~8~ WRITE_BYTE 0x55 ~9~ WRITE_BYTE 0x56 ~9~ WRITE_BYTE 0x57 ~9~ WRITE_BYTE 0x58 ~10~ COPY_EXISTING ~%tutu_var%sakul.cre~ ~override~ WRITE_BYTE 0x234 11 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+6 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ WRITE_ASCII 0x248 ~dw#invis~ WRITE_ASCII 0x250 ~shout~ #8 //note to self: yes, it is supposed to be this shout, not "_shout" WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%mage5~ #8 ACTION_IF FILE_EXISTS ~override/dw#comp3.xxx~ THEN BEGIN COPY_EXISTING ~sakul.cre~ ~override~ WRITE_ASCII 0x258 ~_magee5~ #8 END COPY_EXISTING ~%tutu_var%bor.cre~ ~override~ WRITE_BYTE 0x234 9 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+20 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ WRITE_BYTE 0x54 ~8~ WRITE_BYTE 0x55 ~10~ WRITE_BYTE 0x56 ~9~ WRITE_BYTE 0x57 ~9~ WRITE_BYTE 0x58 ~11~ WRITE_ASCII 0x248 ~dw#invis~ WRITE_ASCII 0x250 ~shout~ #8 WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%wtarsgt~ ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~bor.cre~ ~override~ WRITE_ASCII 0x258 ~_wtarsgt~ #8 END COPY_EXISTING ~%tutu_var%tam.cre~ ~override~ WRITE_BYTE 0x234 10 READ_SHORT 0x24 ~hitpoints~ SET ~hitpoints~=~%hitpoints%~+20 WRITE_SHORT 0x24 ~%hitpoints%~ WRITE_SHORT 0x26 ~%hitpoints%~ WRITE_BYTE 0x52 11 WRITE_BYTE 0x54 ~8~ WRITE_BYTE 0x55 ~10~ WRITE_BYTE 0x56 ~9~ WRITE_BYTE 0x57 ~9~ WRITE_BYTE 0x58 ~11~ WRITE_ASCII 0x248 ~dw#invis~ WRITE_ASCII 0x250 ~shout~ #8 WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%wtarsgt~ #8 ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~tam.cre~ ~override~ WRITE_ASCII 0x258 ~_wtarsgt~ #8 END ////////////////////////////////////////////////////////////////// BEGIN @47 DESIGNATED 390 //Tougher final battle ////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#47.xxx~ //installation marker //Skeleton warriors COPY_EXISTING ~%tutu_scriptbg%skelwa.cre~ ~override/dw#angsk.cre~ ADD_CRE_ITEM ~dw#angar~ #20 #0 #0 ~IDENTIFIED~ ~QUIVER1~ ADD_CRE_ITEM ~%tutu_var%bow01~ #0 #0 #0 ~IDENTIFIED~ ~WEAPON2~ EQUIP TWOHANDED WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%wtarsgt~ #8 COPY_EXISTING ~%tutu_scriptbg%skelwa.cre~ ~override/dw#diask.cre~ ADD_CRE_ITEM ~%tutu_var%arow04~ #20 #0 #0 ~IDENTIFIED~ ~QUIVER1~ ADD_CRE_ITEM ~%tutu_var%bow01~ #0 #0 #0 ~IDENTIFIED~ ~WEAPON2~ EQUIP TWOHANDED WRITE_EVALUATED_ASCII 0x258 ~%tutu_var%wtarsgt~ #8 COPY_EXISTING ~%tutu_scriptbg%skelwa.cre~ ~override/dw#semsk.cre~ READ_LONG 0x2bc ~%itemoffset%~ WRITE_EVALUATED_ASCII (~%itemoffset%~) ~%tutu_var%staf01~ #8 ACTION_IF FILE_EXISTS ~override/dw#comp1.xxx~ THEN BEGIN COPY_EXISTING ~dw#angsk.cre~ ~override/dw#angsk.cre~ ~dw#diask.cre~ ~override/dw#diask.cre~ WRITE_ASCII 0x258 ~_wtarsgt~ #8 END //Skeleton-warrior-creating spells COPY_EXISTING ~scs/endbattle/spwi948.spl~ ~override/dw#tazsk.spl~ WRITE_EVALUATED_ASCII 0xae ~%tutu_scriptbg%skelwa~ #8 COPY_EXISTING ~scs/endbattle/spwi948.spl~ ~override/dw#angsk.spl~ WRITE_ASCII 0xae ~dw#angsk~ COPY_EXISTING ~scs/endbattle/spwi948.spl~ ~override/dw#semsk.spl~ WRITE_ASCII 0xae ~dw#semsk~ COPY_EXISTING ~scs/endbattle/spwi948.spl~ ~override/dw#diask.spl~ WRITE_ASCII 0xae ~dw#diask~ //Sarevok's protective items COPY ~scs/endbattle/dw#sarr1.itm~ ~override~ //ring COPY_EXISTING ~dw#sarr1.itm~ ~override/dw#sarr2.itm~ WRITE_SHORT 0x1c 4 //boots COPY_EXISTING ~dw#sarr1.itm~ ~override/dw#sarr3.itm~ WRITE_SHORT 0x1c 6 //gloves COPY_EXISTING ~dw#sarr1.itm~ ~override/dw#sarr4.itm~ WRITE_SHORT 0x1c 3 //belt //Special arrows COPY ~scs/endbattle/dw#angar.itm~ ~override~ SAY 0x8 @2012 SAY 0xc @2012 SAY 0x54 @2011 COPY ~scs/endbattle/dw#diaar.itm~ ~override~ SAY 0x8 @2014 SAY 0xc @2014 SAY 0x54 @2013 //Ring giving Diarmid temporary immunity to traps - just long enough to use his scroll // no longer needed if traps are removed //COPY ~SCSBGT/endbattle/dw#diarm.itm~ ~override~ //end-of-game script - only needed for BGTUTU ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_TOP ~_ar0125.bcs~ ~scs/endbattle/dw#end.baf~ // replaced end-of-Sarevok sequence END ELSE BEGIN // I have no idea what this does but it's in SCSBGT COPY_EXISTING ~AR7225.BCS~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~ActionOverride("Galdor",DestroySelf())[%tab%%lnl%%mnl%%wnl% ]*ActionOverride("Semaj",DestroySelf())[%tab%%lnl%%mnl%%wnl% ]*ActionOverride("Tazok",DestroySelf())~ ~~ COMPILE_BAF_TO_BCS END //Sarevok ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN OUTER_SPRINT ~false_in_tutu~ ~False()~ OUTER_SPRINT ~tutudoor_0200~ ~0200~ OUTER_SPRINT ~tutudoor_0109a~ ~0109a~ OUTER_SPRINT ~tutudoor_0109b~ ~0109b~ OUTER_SPRINT ~tutudoor_0111~ ~0111~ COMPILE EVALUATE_BUFFER ~scs/endbattle/_sarevok.baf~ COPY ~override/_sarevok.bcs~ ~override~ REPLACE ~333331~ @1014 REPLACE ~333332~ @1007 REPLACE ~333333~ @1099 REPLACE ~333334~ @2001 END ELSE BEGIN // I have no idea what this does but it's in SCSBGT OUTER_SPRINT ~false_in_tutu~ ~~ OUTER_SPRINT ~tutudoor_0200~ ~7300~ OUTER_SPRINT ~tutudoor_0109a~ ~7209a~ OUTER_SPRINT ~tutudoor_0109b~ ~7209b~ OUTER_SPRINT ~tutudoor_0111~ ~7211~ COMPILE EVALUATE_BUFFER ~scs/endbattle/_sarevok.baf~ COPY ~override/_sarevok.bcs~ ~override~ REPLACE ~333331~ @1014 REPLACE ~333332~ @1007 REPLACE ~333333~ @1099 REPLACE ~333334~ @2001 COPY_EXISTING ~_sarevok.bcs~ ~override/bgsarvok.bcs~ END COPY_EXISTING ~%tutu_var%sarevo.cre~ ~override~ WRITE_SHORT 0x24 ~250~ // In vanilla BG, Sarevok dies at 150hp to avoid bugs due WRITE_SHORT 0x26 ~250~ // to him ~chunking~. But of course in TUTU that confuses // the ~injured/badly injured/nearly dead~ display. // We use a min-hp ring instead. WRITE_BYTE 0x59 ~40~ // slightly reduced base resistances since he gets them from his followers WRITE_BYTE 0x5a ~40~ WRITE_BYTE 0x5b ~40~ WRITE_BYTE 0x5c ~40~ WRITE_BYTE 0x5e ~40~ WRITE_BYTE 0x5f ~40~ WRITE_BYTE 0x63 ~0~ READ_LONG 0x2bc ~%itemoffset%~ WRITE_ASCII (~%itemoffset%~+0x50) ~minhp1~ #8 // give him the min-hp ring ADD_CRE_ITEM ~dw#sarr1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~//items to simulate acolyte-shielding ADD_CRE_ITEM ~dw#sarr2~ #0 #0 #0 ~IDENTIFIED~ ~BOOTS~ ADD_CRE_ITEM ~dw#sarr3~ #0 #0 #0 ~IDENTIFIED~ ~GLOVES~ ADD_CRE_ITEM ~dw#sarr4~ #0 #0 #0 ~IDENTIFIED~ ~AMULET~ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN COPY_EXISTING ~_sarevo.cre~ ~override~ ADD_CRE_ITEM ~minhp1~ #0 #0 #0 ~NONE~ ~LRING~ END COMPILE EVALUATE_BUFFER ~scs/endbattle/sarevok.d~ // Tazok COPY_EXISTING ~%tutu_var%TAZOK2.CRE~ ~override~ READ_LONG 0x2bc ~%itemoffset%~ READ_LONG 0x2b8 ~%itemslot%~ READ_LONG 0x2c0 numitems SET plat02idx = 255 SET plat01idx = 255 FOR(index=0; index 0) BEGIN WRITE_SHORT ("%trig_off%" + 0x6c + (0xc4 * "%index%")) 0 // is not a trap END END /////////////Part D - ease of use //////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// BEGIN @32 DESIGNATED 400 //~Skip Candlekeep~ ////////////////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#32.xxx~ //installation marker COPY_EXISTING ~%tutu_var%watch3.cre~ ~override/dw#skcan.cre~ WRITE_ASCII 0x250 ~dw#skcan~ WRITE_ASCII 0x2cc ~dw#skcan~ COMPILE ~scs/candleskip/dw#skcan.baf~ COMPILE EVALUATE_BUFFER ~scs/candleskip/dw#skcan.d~ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN EXTEND_BOTTOM ~_ar2600.bcs~ ~scs/candleskip/addtoarea.baf~ END ELSE BEGIN EXTEND_BOTTOM ~ar0015.bcs~ ~scs/candleskip/addtoarea.baf~ END EXTEND_TOP ~%tutu_var%gorion.bcs~ ~scs/candleskip/addtogorion.baf~ ////////////////////////////////////////////////////////////////////////////////////////////// BEGIN @3 DESIGNATED 410 //remove blur effect from displacer cloak ////////////////////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE (FILE_EXISTS ~override/FW1500.are~ OR !(FILE_EXISTS_IN_GAME ~fw0100.are~)) @4000 COPY_EXISTING ~%tutu_var%misc01.itm~ ~override/dw#3.xxx~ //installation marker // thanks to pro5 for this COPY_EXISTING ~%tutu_var%clck03.itm~ ~override~ READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" READ_LONG 0x6a "fx_off" READ_SHORT 0x70 "fx_num" FOR (index2 = 0 ; index2 < fx_num ; index2 = index2 + 1) BEGIN READ_SHORT ("%fx_off%" + (0x30 * "%index2%")) "opcode" PATCH_IF ("%opcode%" = 65) BEGIN DELETE_BYTES ("%fx_off%" + (0x30 * "%index2%")) 0x30 // delete effect SET "fx_num" = "%fx_num%" - 1 WRITE_SHORT 0x70 "%fx_num%" // adjusts global fx number SET "index" = "%fx_num%" // kills loop END END BUT_ONLY_IF_IT_CHANGES ////////////////////////////////////////////////////////////////////////// BEGIN @7 DESIGNATED 420 //Stackable ankheg shells and winterwolf pelts ////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#7.xxx~ //installation marker COPY_EXISTING ~%tutu_var%misc01.itm~ ~override~ ~%tutu_var%misc12.itm~ ~override~ WRITE_SHORT 0x38 9999 COPY_EXISTING ~%tutu_var%shopkn.dlg~ ~override~ DECOMPILE_DLG_TO_D REPLACE_TEXTUALLY ~TakePartyItem("%tutu_var%MISC01")~ ~TakePartyItemNum("%tutu_var%MISC01",1)~ COMPILE_D_TO_DLG //////////////////////////////////////////////////////////////////////////// BEGIN @13 DESIGNATED 430 //Move Boo out of quick access and into Minsc's pack ////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#13.xxx~ //installation marker COPY_EXISTING ~%tutu_var%minsc.cre~ ~override~ ~%tutu_var%minsc2.cre~ ~override~ ~%tutu_var%minsc4.cre~ ~override~ ~%tutu_var%minsc6.cre~ ~override~ READ_LONG 0x2b8 ~%itemslot%~ WRITE_SHORT (~%itemslot%~+0x24) 65535 WRITE_SHORT (~%itemslot%~+0x2a) 2 ///////////////////////////////////////////////////////////////////////////// BEGIN @40 DESIGNATED 440//Ease-of-use player AI ///////////////////////////////////////////////////////////////////////////// COPY_EXISTING ~misc01.itm~ ~override/dw#40.xxx~ //installation marker COMPILE EVALUATE_BUFFER ~scs/scriptmisc/dw#genI.baf~ COPY_EXISTING ~dw#genI.bcs~ ~scripts/0dw#genI.bs~ REPLACE ~55551~ @2303 REPLACE ~55552~ @2304 APPEND ~scrpdesc.2da~ ~0dw#genI 777777 888888~ COPY_EXISTING ~scrpdesc.2da~ ~override~ REPLACE ~777777~ @2301 REPLACE ~888888~ @2302 ///////////////////////////////////////////////////////////////////////////////////////// BEGIN @71 DESIGNATED 450//Protect Shar-Teel ///////////////////////////////////////////////////////////////////////////////////////// REQUIRE_PREDICATE FILE_EXISTS_IN_GAME ~fw0100.are~ @4001 COPY_EXISTING ~misc01.itm~ ~override/dw#71.xxx~ //installation marker COPY_EXISTING ~_sharte.cre~ ~override~ ~_sharte4.cre~ ~override~ ~_sharte6.cre~ ~override~ ADD_CRE_ITEM ~monhp1~ #0 #0 #0 ~IDENTIFIED~ ~RRING~ EQUIP EXTEND_TOP ~_harteel.bcs~ ~scs/scriptmisc/protectshar.baf~