Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by grodrigues

  1. Just the ones I caught: Wraith Form, MGoI, Greater Malison. I do not have a preference either way, as in here I am just concerned with fixes. If I want to change the behavior I imlement it in my own copy of SR tweaks. Heh, gonna have to read that description a second time... Oh me neither, I cannot even remember why I poked in there. But SRR makes them the same, and in all cases I have seen they are the same, and since I am already fixing things anyway... Then this is the real question, because I assumed it did not. Glad I asked. Again, glad I asked. Then I better ask another question, just to make sure I did not made a mistake: in Ice Storm I am altering the duration of the movement rate penalty opcode 24 -> 6 because it is my understanding that, given the projectile, the opcode is applied once a round. Am I wrong in my reasoning?
  2. Here are some questions related to particular fixes. All of these were dealt with in a previous post of mine but no definite answer was given: - Scaling: the biggest one. Several spells are documented as having a scaling but in the implementation they do not. What is wrong, the docs, the implementations, depends on the case? Assuming it is the implementation how should I go about fixing it? I suggest this. Suppose the spell has level l, and that the first l level spell is gained at character level c. Then change the first header to min level 1 but with scaling corresponding to character level c - 1 then add headers starting at c until the level cap 20. - Glitterdust: Has protection against non-existent SPPR114F. Delete opcode? If not, what is the fix? - Spell Thrust: trigger and explosion radius of projectile dvsplthr.pro do not coincide. Fix? And what is the radius to use? - Fire Shield: The range of the spell retaliating with fire damage is 6 instead of documented 5. Fix or is +1 accounting for some engine quirk? - Secret Word: says it dispels Dispelling Screen. Are the docs correct, as in it is intended as such? And if so, then the implementation seems incorrect as it lacks the proper remove sectype opcode for k1-dispel (or whatever its exact name is). How to add it, since the implementations relies on casting auxiliary spells and so it it is bound to affect other spell protection removal spells? - Greater Malison: The "take an extra point of spell damage for each die rolled" is implemented as a -1 penalty to luck and +1 to thac0 (??). This is clearly not correct, but what is the exact fix?
  3. Ok, I have cloned the SR repo and am ready to start pushing commits. I have two types of questions: (1) general GitHub and push policy questions (2) specific questions on particular bug fixes. This post is about (1) and (2) will be dealt with in a subsequent post. Sorry if some of these questions are really newbie-ish, but I have only managed a GitHub repo over my sole control, and in that case, edit-commit-push is enough. So my workflow is the following: every patch is done via WeiDU (instead of say, using NI) on the spl, eff, etc. files themselves to keep a record, in WeiDU code, of the exact changes and make it easy to change, reverse etc. The patched spells are then copied into an external folder, reviewed in NI to check everything is fine, and then copied into my local branch. Since I do not wish to delve into SR code, this leads to the first question: (1) Should I patch the spl (eff, etc.) files from a working installation or from the mod folder (e.g. from my local branch)? If the first option, can I go with my present install: SR on top of a medium stack of mods -- in the middle of setting up a full install -- with biffing on the end or should I trim the install to say, ToBEx, bg2fixpack and SR? If the second option, is not there a risk that any subsequent patching done by SR destroys my fixes? (2) What is the exact policy to submit changes? How do you guys do it? Create a new local branch for each batch of changes, make the changes to the branch, push the branch (after rebasing master into local branch), and when changes are accepted delete the local branch? Thanks in advance for any help.
  4. My project is to implement some of the SRR changes and then some on top of SR, by patching (not via NI or dltcep) -- because it is actually easier in most cases. But this is a long term project, which given how life rolls, will probably fizzle out. To give you an idea, I have gone over about 30 spells and have not gone past wizard level 4. All this convoluted, and probably unncessary explanation, to say that no, I do not intend to add such an option. I can tell you how to do it yourself though, as it is pretty easy.
  5. From my post to argent77: "Thanks argent77. " But enough with this useless banter. Next time I pose a question I will try to add as much context as relevant and not respond in a snarky tone to an attempt at being helpful.
  6. I still maintain that there was nothing unclear or any missing context for the question I posed: how to get the value of a variable if you have its name stored in another variable. Whether or not whatever it is I am trying to accomplish with such an extra level of indirection can be accomplished through other, simpler, more robust means is another question altogether -- a genuine one, I will grant Jarno and you that.
  7. @Jarno Mikkola What you ask is either irrelevant, or I am quite aware of, for my question, but just to humor you: this is in the context of patching a spell. I am adding a projectile via ADD_PROJECTILE except the projectile name is gotten from a variable with value read from a 2da file at mod install time. According to the docs the projectile id is then written to a variable with the *name of the projectile*, so it follows that I got the name of the variable already, but I need to get at its value to write it in the spell. Now that I think of it, I suppose I could open projectile.ids (or whatever it is called) and just look up the id there since I already have the projectile's name, but my question still stands because there were other times where this extra level of indirection would have been helpful -- of course, there is always the chance that I do not know enough WeiDU, or have not structured my code well enough, to not have to resort to such black magic. But coming from languages such as Python or Haskell where such black magic is as easy as pie, that is how I tend to think.
  8. If you have a variable1 with the *name* of a variable2, is there a way to get the value of variable2? For the sake of illustration, assume //var2 is itself the name of a variable. SET var1 = ~var2~ How to get at the value of var2? I assume i have to expand var1, surround it with %'s then expand that, but whatever I tried it did not work -- I suspect I am doing the insertion of %'s wrong.Thanks in advance.
  9. Thanks, that solved it, as the length of the string is the expected 40. The output of PATCH_PRINT of the read block is probably explained as in the note, by the nulls that snuck in there, and the quirks of both WeiDU and the console. Yeah, newbie error... WeiDU is a great tool but it has lots of quirks and it lacks some facilities that general programming languages have to save us from shooting our feet. Miss me some Python. Or even better, Haskell.
  10. Ok, I have been banging my head against this and just cannot find the mistake. I have the following patch function with PATCH_PRINT's interspersed for debugging: //Return ith header as a string (e.g. cloning). If header out of bounds, returns the empty string. DEFINE_PATCH_FUNCTION GET_INDEXED_HEADER_AS_STRING INT_VAR header = 0 RET string BEGIN TEXT_SPRINT string "" LPF GET_INDEXED_HEADER_OFFSET INT_VAR header = %header% RET header_offset = offset END PATCH_PRINT "Header offset is: %header_offset%." PATCH_IF NOT (header_offset = 0) BEGIN READ_ASCII header_offset string (SPELL_HEADER_SIZE) SET len = STRING_LENGTH string PATCH_PRINT "Length of read block is: %len%." PATCH_PRINT "Read block is:%LNL%%string%" END END When applied to spwi120 (Reflected Image as changed by SR) I get in the console: Installing [Spell Macros Testing] [v1.0] Copying and patching 1 file ... Copying and patching 1 file ... Header offset is: 114. Length of read block is: 6. Read block is: SPWI120B So the header offset is correct (The argument passed was 0, so was getting the offset of first header -- GET_INDEXED_HEADER_OFFSET is working as it should) but everything else is a mess. The length does not even coincide with the length "SPWI120B". And SPELL_HEADER_SIZE is what you think it is: a constant with the size of a header (0x28). So what the heck is going wrong? Why is it not reading the whole header? I somehow suspect that this is one of those newbie errors that will put me to shame... note(s): - according to IESDP the first four fields of a header are: Spell form (char), Flags (char), Location (word) and Memorised icon (8 chars). Memorised icon is precisely "SPWI120B" so if the other fields are all 0's that *could* explain the totally counter-intuitive behavior of STRING_LENGTH and PATCH_PRINT. If that is the case, then can I be sure that the block read is indeed 0x28 bytes long despite the null-terminated shenanigans of string functions do not allow to test that? And is there a way to treat the string as an array of bytes to test it -- maybe looping over it and read byte by byte with READ_BYTE?
  11. As requested, and as I promised (or threatened), here is the bump and a please, please with a cherry on top all in a box with bow tie of thank yous.
  12. Doing a (long term) project to implement some of the changes of SRR to SR via patching and then some more of my own. The scaffolding is done, now is just the grinding. In the meantime, uncovered a few bugs in SR v4.18 as of stable release, that is, if any new commit fixed them in the meantime I missed it. I will add more as I uncover them, to this post or some other post. - Mage Armor: protection from mage armor opcode has wrong target (preset instead of self) and power (3 instead of 1). Missing protections against ghost armor and spirit armor. For SRR: the last spell header was not deleted as documented. - Glitterdust: Has protection against non-existent SPPR114F. The two protection from spell opcodes have duration 23 -- maybe needed for implementation quirks? note(s); think I understand the duration 23. There is a cast spell opcode for precisely that spell delayed to 24, and you prolly need the protection until there to guarantee some stray glitterdust does not mess things up. - Ghost Armor: Missing protections against mage armor and ghost armor. - Wraith Form: blur (65) opcode has wrong power (2 instead of 3) and wrong dispel/bypass (0 instead of 1). Fixed duration of 1 turn instead of scaling as documented. - Spirit Armor: protection from spell opcodes have power 3 instead of 4. - Ice Armor: duration of movement rate opcode is 24 instead of 6. As I understand, the opcodes are applied once a round, as many rounds as dictated in the appropriate field of the projectile. - Spell Thrust: trigger and explosion radius of projectile dvsplthr.pro do not coincide. Whether this is important or not I do not know. - Fire Shield: duration of protection from spell opcodes (the ones protecting from insects) does not scale but remains at fixed 60 (checked only the first few headers). Also the range of the spell retaliating with fire damage is 6 -- isn't this 1 more or is it accounting for some engine quirk? - MGoI: fixed 2 turn duration; documentation is 1 round / level. Repeated protection against fireball. And another (because I am working on it right now and am on a roll): - Secret Word: says it dispels Dispelling Screen but this does not seem correct, for it would need to apply a remove opcode by secondary type with sectype k1-dispel (or whatever its exact name is) and there is none. Other spell removal protections may suffer the same problem. - Greater Malison: fixed 2 turn duration; documentation is 2 round / level. The "take an extra point of spell damage for each die rolled" is a -1 penalty to luck and +1 to thac0 (??). Oh man, at this rate I got my work cut out for me... For SRR only: - skull trap: spurious Use EFF protecting against a non-existent spell.
  13. Trying to download the mod following the links starting from here Kerzenburg Forums I get a page not found error, if Google translate is correct -- I do not know a single word of German. Anyone has a working link?
  14. Thanks. I was either misled, or misread, the docs because I got the impression that the array was 1-indexed.
  15. The following code: COPY - ~spell_tweaks/components/desc_fixes/2da/spelldesc.2da~ ~override~ READ_2DA_ENTRIES_NOW rows 3 PATCH_PRINT "Number of rows: %rows%." READ_2DA_ENTRY_FORMER rows 1 1 spellname PATCH_PRINT "Spell name: %spellname%." READ_2DA_ENTRY_FORMER rows 1 2 spelldesc PATCH_PRINT "Description: %spelldesc%." READ_2DA_ENTRY_FORMER rows 1 3 modify PATCH_PRINT "Modify? %modify%." Prints correctly that the number of rows is 1 but then barfs on the first READ_2DA_ENTRY_FORMER. Why oh why? Test 2da file attached. spelldesc.2da
  16. A request for clarification on the compatibility status of the following three mods: (1) Kelsey: must be installed after Ascension. A look at the relevant Kelsey component has copying of epilogues and compiling of kelsey dialogues. It should override Imoen's epilogue as Imoen has a ToB romance with Kelsey if main PC is male, but as far as I can judge that is it. (2) Sarevok Friendship: must be installed after Ascension. As far as I can see it only affects Sarevok stuff: dialogues (e.g. sarev25j.dlg) and related scripts (e.g. sarev25.bcs). (3) Homeward bound: using v7 with BWP fixes on top. Must be installed after Ascension. A perusal of the tp2 shows that: (1) the area scripts ar1600 and ar2100 are extended (2) finsol01.cre is changed by assigning the finsol01 script; the script finsol01 is extended. (3) Things are set up so that if you send NPCs home before the final battle you get to see their epilogues. However, since it was coded for the older Ascension (the mod has not been updated in a long while, although I believe someone in the beamdog forums has released a compatibility version for EE's) it *may* mean that epilogues are overriden and you only see the original ones, not the Shawne ones if you installed those. This for me is not a big problem, since I prefer David Gaider's and am on BGT.
  17. Installing (some) the components from the BG1 Encounters group, Ramazith's Tower fails with: "ERROR: [AR7242.are] -> [override] Patching Failed (COPY) (Failure("Adding non-existent actor basill to area!"))" On classical BGT + ToBEx on arch linux. Weidu log attached. weidu.log
  18. "Someone who works so badly and slowly would fast get his papers in the free market economy." Well, since you are invoking the workings of the free market, you have the option to go to the competition and choose a different product. I am sure, if you ask politely, that DavidW will refund all the money you have spent on SCS. With interest. "It's grand to finally find someone with a lick of sense here. Keep up the good fight and don't be discouraged by all these trolls attacking you." This one is truly hilarious. A petty, self-entitled troll who thinks he is due something, whatever, rebuking others for pointing out the obvious. But that is I imagine, how morally obtuse people think: project on others their own failings.
  19. Country-ism? A tongue-in cheek sentence with an emoji at the end can be construed as "discrimination"? Is this for real? Is the culture *this* bad that cannot even sustain the mildest of parodies? And I am out. Exeunt.
  20. Bartimeus will answer for sure, but I would hazard a guess that he will say that that sort of thing is outside of the scope of the mod. What I myself do with mods that I use and introduce items that I do not like is cook up a mod that is installed after and changes the item to suit whatever I think is right (sometimes is nerfing, other times is correcting mistakes, other times is plugging a hole in my chosen party item setup, other times is just a new item idea that I found interesting, etc.). Now this is of course time consuming, and needs some weidu modding knowledge (but I found that the basics are enough -- NI and overwriting is sufficient for most purposes -- and if you have some programming discipline things go much easier) since I am basically doing a mini-IR for every mod that I want to change, but such is life.
  21. I have played a fair bit of BGT lately and at least a couple of times in the not so distant past, in a relatively heavily modded setup (some quest mods like DC and ToD, SR, IR, SCS, Tweaks Anthology, Level 1 NPCs, etc. but nowhere near a megamod install) manually installed (that is, no BWS or some such, but making use of the BWS Fixpack), and I have never encountered what you describe, so I would not discard some weird mod interaction just yet.
  • Create New...