aVENGER_(RR) Posted January 20, 2008 Author Share Posted January 20, 2008 A weapon's enchantment level has no effect on its THAC0 bonus. For reference, see the Staff of the Magi (STAF11.ITM). It has a +5 enchantment level yet it only provides a +1 THAC0 bonus. EDIT - I'd just add that a summoned Mountain Bear should not outperform a supposedly much more powerful Spirit Bear in terms of "weapon" enchantment. As it stands right now, a summoned Mountain Bear (obtainable via Animal Summoning II) wields +3 claws, but the ultra-special Spirit Bear wields unenchanted claws? Come on guys, use some common sense here, even if that means shafting this fix into OBC. Link to comment
Guest erik Posted January 21, 2008 Share Posted January 21, 2008 Agreed. Non-magical & unenchanted are a bit daft in this case... then they can't even hurt each other if you set these ghostly things to whack each other for amusement value. I vote for the +2 tweak. Link to comment
devSin Posted January 21, 2008 Share Posted January 21, 2008 I voted for +2 too, but I'm not averse to not bug/no action and letting Ding0 tweaks pick up the slack. I think +5 is way too much, however, regardless of how powerful those (obviously extraplanar) polar bears are. Link to comment
aVENGER_(RR) Posted January 21, 2008 Author Share Posted January 21, 2008 I vote +3 because that would bring the Spirit Animals on pair with the strongest of the regular summoned animals. Going over that would upset the game balance IMO. Link to comment
Salk Posted January 21, 2008 Share Posted January 21, 2008 I second aVENGER's proposal... Link to comment
devSin Posted January 22, 2008 Share Posted January 22, 2008 I'm now fully with Cam that nothing here is going to be an adequate solution. We're essentially picking an arbitrary enchantment just b'cause. Link to comment
cirerrek Posted January 22, 2008 Share Posted January 22, 2008 Tweak. Tweak. Tweak. [1] +1 [2] +2 [3] +3 etc.,. [6] Scale with levels (My personal favorite) Link to comment
aVENGER_(RR) Posted January 22, 2008 Author Share Posted January 22, 2008 Tweak. Tweak. Tweak. I disagree, but that's a valid point of view, and for that reason I already suggested moving this change into OBC. Link to comment
Demivrgvs Posted January 22, 2008 Share Posted January 22, 2008 I'd like too to have spirit animals scaling with caster's level: they're very powerful in the beginning but became too weak later on. Furthmore they're probably overpowered if used in BG with Tutu but that has nothing to do with fixpack i presume. Anyway i also think +3 enchantement would be the last acceptable "upgrade" because more than that would be too powerful imo. I vote +3 because that would bring the Spirit Animals on pair with the strongest of the regular summoned animals. Going over that would upset the game balance IMO.Basically i agree with it. Link to comment
Nythrun Posted January 22, 2008 Share Posted January 22, 2008 Please be directing tweak requests to more appropriate fora. But since I'm a subjective hypocrite who was going to do something like this anyway... OUTER_SPRINT el placeholder OUTER_WHILE NOT IS_AN_INT el OR el > 0x06 OR el < 0x00 BEGIN PRINT ~Select an enchantment level from 0 to 5, or enter 6 for level-scaling critters.~ ACTION_READLN el END ACTION_IF el != 0x06 THEN BEGIN COPY_EXISTING bearspir.itm override lionspir.itm override snakspir.itm override wolfspir.itm override PATCH_IF SOURCE_SIZE > 0x71 BEGIN READ_LONG 0x18 fl WRITE_LONG 0x18 el > 0x00 ? fl | 0x40 : fl & ` 0x40 WRITE_LONG 0x60 el READ_LONG 0x64 ho FOR (READ_SHORT 0x68 hc; hc > 0x00; hc -= 0x01) BEGIN READ_SHORT ho + hc * 0x38 - 0x38 ty PATCH_IF ty = 0x01 BEGIN WRITE_SHORT ho + hc * 0x38 - 0x24 el WRITE_SHORT ho + hc * 0x38 - 0x1e el WRITE_SHORT ho + hc * 0x38 - 0x0e 0x01 END END END BUT_ONLY END ELSE BEGIN ACTION_FOR_EACH critter IN spirbear spirlion spirsnak spirwolf BEGIN OUTER_PATCH_SAVE weapres ~%critter%~ BEGIN READ_ASCII 0x00 t1 (0x04) READ_ASCII 0x04 t2 (0x04) WRITE_ASCIIE 0x00 ~%t2%~ WRITE_ASCIIE 0x04 ~%t1%~ END OUTER_FOR (i1 = 0x00; i1 < 0x0a; i1 += 0x01) BEGIN OUTER_SET dx = i1 + 0x30 OUTER_PATCH_SAVE weapnew ~%weapres%~ BEGIN WRITE_BYTE 0x07 dx END OUTER_PATCH_SAVE destres ~%critter%~ BEGIN READ_BYTE 0x04 n // 0x62 0x6c 0x73 0x77 WRITE_BYTE 0x07 dx END COPY_EXISTING ~%critter%.cre~ ~override/%destres%.cre~ PATCH_IF SOURCE_SIZE > 0x2d3 BEGIN PATCH_FOR_EACH hpoff IN 0x24 0x26 BEGIN WRITE_SHORT hpoff (n = 0x62 ? (i1 + 0x01) * 0x14 : n = 0x6c ? (i1 + 0x01) * 0x10 : n = 0x73 ? (i1 + 0x01) * 0x0a : (i1 + 0x01) * 0x0c) END PATCH_FOR_EACH acoff IN 0x46 0x48 BEGIN WRITE_SHORT acoff (n = 0x62 ? 0x04 - i1 / 0x02 : n = 0x6c ? 0x03 - i1 / 0x02 : n = 0x73 ? 0x01 - i1 / 0x02 : 0x02 - i1 / 0x02) END WRITE_BYTE 0x052 (n = 0x62 ? 0x13 - (i1 * 0x02) : n = 0x6c ? 0x11 - (i1 * 0x02) : n = 0x73 ? 0x12 - (i1 * 0x02) : 0x12 - (i1 * 0x02)) WRITE_BYTE 0x053 (i1 < 0x02 ? 0x01 : i1 < 0x04 ? 0x03 : i1 < 0x06 ? 0x03 : 0x04) WRITE_BYTE 0x054 0x0e - i1 * 0x02 > 0x03 ? 0x0e - i1 * 0x02 : 0x03 WRITE_BYTE 0x055 0x10 - i1 * 0x02 > 0x05 ? 0x10 - i1 * 0x02 : 0x05 WRITE_BYTE 0x056 0x0f - i1 * 0x02 > 0x04 ? 0x0f - i1 * 0x02 : 0x04 WRITE_BYTE 0x057 0x11 - i1 * 0x02 > 0x04 ? 0x11 - i1 * 0x02 : 0x04 WRITE_BYTE 0x058 0x11 - i1 * 0x02 > 0x06 ? 0x11 - i1 * 0x02 : 0x06 WRITE_BYTE 0x234 i1 * 0x02 + 0x01 WRITE_BYTE 0x23f 0x0a WRITE_BYTE 0x240 0x00 WRITE_BYTE 0x242 0x00 REPLACE_CRE_ITEM helmnoan #0 #0 #0 NONE HELMET REPLACE_CRE_ITEM ~%weapnew%~ #0 #0 #0 NONE WEAPON1 PATCH_IF i1 < 0x01 BEGIN REPLACE_CRE_ITEM ring01 #0 #0 #0 ~UNSTEALABLE&UNDROPPABLE~ LRING END ELSE PATCH_IF i1 < 0x03 BEGIN REPLACE_CRE_ITEM immune1 #0 #0 #0 NONE LRING END ELSE PATCH_IF i1 < 0x07 BEGIN REPLACE_CRE_ITEM immune2 #0 #0 #0 NONE LRING END END //BUT_ONLY_IF_IT_SUCKS COPY_EXISTING ~%weapres%.itm~ ~override/%weapnew%.itm~ PATCH_IF SOURCE_SIZE > 0x71 BEGIN READ_LONG 0x18 fl WRITE_LONG 0x18 (i1 / 0x02) > 0x00 OR n = 0x6c ? fl | 0x40 : fl & ` 0x40 WRITE_ASCII 0x22 ~ ~ WRITE_LONG 0x60 n = 0x6c ? (i1 + 0x02) / 0x02 : i1 / 0x02 READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo READ_SHORT 0x6e gi READ_SHORT 0x70 gc FOR (i2 = hc; i2 > 0x00; i2 -= 0x01) BEGIN READ_SHORT ho + i2 * 0x38 - 0x38 ty PATCH_IF ty = 0x01 BEGIN WRITE_SHORT ho + i2 * 0x38 - 0x24 (n = 0x62 ? (i1 / 0x02) : n = 0x6c ? ((i1 + 0x02) / 0x02) : n = 0x73 ? (i1 / 0x02) : (i1 / 0x02)) WRITE_SHORT ho + i2 * 0x38 - 0x22 (n = 0x62 ? 0x0a : n = 0x6c ? 0x08 : n = 0x73 ? 0x08 : 0x04) WRITE_SHORT ho + i2 * 0x38 - 0x20 0x01 READ_SHORT ho + i2 * 0x38 - 0x18 ei WRITE_SHORT ho + i2 * 0x38 - 0x1e (n = 0x62 ? (i1 / 0x02) : n = 0x6c ? ((i1 + 0x02) / 0x02) : n = 0x73 ? (i1 / 0x02) : (i1 / 0x02)) WRITE_SHORT ho + i2 * 0x38 - 0x0e 0x01 PATCH_IF n = 0x6c BEGIN READ_SHORT ho + i2 * 0x38 - 0x1a ec WRITE_SHORT ho + i2 * 0x38 - 0x1a ec + 0x03 INSERT_BYTES (eo + 0x30 * ei + 0x00) 0x90 FOR (i3 = 0x00; i3 < 0x03; i3 += 0x01) BEGIN WRITE_LONG (eo + 0x30 * (ei + i3) + 0x0e) 0x12 WRITE_BYTE (eo + 0x30 * (ei + i3) + 0x02) 0x02 WRITE_BYTE (eo + 0x30 * (ei + i3) + 0x12) 0x21 END WRITE_SHORT (eo + 0x30 * ei + 0x00) 0x19 WRITE_LONG (eo + 0x30 * ei + 0x04) 0x06 WRITE_LONG (eo + 0x30 * ei + 0x08) 0x03 WRITE_SHORT (eo + 0x30 * ei + 0x30) 0x8e WRITE_LONG (eo + 0x30 * ei + 0x38) 0x89 WRITE_SHORT (eo + 0x30 * ei + 0x60) 0x8b WRITE_BYTE (eo + 0x30 * ei + 0x62) 0x01 SAY (eo + 0x30 * ei + 0x64) ~Claw Rake~ END ELSE PATCH_IF n = 0x77 BEGIN READ_SHORT ho + i2 * 0x38 - 0x1a ec WRITE_SHORT ho + i2 * 0x38 - 0x1a ec + 0x01 INSERT_BYTES (eo + 0x30 * ei + 0x00) 0x30 WRITE_SHORT (eo + 0x30 * ei + 0x00) 0x8b WRITE_LONG (eo + 0x30 * ei + 0x04) 0xa217 WRITE_BYTE (eo + 0x30 * ei + 0x12) i1 < 0x03 ? 0x00 : 0x64 WRITE_LONG (eo + 0x30 * ei + 0x24) 0x01 WRITE_LONG (eo + 0x30 * ei + 0x28) 0x04 - i1 / 0x02 END READ_SHORT ho + i2 * 0x38 - 0x1a ec FOR (i3 = 0x00; i3 < ec; i3 += 0x01) BEGIN READ_SHORT (eo + 0x30 * (ei + i3) + 0x00) op READ_SHORT (eo + 0x30 * (ei + i3) + 0x08) p2 PATCH_IF op = 0xd8 BEGIN WRITE_BYTE (eo + 0x30 * (ei + i3) + 0x12) i1 < 0x03 ? 0x00 : 0x64 WRITE_LONG (eo + 0x30 * (ei + i3) + 0x24) 0x01 WRITE_LONG (eo + 0x30 * (ei + i3) + 0x28) 0x04 - i1 / 0x02 END ELSE PATCH_IF op = 0x0c AND p2 = 0x20000 BEGIN WRITE_LONG (eo + 0x30 * (ei + i3) + 0x0e) 0x00 WRITE_LONG (eo + 0x30 * (ei + i3) + 0x1c) 0x01 WRITE_LONG (eo + 0x30 * (ei + i3) + 0x20) (i1 < 0x02 ? 0x02 : i1 < 0x04 ? 0x04 : 0x06) END ELSE PATCH_IF (op = 0x19 AND p2 = 0x02) OR (op = 0x8e AND p2 = 0x06) BEGIN WRITE_LONG (eo + 0x30 * (ei + i3) + 0x24) 0x04 WRITE_LONG (eo + 0x30 * (ei + i3) + 0x28) 0x04 - i1 END ELSE PATCH_IF op = 0x18 BEGIN WRITE_LONG (eo + 0x30 * (ei + i3) + 0x24) 0x04 WRITE_LONG (eo + 0x30 * (ei + i3) + 0x28) 0x03 - i1 / 0x02 END END END END READ_SHORT 0x70 ec READ_SHORT 0x6e ei FOR (i2 = 0x00; i2 < hc; i2 += 0x01) BEGIN SET ei += ec READ_SHORT ho + i2 * 0x38 - 0x1a ec WRITE_SHORT ho + i2 * 0x38 - 0x20 ei END END //BUT_ONLY_IF_IT_SUCKS END END OUTER_FOR (i1 = 0x00; i1 < 0x0a; i1 += 0x01) BEGIN COPY_EXISTING spirsumm.2da ~override/spirsum%i1%.2da~ PATCH_IF SOURCE_SIZE BEGIN REPLACE_TEXTUALLY ~spir\(bea\|wol\|sna\|lio\)[rfkn]~ ~spir\1%i1%~ END //BUT_ONLY COPY_EXISTING spirsumm.eff ~override/spirsum%i1%.eff~ PATCH_IF SOURCE_SIZE = 0x110 BEGIN WRITE_LONG 0x18 0x00 WRITE_ASCIIE 0x30 ~spirsum%i1%~ END //BUT_ONLY END COPY_EXISTING spcl621.spl override PATCH_IF SOURCE_SIZE > 0x71 BEGIN WRITE_SHORT 0x25 0x00 WRITE_BYTE 0x27 0x00 READ_LONG 0x64 ho READ_SHORT 0x68 hc READ_LONG 0x6a eo FOR (i2 = hc; i2 > 0x00; i2 -= 0x01) BEGIN READ_SHORT (ho + 0x28 * i2 - 0x0a) ec WRITE_SHORT (ho + 0x28 * i2 - 0x0a) 0x0a READ_SHORT (ho + 0x28 * i2 - 0x08) ei READ_ASCII (eo + ei * 0x30) ef (0x30) INSERT_BYTES (eo + ei * 0x30) 0x30 * 0x0a DELETE_BYTES (eo + ei * 0x30) ec * 0x30 INNER_PATCH_SAVE ef ~%ef%~ BEGIN WRITE_SHORT 0x00 0xb1 WRITE_BYTE 0x02 0x01 WRITE_BYTE 0x03 0x00 WRITE_LONG 0x04 0x00 WRITE_LONG 0x08 0x02 WRITE_BYTE 0x0c 0x00 WRITE_BYTE 0x0d 0x00 WRITE_LONG 0x0e 0x168 WRITE_BYTE 0x12 0x64 WRITE_BYTE 0x13 0x00 WRITE_ASCII 0x14 ~spirsum~ #8 WRITE_LONG 0x1c 0x00 WRITE_LONG 0x20 0x01 END FOR (i3 = 0x00; i3 < 0x0a; i3 += 0x01) BEGIN WRITE_ASCIIE eo + (ei + i3) * 0x30 + 0x00 ~%ef%~ WRITE_BYTE eo + (ei + i3) * 0x30 + 0x1b i3 + 0x30 WRITE_LONG eo + (ei + i3) * 0x30 + 0x1c i3 != 0x09 ? i3 * 0x02 + 0x02 : 0x00 WRITE_LONG eo + (ei + i3) * 0x30 + 0x20 i3 * 0x02 + 0x01 END END READ_SHORT 0x70 ec READ_SHORT 0x6e ei FOR (i2 = 0x00; i2 < hc; i2 += 0x01) BEGIN SET ei += ec READ_SHORT ho + i2 * 0x28 + 0x1a ec WRITE_SHORT ho + i2 * 0x28 + 0x20 ei END END BUT_ONLY END Link to comment
cirerrek Posted January 23, 2008 Share Posted January 23, 2008 Whoot! Thanks Nythrun! Link to comment
Nythrun Posted January 23, 2008 Share Posted January 23, 2008 Welcome Feel free to tweak any parameters to taste - it's so not a fix Link to comment
CamDawg Posted January 26, 2008 Share Posted January 26, 2008 I'm afraid there's no good solution here so let's go with the one players think is best. Magical, +3 for v5. Link to comment
Guest Guest Posted January 26, 2008 Share Posted January 26, 2008 Is Magical, +3 the highest enchantment needed to hit every enemy? Regardless, +3 seems like the best way to me. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.