Jump to content

CamDawg

Gibberling Poobah
  • Posts

    12,003
  • Joined

Everything posted by CamDawg

  1. The Java House is on the Promenade, taking over an existing area. Coordinates are 1500,1750-ish, directly up from Quataris. edit: there should be a map note for it as well.
  2. Imoen in BGEE still uses two creature files: she's imoen1.cre in the game file, but npclevel.2da will swap to imoen2.cre if you manage to gain a level before meeting her. All of those imoen2 entries in npclevel should be changed to imoen1 to bring her in line with the other joinables. h/t to Keneth on Discord for spotting this.
  3. Given the near-infinite number of scripts that can spawn a creature, it may be easier to work backwards: if you know the creature's in-game name, find the actual file via NI's search function. Once you find it, you can go to the edit tab and use the 'find > references to this file' button at the bottom of the panel.
  4. I'll play around with it, but my options here are limited. TWD does everything through a singular, hardcoded opcode that I may not be able to emulate otherwise.
  5. Yeah, this. Whether something bypasses MR is set on individual effects within a spell--so you can have some effects be blocked by MR on a spell while others work. Generally you'll see all effects either bypass or respect magic resistance, but there are some spells with mixed effects, e.g. when you want a cosmetic visual to play even if the spell itself gets blocked. There's not really rhyme or reason why some spells bypass MR while others don't, and there's not really any in-game resources to indicate which spells should be which. As such, Fixpack essentially punts and instead focuses on making sure that all effects on a spell treat MR the same way (with a handful of exceptions for e.g. mixed spells with visuals as noted above) since there's no way to solidly determine otherwise. For Sol's Searing Orb, in oIWD all of its effects are handled by a single monolithic opcode--IOW everything it does is handled internally by the engine in ways I can't access. I can probably emulate it with other effects, but I'll need to play around with it.
  6. charsnd.2da is very different between 2.5 and 2.6, so you're either installing a soundset built for 2.5 on a 2.6 game or vice versa.
  7. Yes, COMPILE assuming the output to be a BCS and in the override folder is a little annoying. However, before we had DECOMPILE_AND_PATCH BEGIN ... END, we had paired commands of DECOMPILE_BCS_TO_BAF and COMPILE_BAF_TO_BCS actions. The easiest way to add a BS script, for example, is simply this: COPY ~mymod/myscript.baf~ ~scripts/myscript.bs~ COMPILE_BAF_TO_BCS If you want to edit BS files, you can also just COPY ~scripts/agen.bs~ ~scripts/agen.bs~ DECOMPILE_BCS_TO_BAF // REPLACE_TEXTUALLY or whatever COMPILE_BAF_TO_BCS BUT_ONLY You can't COPY_EXISTING_REGEXP through the folder. However, since all the scripts are there as files, you can wrap the above in an ACTION_BASH_FOR: ACTION_BASH_FOR ~scripts~ ~^.+\.bs$~ BEGIN COPY ~%BASH_FOR_FILESPEC%~ ~%BASH_FOR_FILESPEC%~ DECOMPILE_BCS_TO_BAF // REPLACE_TEXTUALLY or whatever COMPILE_BAF_TO_BCS BUT_ONLY END (I'm using ACTION_BASH_FOR from memory, so the syntax of the directory/regexp may not be 100%.) edit: Now that I'm thinking about it, I think you can still use DECOMPILE_AND_PATCH BEGIN ... END in the second and third cases (and should, since it's preferred syntax). WeiDU will respect the destination file name in a COPY regardless of which patch actions are being brought to bear--it's only the one-offs like COMPILE that assume the extension and destination folder.
  8. I believe this is by design as I've not seen anything in-game that suggest they should have bonus damage. The only official source that touches on this is the manual, which states that the strength damage bonus is explicitly for melee weapons:
  9. Yeah, I don't think you can find it 'organically'. I bookmarked it from the last time someone was looking for CoM mods. Here are the BG and BG2 mod download pages, for anyone else looking. I don't think there are any IWD2 or PsT mods--or, at least, I can't guess the links for them.
  10. While the main site has been down for a while, CoM's download links are still available.AB is on their IWD download page.
  11. The Gibberlings Three The Icewind Dale Fixpack is designed to fix several bugs and errors that remain in the game after the official patches have been applied. Version 8 fixes a nasty bug in non-How games as well as a few other minor fixes. The Fixpack works with or without the expansions Heart of Winter and Trials of the Luremaster installed. In fact, many issues quietly fixed by Heart of Winter or Trials of the Luremaster have been rolled back to every version of the game. Version 10 addresses a crash introduced by the Fixpack, and also incorporates many new fixes uncovered by the EE Fixpack. Learn more about the mod View the Readme Full documentation Discord Download the mod
  12. The Icewind Dale Fixpack is designed to fix several bugs and errors that remain in the game after the official patches have been applied. Version 8 fixes a nasty bug in non-How games as well as a few other minor fixes. The Fixpack works with or without the expansions Heart of Winter and Trials of the Luremaster installed. In fact, many issues quietly fixed by Heart of Winter or Trials of the Luremaster have been rolled back to every version of the game. Version 10 addresses a crash introduced by the Fixpack, and also incorporates many new fixes uncovered by the EE Fixpack. Learn more about the mod View the Readme Full documentation Download the mod v10 changelog Fixed a CTD error in Tiernon's Sundered Shield introduced by the Fixpack (thanks eyre!) EE Fixpack identified several bugs in IWDEE that trace their way back to the original, which are now addressed: Symbol of Pain's area-of-effect is a 30' radius, but the description listed a 60' radius Spell protections could partially shield the caster from the negative side effects of Great Shout If the party was split on either side of the closing door, the player could end up softlocked during the Yxunomei battle The overlapping containers in the Hall of Heroes are now fixed by removing one of them The range of Stone to Flesh scrolls was inconsistent The Sword of Days was not fully protecting its wielder from Haste and Slow effects The Elixir of Health now 'cures' intoxication rather than setting intoxication to zero Several innate spells were set as 'generalist' school meaning that non-specialized mages received unwarranted save bonuses against them. In a handful of cases where there was a corresponding arcane/divine spell they were assigned the same school, otherwise they were made schoolless. The durations of effects on Retribution did not match Spell protections should not protect from the effects of Wall of Moonlight or Grease Depending on the level of the caster, Beltyn's Burning Blood could bypass or be blocked by the target's magic resistance. Previous versions fixed this by standardizing the spell to bypass MR, but after re-examination, it now is blocked by magic resistance. The portrait icons for feeblemind and petrification in Prismatic Spray did not match the durations of the underlying effects Free action should not block the movement penalty from Suffocate
  13. Oh right, the thing I led off with--"these can now do X"--and then I didn't provide any examples. The _ex parameters don't have any restrictions, so you can literally just use LPF ALTER_EFFECT INT_VAR silent=1 match_opcode=0x107 // backstab (263) match_parameter2=0 parameter1=1 STR_VAR match_parameter1_ex = (o_parameter1 < 0) END edit: and writing negative values is just as easy, e.g. parameter1_ex = ~"-1"~
  14. ALTER_, CLONE_, and DELETE_EFFECT are pretty useful functions, but they (rather infamously) don't allow you to write in negative numbers into the effects you're modifying. I've always wanted to revisit these functions and address this, but it was always on my 'one of these days' to-do list and more or less ignored. Until today, when I was inspired to address this, and quite a bit more. Introducing the _EX versions of these effects: ALTER_EFFECT_EX, CLONE_EFFECT_EX, and DELETE_EFFECT_EX. These function exactly the same way as the originals, but have additional variables that make these exceptionally flexible. A short digression A quick aside on how the original functions work, as it is very relevant to how the new ones work. For the current function family, it reads in all of the parameters of an effect, and then runs comparisons against the match_ variables and, if all of the match comparisons are valid, it then deletes it (DELETE_EFFECT) or writes in the new values (ALTER or CLONE). This is an example of how, say, the opcode is checked for a match: PATCH_IF (((match_opcode = o_opcode) OR (match_opcode < 0)) AND ((match_target = o_target) OR (match_target < 0)) AND // ... other parameter checks ) BEGIN The original effect values are read into o_foo variables, so o_opcode is the opcode of the current effect being examined. Since the default value for the match_ variables are -1 (-10 for save bonuses), the latter parameter basically tells it to bypass this check if no match_opcode is specified. (Incidentally, the -1 default value is also why the functions don't handle negatives well.) Similarly, the code to change the effect (via ALTER or CLONE) has similar checks: PATCH_IF (opcode >= 0) BEGIN WRITE_SHORT (base + (0x08 * fx_type)) opcode END Same idea; opcode's default value is -1, so it'll only write in a new opcode value if a non-default, positive value is specified in the function call. So what's new? The EX family introduces two new series of string variables for both the match and value variables with _ex suffixes. The match_foo_ex series inserts WeiDU code into the comparisons to allow for more flexibility. Let's say you're looking to delete effects that block a spell, which can be done with opcodes 206, 318, or 324. In the past you'd have to invoke DELETE_EFFECT for each of the three opcodes, but now we can simply use DELETE_EFFECT_EX STR_VAR match_opcode_ex = ~((o_opcode = 206) OR (o_opcode = 318) OR (o_opcode = 324))~ match_resource = myspell END The presence of an _ex variable will cause the function to ignore the normal version, e.g. in the example above match_opcode would be ignored because match_opcode_ex exists. match_resource is respected because there's no match_resource_ex specified. You could even extend this further by using resource field to remove all spell protections against divine magic by using a regexp with the resource field: DELETE_EFFECT_EX STR_VAR match_opcode_ex = ~((o_opcode = 206) OR (o_opcode = 318) OR (o_opcode = 324))~ match_resource_ex = ~("%o_resource%" STRING_COMPARE_REGEXP "^[Ss][Pp][Pp][Rr][0-9]+" = 0)~ END This would delete any 206/318/324 that targeted spells starting with SPPR-numeral. The value variables also accept code. So if you wanted to, say, improve shields by increasing their base AC bonus by +1 across the board, this would work just dandy: COPY_EXISTING_REGEXP GLOB ~^.+\.itm$~ ~override~ READ_SHORT 0x1c type PATCH_IF type = 12 BEGIN // shield LPF ALTER_EFFECT_EX INT_VAR match_opcode = 0 match_parameter2 = 0 STR_VAR parameter1_ex = ~(THIS + 1)~ END // increase AC bonus by 1 END BUT_ONLY You can also use some limited tests in the value fields, too, Let's say you're trying to boost transmuters at the expense of abjurers, so you want alterations to receive a universal -1 save penalty and abjurations a universal +1 save bonus: COPY_EXISTING_REGEXP GLOB ~^.+\.spl$~ ~override~ READ_SHORT 0x22 type PATCH_IF ((type = 10) OR (type = 12)) BEGIN // alteration, abjuration LPF ALTER_EFFECT_EX STR_VAR match_savingthrow_ex = ~(o_savingthrow != 0)~ savebonus_ex = ~((type = 12) ? (THIS + 1) : (THIS - 1))~ END END BUT_ONLY Let's throw in an ALTER_HEADER variant as well I wrote an ALTER_HEADER function as well, but unlike my other functions, it never made it into WeiDU proper. I've added an ALTER_HEADER_EX variant as well, e.g. let's say you wanted to give spears a bit of a boost by giving them a +1 damage bonus: COPY_EXISTING_REGEXP GLOB ~^.+\.itm$~ ~override~ READ_SHORT 0x1c type PATCH_IF type = 29 BEGIN // spear LPF ALTER_HEADER_EX STR_VAR match_type_ex = ~((o_type = 1) OR (o_type = 2) OR (o_type = 4))~ damage_ex = ~(THIS + 1)~ END // melee or anged or launcher END BUT_ONLY Because there are (albeit unused) throwing spears in the game, it checks for melee, ranged, and even launcher headers and then bumps the damage by one. One difference for ALTER_HEADER is that, instead of 10 different bit field value_ex variables, there's just one (flags_ex) for the entire four bytes, since you can do whatever bit operations desired. Some final words These were written more or less in day, so I'm sure something is wrong somewhere--so I'm putting these out there and asking for some field testing. I'd also be happy to provide examples of how to utilize them in actual real-use scenarios if anyone would like to give them a shot. The library with the functions is attached! x_force.tph
  15. From a Github pull request, citing an earlier GH discussion: Stinking Cloud provides a +2 save bonus to its effects. In oBG2 this was undocumented, but the EEs changed the description assuming it was intentional. We have made some similar changes--the IWDEE changes to Thrym Extract and the War Hammer +4: Defender and their associated strings--so I'll put it out here for discussion.
  16. Oh, derp, I ignored the Winged as an antisolar. Will add for v10.
  17. It's simple, but it just requires a script block for every identifiable item in the game. Which is easy to code but may slow the game down to a crawl, so I'm currently pondering alternatives. edit: Simple, but after testing, not reliable enough due to how the actions and triggers interact with multiple copies of items in inventory.
  18. Yes, it currently doesn't work that way, hence the proposal for a new component of Tweaks to change the behavior.
  19. They don't--solars and fallen solars retain their original animations, only planetars and devas change. To that end, I'm also not going to break it into subcomponents, as (e.g.) only updating planetars means that solars and devas would use the same animations.
  20. Once you ID an item all future copies get ID'd automatically, e.g. if you ID an Arrow +1, all other Arrows +1 don't need ID.
  21. [bg2] The crossway (ar6104) in Sendai's Enclave lacks the area scripting to make drow items safe, unlike the rest of the interior Enclave areas.
  22. Well, that was dumb. The spell cloning code was corrupting creature files, so a rushed v9 is now out.
×
×
  • Create New...