/* * gMinion - version 1.8 * AI scripts for minions summoned by the party * * expanded for Mega-Installations by Azazello */ BACKUP ~gminion\build1.8\backup~ AUTHOR ~Cirerrek's AI Scripts forum at Gibberlings Three Forums~ ALLOW_MISSING // Silver Shadow from The Darkest Day mod - Azazello ~SILVERSH.CRE~ LANGUAGE ~AMERICAN ENGLISH~ ~american~ ~gminion\build1.8\american\gmsetup.tra~ ///////////// // gMinion ///////////// BEGIN @1 // ids changes to accomodate on-the-fly compiling ACTION_IF NOT FILE_EXISTS_IN_GAME ~shoutids.ids~ THEN BEGIN // if not present, make it COPY ~gminion/build1.8/ids/shoutids.ids~ ~override~ END ELSE BEGIN // if present, append instead APPEND ~shoutids.ids~ ~1001 POISONED~ UNLESS ~1001 POISONED~ APPEND ~shoutids.ids~ ~2001 HELP~ UNLESS ~2001 HELP~ END APPEND ~state.ids~ ~0x00102029 STATE_HARMLESS~ UNLESS ~0x00102029 STATE_HARMLESS~ APPEND ~state.ids~ ~0x00400010 STATE_NOT_VISIBLE~ UNLESS ~0x00400010 STATE_NOT_VISIBLE~ APPEND ~state.ids~ ~0x60400010 STATE_ILLUSIONS~ UNLESS ~0x60400010 STATE_ILLUSIONS~ APPEND ~state.ids~ ~0x63C08010 STATE_ENCHANTED~ UNLESS ~0x63C08010 STATE_ENCHANTED~ COPY_EXISTING ~trigger.ids~ ~override~ REPLACE_TEXTUALLY ~\bHeard(O:Object\*,I:ID\*)~ ~Heard(O:Object*,I:ID*SHOUTIDS)~ BUT_ONLY_IF_IT_CHANGES /* * depending on the minion type (ranged, melee, spell, or both) * modify the existing script (wtasight.bcs, etc.) by adding * the appropriate script segment (ranged.bcs, melee.bcs, spell.bcs, or both.bcs) * to either the top or the bottom of the existing script * */ EXTEND_TOP ~GENSHT01.BCS~ ~gminion\build1.8\baf\both.baf~ EXTEND_TOP ~WTASIGHT.BCS~ ~gminion\build1.8\baf\both.baf~ EXTEND_TOP ~WTARSGT.BCS~ ~gminion\build1.8\baf\range.baf~ EXTEND_TOP ~SUMSHT01.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~SUMSHT02.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~WDRUNSGT.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~CCRAWLER.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~ETTERCAP.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~MORSWORD.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~DJINNI01.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_TOP ~EFREET01.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_TOP ~MOONDOG.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_TOP ~NISHRU01.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_TOP ~NYMPH.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_TOP ~PSPIDER.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_TOP ~SPIDFGSU.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_TOP ~SUMDJ01.BCS~ ~gminion\build1.8\baf\spell.baf~ EXTEND_BOTTOM ~WIZELSUM.BCS~ ~gminion\build1.8\baf\melee.baf~ // Additional changes for any (ToB?) type of installation - Azazello EXTEND_TOP ~WARDOG.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~WYVERN.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_BOTTOM ~BORNWAIT.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_BOTTOM ~SERVSU.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_BOTTOM ~WIZELSU2.BCS~ ~gminion\build1.8\baf\melee.baf~ // Scripts used by Summons from...Big Picture mod - Azazello ACTION_IF FILE_EXISTS_IN_GAME ~BPBAG04.ITM~ THEN BEGIN EXTEND_TOP ~BPSMSHT1.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~BPSMSHT2.BCS~ ~gminion\build1.8\baf\melee.baf~ EXTEND_TOP ~BPEFREET.BCS~ ~gminion\build1.8\baf\spell.baf~ END // Scripts used by Summons from...Check the Bodies mod - Azazello ACTION_IF FILE_EXISTS_IN_GAME ~CBWTASGT.BCS~ THEN BEGIN EXTEND_TOP ~CBWTASGT.BCS~ ~gminion\build1.8\baf\melee.baf~ END // Scripts used by Summons from...The Darkest Day mod - Azazello ACTION_IF FILE_EXISTS_IN_GAME ~SILVERSH.CRE~ THEN BEGIN // Silver Shadow from The Darkest Day mod EXTEND_BOTTOM ~SILVERSH.BCS~ ~gminion\build1.8\baf\spell.baf~ END /* * Azazello * If using Big Picture (BP) or Sword Coast Strategems 2 (SCS II), ensure that summons use gMinion scripting EXCLUSIVELY. * {Actually, this scripting might be redundant} */ ACTION_IF (FILE_EXISTS_IN_GAME ~BPBAG04.ITM~ OR FILE_EXISTS_IN_GAME ~scsII/scsII.tph~) THEN BEGIN COPY_EXISTING ~BEARBLSU.CRE~ ~override~ ~BEARBRSU.CRE~ ~override~ ~BEARCASU.CRE~ ~override~ ~BEARPOSU.CRE~ ~override~ // ~BERSER02.CRE~ ~override~ // ~BERSER03.CRE~ ~override~ // ~BERSERSU.CRE~ ~override~ ~CARRIOSU.CRE~ ~override~ ~CATJAGSU.CRE~ ~override~ ~CATLIOSU.CRE~ ~override~ ~CATLIOWP.CRE~ ~override~ ~DEVAEVIL.CRE~ ~override~ ~DEVAGOOD.CRE~ ~override~ ~DJINNISU.CRE~ ~override~ ~DOGWASU.CRE~ ~override~ ~DOGWAWP.CRE~ ~override~ ~DOGWISU.CRE~ ~override~ ~EFREETSU.CRE~ ~override~ ~ELAIRSU1.CRE~ ~override~ ~ELAIRSU2.CRE~ ~override~ ~ELAIRSU3.CRE~ ~override~ ~ELAIRSUW.CRE~ ~override~ ~ELEARSU1.CRE~ ~override~ ~ELEARSU2.CRE~ ~override~ ~ELEARSU3.CRE~ ~override~ ~ELEARSU4.CRE~ ~override~ ~ELEMCHAN.CRE~ ~override~ ~ELEMSUNN.CRE~ ~override~ ~ELEMZAAM.CRE~ ~override~ ~ELFIRSU1.CRE~ ~override~ ~ELFIRSU2.CRE~ ~override~ ~ELFIRSU3.CRE~ ~override~ ~ELFIRSU4.CRE~ ~override~ ~ETTERCSU.CRE~ ~override~ ~GHASTSU.CRE~ ~override~ ~GNOLLSU.CRE~ ~override~ ~HAKSU.CRE~ ~override~ ~HOBGOBSU.CRE~ ~override~ ~KOBOLDSU.CRE~ ~override~ ~MOONDOG.CRE~ ~override~ ~NISHRUSU.CRE~ ~override~ ~NYMPHSU.CRE~ ~override~ ~OGREGRSU.CRE~ ~override~ ~OGRELESU.CRE~ ~override~ ~OGRESU.CRE~ ~override~ ~PLANEVIL.CRE~ ~override~ ~PLANGOOD.CRE~ ~override~ ~RABBITSU.CRE~ ~override~ ~SERVSU.CRE~ ~override~ ~SKELWASU.CRE~ ~override~ ~SMOUNDSU.CRE~ ~override~ ~SPIDFGSU.CRE~ ~override~ ~SPIDGISU.CRE~ ~override~ ~SPIDPHSU.CRE~ ~override~ ~SPIDSWSU.CRE~ ~override~ ~SPIRBEAR.CRE~ ~override~ ~SPIRLION.CRE~ ~override~ ~SPIRSNAK.CRE~ ~override~ ~SPIRWOLF.CRE~ ~override~ ~STALKE.CRE~ ~override~ ~SUMDJINN.CRE~ ~override~ ~SUMEFREE.CRE~ ~override~ ~SUMELAIR.CRE~ ~override~ ~SUMELEAR.CRE~ ~override~ ~SUMELFIR.CRE~ ~override~ ~SWAAIR01.CRE~ ~override~ ~SWAEAR01.CRE~ ~override~ ~SWAFIR01.CRE~ ~override~ ~SWORD01.CRE~ ~override~ ~SWORD02.CRE~ ~override~ ~SWORD68.CRE~ ~override~ ~WOLFDISU.CRE~ ~override~ ~WOLFWWSU.CRE~ ~override~ ~WORGSU.CRE~ ~override~ ~WYVERNSU.CRE~ ~override~ // Silver Shadow from TDD - // added by Azazello ~SILVERSH.CRE~ ~override~ PATCH_IF (SOURCE_SIZE > 0x2d3) THEN BEGIN // protects against invalid files READ_ASCII 0x248 "Override" READ_ASCII 0x250 "Class" READ_ASCII 0x258 "Race" READ_ASCII 0x260 "General" READ_ASCII 0x268 "Default" PATCH_IF (("%Override%" STRING_COMPARE_CASE "BPWDASGT") = 0) BEGIN WRITE_ASCII 0x248 ~WTASIGHT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "BPWDASGT") = 0) BEGIN WRITE_ASCII 0x250 ~WTASIGHT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "BPWDASGT") = 0) BEGIN WRITE_ASCII 0x258 ~WTASIGHT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "BPWDASGT") = 0) BEGIN WRITE_ASCII 0x260 ~WTASIGHT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "BPWDASGT") = 0) BEGIN WRITE_ASCII 0x268 ~WTASIGHT~ END PATCH_IF (("%Override%" STRING_COMPARE_CASE "BPWTSIGT") = 0) BEGIN WRITE_ASCII 0x248 ~WTASIGHT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "BPWTSIGT") = 0) BEGIN WRITE_ASCII 0x250 ~WTASIGHT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "BPWTSIGT") = 0) BEGIN WRITE_ASCII 0x258 ~WTASIGHT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "BPWTSIGT") = 0) BEGIN WRITE_ASCII 0x260 ~WTASIGHT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "BPWTSIGT") = 0) BEGIN WRITE_ASCII 0x268 ~WTASIGHT~ END PATCH_IF (("%Override%" STRING_COMPARE_CASE "dw#melee") = 0) BEGIN WRITE_ASCII 0x248 ~WTASIGHT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "dw#melee") = 0) BEGIN WRITE_ASCII 0x250 ~WTASIGHT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "dw#melee") = 0) BEGIN WRITE_ASCII 0x258 ~WTASIGHT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "dw#melee") = 0) BEGIN WRITE_ASCII 0x260 ~WTASIGHT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "dw#melee") = 0) BEGIN WRITE_ASCII 0x268 ~WTASIGHT~ END PATCH_IF (("%Override%" STRING_COMPARE_CASE "dw#range") = 0) BEGIN WRITE_ASCII 0x248 ~WTARSGT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "dw#range") = 0) BEGIN WRITE_ASCII 0x250 ~WTARSGT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "dw#range") = 0) BEGIN WRITE_ASCII 0x258 ~WTARSGT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "dw#range") = 0) BEGIN WRITE_ASCII 0x260 ~WTARSGT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "dw#range") = 0) BEGIN WRITE_ASCII 0x268 ~WTARSGT~ END PATCH_IF (("%Override%" STRING_COMPARE_CASE "dw#wizardslay") = 0) BEGIN WRITE_ASCII 0x248 ~WTASIGHT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "dw#wizardslay") = 0) BEGIN WRITE_ASCII 0x250 ~WTASIGHT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "dw#wizardslay") = 0) BEGIN WRITE_ASCII 0x258 ~WTASIGHT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "dw#wizardslay") = 0) BEGIN WRITE_ASCII 0x260 ~WTASIGHT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "dw#wizardslay") = 0) BEGIN WRITE_ASCII 0x268 ~WTASIGHT~ END PATCH_IF (("%Override%" STRING_COMPARE_CASE "dw#wtacor") = 0) BEGIN WRITE_ASCII 0x248 ~WTASIGHT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "dw#wtacor") = 0) BEGIN WRITE_ASCII 0x250 ~WTASIGHT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "dw#wtacor") = 0) BEGIN WRITE_ASCII 0x258 ~WTASIGHT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "dw#wtacor") = 0) BEGIN WRITE_ASCII 0x260 ~WTASIGHT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "dw#wtacor") = 0) BEGIN WRITE_ASCII 0x268 ~WTASIGHT~ END PATCH_IF (("%Override%" STRING_COMPARE_CASE "WDASIGHT") = 0) BEGIN WRITE_ASCII 0x248 ~WTASIGHT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "WDASIGHT") = 0) BEGIN WRITE_ASCII 0x250 ~WTASIGHT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "WDASIGHT") = 0) BEGIN WRITE_ASCII 0x258 ~WTASIGHT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "WDASIGHT") = 0) BEGIN WRITE_ASCII 0x260 ~WTASIGHT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "WDASIGHT") = 0) BEGIN WRITE_ASCII 0x268 ~WTASIGHT~ END PATCH_IF (("%Override%" STRING_COMPARE_CASE "WDARSGT") = 0) BEGIN WRITE_ASCII 0x248 ~WTARSGT~ END PATCH_IF (("%Class%" STRING_COMPARE_CASE "WDARSGT") = 0) BEGIN WRITE_ASCII 0x250 ~WTARSGT~ END PATCH_IF (("%Race%" STRING_COMPARE_CASE "WDARSGT") = 0) BEGIN WRITE_ASCII 0x258 ~WTARSGT~ END PATCH_IF (("%General%" STRING_COMPARE_CASE "WDARSGT") = 0) BEGIN WRITE_ASCII 0x260 ~WTARSGT~ END PATCH_IF (("%Default%" STRING_COMPARE_CASE "WDARSGT") = 0) BEGIN WRITE_ASCII 0x268 ~WTARSGT~ END END BUT_ONLY_IF_IT_CHANGES END /* * Copy the modified .cre files to the override directory * * With current WeiDU technology, this segment can very likely * be re-done so that it does not overwrite existing files * making it more MOD friendly. * */ // djinnisu has extra spells COPY_EXISTING ~djinnisu.cre~ ~override~ ~sumdjinn.cre~ ~override~ ADD_KNOWN_SPELL ~spwi505~ #4 ~wizard~ ADD_KNOWN_SPELL ~spwi602~ #5 ~wizard~ ADD_KNOWN_SPELL ~spwi611~ #5 ~wizard~ READ_LONG 0x2a0 "known_off" READ_LONG 0x2a8 "mem_info" READ_LONG 0x2b0 "mem_off" READ_LONG 0x2b4 "mem_num" READ_LONG 0x2b8 "slot_off" READ_LONG 0x2bc "item_off" READ_LONG 0x2c4 "fx_off" SET "spells_delta" = 0 FOR (index = 10 ; index < 16 ; index = index + 1) BEGIN // start at wizard, 5th level--no changes prior to this READ_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "spells_idx" SET "spells_idx" = ("%spells_idx%" + "%spells_delta%") WRITE_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "%spells_idx%" PATCH_IF ("%index%" = 10) BEGIN // lev 5 wizard spells memorized SET "spl_this_lvl" = 1 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi505~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END ELSE PATCH_IF ("%index%" = 11) BEGIN // lev 6 wizard spells memorized SET "spl_this_lvl" = 2 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi602~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi611~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END END // final wrapup; correct # of memorized spells and offsets WRITE_LONG 0x2b4 ("%mem_num%" + "%spells_delta%") SET "offset_delta" = ("%spells_delta%" * 0x0c) PATCH_IF ("%known_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2a0 ("%known_off%" + "%offset_delta%") END PATCH_IF ("%slot_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2b8 ("%slot_off%" + "%offset_delta%") END PATCH_IF ("%item_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2bc ("%item_off%" + "%offset_delta%") END PATCH_IF ("%fx_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2c4 ("%fx_off%" + "%offset_delta%") END BUT_ONLY_IF_IT_CHANGES // efreetsu has extra spells COPY_EXISTING ~efreetsu.cre~ ~override~ ADD_KNOWN_SPELL ~spwi206~ #1 ~wizard~ ADD_KNOWN_SPELL ~spwi303~ #2 ~wizard~ ADD_KNOWN_SPELL ~spwi304~ #2 ~wizard~ ADD_KNOWN_SPELL ~spwi418~ #3 ~wizard~ ADD_KNOWN_SPELL ~spwi418~ #3 ~wizard~ ADD_KNOWN_SPELL ~spwi418~ #3 ~wizard~ ADD_KNOWN_SPELL ~sppr503~ #4 ~priest~ READ_LONG 0x2a0 "known_off" READ_LONG 0x2a8 "mem_info" READ_LONG 0x2b0 "mem_off" READ_LONG 0x2b4 "mem_num" READ_LONG 0x2b8 "slot_off" READ_LONG 0x2bc "item_off" READ_LONG 0x2c4 "fx_off" SET "spells_delta" = 0 FOR (index = 4 ; index < 16 ; index = index + 1) BEGIN // start at priest, 5th level--no changes prior to this READ_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "spells_idx" SET "spells_idx" = ("%spells_idx%" + "%spells_delta%") WRITE_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "%spells_idx%" PATCH_IF ("%index%" = 4) BEGIN // lev 5 priest spells memorized SET "spl_this_lvl" = 1 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~sppr503~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END ELSE PATCH_IF ("%index%" = 8) BEGIN // lev 2 wizard spells memorized SET "spl_this_lvl" = 3 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") FOR (index2 = 0 ; index2 < 3 ; index2 = index2 + 1) BEGIN INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi206~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized END SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END ELSE PATCH_IF ("%index%" = 9) BEGIN // lev 3 wizard spells memorized SET "spl_this_lvl" = 2 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi303~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi304~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END ELSE PATCH_IF ("%index%" = 10) BEGIN // lev 4 wizard spells memorized SET "spl_this_lvl" = 1 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi418~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END END // final wrapup; correct # of memorized spells and offsets WRITE_LONG 0x2b4 ("%mem_num%" + "%spells_delta%") SET "offset_delta" = ("%spells_delta%" * 0x0c) PATCH_IF ("%known_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2a0 ("%known_off%" + "%offset_delta%") END PATCH_IF ("%slot_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2b8 ("%slot_off%" + "%offset_delta%") END PATCH_IF ("%item_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2bc ("%item_off%" + "%offset_delta%") END PATCH_IF ("%fx_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2c4 ("%fx_off%" + "%offset_delta%") END BUT_ONLY_IF_IT_CHANGES // evil planetar COPY_EXISTING ~planevil.cre~ ~override~ ADD_KNOWN_SPELL ~sppr303~ #2 ~priest~ READ_LONG 0x2a0 "known_off" READ_LONG 0x2a4 "known_num" READ_LONG 0x2a8 "mem_info" READ_LONG 0x2b0 "mem_off" READ_LONG 0x2b4 "mem_num" READ_LONG 0x2b8 "slot_off" READ_LONG 0x2bc "item_off" READ_LONG 0x2c4 "fx_off" FOR (index = 0 ; index < known_num ; index = index + 1) BEGIN // unholy word for holy word READ_ASCII ("%known_off%" + ("%index%" * 0x0c)) "spell" PATCH_IF ("%spell%" STRING_COMPARE_CASE "sppr710" = 0) BEGIN // holy word WRITE_ASCII ("%known_off%" + ("%index%" * 0x0c)) ~sppr715~ #8 // unholy word END END FOR (index = 0 ; index < mem_num ; index = index + 1) BEGIN // unholy word for holy word READ_ASCII ("%mem_off%" + ("%index%" * 0x0c)) "spell" PATCH_IF ("%spell%" STRING_COMPARE_CASE "sppr710" = 0) BEGIN // holy word WRITE_ASCII ("%mem_off%" + ("%index%" * 0x0c)) ~sppr715~ #8 // unholy word END END SET "spells_delta" = 0 FOR (index = 2 ; index < 16 ; index = index + 1) BEGIN // start at priest, 3rd level--no changes prior to this READ_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "spells_idx" SET "spells_idx" = ("%spells_idx%" + "%spells_delta%") WRITE_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "%spells_idx%" PATCH_IF ("%index%" = 2) BEGIN // lev 3 priest spells memorized SET "spl_this_lvl" = 3 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") FOR (index2 = 0 ; index2 < 3 ; index2 = index2 + 1) BEGIN INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~sppr303~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized END SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END END // final wrapup; correct # of memorized spells and offsets WRITE_LONG 0x2b4 ("%mem_num%" + "%spells_delta%") SET "offset_delta" = ("%spells_delta%" * 0x0c) PATCH_IF ("%known_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2a0 ("%known_off%" + "%offset_delta%") END PATCH_IF ("%slot_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2b8 ("%slot_off%" + "%offset_delta%") END PATCH_IF ("%item_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2bc ("%item_off%" + "%offset_delta%") END PATCH_IF ("%fx_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2c4 ("%fx_off%" + "%offset_delta%") END BUT_ONLY_IF_IT_CHANGES // efreetsu has extra spells COPY_EXISTING ~sumefree.cre~ ~override~ ADD_KNOWN_SPELL ~spwi206~ #1 ~wizard~ ADD_KNOWN_SPELL ~spwi304~ #2 ~wizard~ ADD_KNOWN_SPELL ~spwi418~ #3 ~wizard~ READ_LONG 0x2a0 "known_off" READ_LONG 0x2a8 "mem_info" READ_LONG 0x2b0 "mem_off" READ_LONG 0x2b4 "mem_num" READ_LONG 0x2b8 "slot_off" READ_LONG 0x2bc "item_off" READ_LONG 0x2c4 "fx_off" SET "spells_delta" = 0 FOR (index = 4 ; index < 16 ; index = index + 1) BEGIN // start at priest, 5th level--no changes prior to this READ_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "spells_idx" SET "spells_idx" = ("%spells_idx%" + "%spells_delta%") WRITE_LONG ("%mem_info%" + ("%index%" * 0x10) + 0x08) "%spells_idx%" PATCH_IF ("%index%" = 4) BEGIN // lev 5 priest spells memorized SET "spl_this_lvl" = 1 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~sppr503~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END ELSE PATCH_IF ("%index%" = 8) BEGIN // lev 2 wizard spells memorized SET "spl_this_lvl" = 3 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") FOR (index2 = 0 ; index2 < 3 ; index2 = index2 + 1) BEGIN INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi206~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized END SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END ELSE PATCH_IF ("%index%" = 9) BEGIN // lev 3 wizard spells memorized SET "spl_this_lvl" = 1 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi304~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END ELSE PATCH_IF ("%index%" = 10) BEGIN // lev 4 wizard spells memorized SET "spl_this_lvl" = 1 READ_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) "spells_mem" WRITE_SHORT ("%mem_info%" + 0x02 + ("%index%" * 0x10)) ("%spells_mem%" + "%spl_this_lvl%") READ_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) "spells_mem2" WRITE_SHORT ("%mem_info%" + 0x04 + ("%index%" * 0x10)) ("%spells_mem2%" + "%spl_this_lvl%") READ_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) "spells_num" WRITE_LONG ("%mem_info%" + 0x0c + ("%index%" * 0x10)) ("%spells_num%" + "%spl_this_lvl%") INSERT_BYTES ("%mem_off%" + ("%spells_idx%" * 0x0c)) 0x0c WRITE_ASCII ("%mem_off%" + ("%spells_idx%" * 0x0c)) ~spwi418~ #8 WRITE_SHORT ("%mem_off%" + 0x08 + ("%spells_idx%" * 0x0c)) 1 // memorized SET "spells_delta" = ("%spells_delta%" + "%spl_this_lvl%") END END // final wrapup; correct # of memorized spells and offsets WRITE_LONG 0x2b4 ("%mem_num%" + "%spells_delta%") SET "offset_delta" = ("%spells_delta%" * 0x0c) PATCH_IF ("%known_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2a0 ("%known_off%" + "%offset_delta%") END PATCH_IF ("%slot_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2b8 ("%slot_off%" + "%offset_delta%") END PATCH_IF ("%item_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2bc ("%item_off%" + "%offset_delta%") END PATCH_IF ("%fx_off%" >= "%mem_off%") BEGIN WRITE_LONG 0x2c4 ("%fx_off%" + "%offset_delta%") END BUT_ONLY_IF_IT_CHANGES //COPY ~gminion\build1.8\cre~ ~override~ /* * My first stab at reducing the number of ovewritten files * changes the gender of SWORD02.CRE (Ras) and SWORD68.CRE * (Spectral Brand) to SUMMONED and their class script to * WTASIGHT * */ COPY_EXISTING ~SWORD02.cre~ ~override~ // Ras ~SWORD68.cre~ ~override~ // Spectral Blade WRITE_BYTE 0x0275 6 // value corresponding to the SUMMONED gender in I believe gender.ids WRITE_ASCII SCRIPT_CLASS ~WTASIGHT~ #8 // set the class script (offset 0x250) to WTASIGHT.BCS BUT_ONLY_IF_IT_CHANGES // Compile .baf Files /* TuTu compatability * * Macready's & CamDawg's solution for making gMinion work with TuTu * */ ACTION_IF FILE_EXISTS_IN_GAME ~fw0100.are~ THEN BEGIN // tutu check EXTEND_TOP ~_TASIGHT.BCS~ ~gminion\build1.8\baf\both.baf~ EXTEND_TOP ~_DASIGHT.BCS~ ~gminion\build1.8\baf\both.baf~ COPY ~gminion/build1.8/baf/gMinionM.baf~ ~override/gMinionM.bcs~ REPLACE_TEXTUALLY ~HasItem("ETTERC1",Myself)~ ~HasItem("_ETTERC1",Myself)~ REPLACE_TEXTUALLY ~HasItem("ETTERC2",Myself)~ ~HasItem("_ETTERC2",Myself)~ COMPILE_BAF_TO_BCS END ELSE BEGIN // bogstandard bg2 COMPILE ~gminion/build1.8/baf/gMinionM.baf~ END COMPILE ~gminion\build1.8\baf\gMinionR.baf~ COMPILE ~gminion\build1.8\baf\gMinionS.baf~ //COMPILE ~gminion\build1.8\baf\gMinionC.baf~ // deprecated for this version while I work on a new method for assigning scripts to clones /* * Scriptable Spells: SOA * * Copy the spells over the override folder and change their level to 1 * otherswise the game would crash if the spells were cast by the scripts * using a HaveSpell() or HaveSpellRES() check * * A portion of the scriptable spells .tp2 code was shamelessly stolen from G3's Fix Pack * */ COPY_EXISTING ~SPCL232.spl~ ~override~ // Inquisitor True Sight ~SPCL412.spl~ ~override~ // Thief Set Trap ~SPCL414.spl~ ~override~ // Bounty Hunter Set Trap ~SPCL621.spl~ ~override~ // Totemic Druid Summon Animal Spirit ~SPCL721.spl~ ~override~ // Cleric of Talos Storm Shield ~SPCL722.spl~ ~override~ // Cleric of Talos Lightning Bolt ~SPCL731.spl~ ~override~ // Cleric of Helm Seeking Sword ~SPCL732.spl~ ~override~ // Cleric of Helm True Sight ~SPCL741.spl~ ~override~ // Cleric of Lathander Boon of Lathander ~SPCL742.spl~ ~override~ // Cleric of Lathander Hold Undead ~SPIN683.spl~ ~override~ // Web Tangle ~SPIN696.spl~ ~override~ // Moon Dog Sight ~SPIN697.spl~ ~override~ // Moon Dog Mirror Image ~SPIN698.spl~ ~override~ // Moon Dog Improved Invisibility ~SPIN891.spl~ ~override~ // Moon Dog Howl PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN // protects against invalid files WRITE_LONG 0x34 1 END BUT_ONLY_IF_IT_CHANGES /* * Scriptable Spells: TOB */ ACTION_IF FILE_EXISTS_IN_GAME ~mel01.cre~ //check to see if Throne of Bhaal is installed THEN BEGIN COPY_EXISTING ~SPCL910.spl~ ~override~ // Rogue Set Spike Trap ~SPCL911.spl~ ~override~ // Rogue Set Exploding Trap ~SPCL912.spl~ ~override~ // Rogue Set Time Trap ~SPCL923.spl~ ~override~ // Paladin Summon Deva WRITE_LONG 0x34 1 BUT_ONLY_IF_IT_CHANGES END AT_INTERACTIVE_EXIT ~VIEW gminion/build1.8/readme-gminion.html~ // EOF: gMinion-Setup.tp2