Jump to content

2 bugs discovered


Enkidu

Recommended Posts

Nothing but the following components of fixpack are installed:

 

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #100 // Party Gets XP for Sending Keldorn to Reconcile With Maria: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #101 // Improved Spell Animations: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #102 // Cromwell's Forging Actually Takes a Day: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #107 // Remove Dual-Classing Restriction from Archers and Stalkers: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #108 // Remove Second Attribute Bonus for Evil Path in Wrath Hell Trial: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #112 // Wizard Slayers Cause Miscast Magic on Ranged Attacks: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #113 // Additional Alignment Fixes: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #0 // BG2 Fixpack - Core Fixes: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #1 // BG2 Fixpack - Game Text Update: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #2 // Super Happy Fun Lucky Modder Pack: v8

~BG2FIXPACK/SETUP-BG2FIXPACK.TP2~ #0 #3 // BETA Core Fixes (please check the readme!): v8

 

dart05.itm (asp's nest) has a wrong description. It states that the damage from poison is 1 per 3 seconds but it's actually 1 per second.

 

Teleport field description states that a save vs spells must be made to avoid the effect while in reality no save is allowed.

 

The panic effect from creeping doom seems to be broken. It doesn't affect anyone.

Link to comment
dart05.itm (asp's nest) has a wrong description. It states that the damage from poison is 1 per 3 seconds but it's actually 1 per second.

Let's change the poison to match the description instead.

//Asp's Nest darts do 1 HP damage every second for 40 seconds instead of 1 HP damage every 3 seconds for 120 seconds
COPY_EXISTING dart05.itm override
 PATCH_IF SOURCE_SIZE > 0x71 BEGIN
READ_LONG  0x64 ao
READ_SHORT 0x68 na
READ_LONG  0x6a eo
FOR (i=0;i<na;i+=1) BEGIN
  READ_SHORT ao + 0x38*i + 0x1e en ELSE 0
  READ_SHORT ao + 0x38*i + 0x20 ei ELSE 0
  FOR (j=0;j<en;j+=1) BEGIN
	READ_SHORT eo + 0x30*(ei + j) type ELSE 999
	PATCH_IF type = 25 BEGIN
	  WRITE_LONG  eo + 0x30*(ei + j) + 0x4  3
	  WRITE_LONG  eo + 0x30*(ei + j) + 0x8  3
	  WRITE_LONG  eo + 0x30*(ei + j) + 0xe  120
	END ELSE BEGIN
	  WRITE_LONG eo + 0x30*(ei + j) + 0xe 120
	END
  END
END
 END
BUT_ONLY

 

Teleport field description states that a save vs spells must be made to avoid the effect while in reality no save is allowed.

Quite right, the save is missing. However, Fixpack apparently tries to change the description of the spell to reflect this (only, the new description is identical to the old description). Going through the forum, CamDawg apparently elected to change the description (here), as did Nythrun (here). So I guess the description should be changed.

 

 

The panic effect from creeping doom seems to be broken. It doesn't affect anyone.

Creeping Doom applies the 2 HP/sec damage via a repeating eff opcode and tries to apply the fear effect in the same manner. But since the damage has a higher frequency and the engine is buggy and only applies the effect with the highest frequency, the panic effect is never observed.

If we replace the panic repeating eff with 3 normal effs, of which 2 are delayed 6 and 12 seconds, and move the save from the spell to the external eff, we should get a reasonably good approximation of the intended behaviour, I think. The target saves 3 times vs panic and it all goes away with dispel.

//Creeping Doom's panic effect does not work, alter opcode 272/panic.eff effect to 3 opcode 177/panic.eff effects with delayed application
//see also panic.eff
COPY_EXISTING sppr717.spl override
 PATCH_IF SOURCE_SIZE > 0x71 BEGIN
READ_LONG  0x64 ao
READ_SHORT 0x68 na
READ_LONG  0x6a eo
en = 0
FOR (i=0;i<na;i+=1) BEGIN
  WRITE_SHORT ao + 0x28*i + 0x20 en
  ei = en
  READ_SHORT ao + 0x28*i + 0x1e en
  FOR (j=0;j<en;j+=1) BEGIN
	READ_SHORT eo + 0x30*(ei + j) type ELSE 999
	READ_ASCII eo + 0x30*(ei + j) + 0x14 rr ELSE blank
	PATCH_IF type = 272 AND "%rr%" STRING_EQUAL_CASE panic BEGIN
	  DELETE_BYTES eo + 0x30*(ei + j) 0x30
	  en -= 1
	  j -= 1
	  PATCH_FOR_EACH time IN 12 6 0 BEGIN
		INSERT_BYTES eo + 0x30*(ei + j)		0x30
		WRITE_SHORT  eo + 0x30*(ei + j)		177
		WRITE_BYTE   eo + 0x30*(ei + j) + 0x2  2
		WRITE_BYTE   eo + 0x30*(ei + j) + 0x3  7
		WRITE_LONG   eo + 0x30*(ei + j) + 0x8  2
		WRITE_BYTE   eo + 0x30*(ei + j) + 0xc  5
		WRITE_BYTE   eo + 0x30*(ei + j) + 0xd  1
		WRITE_LONG   eo + 0x30*(ei + j) + 0xe  time
		WRITE_BYTE   eo + 0x30*(ei + j) + 0x12 100
		WRITE_ASCII  eo + 0x30*(ei + j) + 0x14 panic
		en += 1
	  END
	  j = en
	  WRITE_SHORT ao + 0x28*i + 0x1e en
	END
  END
END
 END
BUT_ONLY

//Creeping Doom's panic effect does not work, move save to .eff
//see also sppr717.spl
COPY_EXISTING panic.eff override
 WRITE_LONG 0x40 1
 WRITE_LONG 0x44 "-2"
BUT_ONLY

Link to comment

For the Creeping Crud spell you'll want to timing mode four the damage and throw the .eff away. The periodically do stuff opcodes demand wholesale purging from the game, but there's not even a dozen spells to change, so it's not a big deal.

 

In general it's better to stagger a cast spell opcode rather than use .effs at all, because if you do you need to hack around their inheriting timing mode etc from the parent resource.

Link to comment

Souped-up fix for the bug spells:

//Creeping Doom's panic effect does not work, alter both panic and damage effect to not use opcode 272 for all insect spells
//see also cdpr717a.spl
COPY_EXISTING sppr319.spl override //Summon Insects
		  sppr517.spl override //Insect Plague
		  sppr717.spl override //Creeping Doom
		  spin689.spl override //BLACK_DRAGON_INSECT
 PATCH_IF SOURCE_SIZE > 0x71 BEGIN
READ_LONG  0x64 ao
READ_SHORT 0x68 na
READ_LONG  0x6a eo
en = 0
ei = 0
FOR (i=0;i<na;i+=1) BEGIN
  ei += en
  WRITE_SHORT ao + 0x28*i + 0x20 ei
  READ_SHORT ao + 0x28*i + 0x1e en
  FOR (j=0;j<en;j+=1) BEGIN
	READ_SHORT eo + 0x30*(ei + j) type ELSE 999
	READ_ASCII eo + 0x30*(ei + j) + 0x14 rr ELSE blank
	PATCH_IF type = 272 AND "%rr%" STRING_EQUAL_CASE ipdam1 BEGIN
	  READ_ASCII eo + 0x30*(ei + j) copy (0x30)
	  DELETE_BYTES eo + 0x30*(ei + j) 0x30
	  en -= 1
	  j -= 1
	  time = "%SOURCE_RES%" STRING_EQUAL_CASE sppr319 ? 42 : 36
	  FOR (k=0;k<time;k+=2) BEGIN
		INSERT_BYTES eo + 0x30*(ei + j)		0x30
		WRITE_ASCIIE eo + 0x30*(ei + j)		"%copy%"
		WRITE_SHORT  eo + 0x30*(ei + j)		12
		WRITE_LONG   eo + 0x30*(ei + j) + 0x4  1
		WRITE_SHORT  eo + 0x30*(ei + j) + 0x8  0
		WRITE_SHORT  eo + 0x30*(ei + j) + 0xa  16
		WRITE_BYTE   eo + 0x30*(ei + j) + 0xc  4
		WRITE_LONG   eo + 0x30*(ei + j) + 0xe  k
		en += 1
		j += 1
	  END
	END
	PATCH_IF type = 272 AND "%rr%" STRING_EQUAL_CASE ipdam2 BEGIN
	  READ_ASCII eo + 0x30*(ei + j) copy (0x30)
	  DELETE_BYTES eo + 0x30*(ei + j) 0x30
	  en -= 1
	  j -= 1
	  FOR (k=0;k<18;k+=1) BEGIN
		INSERT_BYTES eo + 0x30*(ei + j)		0x30
		WRITE_ASCIIE eo + 0x30*(ei + j)		"%copy%"
		WRITE_SHORT  eo + 0x30*(ei + j)		12
		WRITE_LONG   eo + 0x30*(ei + j) + 0x4  2
		WRITE_SHORT  eo + 0x30*(ei + j) + 0x8  0
		WRITE_SHORT  eo + 0x30*(ei + j) + 0xa  16
		WRITE_BYTE   eo + 0x30*(ei + j) + 0xc  4
		WRITE_LONG   eo + 0x30*(ei + j) + 0xe  k
		en += 1
		j += 1
	  END
	END
	PATCH_IF type = 272 AND "%rr%" STRING_EQUAL_CASE panic BEGIN
	  DELETE_BYTES eo + 0x30*(ei + j) 0x30
	  en -= 1
	  j -= 1
	  PATCH_FOR_EACH time IN 0 6 12 BEGIN
		INSERT_BYTES eo + 0x30*(ei + j)		0x30
		WRITE_SHORT  eo + 0x30*(ei + j)		146
		WRITE_BYTE   eo + 0x30*(ei + j) + 0x2  2
		WRITE_BYTE   eo + 0x30*(ei + j) + 0x3  7
		WRITE_LONG   eo + 0x30*(ei + j) + 0x8  1
		WRITE_BYTE   eo + 0x30*(ei + j) + 0xc  4
		WRITE_BYTE   eo + 0x30*(ei + j) + 0xd  1
		WRITE_LONG   eo + 0x30*(ei + j) + 0xe  time
		WRITE_BYTE   eo + 0x30*(ei + j) + 0x12 100
		WRITE_ASCII  eo + 0x30*(ei + j) + 0x14 cdpr717a #8
		en += 1
		j += 1
	  END
	END
  END
  WRITE_SHORT ao + 0x28*i + 0x1e en
END
 END
BUT_ONLY

The new fix has the added inconvenience of needing the spell cdpr717a. It's probably premature for me to supply one now.

(The new fix will also not puke over the spell if it turns out to have three or more abilities and uses timing mode 4 for the panic-related effects instead of 5.)

 

It's only the insect spells and Earthquake that use Apply repeating eff [272] and Earthquake does not appear to have/cause this problem. None of the spells using Cast spell on condition [232] do so at periodic intervals. Of items, it's only the Boots of Phasing that use #272 and the situation with #232 is the same as for spells. Anything I've missed (other than poison/regeneration/disease)?

Link to comment

Looks good.

 

I think the screen shake opcode is a no-attach effect, so you may have found the only possible safe usage for the repeaters :)

 

There's nothing to be done for fireshield, or anything stuffed into a contingency with the relevant triggers, but they'll break less often if there's fewer other spells to break on (thanks for that lovely "One of the spells has failed" debug loveletter, Bio! Shame it was held up in post for ten frikkin years).

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...