Jump to content

jmerry

Modders
  • Posts

    1,296
  • Joined

  • Last visited

Everything posted by jmerry

  1. As someone who has already written a bunch of bug-fixing components for the EE (including for EE content and for bugs introduced in 2.6), I'm fine with my code being included here and forwarded to Beamdog. No concerns from me.
  2. Yes. I came to these games with the EE - actually, well after the EE came out. That's the version of the game I was referring to, since I've never played the originals.
  3. At least in the vanilla game, the antidote you're supposed to give to Dreppin is just a standard antidote, POTN20. Buying an antidote from the Priest of Oghma in the main area is an alternate solution to the quest. If that's ever a unique item, it's a mod that makes it so.
  4. The field you're reading/writing to, where the string references are kept, is a LONG - a 32-bit integer. Read it to see what's there, write an integer to it to change things. For example, in my code, I read the string reference of that existing note and save it to my ThiefGuildNote variable. Or, if I didn't find that existing note, I use a RESOLVE_STR_REF call to set that variable (That action finds an existing string, or writes a new one if it can't). Then, in my script edits, I remove/create map notes using that variable as the string reference.
  5. Ah, the original BG experience. Something I'll never know, because I came to these games with the EEs. And I have no desire to go back; I agree with the mindset behind the changes, and consider them improvements in general. As for testing on an unmodded install ... I'm currently playing a full run with only my personal tweaks, to be reported on the Beamdog forums. I don't really mind it. And if I spot something that bugs me, that's just tweak fodder. Sure, I'll go back to playing with SCS after this run is done - some of the things that bug me are enemy AI, after all - but I find the base game quite playable. Even if I can do utterly ridiculous things like killing Sarevok with a wand-wielding ferret on day 13. It's all opinions, of course. We all see things differently. You clearly don't want to do the same things that I did with your map note tweaks; I just provided my code sample to illustrate an alternate way of getting things done. Oh, and another little coding note. If you want a reference to an empty string, that's already in the game as string number 0. -1 (outside the range of valid string references) is also widely used for nameless stuff.
  6. Yeah, if you didn't curate the list ... hey want to use "Green Dragon Breath"? Enjoy your spell with a big flashy projectile that does absolutely nothing. Or there are spells like "Dexterity Increase" that would be absurdly overpowered if you could repeat them - Lum's Machine uses spells to do its thing.
  7. FWIW, the note for Firebead's house was one I left alone. Presumably, he told you about it back in Candlekeep when he heard you were heading out. I tried to remove the spoiler-y elements in my tweak, but not the clutter. Every note I removed comes back once your character unlocks the quest involved, and I added a bunch of notes as well.
  8. If you want to remove a map note outright, you can do it as a script action in a DLG or BCS. (RemoveMapNote(Position,StringRef)). Note that this action always refers to the current area, so it's best placed in the area script. That's what I did for my mod (Component: Map notes for BGEE quests) and existing notes like the thieves' guild entrances I wanted to delay. You have to know where the note is and what the associated string number is, but you can detect that in WeiDU and then patch it into the area script. A sample of my code: BEGIN @31000 DESIGNATED 310 GROUP @5 REQUIRE_PREDICATE GAME_IS ~bgee eet~ ~This component is only for games with BGEE content~ ACTION_IF GAME_IS ~bgee~ THEN BEGIN OUTER_SPRINT baldurCE AR0800 END ELSE BEGIN OUTER_SPRINT baldurCE BG0800 END // Area codes for EET compatibility OUTER_SET ThiefGuildNote = 0 COPY_EXISTING ~%baldurCE%.ARE~ ~override~ READ_LONG 0xC4 ofsNotes READ_LONG 0xC8 numNotes FOR (n=0; n<numNotes; ++n) BEGIN SET ofsX = ofsNotes + (n*52) SET ofsY = ofsNotes + (n*52) + 2 SET ofsText = ofsNotes + (n*0x34) + 4 READ_SHORT ofsX xpos READ_SHORT ofsY ypos PATCH_IF ((xpos=1150) AND (ypos=1254)) BEGIN READ_LONG ofsText noteRef SET ThiefGuildNote = %noteRef% END END // Get existing string reference for "Thieves' Guild Entrance" note BUT_ONLY ACTION_IF (ThiefGuildNote = 0) BEGIN OUTER_SET ThiefGuildNote = RESOLVE_STR_REF (~Thieves' Guild Entrance~) END EXTEND_BOTTOM ~%baldurCE%.BCS~ ~jtweaks/resource/map-notes/BaldurCEPatch.baf~ EVALUATE_BUFFER COMPILE ~jtweaks/resource/map-notes/MapNotePatch.d~ // Add dialogue actions (Partially de-traified, lines relating to other notes deleted.) And here's the BAF part: IF Global("J8#ThiefGuildNotes","GLOBAL",0) THEN RESPONSE #100 SetGlobal("J8#ThiefGuildNotes","GLOBAL",1) RemoveMapNote([1150.1254],%ThiefGuildNote%) RemoveMapNote([1693.1267],%ThiefGuildNote%) RemoveMapNote([2165.1285],%ThiefGuildNote%) END IF Global("J8#ThiefGuildNotes","GLOBAL",1) OR(3) Global("DukeThanks","GLOBAL",1) Global("J8#TalkedToNiklos","GLOBAL",1) GlobalGT("HelpAlatos","GLOBAL",0) THEN RESPONSE #100 SetGlobal("J8#ThiefGuildNotes","GLOBAL",2) AddMapNote([1150.1254],%ThiefGuildNote%) AddMapNote([1693.1267],%ThiefGuildNote%) AddMapNote([2165.1285],%ThiefGuildNote%) AddMapNote([1440.1300],%ThiefGuildNote%) END And the D bit: ADD_TRANS_ACTION NIKLOS BEGIN 8 END BEGIN END ~SetGlobal("J8#TalkedToNiklos","GLOBAL",1)~ It is weird that there's an ADD_MAP_NOTE action in WeiDU, but no DELETE or ALTER. I definitely would have deleted those notes in the area file if I could do so easily.
  9. @Endarire I think it's possible, but it's a mess. See below. There's no way to say "this would have dropped the creature to 0 HP" without going through with the kill. Unless you move the goalposts. Taking inspiration from certain "immortal" enemies, you would give player 1 min HP 1, +N max HP, and have script things happen when they drop to N or lower. Not ideal, since certain spell effects depend on current HP - you're effectively moving that threshold. On the instant kill side, this is the best I can figure. Add a marker effect to every such instant kill; a different marker for every kill type. The marker has the same resistance parameters as the kill, and anything that grants immunity to that kill type also grants immunity to the corresponding marker. Except for your one effect for the protagonist, which grants immunity to the kill type but not the marker. Then your script detects the marker and does stuff. You can be immune to specific opcodes, specific projectiles, specific display strings, specific visual effects, specific portrait icons, or specific spells. You can't just add dummy opcodes that only act as markers to the game. You can't detect the cosmetic stuff in scripts. That leaves spells as the best option; the marker effect is a "Cast Spell" effect, with the spell itself being impossible to block or resist and applying a local variable or something, and immunity to the original instant death effect granting immunity to that particular spell. The drawback of these approaches is that they're not instant. It can take a bit for the scripts to detect your marker, so the character might fight on when they should be dead. Worse, regeneration can really mess up the low-HP part; by the time the script gets around to checking again, you might be out of the "dead' zone.
  10. Imoen's a dual class, not a multiclass. Seven levels of a thief's d6 HP plus one of a mage's d4, 7*6+4=46. No phantom hit points here, just good luck and the "right" ordering of the dual class. CON bonuses are then added dynamically during play; they're not explicit stats in the creature file. As a dual class, Imoen gets CON bonuses for each level that she gained a hit die; 7 levels of a 16 CON thief's +2 HP per level, then 1 level of a 16 CON mage's +2 HP per level. There's some corner case weirdness about whether level 10 gets a CON bonus (a fighter 8 - thief 10 dual gets a CON bonus on that 10th hit die, a fighter 9 - thief 10 dual doesn't), but generally dual classes get CON bonuses for each level as whatever class they were when first gaining that level. For a multiclass, CON bonuses use the average level and round down. Jaheira, as a fighter 6/druid 7 with 17 Con, gets 3*(6+7)/2 = 19 bonus HP. She'll then keep increasing her bonus until her average level hits 9 at 250K total XP (fighter 8/druid 10).
  11. Which proficiencies a class can take is controlled by WEAPPROF.2DA (in the current version of the game). Each class or kit gets a column there. Except that plain sorcerers don't, and use the information for generalist mages instead. Looking at the copy of the mod there ... changes for generalist mages, specialist mages, and wild mages, but no mention of dragon disciples. Looks like an oversight to be fixed. Here's the relevant snippet from the mod as of v10: COPY_EXISTING ~weapprof.2da~ ~override~ // allows mage proficiency in clubs FOR (column = 22; column < 30; column = column + 1) BEGIN SET_2DA_ENTRY_LATER ~weapprof~ 20 column ~1~ // Specialist Mage END SET_2DA_ENTRY_LATER ~weapprof~ 20 4 ~1~ // Mage SET_2DA_ENTRY_LATER ~weapprof~ 20 53 ~1~ // Wild Mage SET_2DA_ENTRIES_NOW ~weapprof~ 1 BUT_ONLY There needs to be a line added for Dragon Disciples. Maybe within an "if" block for compatibility reasons, but this is the line to make the actual change: SET_2DA_ENTRY_LATER ~weapprof~ 20 57 ~1~ // Dragon Disciple Until this is added, it's easy enough to hotfix on your own. 2DA is a human-readable plain-text format; just open the copy in the override with a text editor, find the DRAGON_DISCIPLE column, and change the entry in the CLUB row from 0 to 1. Well, that sort of thing would work well for most 2DA files. This particular one is absurdly wide, which might cause issues finding the right spot.
  12. One thing to note about hit point rolls - random hit dice in these games are rolled with advantage. An average d10 hit die is 7.15 hit points, so a level 9 PC fighter averages about 67 hit points before the Con bonus. Most NPC hit point totals in BG2 also look like they follow this rule, though EE NPCs Neera and Rasaad were rolled with maximum hit points on. You mentioned Imoen at the start of BG2 ... 57 HP as a thief 7-mage 8 with 16 Con, which means 41 HP before Con. Perfect rolls would have given her 46 HP before Con, average rolls would have given her about 36. Lucky, but nothing too extreme. On the flip side, there's Jaheira at the same point - 32 HP before Con as a fighter 6/druid 7. Ideal would be 58, average would be 42. She had some pretty bad luck with her rolls. So, if you use random hit point rolls and a difficulty of Core or higher, rerolling those NPC levels won't make much difference. At lower difficulties or with the Max HP setting, you'll get some extra hit points out of it.
  13. Updated to version 2.2. Version 2.1 was rushed out without testing, and had a syntax error. Fixed now.
  14. I've run into a number of those broken cutscenes myself. It's always an intermittent thing; quit, reload from the nearest save (often right before), do it again and it works fine. A glitch rather than anything repeatable, and correspondingly hard to pin down and fix.
  15. Updated to version 2.1, with one new component (Nature's Beauty blindness can be cured) fixing a nasty bug with that spell - it inflicts permanent and unremoveable penalties to natural AC and base THAC0. This tweak allows you to dispel the effect, cure it with anything that cures blindness, or even kill and resurrect the character - none of which worked before.
  16. I'll update my tweak to do that. And the same to Blindness portrait icons with that duration, for a sort of consistency. This will be a component in the next version of my tweak mod. And done. I just uploaded that version (2.1) with this new component. See here. Edited again ... that hotfix I posted was based on the vanilla version of the spell, which lacks the SCS bits related to unhiding certain animations if the caster was invisible. The WeiDU-ized tweak linked here is definitely better.
  17. Yeah. As far as I can tell, timing mode 1 blindness decomposes to its component parts, which are then applied as permanent changes to the stats in the creature file (vision range reduction, to-hit penalty which goes into base THAC0, AC penalty which goes into base (natural) AC). Effects that cure blindness can restore vision range, but the others can't be reversed so easily. 300K game seconds is actually more like 40 game days; remember that it's 300 game seconds to a game hour. Though I think I'll up that to 30 million (>10 years) when I code it for my tweak mod.
  18. The effect in the spell isn't an opcode 54 or 278. It's just opcode 74 (blindness). Which clearly shouldn't ever be used with timing mode 1, because of this behavior. I went with a mere 300000 as the duration in my quick fix, same as Polymorph Other. If it's long enough for one "permanent until dispelled" effect, it's long enough for another.
  19. OK, I did some of that testing. In vanilla; the only modification I made was to give NB a non-party-friendly projectile. It's definitely the spell, and definitely the "instant/permanent until death" duration (timing mode 1) on the Blindness effect that's the problem. Here's what happened: - Cast Death Ward on all party members. Then cast Nature's Beauty, affecting all of them. Save. - All party members now have minimum vision, base THAC0 four points higher than it was, and a "blindness" portrait icon. The portrait icon is the only part that shows up in the creature file as an ongoing effect. - Cast various cures; Cure Disease, Neutralize Poison, inquisitor Dispel Magic. All remove the portrait icon. The first two restore the affected character's vision, but not their THAC0. The third doesn't even restore vision. Save again. - "Cured" characters now see normally and have no ongoing effects associated with NB, but still have worse THAC0. Permanently. Even death and resurrection doesn't help. Thinking about it - the best fix seems to be to change the timing mode on that blindness effect. Testing Instant/Permanent (mode 9) ... now there's a Blindness effect in the save, and base THAC0s are unchanged. Cures work fully, including dispels, but death and resurrection doesn't. OK, a normal long duration, like the 1000 hours on Polymorph Other, is the way to go. Attaching a quick fix... Oops, that was the testing version with a changed projectile. Attaching fixed fix... Nature's Beauty fix.zip
  20. I've seen that base THAC0 4 thing too, notably in my no-spellcasting run. Could this be the cause? In the vanilla game, no enemies use Nature's Beauty. Except for Faldorn, if you're so utterly idiotic as to attack her outside the challenge pit. And of course, enemies don't last long enough for this to matter if you use this on them. So, if this is a bug with the spell, it's likely a case of a vanilla bug being exposed by SCS; the "permanent" blindness doesn't get removed properly. The only relevant change I'm aware of in SCS is the component that lets True Sight cure blindness for the caster. Which to be fair, is a bit wonky; the cure effect has a "temporary" duration, unlike all other such effects. Testing is needed.
  21. Updated to version 2.0. Five new components, plus updates to many existing components. Also, Mac and Windows installers. My favorites among the new components: - Map notes for BGEE quests: All those unmarked houses with quest content? Now they get notes on the minimap once you unlock the quest, generally by speaking to the relevant NPC or picking up the associated item. - Randomize battle music: New battle music for every area, chosen randomly from among the battle songs the game already has. This includes some that are rarely heard or even unused in the base game.
  22. Well, I'm only at the point of working on version 2.0 (current status: bug-hunting) of my first mod, so - not disappointed yet. I'm still generally at the stage of "Hey, I got that working!" or "OK, maybe I don't know how to do that yet, but I'm sure it can be done". Give it a few years, if I'm still with this scene then.
  23. There's a simple tweak option in SCS that slows down reputation gain. It's independent of the main tactical stuff.
  24. All of these "versions" are RING05.itm. In BGEE, that item has a base cost of 20K fully charged and an 8-charge maximum, but doesn't recharge when you rest; 2500 gold per charge. If you use the last charge, it goes away. In BG2EE, the item has a base cost of 3K and one charge per day. Use it and the ring sticks around, recharging when you rest. The difference between the Black Pits ring and the Ulgoth's Beard ring is entirely in the store file; the former starts with one charge and the latter starts with seven. Both can be recharged by selling and rebuying them, if you don't use them up fully. Edit: I spoke too soon about the Black Pits version. It's available in both tier 2 and tier 3 of the illithid's store. The copy at tier 2 starts with a full eight charges. The copy at tier 3 has "0" charges in the store file, so it defaults to one charge. Oops. That's going into the next version of my tweak mod, as I already have a component for fixing little BP errors. Not that it's ever worthwhile to buy the ring in the Black Pits - the Concocter has an unlimited supply of invisibility potions at all tiers, for one tenth of the cost per charge. And the ring is self-only, so it doesn't offer any utility that the potions don't.
  25. The SCS thing is that the druid uses summoning spells. The vanilla version has Bless, Flame Blade, Charm Person or Mammal, Barkskin, Invisibility Purge, Call Lightning, Cure Serious Wounds, Defensive Harmony, Mass Cure, and Heal. The mage in that encounter doesn't have any summoning spells either. So really, this is a vanilla bug being exposed by SCS; summons get wonky when their summoner changes allegiance.
×
×
  • Create New...