Jump to content

Photo

2 bugs discovered


4 replies to this topic

#1 Enkidu

Enkidu
  • Members
  • 15 posts
  • Gender:Male
  • Location:Poland

Posted 30 December 2009 - 06:57 AM

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.

Edited by Enkidu, 30 December 2009 - 09:57 AM.


#2 Wisp

Wisp
  • Modders
  • 1142 posts
  • Gender:Male

Posted 30 December 2009 - 06:45 PM

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

Edited by Wisp, 30 December 2009 - 06:54 PM.


#3 Nythrun

Nythrun

    Long since out to pasture

  • Modders
  • 1761 posts
  • Gender:Female

Posted 31 December 2009 - 12:48 AM

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.
"You tell lies, too."
"Not I." The witch laughed; her laughter was clear and yet unpleasant. "I used to as a child, I confess. But I soon found the truth more disconcerting."

#4 Wisp

Wisp
  • Modders
  • 1142 posts
  • Gender:Male

Posted 01 January 2010 - 07:39 AM

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)?

#5 Nythrun

Nythrun

    Long since out to pasture

  • Modders
  • 1761 posts
  • Gender:Female

Posted 02 January 2010 - 03:12 PM

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).
"You tell lies, too."
"Not I." The witch laughed; her laughter was clear and yet unpleasant. "I used to as a child, I confess. But I soon found the truth more disconcerting."



Reply to this topic



  


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users