Nythrun Posted May 12, 2008 Share Posted May 12, 2008 /////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\ /////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\ ///// \\\\\ ///// Amaturish hackery from Nythrun begins here \\\\\ ///// \\\\\ /////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\ /////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\ // .ids fixes // This may be a little sketchy, but fireblns doesn't work otherwise COPY_EXISTING projectl.ids override REPLACE_TEXTUALLY ~^0x00D2 +HOLDNECR~ ~0x00D1 HOLDNECR~ BUT_ONLY UNLESS ~0x00D1~ // .tlk strings // GTU strings without translations ACTION_IF ~%LANGUAGE%~ STRING_EQUAL_CASE ~ENGLISH~ THEN BEGIN OUTER_SPRINT gtu_additions placeholder OUTER_WHILE NOT IS_AN_INT gtu_additions || gtu_additions > 0x01 || gtu_additions < 0x00 BEGIN PRINT ~Add three Game Text Update strings? Enter 0 for no, 1 for yes~ ACTION_READLN gtu_additions END ACTION_IF gtu_additions THEN BEGIN // Evidently poor spelling is the punishment for cowardice STRING_SET 11536 ~Truly? I had not thought you to be a coward until this day. Mingle with your brethren, coward, I shall test your mettle!~ // Harper Plot was moved from Jaheira romance only to any protagonist, but Dermin didn't get the memo STRING_SET 26968 ~This is an internal matter of justice, and does not involve this <CHARNAME>. You can spare <PRO_HIMHER> the attacks if you submit.~ // Holy Word does more than promised STRING_SET 25764 ~Holy Word (Conjuration/Summoning) Level: 7 Sphere: Combat Range: 0 Duration: Special Casting Time: 1 Area of Effect: 30' radius Saving Throw: None Uttering a holy word spell creates magic of tremendous power. The priest acts as a bridge between his god and the prime material plane causing a small explosion centered on the priest and reaching up to a 30' radius. It affects only evil creatures or undead of any alignment that are caught in the area of effect. The effects differ according to the level of the target as follows: Hit Dice or levels -- Effects of Holy word Less than 4 -- Death 4 to 7 -- Stunned for 1 turn 8 to 11 -- Slowed for 1 turn with 75% chance of spell failure 12 and up -- Deafened for 1 turn with 50% chance of spell failure There is no saving throw vs. this spell and the effects last for the duration of the spell or until dispelled. Note this spell may not be cast by any priest of evil alignment.~ END END // Sound file not referenced by relevant string OUTER_SET strref = 27406 OUTER_SPRINT wav ~[JAHEIRBX]~ <<<<<<<<fj_set_a_string.tpp DEFINE_ACTION_MACRO fj_set_a_string BEGIN OUTER_PATCH action_get_strref_yeah BEGIN GET_STRREF strref string END STRING_SET %strref% ~%wav% %string%~%wav% END >>>>>>>> COPY - fj_set_a_string.tpp fj_set_a_string.tpp EVALUATE_BUFFER REINCLUDE fj_set_a_string.tpp LAUNCH_ACTION_MACRO fj_set_a_string // .are // Extended Night tilesets exist, but aren't referenced (part one) // See also ar1900n.wed COPY_EXISTING ar1900.are override ar2807.are override READ_SHORT 0x48 location_flags WRITE_SHORT 0x48 (location_flags | 0x40) BUT_ONLY // .bcs // Temple of Talos script can loop interminably if <CHARNAME> murders too wantonly COPY_EXISTING ar0904.bcs override DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY ~^ Dead("talmiss")~ ~ Dead("talmiss") Exists("talmiss2") !Dead("talmiss2")~ REPLACE_TEXTUALLY ~^ Dead("talmiss2")~ ~ Dead("talmiss2") Exists("talmiss") !Dead("talmiss")~ COMPILE_BAF_TO_BCS BUT_ONLY UNLESS ~16465 0 1 0 0 "talmiss[2]?" "" OB~ // Celestials heal and cure party members even if hostile ACTION_FOR_EACH script IN devaevil.bcs devagood.bcs plangood.bcs BEGIN ACTION_IF GAME_IS ~tob~ && FILE_EXISTS_IN_GAME ~%script%~ THEN BEGIN COPY_EXISTING ~%script%~ override DECOMPILE_BCS_TO_BAF PATCH_FOR_EACH trigger IN ~HaveSpell(CLERIC_LESSER_RESTORATION)~ ~HaveSpell(CLERIC_NEUTRALIZE_POISON)~ ~HaveSpell(CLERIC_REMOVE_FEAR)~ ~HPPercentLT(MostDamagedOf(Myself),25)~ ~HaveSpell(CLERIC_DISPEL_MAGIC)~ BEGIN REPLACE_TEXTUALLY ~^ \(%trigger%\)~ ~ Allegiance(Myself,[4])%lnl% \1~ END COMPILE_BAF_TO_BCS BUT_ONLY UNLESS ~^16395 4 0 0 0 "" "" OB~ END END // Remove Mislead clones' sound sets <<<<<<<<inlined/scripts/are/gauche/fjmislea.baf IF Global("FJSetMisleadSounds","LOCALS",0) THEN RESPONSE #1 SetGlobal("FJSetMisleadSounds","LOCALS",1) SetPlayerSound(Myself,-1,0) SetPlayerSound(Myself,-1,1) SetPlayerSound(Myself,-1,2) SetPlayerSound(Myself,-1,3) SetPlayerSound(Myself,-1,4) SetPlayerSound(Myself,-1,5) SetPlayerSound(Myself,-1,6) SetPlayerSound(Myself,-1,7) SetPlayerSound(Myself,-1,8) SetPlayerSound(Myself,-1,9) SetPlayerSound(Myself,-1,10) SetPlayerSound(Myself,-1,11) SetPlayerSound(Myself,-1,12) SetPlayerSound(Myself,-1,13) SetPlayerSound(Myself,-1,14) SetPlayerSound(Myself,-1,15) SetPlayerSound(Myself,-1,16) SetPlayerSound(Myself,-1,17) SetPlayerSound(Myself,-1,18) SetPlayerSound(Myself,-1,19) SetPlayerSound(Myself,-1,20) SetPlayerSound(Myself,-1,21) SetPlayerSound(Myself,-1,22) SetPlayerSound(Myself,-1,23) SetPlayerSound(Myself,-1,24) SetPlayerSound(Myself,-1,25) SetPlayerSound(Myself,-1,26) SetPlayerSound(Myself,-1,27) SetPlayerSound(Myself,-1,28) SetPlayerSound(Myself,-1,29) SetPlayerSound(Myself,-1,30) SetPlayerSound(Myself,-1,31) SetPlayerSound(Myself,-1,32) SetPlayerSound(Myself,-1,33) SetPlayerSound(Myself,-1,34) SetPlayerSound(Myself,-1,35) SetPlayerSound(Myself,-1,36) SetPlayerSound(Myself,-1,37) SetPlayerSound(Myself,-1,38) SetPlayerSound(Myself,-1,39) SetPlayerSound(Myself,-1,40) SetPlayerSound(Myself,-1,41) SetPlayerSound(Myself,-1,42) SetPlayerSound(Myself,-1,43) SetPlayerSound(Myself,-1,44) SetPlayerSound(Myself,-1,45) SetPlayerSound(Myself,-1,46) SetPlayerSound(Myself,-1,47) SetPlayerSound(Myself,-1,48) SetPlayerSound(Myself,-1,49) SetPlayerSound(Myself,-1,50) SetPlayerSound(Myself,-1,51) SetPlayerSound(Myself,-1,52) SetPlayerSound(Myself,-1,53) SetPlayerSound(Myself,-1,54) SetPlayerSound(Myself,-1,55) SetPlayerSound(Myself,-1,55) SetPlayerSound(Myself,-1,56) SetPlayerSound(Myself,-1,57) SetPlayerSound(Myself,-1,58) SetPlayerSound(Myself,-1,59) SetPlayerSound(Myself,-1,60) SetPlayerSound(Myself,-1,61) SetPlayerSound(Myself,-1,62) SetPlayerSound(Myself,-1,63) SetPlayerSound(Myself,-1,64) SetPlayerSound(Myself,-1,65) SetPlayerSound(Myself,-1,66) SetPlayerSound(Myself,-1,67) SetPlayerSound(Myself,-1,68) SetPlayerSound(Myself,-1,69) SetPlayerSound(Myself,-1,70) SetPlayerSound(Myself,-1,71) SetPlayerSound(Myself,-1,72) SetPlayerSound(Myself,-1,73) SetPlayerSound(Myself,-1,74) SetPlayerSound(Myself,-1,75) //SetName(8291) //ChangeClass(Myself,210) ChangeAIScript("",1) END >>>>>>>> COMPILE ~inlined/scripts/are/gauche/fjmislea.baf~ /* // Spore Colonies checking wrong variable for their summonings COPY_EXISTING icfung02.bcs override icfungus.bcs override REPLACE_TEXTUALLY ~"LOCALSMushroom"~ ~"LOCALSMushroomSummon"~ BUT_ONLY */ // Hostile and out of party Minsc and Valygar shouldn't heal party members COPY_EXISTING minscx.bcs override valvsed.bcs override valygx.bcs override REPLACE_TEXTUALLY ~^0 0 0 0 0 0 0 1 6 0 0 0 ""OB~ ~0 0 0 0 0 0 0 1 0 0 0 0 ""OB~ BUT_ONLY IF ~^0 0 0 0 0 0 0 1 6 0 0 0 ""OB~ // .cre // mismatching names COPY_EXISTING alphonse.cre override // alphonse - servant elesah02.cre override // sahuagin baronial guard - baronial guard // gorlum.cre override // machine of lum the mad - machine of lum kuotoa01.cre override // kuo-toa warrior - kuo-toa life01.cre override // tortured one - life support creature life02.cre override // tortured one - life support creature life03.cre override // tortured one - life support creature life04.cre override // tortured one - life support creature obssah03.cre override // sahuagin baronial guard - baronial guard sahbar01.cre override // sahuagin baronial guard - baronial guard sahextra.cre override // sahuagin royal guard - royal guard sahgrd01.cre override // sahuagin royal guard - royal guard sahgrd02.cre override // sahuagin royal guard - royal guard sahgrd03.cre override // sahuagin royal guard - royal guard READ_LONG 0x08 name WRITE_LONG 0x0c name BUT_ONLY // mismatching names COPY_EXISTING gendjn01.cre override // djinni - noble djinni genefn01.cre override // efreeti - noble efreeti kptrol06.cre override // troll - ice troll lasmist.cre override // djinni - gaseous form obsfir01.cre override // efreeti - noble efreeti ppbodbat.cre override // vampire - vampire bat ppdjinn2.cre override // djinni - noble djinni ppmind01.cre override // mind flayer - ulitharid tanomist.cre override // vampire - gaseous form trolfr01.cre override // troll - freshwater troll trolfr02.cre override // troll - freshwater troll trolsn01.cre override // troll - snow troll trolsn02.cre override // troll - snow troll udelder.cre override // beholder - elder orb valemist.cre override // vampire - gaseous form vampbat.cre override // vampire - vampire bat READ_LONG 0x0c name WRITE_LONG 0x08 name BUT_ONLY // Jan is a specialist mage without his bonus spell per level COPY_EXISTING jan8.cre override jan10.cre override jan11.cre override jan12.cre override jan15.cre override PATCH_IF SOURCE_SIZE > 0x2d3 BEGIN ADD_MEMORIZED_SPELL spwi118 #0 WIZARD ADD_MEMORIZED_SPELL spwi201 #1 WIZARD ADD_MEMORIZED_SPELL spwi302 #2 WIZARD PATCH_IF ~%SOURCE_RES%~ STRING_EQUAL jan8 BEGIN ADD_MEMORIZED_SPELL spwi405 #3 WIZARD END ELSE PATCH_IF ~%SOURCE_RES%~ STRING_EQUAL jan10 BEGIN ADD_MEMORIZED_SPELL spwi405 #3 WIZARD ADD_MEMORIZED_SPELL spwi508 #4 WIZARD END ELSE BEGIN ADD_MEMORIZED_SPELL spwi401 #3 WIZARD ADD_MEMORIZED_SPELL spwi508 #4 WIZARD END END BUT_ONLY // .dlg - inlined ugliness to avoid splitting fixes among multiple files // Invincible Imoen in Chateau Irenicus exploit <<<<<<<<inlined/dialogues/are/gauche/betabetasoa.d REPLACE_STATE_TRIGGER imoenp 3 ~Global("ImoenRunning","LOCALS",1)~ SET_WEIGHT imoenp 3 #-1 >>>>>>>> COMPILE ~inlined/dialogues/are/gauche/betabetasoa.d~ // Deck of Many Things can't figure out the prime requisite for rogues and bards ACTION_IF GAME_IS ~tob~ THEN BEGIN <<<<<<<<inlined/dialogues/are/gauche/betabetatob.d ALTER_TRANS domt BEGIN 19 END BEGIN 3 END BEGIN ~TRIGGER~ ~OR(2) Class(LastTalkedToBy,BARD_ALL) Class(LastTalkedToBy,THIEF_ALL)~ END >>>>>>>> COMPILE ~inlined/dialogues/are/gauche/betabetatob.d~ END // .eff // Even MORE Assassin poison; type is incorrect COPY_EXISTING spcl422a.eff override WRITE_LONG 0x20 0x02 BUT_ONLY ACTION_IF GAME_IS ~tob~ THEN BEGIN // Missing charges for Wish: Wand of Fire COPY_EXISTING wish14d.eff override WRITE_LONG 0x60 0x05 BUT_ONLY // Missing charges for Wish: Wand of Spellstriking COPY_EXISTING wish14g.eff override WRITE_LONG 0x60 0x05 BUT_ONLY END // Bolt of Glory has an inadequate understanding of "Prime" (vide infra) COPY_EXISTING daystar1.eff ~override/sppr612p.eff~ daystar1.eff ~override/sppr612u.eff~ WRITE_LONG 0x1c ~%DEST_RES%~ STRING_EQUAL sppr612p ? 2 : 4 WRITE_LONG 0x20 3 WRITE_LONG 0x24 0x00 // timing mode WRITE_ASCII 0x30 boltprim PATCH_IF ~%DEST_RES%~ STRING_EQUAL sppr612u BEGIN WRITE_ASCII 0x30 boltelem END WRITE_LONG 0x38 0x00 WRITE_LONG 0x3c 0x00 WRITE_LONG 0x60 0x00 WRITE_ASCII 0x78 ~~ #8 WRITE_LONG 0xa4 ` 0x00 IF_SIZE_IS 0x110 // .itm // Long Bows provide +1 THAC0, unless magical, sometimes COPY_EXISTING bow09.itm override // Ripper +2 bow13.itm override // Mana Bow +4 bow17.itm override // Long Bow +2 bow22.itm override // Taralash +4 bow23.itm override // Taralash +5 bow25.itm override // Long Bow +3 PATCH_IF SOURCE_SIZE > 0x71 BEGIN READ_LONG 0x60 enchantment READ_LONG 0x64 ho READ_SHORT 0x68 hc FOR (i_0 = 0x00; i_0 < hc; i_0 += 0x01) BEGIN READ_BYTE ho + 0x38 * i_0 + 0x00 type READ_SHORT ho + 0x38 * i_0 + 0x14 thac0 PATCH_IF type = 0x04 && thac0 = enchantment BEGIN SET thac0 = enchantment + 0x01 WRITE_SHORT ho + 0x38 * i_0 + 0x14 thac0 PATCH_IF ~%LANGUAGE%~ STRING_EQUAL_CASE ~ENGLISH~ BEGIN READ_STRREF 0x54 id INNER_PATCH_SAVE id ~%id%~ BEGIN REPLACE_TEXTUALLY ~^ *THAC[O0]: +\+%enchantment%~ ~THAC0: +%thac0%~ END SAY_EVALUATED 0x54 ~%id%~ END END END END BUT_ONLY // Skull of Death allows two saving throws and magic resistance checks COPY_EXISTING helm17.itm override READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo SPRINT resref null FOR (i_0 = 0x00; i_0 < hc && ~%resref%~ STRING_COMPARE_CASE ~spwi605~; i_0 += 0x01) BEGIN READ_SHORT ho + 0x38 * i_0 + 0x1e ec READ_SHORT ho + 0x38 * i_0 + 0x20 ei FOR (i_1 = 0x00; i_1 < ec && ~%resref%~ STRING_COMPARE_CASE ~spwi605~; i_1 += 0x01) BEGIN READ_ASCII eo + 0x30 * (ei + i_1) + 0x14 resref PATCH_IF ~%resref%~ STRING_EQUAL_CASE spwi605 BEGIN WRITE_BYTE eo + 0x30 * (ei + i_1) + 0x0d 0x00 // no magic resistance check WRITE_LONG eo + 0x30 * (ei + i_1) + 0x24 0x00 // no save END END END BUT_ONLY // .spl // Mislead clones able to affect the world through Bard Song COPY_EXISTING mislead.spl override READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo FOR (i_0 = 0x00; i_0 < hc; i_0 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_0 + 0x1e ec READ_SHORT ho + 0x28 * i_0 + 0x20 ei FOR (i_1 = 0x00 opcode = 0xffff; i_1 < ec && opcode != 0x48; i_1 += 0x01) BEGIN READ_SHORT eo + 0x30 * (i_1 + ei) + 0x00 opcode WRITE_BYTE eo + 0x30 * (i_1 + ei) + 0x0c 0x01 // permanent WRITE_BYTE eo + 0x30 * (i_1 + ei) + 0x0d 0x00 // color effects not dispellable WRITE_LONG eo + 0x30 * (i_1 + ei) + 0x0e 0x00 // nulling useless duration PATCH_IF i_1 = 0x00 BEGIN READ_ASCII eo + 0x30 * ei + 0x00 ef_0 (0x30) INNER_PATCH_SAVE ef_0 ~%ef_0%~ BEGIN WRITE_SHORT 0x00 0x48 // Change IDS state WRITE_LONG 0x04 0xd2 // Wizard Eye WRITE_LONG 0x08 0x03 // Class.ids WRITE_ASCII 0x14 ~~ #8 END INNER_PATCH_SAVE ef_1 ~%ef_0%~ BEGIN WRITE_SHORT 0x00 0x52 // Change AI Script WRITE_LONG 0x04 0x00 // Unused WRITE_LONG 0x08 0x01 // Type: Area WRITE_ASCII 0x14 fjmislea END END END PATCH_IF opcode != 0x48 BEGIN WRITE_SHORT ho + 0x28 * i_0 + 0x1e ec + 0x02 INSERT_BYTES eo + 0x30 * (ec + ei) + 0x00 0x60 WRITE_ASCIIE eo + 0x30 * (ec + ei) + 0x00 ~%ef_0%~ WRITE_ASCIIE eo + 0x30 * (ec + ei) + 0x30 ~%ef_1%~ FOR (i_1 = i_0 + 0x01; i_1 < hc; i_1 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_1 + 0x20 ei WRITE_SHORT ho + 0x28 * i_1 + 0x20 ei + 0x02 END END END BUT_ONLY // Two varieties of Bounty Hunter Special Snare can be "thrown" COPY_EXISTING spcl415.spl override READ_LONG 0x64 ho FOR (READ_SHORT 0x68 hc; hc; hc -= 0x01) BEGIN WRITE_BYTE ho + 0x28 * hc - 0x28 0x01 END BUT_ONLY // Pointless global effects on party exclusive projectiles COPY_EXISTING spin681.spl override // BANSHEE_WAIL spin789.spl override // Demilich Howl spin820.spl override // ELVEN_GUARD_WAIL spwi913.spl override // Wail of the Banshee READ_LONG 0x64 ho READ_LONG 0x6a eo READ_SHORT 0x6e gi READ_SHORT 0x70 ec FOR (READ_SHORT 0x68 hc; hc; hc -= 0x01) BEGIN READ_SHORT ho + 0x28 * (hc - 0x01) + 0x20 ei WRITE_SHORT ho + 0x28 * (hc - 0x01) + 0x20 ei < gi + ec ? ei : ei - ec END DELETE_BYTES eo + 0x30 * gi 0x30 * ec WRITE_SHORT 0x70 0x00 BUT_ONLY // Bolt of Glory has an inadequate understanding of "Prime" (part two) COPY_EXISTING sppr612.spl override READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo FOR (i_0 = 0x00; i_0 < hc; i_0 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_0 + 0x1e ec READ_SHORT ho + 0x28 * i_0 + 0x20 ei FOR (i_1 = 0x00 opcode = 0xffff; i_1 < ec && opcode != 0xd7; i_1 += 0x01) BEGIN READ_SHORT eo + 0x30 * (i_1 + ei) + 0x00 opcode PATCH_IF opcode = 0xd7 BEGIN READ_ASCII eo + 0x30 * (i_1 + ei) + 0x00 ef_0 (0x30) END END DELETE_BYTES eo + 0x30 * ei 0x30 * ec INSERT_BYTES eo + 0x30 * ei 0x30 WRITE_ASCIIE eo + 0x30 * ei ~%ef_0%~ INNER_PATCH_SAVE ef_0 ~%ef_0%~ BEGIN WRITE_SHORT 0x00 0xb1 // Use .eff WRITE_LONG 0x08 0x04 // Race.ids WRITE_BYTE 0x0c 0x00 // timing mode: duration WRITE_ASCII 0x14 boltprim END SET en = 0x01 PATCH_FOR_EACH race IN 1 2 3 4 5 6 7 101 102 103 104 105 106 107 109 110 111 112 113 116 117 118 119 120 122 123 124 127 129 130 131 135 137 138 140 141 142 143 144 146 151 154 199 206 213 214 BEGIN INSERT_BYTES eo + 0x30 * (en + ei) + 0x00 0x30 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x00 ~%ef_0%~ WRITE_LONG eo + 0x30 * (en + ei) + 0x04 race SET en += 0x01 END INNER_PATCH_SAVE ef_0 ~%ef_0%~ BEGIN WRITE_ASCII 0x14 boltund #8 END PATCH_FOR_EACH race IN 108 115 125 126 132 133 134 136 148 150 155 BEGIN INSERT_BYTES eo + 0x30 * (en + ei) + 0x00 0x30 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x00 ~%ef_0%~ WRITE_LONG eo + 0x30 * (en + ei) + 0x04 race SET en += 0x01 END INNER_PATCH_SAVE ef_0 ~%ef_0%~ BEGIN WRITE_ASCII 0x14 boltdem #8 END PATCH_FOR_EACH race IN 121 BEGIN INSERT_BYTES eo + 0x30 * (en + ei) + 0x00 0x30 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x00 ~%ef_0%~ WRITE_LONG eo + 0x30 * (en + ei) + 0x04 race SET en += 0x01 END INNER_PATCH_SAVE ef_0 ~%ef_0%~ BEGIN WRITE_ASCII 0x14 boltelem #8 END PATCH_FOR_EACH race IN 145 BEGIN INSERT_BYTES eo + 0x30 * (en + ei) + 0x00 0x30 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x00 ~%ef_0%~ WRITE_LONG eo + 0x30 * (en + ei) + 0x04 race SET en += 0x01 END PATCH_FOR_EACH eff IN sppr612p BEGIN INSERT_BYTES eo + 0x30 * (en + ei) + 0x00 0x30 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x00 ~%ef_0%~ WRITE_LONG eo + 0x30 * (en + ei) + 0x04 255 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x14 ~%eff%~ SET en += 0x01 END PATCH_FOR_EACH eff IN sppr612u BEGIN INSERT_BYTES eo + 0x30 * (en + ei) + 0x00 0x30 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x00 ~%ef_0%~ WRITE_LONG eo + 0x30 * (en + ei) + 0x04 123 WRITE_ASCIIE eo + 0x30 * (en + ei) + 0x14 ~%eff%~ SET en += 0x01 END WRITE_SHORT ho + 0x28 * i_0 + 0x1e en FOR (i_1 = i_0 + 0x01; i_1 < hc; i_1 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_1 + 0x20 ei WRITE_SHORT ho + 0x28 * i_1 + 0x20 ei + en - ec END END BUT_ONLY // Spells using inconsistent, or wrong projectiles OUTER_PATCH action_define_associative_array_in_204 BEGIN DEFINE_ASSOCIATIVE_ARRAY fj_projectile_fix BEGIN sppr508.spl => 0x30 // Chaotic Commands => Sparkle Gold (sparklgo) sppr512.spl => 0x9f // Greater Command => In Area Not Party (inareanp) // sppr710.spl => 0xd4 // Holy Word => In Area Not Self (inareans) END END ACTION_PHP_EACH fj_projectile_fix AS file => proj BEGIN COPY_EXISTING ~%file_0%~ override READ_LONG 0x64 ho FOR (READ_SHORT 0x68 hc; hc; hc -= 0x01) BEGIN WRITE_SHORT ho + 0x28 * hc - 0x02 proj END BUT_ONLY END OUTER_PATCH action_clear_array_yeah BEGIN CLEAR_ARRAY fj_projectile_fix END // Shield spells not protecting against TRAP_MAGIC_MISSILE COPY_EXISTING spwi114.spl override // Shield amul15.itm override // Shield Amulet READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo SET hs = ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.itm$~ ? 0x28 : 0x38 FOR (i_0 = 0x00; i_0 < hc; i_0 += 0x01) BEGIN READ_SHORT ho + hs * i_0 + 0x1e ec READ_SHORT ho + hs * i_0 + 0x20 ei SPRINT resref ~null~ FOR (i_1 = 0x00; i_1 < ec && ~%resref%~ STRING_COMPARE_CASE ~spwi003~; i_1 += 0x01) BEGIN READ_ASCII eo + 0x30 * (i_1 + ei) + 0x14 resref PATCH_IF ~%resref%~ STRING_EQUAL_CASE spwi112 BEGIN READ_ASCII eo + 0x30 * (i_1 + ei) ef (0x30) END END PATCH_IF ~%resref%~ STRING_COMPARE_CASE ~spwi003~ BEGIN WRITE_SHORT ho + 0x28 * i_0 + 0x1e ec + 0x01 INSERT_BYTES eo + 0x30 * (ec + ei) + 0x00 0x30 WRITE_ASCIIE eo + 0x30 * (ec + ei) + 0x00 ~%ef_0%~ WRITE_ASCII eo + 0x30 * (ec + ei) + 0x14 spwi003 #8 FOR (i_1 = i_0 + 0x01; i_1 < hc; i_1 += 0x01) BEGIN READ_SHORT ho + hs * i_1 + 0x20 ei WRITE_SHORT ho + hs * i_1 + 0x20 ei + 0x01 END END END BUT_ONLY // Sunfire interrupts caster, adds resist fire, sometimes bypasses immunities // due to bizzare implementation COPY_EXISTING spwi523.spl override READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo FOR (i_0 = 0x00; i_0 < hc; i_0 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_0 + 0x1e ec READ_SHORT ho + 0x28 * i_0 + 0x20 ei WRITE_SHORT ho + 0x28 * i_0 + 0x26 0xd3 // Projectile: Fireball No Center (fireblns) FOR (i_1 = 0x00 opcode = 0xffff; i_1 < ec && opcode != 0x1e; i_1 += 0x01) BEGIN READ_SHORT eo + 0x30 * (i_1 + ei) + 0x00 opcode PATCH_IF opcode = 0x1e BEGIN WRITE_SHORT ho + 0x28 * i_0 + 0x1e ec - 0x01 DELETE_BYTES eo + 0x30 * (i_1 + ei) 0x30 // delete fire resistance FOR (i_2 = i_0 + 0x01; i_2 < hc; i_2 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_2 + 0x20 ei WRITE_SHORT ho + 0x28 * i_2 + 0x20 ei - 0x01 END END END END BUT_ONLY // Prismatic Spray only blinding targets up to level five, rather than seven COPY_EXISTING spwi714.spl override READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo FOR (i_0 = 0x00; i_0 < hc; i_0 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_0 + 0x1e ec READ_SHORT ho + 0x28 * i_0 + 0x20 ei FOR (i_1 = 0x00 opcode = 0xffff; i_1 < ec && opcode != 0x4a; i_1 += 0x01) BEGIN READ_SHORT eo + 0x30 * (i_1 + ei) + 0x00 opcode PATCH_IF opcode = 0x4a BEGIN WRITE_SHORT eo + 0x30 * (i_1 + ei) + 0x1c 0x07 END END END BUT_ONLY // Pierce Shield provides no feedback when it lowers magic resistance COPY_EXISTING spwi805.spl override READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo FOR (i_0 = 0x00; i_0 < hc; i_0 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_0 + 0x10 ml READ_SHORT ho + 0x28 * i_0 + 0x1e ec READ_SHORT ho + 0x28 * i_0 + 0x20 ei FOR (i_1 = 0x00 opcode = 0xffff; i_1 < ec && opcode != 0x8b; i_1 += 0x01) BEGIN READ_SHORT eo + 0x30 * (i_1 + ei) + 0x00 opcode PATCH_IF i_1 = 0x00 BEGIN READ_ASCII eo + 0x30 * ei + 0x00 ef_0 (0x30) INNER_PATCH_SAVE ef_0 ~%ef_0%~ BEGIN WRITE_SHORT 0x00 0x8b // Display String Feedback WRITE_LONG 0x04 ml < 17 ? 32869 : ml < 20 ? 32853 + ml : 32875 // String to run WRITE_LONG 0x08 0x00 // Unused WRITE_ASCII 0x14 ~~ #8 END END END PATCH_IF opcode != 0x8b BEGIN WRITE_SHORT ho + 0x28 * i_0 + 0x1e ec + 0x01 INSERT_BYTES eo + 0x30 * (ec + ei) 0x30 WRITE_ASCIIE eo + 0x30 * (ec + ei) ~%ef_0%~ FOR (i_1 = i_0 + 0x01; i_1 < hc; i_1 += 0x01) BEGIN READ_SHORT ho + 0x28 * i_1 + 0x20 ei WRITE_SHORT ho + 0x28 * i_1 + 0x20 ei + 0x01 END END END BUT_ONLY // .wed // Extended Night tilesets exist, but unreferenced (part two) COPY ~bg2fixpack/wed/ar1900n.wed~ override Link to comment
Nythrun Posted May 12, 2008 Author Share Posted May 12, 2008 DEFINE_PATCH_MACRO fj_add_batch_effects BEGIN LOCAL_SET ho = 0 LOCAL_SET hc = 0 LOCAL_SET eo = 0 LOCAL_SET ec = 0 LOCAL_SET ei_0 = 0 LOCAL_SET ei_1 = 0 LOCAL_SET fl = 0 LOCAL_SET ft = 0 LOCAL_SET cs = 0 LOCAL_SET nf = 0 LOCAL_SET i_0 = 0 LOCAL_SET i_1 = 0 LOCAL_SET match = 0 LOCAL_SET int_0 = 0 LOCAL_SET val_0 = 0 LOCAL_SET t_0 = 0 LOCAL_SET o_0 = 0 LOCAL_SET o_1 = 0 LOCAL_SET es = 0x30 LOCAL_SET gl = (NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.spl$~) ? 0 : 1 LOCAL_SET co = (NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.cre$~) ? 0x2c8 : 0x70 LOCAL_SET ms = (NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.cre$~) ? 0x2d4 : 0x72 LOCAL_SET hs = (NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.spl$~) ? 0x28 : (NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.itm$~) ? 0x38 : 0 PATCH_IF NOT SOURCE_SIZE < ms BEGIN PATCH_IF NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.spl$~ BEGIN READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo SET cs = 1 END ELSE PATCH_IF NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.itm$~ BEGIN READ_BYTE 0x18 fl READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo PATCH_IF ~%SOURCE_RES%~ STRING_MATCHES_REGEXP ~^\(imoenhp1\)$~ BEGIN SET cs = (fl & 0x4) = 0x4 ? 1 : 0 END END ELSE PATCH_IF NOT ~%SOURCE_FILE%~ STRING_MATCHES_REGEXP ~^.+\.cre$~ BEGIN READ_LONG 0x2c4 eo READ_BYTE 0x033 ft SET es = ft = 0x1 ? 0x108 : 0x30 END FOR (i_0 = 0 - gl; i_0 < hc; i_0 += 1) BEGIN SPRINT match ~~ LAUNCH_PATCH_MACRO ~fj_list_batch_%immunity_type%~ READ_SHORT (i_0 < 0 ? co : ho + i_0 * hs + 0x1e) ec PATCH_IF co = 0x70 BEGIN READ_SHORT (i_0 < 0 ? 0x6e : ho + i_0 * hs + 0x20) ei_0 END FOR (i_1 = 0; i_1 < ec; i_1 += 1) BEGIN READ_SHORT eo + 0x00 + ft * 0x08 + es * (ei_0 + i_1) op PHP_EACH match_op AS int => val_0 BEGIN PATCH_IF val_0 = op BEGIN READ_LONG eo + 0x04 + ft * 0x10 + es * (ei_0 + i_1) p1 READ_LONG eo + 0x08 + ft * 0x10 + es * (ei_0 + i_1) p2 READ_ASCII eo + 0x14 + ft * 0x14 + es * (ei_0 + i_1) rr PATCH_IF ($match_p1(~%int_0%~) = p1 || $match_p1(~%int_0%~) = 0) && ($match_p2(~%int_0%~) = p2 || $match_p2(~%int_0%~) = 0) && ($match_rr(~%int_0%~) STRING_EQUAL_CASE ~%rr%~ || $match_rr(~%int_0%~) STRING_EQUAL_CASE ~~) BEGIN SET $match_op(~%int_0%~) = (` 0) PATCH_IF ~%match%~ STRING_EQUAL ~~ BEGIN READ_ASCII eo + es * (ei_0 + i_1) match (es) END END END END PHP_EACH new_op AS int => val_0 BEGIN PATCH_IF val_0 = op BEGIN READ_LONG eo + 0x04 + ft * 0x10 + es * (ei_0 + i_1) p1 READ_LONG eo + 0x08 + ft * 0x10 + es * (ei_0 + i_1) p2 READ_ASCII eo + 0x14 + ft * 0x14 + es * (ei_0 + i_1) rr PATCH_IF ($new_p1(~%int_0%~) = p1 || $new_p1(~%int_0%~) = 0) && ($new_p2(~%int_0%~) = p2 || $new_p2(~%int_0%~) = 0) && ($new_rr(~%int_0%~) STRING_EQUAL_CASE ~%rr%~ || $new_rr(~%int_0%~) STRING_EQUAL_CASE ~~) BEGIN SET $new_op(~%int_0%~) = (` 0) END END END PATCH_IF cs BEGIN PHP_EACH cosmetic_op AS int => val_0 BEGIN PATCH_IF val_0 = op BEGIN READ_LONG eo + 0x04 + ft * 0x10 + es * (ei_0 + i_1) p1 READ_LONG eo + 0x08 + ft * 0x10 + es * (ei_0 + i_1) p2 READ_ASCII eo + 0x14 + ft * 0x14 + es * (ei_0 + i_1) rr PATCH_IF ($cosmetic_p1(~%int_0%~) = p1 || $cosmetic_p1(~%int_0%~) = 0) && ($cosmetic_p2(~%int_0%~) = p2 || $cosmetic_p2(~%int_0%~) = 0) && ($cosmetic_rr(~%int_0%~) STRING_EQUAL_CASE ~%rr%~ || $cosmetic_rr(~%int_0%~) STRING_EQUAL_CASE ~~) BEGIN SET $cosmetic_op(~%int_0%~) = (` 0) END END END END END SET nf = 0 SET o_0 = eo + es * (ei_0 + ec) PATCH_IF ~%match%~ STR_CMP ~~ BEGIN PATCH_FOR_EACH array IN new match cosmetic BEGIN PHP_EACH ~%array%_op~ AS int => val_0 BEGIN PATCH_IF cs || ~%array%~ STR_CMP cosmetic BEGIN PATCH_IF val_0 > (` 0) BEGIN INNER_PATCH_SAVE match ~%match%~ BEGIN WRITE_SHORT 0x00 + ft * 0x08 $EVALUATE_BUFFER ~%array%_op~(~%int_0%~) WRITE_LONG 0x04 + ft * 0x10 $EVALUATE_BUFFER ~%array%_p1~(~%int_0%~) WRITE_LONG 0x08 + ft * 0x10 $EVALUATE_BUFFER ~%array%_p2~(~%int_0%~) SPRINT t_0 $EVALUATE_BUFFER ~%array%_rr~(~%int_0%~) WRITE_ASCIIE 0x14 + ft * 0x14 ~%t_0%~ #8 END INSERT_BYTES o_0 es WRITE_ASCIIE o_0 ~%match%~ SET o_0 += es SET nf += 1 END END END END PATCH_IF nf BEGIN WRITE_SHORT (i_0 < 0 ? co : ho + i_0 * hs + 0x1e) ec + nf PATCH_IF co != 0x70 BEGIN PATCH_FOR_EACH o_0 IN 0x02a0 0x02a8 0x02b0 0x02b8 0x02bc BEGIN READ_LONG o_0 o_1 WRITE_LONG o_0 o_1 < eo ? o_1 : o_1 + nf * es END END ELSE BEGIN FOR (i_1 = i_0 + 1; i_1 < hc; i_1 += 1) BEGIN READ_SHORT ho + hs * i_1 + 0x20 ei_1 WRITE_SHORT ho + hs * i_1 + 0x20 ei_1 < ei_0 + ec ? ei_1 : ei_1 + nf END END END END END END END DEFINE_PATCH_MACRO fj_list_batch_fear BEGIN // morale modifier immunity SET $match_op(0) = 101 SET $match_p1(0) = 0 SET $match_p2(0) = 23 SPRINT $match_rr(0) ~~ // horror immunity SET $match_op(1) = 101 SET $match_p1(1) = 0 SET $match_p2(1) = 24 SPRINT $match_rr(1) ~~ // morale break modifier immunity SET $match_op(2) = 101 SET $match_p1(2) = 0 SET $match_p2(2) = 106 SPRINT $match_rr(2) ~~ // modify morale SET $new_op(0) = 23 SET $new_p1(0) = 0 SET $new_p2(0) = 0 SPRINT $new_rr(0) ~~ // cure horror SET $new_op(1) = 161 SET $new_p1(1) = 0 SET $new_p2(1) = 0 SPRINT $new_rr(1) ~~ // morale break modifier SET $new_op(2) = 106 SET $new_p1(2) = 0 SET $new_p2(2) = 1 SPRINT $new_rr(2) ~~ // disable string "Panic" SET $new_op(3) = 267 SET $new_p1(3) = 14007 SET $new_p2(3) = 0 SPRINT $new_rr(3) ~~ // disable string "Panic" SET $new_op(4) = 267 SET $new_p1(4) = 17427 SET $new_p2(4) = 0 SPRINT $new_rr(4) ~~ // immunity to spell: Cloak of Fear SET $new_op(5) = 206 SET $new_p1(5) = 0xffffffff SET $new_p2(5) = 0 SPRINT $new_rr(5) sppr416 // immunity to spell: Wandering Horror SET $new_op(6) = 206 SET $new_p1(6) = 0xffffffff SET $new_p2(6) = 0 SPRINT $new_rr(6) spin675 // prevent portrait icon: panic SET $cosmetic_op(0) = 169 SET $cosmetic_p1(0) = 0 SET $cosmetic_p2(0) = 36 SPRINT $cosmetic_rr(0) ~~ // remove portrait icon : panic SET $cosmetic_op(1) = 240 SET $cosmetic_p1(1) = 0 SET $cosmetic_p2(1) = 36 SPRINT $cosmetic_rr(1) ~~ // display portrait icon: resist fear SET $cosmetic_op(2) = 142 SET $cosmetic_p1(2) = 0 SET $cosmetic_p2(2) = 37 SPRINT $cosmetic_rr(2) ~~ END OUTER_SPRINT immunity_type fear COPY_EXISTING abazring.itm override // ring ammonk07.cre override // monk ammonk08.cre override // monk amsmith.cre override // kerrick the smith amul17.itm override // greenstone amulet balth.cre override // balthazar bazdra02.cre override // draconis bazpatrg.itm override // ring bhaalhp1.itm override // <invalid strref -1> bhaalimm.itm override // <invalid strref -1> brdflute.itm override // magic flute chalcy3.itm override // greenstone amulet chalslay.itm override // ring chwraith.itm override // <invalid strref -1> clck30.itm override // cloak of bravery ddguard1.cre override // guardian ddguard2.cre override // guardian ddguard3.cre override // guardian ddguard4.cre override // guardian ddguard5.cre override // guardian ddguard6.cre override // guardian ddguard7.cre override // guardian demogorg.itm override // <invalid strref -1> elemhydr.cre override // olhydra finmel01.itm override // <invalid strref -1> firlch01.cre override // fire lich fsspir.itm override // ring golbra01.cre override // brain golem golbra.itm override // brain golem item golcla.itm override // clay golem item golfle.itm override // flesh golem item golmag01.itm override // magic golem item golstone.itm override // stone golem item gorair01.cre override // lesser air elemental gorair02.cre override // greater air elemental gorcamb6.cre override // fell cat gorcamb7.cre override // fell cat gorchr.itm override // ring gorfirg.itm override // ring gorjelfu.itm override // ring gorjelgr.itm override // ring gormisti.itm override // ring gormistp.cre override // poison mist gorstalk.cre override // guardian of air hamm11.itm override // runehammer +5 helljon.cre override // jon irenicus helljon2.cre override // jon irenicus helm14.itm override // kiel's helmet hgber01.itm override // two handed sword +1 hgfel01.cre override // fell cat hllich.cre override // elemental lich hlshade.cre override // shade lich holdring.itm override // ring igolem01.cre override // sewage golem imoenhp1.itm override // imoen's belt innoc.itm override // ring invulner.itm override // ring ipsion.itm override // greenstone amulet irongol.itm override // iron golem item jonhp1.itm override // <invalid strref -1> kaypal02.cre override // reynald de chatillon kaypal03.cre override // fallen paladin kaysmg01.cre override // rindus kaysmg02.cre override // smuggler kaysmg03.cre override // smuggler killsw01.itm override // long sword +2 lichel01.cre override // elemental lich mage20.cre override // mage mage20b.cre override // mage mage20c.cre override // mage maharper.itm override // master harper item mane01.itm override // ring mdk2gun.itm override // big gun mdk2ring.itm override // big gun mdog1.itm override // <invalid strref -1> mel01.itm override // imoen's belt minhp1.itm override // <invalid strref -1> miscbc.itm override // blackrazor mistpo01.cre override // poison mist nofear.itm override // <invalid strref -1> objring.itm override // ring palring.itm override // ring potn21.itm override // potion of clarity ppireni2.cre override // jon irenicus ravag03.itm override // <invalid strref -1> ring94.itm override // ring ring95.itm override // ring ring98.itm override // ring ring99.itm override // ring ringdemn.itm override // <invalid strref -1> ringkora.itm override // ring sarvie01.cre override // viekang sendai7.cre override // sendai sengua04.itm override // <invalid strref -1> sewyag04.cre override // yaga-shura mage shalt01.itm override // ring shararm.itm override // darkmail +3 spcl152.spl override // barbarian rage spcl221.spl override // <invalid strref -1> spcl222.spl override // remove fear spcl321.spl override // enrage spcl542a.spl override // <invalid strref -1> spcl920a.spl override // <invalid strref -1> spcl921a.spl override // <invalid strref -1> spec01.itm override // ring spec02.itm override // <invalid strref -1> spin117.spl override // berserk spin676.spl override // invoke courage spin823.spl override // slayer change spin872.spl override // <invalid strref -1> spin891.spl override // moon dog howl spin906.spl override // <invalid strref -1> sppr108.spl override // remove fear spwi210.spl override // resist fear spwi411.spl override // emotion stalker.itm override // ring sujon.cre override // jon irenicus sujon2.cre override // jon irenicus suraam.cre override // raamilat surehp1.itm override // ring susuneer.cre override // suneer sw1h32.itm override // dragonslayer sword01.cre override // magical sword telslav2.itm override // <invalid strref -1> torgal.cre override // torgal torgal2.cre override // torgal torgal3.cre override // torgal trollimm.itm override // ring tstatue.itm override // <invalid strref -1> uddrow50.cre override // drow wizard udgolem.cre override // brain golem udlesa.cre override // lasaonar vampreg.itm override // ring vampreg1.itm override // ring vampreg2.itm override // ring LAUNCH_PATCH_MACRO fj_add_batch_effects BUT_ONLY OUTER_PATCH action_clear_array_yeah BEGIN PATCH_FOR_EACH array IN match new cosmetic BEGIN PATCH_FOR_EACH parameter IN op p1 p2 rr BEGIN CLEAR_ARRAY ~%array%_%parameter%~ END END END Link to comment
aVENGER_(RR) Posted May 13, 2008 Share Posted May 13, 2008 You can throw this little triviality into the mix as well: // the pirate mage under the Sea's Bounty tavern erroneously has 70% magic resistance COPY_EXISTING ~pirsea03.cre~ ~override~ // pirate mage WRITE_BYTE 0x5d 0 // resist magic BUT_ONLY_IF_IT_CHANGES Link to comment
Nythrun Posted May 13, 2008 Author Share Posted May 13, 2008 Pirate mages aren't allowed to be tough? Or let me rephrase: liches aren't immune to spell levels one through five in PnP either, and we're not going to remove that, so why here? Link to comment
aVENGER_(RR) Posted May 13, 2008 Share Posted May 13, 2008 As noted in the other thread, this guy is just a regular human mage. There's nothing that indicates that he should have such a high innate MR. Note that none of the other pirates in his group have high MR or any other abnormal stats. Link to comment
Nythrun Posted May 13, 2008 Author Share Posted May 13, 2008 Batch stuff rewritten (my facility with Cammish syntax has lapsed, and it may run slightly faster). Link to comment
Icendoan Posted May 13, 2008 Share Posted May 13, 2008 Nythrun, do you think codeboxes might be a good idea? Icen Link to comment
Nythrun Posted May 13, 2008 Author Share Posted May 13, 2008 The code is sole point of this post! Grab the docs out of the stickied hotfixes thread if you don't want to wade through it. Link to comment
Miloch Posted May 13, 2008 Share Posted May 13, 2008 The code is sole point of this post!You lost me at://///\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\ Link to comment
aVENGER_(RR) Posted May 30, 2008 Share Posted May 30, 2008 Heh, an ancient developer interview apparently indicates that Monks are actually supposed to be able to use priest scrolls and the Sensate Amulet. On Monks: 1) Monks aren't supposed to be able to use any mage scrolls, no. Obviously a mistake. 2) Monks are supposed to be able to use the priest scrolls, according to James. (And since ALL of them are marked this way, this backs up his claim. 3) Yes, Monks can use the (Sensate) amulet. Since the fixpack currently treats this as a bugfix, a revision of the issue might be in order. Link to comment
Nythrun Posted May 30, 2008 Author Share Posted May 30, 2008 The devs have spoken, and we hasten to obey. Link to comment
aVENGER_(RR) Posted May 30, 2008 Share Posted May 30, 2008 On a somewhat related note, according to the developers Aran Linvail (the Shadow Thief leader) is supposed to be True Neutral. The Shadow Thieves aren't evil per se...just unethical. Even Linvail himself is simple True Neutral...although the fact that the Shadow Thieves have assassins certainly wouldn't bode well for them in the eyes of any paladin. IIRC, think one of Fixpack's components changed him to Lawful Evil and I adopted this for RR as well. Time to revert that I guess. Link to comment
Nythrun Posted May 30, 2008 Author Share Posted May 30, 2008 (And since ALL of them are marked this way, this backs up his claim.) This isn't actually true, by the way. Link to comment
Nythrun Posted May 30, 2008 Author Share Posted May 30, 2008 Even Linvail himself is simple True Neutral... Except when he's Neutral Evil, of course. We'll set them all to True Neutral, then, and thanks. Link to comment
Nythrun Posted May 30, 2008 Author Share Posted May 30, 2008 If anyone wants to resurrect of those damned alignment discussion threads, now's not a bad time. If I recall correctly, the only other Shadow Thief whose alignment we change is Anishai the Chaotic Neutral Monk - but a triple check wouldn't hurt. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.