Jump to content

DavidW

Gibberlings
  • Posts

    8,009
  • Joined

  • Last visited

Everything posted by DavidW

  1. I'm extremely relaxed about doing this as a separate component if that's the community consensus. (And to repeat/confirm: there is no developer-intent case for actively removing items.) That said, I stick by my interpretation of developer intent: 1) There is clear evidence through both the original and EE games that duplication is accidental and unintended 2) There is active evidence in oBG2 of generic versions of items being created to avoid duplication, and of (some) duplications happening just because the developers accidentally used a copy of the (identically-named) non-generic version, usually a leftover BG1 item. 3) There is extremely clear evidence in the EEs (most prominently in SoD) that the developers wanted to use generic versions of items to avoid duplication of unique items. (Whether or not it was a good idea for them to do so isn't relevant to a fixpack based on developer intent.) The issue for me isn't "does this fit the FP definition of a bug" (I think it clearly does) but "should we make an exception and not fix something that's a bug according to the FP definition, because a significant number of players will be annoyed" (very possibly we should).
  2. I actually don't think cross-game consistency is a good goal, at least not between IWD and the BG series. There are really quite significant differences in the spell systems, based on different design philosophies.
  3. This is why it's good that this is an open project; certainly, if the consensus is that we shouldn't de-unique-ify items, I'm happy to go along with that. That said: I think the evidence is very strong that this is a bug - i.e., something the developers did accidentally and did not intend - and not just poor game design. Duplicated unique items, I think invariably, have generic-sounding names (e.g. bracers of AC 6), even if this is obscured by the late-cycle name changes in the EEs, so that you have to look at the description to tell that they're unique. There is no evidence that the designers ever intentionally duplicated a unique item. In the great majority of cases, you can roughly see how the duplication occurred: there is some high-profile occurrence of the item as a unique item, and then the duplicates happen in expansions, new games, EE tweaks, or occasionally in filler content like generic or late-game stores. In BG2 in particular, generic versions of BG1-unique items are introduced and mostly used. For instance, dagg03 is BG1's 'Heart of the Golem', a unique dagger that shows up in a quest. BG2 imports that item (it imports virtually all BG1 items) but then also adds dagg15, a generic dagger +2. dagg15 occurs in 38 places in BG2; dagg03 occurs in about 3. It's much more plausible that this is just a mistake (the two daggers have the same name until the EEs) than that they intentionally duplicated a unique item. Several of the unique items in BG2EE are unique only because BD's bulk restoration of old names caught them. Again, I think it's pretty clear they did that by accident. Siege of Dragonspear goes to some effort to make non-unique copies of the unique items for its new content. That's pretty strong evidence that developer intent is not to repeat unique items, albeit (for understandable scope-management reasons) they didn't back-port those changes to original BGEE. I do agree that there are a few places where the choice of which item to be unique gets a bit subjective, but in most of them the developer intent is fairly clear. (I also don't think mod compatibility is a big issue. A well-coded mod should not be assuming that a given item is in a particular location, because another mod might have moved it. If your mod absolutely requires Arkanis Gath to have the Heart of the Golem, you should check explicitly and give it to him if necessary.)
  4. To repeat my point from a Discord discussion: we wouldn’t make a change to an itm file in NI and then ship the file, even if there’s only that one change being made. (there are points of analogy and disanalogy- I’m not meaning it to be decisive.)
  5. Which ones are you thinking of here? I don't think that can be called a bug - maybe it's a clash between BG lore and FR lore, but there's (afaict) no in-game evidence that C-B should have that bow.
  6. I’m not too concerned with UI overhaul compatibility, just because it’s a bug fix - hopefully overhauls will fix bugs themselves, and if not the worst consequence is that a given bug fix gets overriden by the overhaul. In some ways #4 edit: I meant #3 - seems more of a problem for overhauls - even if the overhaul changes a function, the m_cd_fix.lua will overwrite that change.
  7. I've just fixed a UI bug (this one) and I thought it might be a good time to consider generally how we might fix UI bugs in the FP. I can think of four options: (1) Distribute a new version of ui.menu Advantages: extremely simple, takes advantage of being first in install stack. Disadvantages: ui.menu is 25,000 lines long. Distributing a modified version is a maintenance nightmare; the code isn't even faintly self-documenting (you'd have to look using grep or something to find the changes). (2) Do a carefully-chosen REPLACE_TEXTUALLY on ui.menu Advantages: simple, reasonably self-documenting. Disadvantages: you're doing a global search-and-replace on 25,000 lines of live code. I think that's intolerably dangerous. (3) Replace ui.menu functions via a new .lua file (probably m_cd_fix.lua). Advantages: safe, fairly clear, fairly self-documenting. Disadvantages: it's awkward to override functions that are still in code via later code; it's not a good mesh with a possible BD adoption. Most importantly, it only works for function updates; it won't work for all fixes. (4) Use a function library that lets you do targeted edits on ui.menu - e.g. SCS's lib_ui, which is self-contained(!) and has documentation(!!) Advantages: clear, powerful, save, self-documenting. Disadvantages: steeper learning curve/more abstract, theoretical risk of bugs in the functions (though I think these are fairly safe). It's probably obvious that I prefer (4), and indeed I've fixed the above bug that way, and uploaded lib_ui and its documentation to the beta. But there are certainly counter-cases to be made.
  8. In addressing the unique items bug, I needed code that would take a string from one IE game and make it available in another. It was convenient to address this generally, and it might be useful elsewhere. The relevant function is get_strings_from_game, in eefixpack/files/tph/dw/get_strings_from_game.tph. You call it like this: LAF get_strings_from_game STR_VAR strings=[whatever] END Set 'strings' to the name of an array that stores the strings you want in the format [strref]=>[discard]. It collects the strings at those strrefs from every language installed on the game, and saves them in eefixpack/languages/[language]/copy_from_[game], where game is either 'sod' or the value of the 'game' variable. This is all done idempotently and doesn't get rolled back if you uninstall a component. (Obviously you shouldn't use this in live code; it's to be used in advance to get all the strings without tedious copy-paste.)
  9. Terrific. I agree, but is it really a bugfix? That's elegantly simple (I take it you agree with reusing generic alternative descriptions when we have them?) That's persuasive. I feel differently, but that's not really the point; from a fixpack POV, I think what matters is there's reasonably strong evidence the duplications are unintentional.
  10. DavidW

    Albruin

    That sounds like a good change but I struggle to justify it as a bugfix.
  11. There is a function called at the beginning of the code that copied over a bunch of SoD generic items, including bdamul24.
  12. Thanks; yes. (Typing on a phone.)
  13. I have code that implements the edge cases and the easy cases; uploading shortly.
  14. Cases I can't solve (BG2) Necklace of Missiles (amul01). Multiple copies and no generic version. Helm of Defense (helm04). a unique item in oBG1, but it appears twice (in fairly generic places) in BG2 and again in a store added in EE. No generic copy. Ring of Regeneration. Unique in oBG2, cloned by BD. No generic. Ring of Invisibility, 'Sandthief's Ring (ring05). Cattie-Brie has it, so does the Crooked Crane lich, so does a patsy in ToB. And BD puts it into a store. My inclination is to remove all but the Grave Lich's copy. Boots of Grounding, 'Talos' Gift' (boot05): sold by the wandering priest of Tempus in the fighter stronghold quest and by the temple of Lathander. No generic.
  15. Cases I can't solve (BG1) Sword +1, +3 vs undead, 'Harrower'. Added by BGEE. Two copies: one is wielded by Elkart (in Skie's story) and one is randomly stuffed into the belt of Zeela the amazon cleric, who can't use it. No generic alternative. Necklace of Missiles (amul01). Multiple copies and no generic version. Ring of Folly (ring23). Likewise.
  16. Edge cases (BG2) War hammer +2, 'Ashideena'. (HAMM03) Can be imported from BG1 but is also found in AR0204 in a loot box. Proposal: Replace the latter with a regular warhammer +2.Looks as if EE has already handled this. Issue: a regular warhammer +2 lacks Ashideena's +1 electrical damage. Bala's Axe, 'wizard slayer'. Imported but also available as a drop in ar0413. Oddly, this is an EE addition. Proposal: I think just reverting it is the way to go.Again, looks like EE has handled this already. Issue: that removes an item from ar0413 loot that the BD developers clearly wanted to add.
  17. Edge cases (BG1) Sling of unerring accuracy (weird BD item that gives +2 to hit but +0 damage). Black Lily sells one, but it's also randomly upstairs in the Splurging Sturgeon. Proposal: BL's is the primary one. Replace the other with ordinary sling +1. Issue: the ordinary sling+1 is a mechanically different item.
  18. BG2 items readily handled Ring of Fire Resistance, 'Batalista's Passport' (ring02): dropped in SoA, but sold by Lazarus Librarus in ToB. Proposal: Take the SoA drop as canon. Battleaxe +2 (ax1h03): has a generic description in oBG2, and also a generic clone, ax1h11. Its oBG1 unique description is restored in BG2EE without recognizing that it's multiply-used. It appears once in SoA and is carried by various mooks in ToB. Proposal: the ToB mooks clearly should get the generic one. Bracers of Defense AC 6, 'Bracers to the Death' (brac03): there are more than a dozen of these in BG2, always given as fairly generic bling. Proposal: I think here it makes sense just to make the original one generic (its unique description is just inherited from BG1). It's easy to adapt it from the AC6 description. (Using the SoD generic version is not ideal as it has a different style of description from the AC7 and AC8 bracers in BG2.) Girdle of Bluntness, 'Destroyer of the Hills' (belt03): appears in Irenicus's dungeon, but also cloned in two oBG2 stores (and an EE store). Proposal: Fairly clearly the dungeon one is iconic. Girdle of Piercing, 'Elves' Bane' (belt04): this is unique in oBG2, but EE clones it. Proposal: Make the cloned item generic. Dagger +2, 'Heart of the Golem'. This has a generic copy (dagg15) in oBG2, but it gets duplicated a few times anyway: Arkanis Gath has a copy, so does a random mercenary, so does Vaelasa the dryad. And EE adds a copy to a store. Proposal: Vaelasa is probably the most critical-path person, sho she can get the unique version. Heartseeker+3 (bow10). You can get one as loot in Firkraag's lair, but Ribald also sells one. Proposal: Make the lair one canonical and swap an ordinary bow+3 into Ribald's store. Full Plate +1, 'Plate of the Dark' (plat05). This is a unique BG1 item that gets a generic description in oBG2 and has its unique name and description restored in the EE. It's not used at all in oSoA, but gets given to a couple of lizard men and a drow in ToB, and is handed to a couple of EE creatures. Proposal: I don't know what BD had in mind here, but on aesthetic grounds it should probably stay with the drow (it's darker-colored). Scimitar +2, 'Rashad's Talon' (sw1h23). It appears only once in oBG2, but BD clones it when they clone a genie. Proposal: Clearly shift the EE genie one to a generic weapon. Halberd +2, 'Suryis's Blade' (halb03). Unique item importable from BG1; also sold by Ribald, and cloned to a creature by BD. Proposal: Make the BG2 versions generic. Looks like EE already handles this through scripting. Helm of Infravision, 'The Eyes of Truth' (helm05). Unique in oBG2, but Beamdog clones it twice. Proposal: Given that helms of infravision are largely useless, I think the easiest solution is to make their helms undroppable Dagger +2, longtooth: 'grave binder' (dagg04). Unique in oBG2 (only available via import) but cloned to an EE store. Proposal: Check for import and manually remove from store if imported. Looks like EE already does this. Ring of Protection +2, 'the guard's ring' (RING07). Given to Aran Linvail; also given as loot in various places; also held by the Hell Dragon. Proposal: This one I think is best just made generic. Boots of Speed, 'The Paws of the Cheetah' (boot01). Classic BG1 loot item. In SoA, carried by Renal and by pbhunt05', one of the bard-quest hunters. Several locations in ToB. Proposal: I think the reasonable interpretation is that this is supposed to be generic throughout. Amulet of Protection +1, 'The Protector' (amul14). This is very widely used and clearly is supposed to be non-unique. Proposal: make it non-unique. Long Sword +2, 'Varscona' (sw1h06): imported from BG1, but also sold by Ribald. Proposal: Here I think we should explicitly check for import and remove it if imported. Looks like this has already been done. Scimitar +3, 'Water's Edge' (sw1h52). Unique in oSOA but present all over ToB and EE. Presumably the generic title made people think it wasn't unique. SW1H76 is a truly-generic substitute. Proposal: give all ToB/EE creatures the generic version. Gauntlets of Weapon Expertise (brac09) Unique in oBG2 but added to a store in EE. Proposal: The store gets the generic.
  19. BG1 unique items readily handled. Amulet of Protection +1 'The Protector' (amul14). Carried by Nadine (questgiver), who actively gives it to you to hand to her son, and Ragefast (questgiver), who just has it as protective bling. Found loose in ar0169 (a generic home). Sold in Feldepost's Inn, the Elfsong Tavern, and Zordral's tent. Proposal: Nadine is easily the most significant/evocative. Boots of speed, 'the paws of the cheetah' (boot01). Drasus has them; so (due to a typo correction) does Lothander. Proposal: Drasus is the iconic possessor; in oBG1 Lothander doesn't even have them. Girdle of bluntness, 'Destroyer of the Hills' (belt03). Krumm the thug has it, but so do two stores: STO1117 (generic potion store) and STO4907 (Zordral's store) Proposal: Krumm is the iconic case Helm of Glory, 'Helm of the Noble' (helm03). Carried by Jardak, but can also be stolen from the noncombatant version of Pride in Durlag's tower. Proposal: obvs Pride's version should be unstealable. Ring of Fire Resistance, 'Batalista's Passport' (ring02). Dropped in the Candlekeep catacombs, but also in the Gibberling Mountains Proposal: the critical-path (Candlekeep) location is preferable. Highly plausible case made in the comments that the mountains location is preferable. Ring of Free Action, 'Edventar's Gift' (ring09). Alai has it; so does Dushai, a gnomish questgiver Proposal: Obviously Alai is more significant. Plate mail +1, 'Fallorian's Plate' (plat02). Genthore has it; so does Simmeon, a blackguard connected to Dorn. Proposal: Genthore is the original possessor; Simmeon got it by accident. Scimitar +2, 'Rashad's Talon'. Found in Durlag's tower, but duplicated by Beamdog to a newly-added loot pile in the Cloakwood. Proposal: obviously the Durlag's tower one is canonical.
  20. There are fewer reused unique items in BGEE and BG2EE than meet the eye (many are undroppable, or copies where you can only see one on a given playthrough), but there are still some. In almost all cases, the reason is obvious: the item has a generic name (Bracers of Defense AC 6, Ring of Protection +2, Scimitar +2, etc) even though the description makes it unique, and it's easy to see how developers in a hurry gave an apparently-generic item to a monster and forgot that it wasn't generic after all. (It's notable that duplicates normally occur off the critical path, or in stores, or in expansions.) The dialog.tlk changes made by BGEE and BG2EE make this less obvious (for instance, the unique Bracers of Defense AC 6 are now called 'Bracers to the Death') but those changes happened quite late in the development cycle. (I also think they're ill-judged, but that's another matter.) I think it is pretty clear that developer intent was not to have duplicates and so, if possible, we should fix this. I propose that in general the simplest plan is to replace most occurrences of a unique item with a generic version. Normally that would require new description text, which is generally a no-no in a fixpack, but fortunately most of the items already have a generic version either in oBG2 or in Siege of Dragonspear, so it's easy enough to produce it. There is a question as to how to allocate the actual unique item, but usually it's fairly clear. In the next few posts I'll list the various duplicates in BG1 and BG2, along with some edge cases and some problems I'm not sure how to resolve.
  21. FWIW I don't see any evidence of a bug in batch mode. The rest looks accurate but there may well be other issues.
  22. Belatedly, but I don't see any evidence of a bug here.
×
×
  • Create New...