devSin Posted February 21, 2006 Share Posted February 21, 2006 I got a moment to finally whip up a patch for Yoshimo's spell. The effects are pretty weak (the slow has no icon nor lighting effects or sound, the resilient sphere uses only BG-era effects, and everything wants to No dispel/bypass resistance). The resilient sphere should probably get fixed, at least. Since I'm anal about having everything in the proper order, I now have to patch the damn sphere twice. So everyone can laugh at me when Cam comes up with teh better: COPY_EXISTING SPCL415.SPL OVERRIDE READ_LONG 0x6a eo WRITE_BYTE eo + 0x63 0x3 WRITE_BYTE eo + 0x6d 0x1 WRITE_BYTE eo + 0x693 0x8 WRITE_BYTE eo + 0x69d 0x2 WRITE_BYTE eo + 0x6cd 0x2 WRITE_LONG eo + 0x12e 0x1e READ_SHORT 0xe2 ne eo += ne * 0x30 READ_SHORT 0xe0 ne DELETE_BYTES eo (ne - 0x1) * 0x30 INNER_PATCH_FILE "SPWI413.SPL" BEGIN READ_LONG 0x6a o WRITE_LONG o + 0x784 0x3 FOR (l = o + 0x21e; l < 0x84a; l += 0x30) BEGIN WRITE_LONG l 0x2a END INSERT_BYTES o 0x30 WRITE_BYTE o + 0xd 0x1 WRITE_BYTE o + 0x12 0x64 WRITE_LONG o 0x4020014 WRITE_LONG o + 0xe 0x2a WRITE_LONG o + 0x24 0x1 READ_SHORT 0x90 n WRITE_SHORT 0x90 n + 0x8 l = o + ((n + 0x1) * 0x30) FOR (i = 0x0; i < 0x7; i += 0x1) BEGIN INSERT_BYTES l 0x30 WRITE_BYTE l + 0xd 0x1 WRITE_BYTE l + 0x12 0x64 WRITE_LONG l + 0x4 (i == 0x5) ? 0x0 : 0x64 WRITE_LONG l + 0x8 (i == 0x5) ? 0x19 : 0x1 WRITE_LONG l + 0xe 0x2a WRITE_LONG l + 0x24 0x1 WRITE_SHORT l (i < 0x5) ? 0x1f - i : (i == 0x5) ? 0x65 : 0xad WRITE_SHORT l + 0x2 0x402 END READ_SHORT 0x90 n READ_ASCII o e (n * 0x30) END INSERT_BYTES eo n * 0x30 WRITE_EVALUATED_ASCII eo "%e%" WRITE_SHORT 0xe0 n + 0x1 READ_SHORT 0x90 ne WRITE_SHORT 0x90 ne + 0x2 READ_LONG 0x6a eo eo += ne * 0x30 INSERT_BYTES eo 0x60 WRITE_LONG eo + 0xe 0x1e FOR (i = 0x2; i; i -= 0x1) BEGIN WRITE_BYTE eo + 0x12 0x64 WRITE_LONG eo i + 0x302008c WRITE_LONG eo + 0x8 (i == 0x1) ? 0x6 : 0x29 WRITE_LONG eo + 0x24 0x1 WRITE_LONG eo + 0x28 `0x3 WRITE_SHORT eo + 0xc (i == 0x1) ? 0x101 : 0x100 eo += 0x30 END READ_LONG 0x64 ao READ_SHORT 0x70 x FOR (READ_SHORT 0x68 na; na; na -= 0x1) BEGIN READ_SHORT ao + 0x1e ne WRITE_SHORT ao + 0x20 x ao += 0x28 x += ne END Despair... Link to comment
the bigg Posted February 21, 2006 Share Posted February 21, 2006 I think your code is IF_EVAL prone. Link to comment
devSin Posted February 21, 2006 Author Share Posted February 21, 2006 I think your code is IF_EVAL prone.Who uses IF_EVAL? NO_ONE. It's a consequence of lazy coding, and coding for maximum efficiency (both memory and speed). My patches look like crap these days and can be horribly incompatible, but they're all instantaneous (vs. the old days, WeiDU doesn't once pause after the initial COPY, instead literally racing through all 35K lines in 30.0t). This one has a little bloat, but I simply don't care enough to bother anymore. Link to comment
the bigg Posted February 21, 2006 Share Posted February 21, 2006 Yes, but reads are still performed out of order - unless you add NO_IF_EVAL_BUG in the header. Link to comment
devSin Posted February 21, 2006 Author Share Posted February 21, 2006 Yes, but reads are still performed out of order - unless you add NO_IF_EVAL_BUG in the header.You know I know that, and I used to comment out the initial process_patch1 entirely. THERE IS NO IF_EVAL. EDIT: after looking at the code, there isn't an issue with IF_EVAL. I'm not trying to READ* any place that's less than or greater than the file size. Link to comment
CamDawg Posted February 25, 2006 Share Posted February 25, 2006 I tried interpreting this. Then I got smart and realized it's a lot simpler to ask what the hell it's doing. Change slow effect to power 3 and no dispel/bypass to dispel/not bypass. Maze lighting effects to power 8 and no dispel/bypass to no dispel/not bypass Maze opcode itself no dispel/bypass to no dispel/not bypass Hold play 3d effect duration from 1 to 30 It looks like next we delete all Otiluke's effects (except map marker) and copy them in from the Otiluke spell, with a few changes. Then I threw my hands up. Link to comment
devSin Posted February 25, 2006 Author Share Posted February 25, 2006 The power settings were off, so I made them match (Otiluke's is correct by default, as is hold and two of the maze effects). This isn't really necessary (I guess it depends if you think traps should have effects that may get blocked by spell immunity). I then fixed up the dispel/resistance stuff just to make sure the trap doesn't apply effects that bypass resistance or are undispellable. The hold person VVC is SPMINDAT, which needs to run over the target for the duration of the hold effect, so that's a fix. For the wizard version of Otiluke's, there are several bugs we fix (and some we may not). Because of the whole in-order thing, I need to make those updates before reading the effects. First, the very last spell immunity is set to block spell level 0; spell level 3 is never blocked, so I change it to level 3. The sphere should last 1 turn, but a lot of the effects were lasting 42 seconds; I don't know if it comes from the BG version of the spell, or if it was just lazy copying or honest mistake. I thought the variation would be nice, so I make the trap sphere only last 7 rounds. Since the sphere applies invisibility (improved), I add invisibility (normal) to the top of the effects list (BioWare always put these in pairs, first normal and then improved). Then I add immunity to fire, cold, acid, electricity, and magic damage. I add reduced damage from poison and immunity to poison (BioWare always put these in pairs). Finally, I go back to the first ability, and add effects to display the slow icon and lighting effects (alteration water). The final block just recreates the ability effect indexes. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.