Jump to content

Daystar, Dragonslayer damage


CamDawg

Recommended Posts

Quoting myself from another thread:

 

Daystar claims this for damage:

 

Damage: 1D8 +2, +4 vs. evil creatures, does double damage against undead

 

Daystar uses four EFF files. The sword, by itself, does 1d8+2.
  • evilhit2, attached globally, adds the +2 to hit against evil creatures.
  • evildam2, attached to the melee ability, which does an extra 2 damage to evil creatures (raising damage to evil creatures to 1d8+4 total).
  • daystar1, on the melee ability, which does an extra 1d8+4 against undead (combined with the base damage and evildam2, this raises total damage to undead to 2d8+8).
  • dbldam, on the melee ability, which does another 1d8+2 to undead, raising the total undead damage to 3d8+10. This actually looks like it needs to be dropped.

There are really four scenarios that Daystar has to account for, and it's almost got them covered:

  • Non-evil, non-undead opponents. Should get the base +2 to hit and do 1d8+2 damage. This is correct.
  • Evil, non-undead opponents. Should get +4 to hit and do 1d8+4 damage. This is correct.
  • Non-evil undead. Should get +2 to hit and 2d8+4 damage, but is currently getting 3d8+8 damage and +2 to hit.
  • Evil undead. Should get +4 to-hit and 2d8+8 damage, but is currently getting 3d8+10 damage and +4 to-hit.

If we changed daystar1.eff to do +2 damage and only apply to evil, undead creatures, the damages will be correct.

 

Dragonslayer claims this for damage:

 

1D8 +2, double damage against dragons

 

Dragonslayer does 1d8+2 base, supplemented by two EFFs on the melee abilities:
  • sw1h32a does an extra 1d8+2 to dragons, raising total dragon damage to 2d8+4. (This one is oddly targeted and may not actually be working.)
  • sw1h32c does an extra 1d8+2 to dragons, raising total dragon damage to 3d8+6, assuming if sw1h32a works.

If sw1h32a does work, it should be dropped.

Link to comment

As we have unfortunately discovered damage from dice rolls in the EFF files isn't applied.

 

Therefore double damage has to be replaced by fixed damage.

 

Daystar/Dragonslayer: 1D8+2 which means 3-11 should be 7 fixed damage

 

MoD: 1D6+2 is 3-8 with an average of 5.5 so it shoud be 5 or 6 fixed damage

Link to comment
As we have unfortunately discovered damage from dice rolls in the EFF files isn't applied.

Therefore double damage has to be replaced by fixed damage.

Does it? Why couldn't you make it to be use the probability and +1 damage effects.

So if the damage would be 1d6+2=3-8, then the double damage would be:

100% +3.

83% +1.

65% +1.

50% +1.

35% +1.

17% +1.

 

Ok, that's a lot of separated effects, but it can be done, right?

Link to comment

Dragonslayer needs to drop sw1h32a. While the 1d8 extra damage is being ignored, the +2 is not--so dragon damage is actually 1d8+2 (base) +2 (sw1h32a) +1d8+2 (sw1h32c) = 2d8+6 instead of 2d8+4.

 

// dragonslayer fix: dragon damage gets an extra +2
COPY_EXISTING ~sw1h32.itm~ ~override~
 READ_LONG   0x64 "abil_off"
 READ_SHORT  0x68 "abil_num"
 READ_LONG   0x6a "fx_off"
 READ_SHORT  0x70 "fx_num"
 SET "fx_delta" = 0
 FOR (index = 0; index < fx_num; index = index + 1) BEGIN
READ_SHORT ("%fx_off%" +		("%index%" * 0x30)) "type"
READ_ASCII ("%fx_off%" + 0x14 + ("%index%" * 0x30)) "eff_file"
PATCH_IF (("%type%" = 177) AND ("sw1h32a" STRING_COMPARE_CASE "%eff_file%" = 0)) BEGIN
  DELETE_BYTES ("%fx_off%" +		("%index%" * 0x30)) 0x30 // delete effect
  SET "fx_num" = ("%fx_num%" - 1)
  SET "fx_delta" = ("%fx_delta%" - 1)
  SET "index" = ("%index%" - 1)
END
 END
 WRITE_SHORT 0x70 "%fx_num%"
 FOR (index2 = 0; index2 < abil_num; index2 = index2 + 1) BEGIN
READ_SHORT  ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) "abil_fx_idx"
SET "abil_fx_idx" = ("%abil_fx_idx%" + "%fx_delta%")
WRITE_SHORT ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) "%abil_fx_idx%"
 END
 BUT_ONLY_IF_IT_CHANGES

 

As for Daystar:

 

// daystar fix: does 2d8 + 6 vs. evil undead; should be 2d8 + 8
// harder than usual because of all overlapping effs; see also daystar1.eff, daystar2.eff
// move daystar1 to melee header, apply only v undead
COPY_EXISTING ~sw1h31.itm~ ~override~
 READ_LONG   0x64 "abil_off"
 READ_SHORT  0x68 "abil_num"
 READ_LONG   0x6a "fx_off"
 READ_SHORT  0x70 "fx_num"
 SET "fx_delta" = 0
 FOR (index = 0; index < fx_num; index = index + 1) BEGIN
READ_SHORT ("%fx_off%" +		("%index%" * 0x30)) "type"
READ_ASCII ("%fx_off%" + 0x14 + ("%index%" * 0x30)) "eff_file"
PATCH_IF (("%type%" = 177) AND ("daystar1" STRING_COMPARE_CASE "%eff_file%" = 0)) BEGIN
  DELETE_BYTES ("%fx_off%" +		("%index%" * 0x30)) 0x30 // delete effect
  SET "fx_num" = ("%fx_num%" - 1)
  SET "fx_delta" = ("%fx_delta%" - 1)
  SET "index" = ("%index%" - 1)
END
 END
 WRITE_SHORT 0x70 "%fx_num%"
 FOR (index2 = 0; index2 < abil_num; index2 = index2 + 1) BEGIN
READ_BYTE   ("%abil_off%" +		("%index2%" * 0x38)) "type"
READ_SHORT  ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) "abil_fx_idx"
SET "abil_fx_idx" = ("%abil_fx_idx%" + "%fx_delta%")
WRITE_SHORT ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) "%abil_fx_idx%"
PATCH_IF ("%type%" = 1) BEGIN // melee ability check
  READ_SHORT  ("%abil_off%" + 0x1e + ("%index2%" * 0x38)) "abil_fx_num"
  WRITE_SHORT ("%abil_off%" + 0x1e + ("%index2%" * 0x38)) ("%abil_fx_num%" + 1)
  INSERT_BYTES  ("%fx_off%" +		("%abil_fx_idx%" * 0x30))	   0x30 // new effect
	WRITE_SHORT ("%fx_off%" +		("%abil_fx_idx%" * 0x30))		177 // use eff
	WRITE_BYTE  ("%fx_off%" + 0x02 + ("%abil_fx_idx%" * 0x30))		  2 // target: preset target
	WRITE_LONG  ("%fx_off%" + 0x04 + ("%abil_fx_idx%" * 0x30))		  4 // UNDEAD from...
	WRITE_LONG  ("%fx_off%" + 0x08 + ("%abil_fx_idx%" * 0x30))		  3 // general.ids
	WRITE_BYTE  ("%fx_off%" + 0x0c + ("%abil_fx_idx%" * 0x30))		  1 // instant/permanent
	WRITE_BYTE  ("%fx_off%" + 0x12 + ("%abil_fx_idx%" * 0x30))		100 // probability
	WRITE_ASCII ("%fx_off%" + 0x14 + ("%abil_fx_idx%" * 0x30)) ~daystar1~ // resref
  SET "fx_delta" = ("%fx_delta%" + 1)
END
 END
 BUT_ONLY_IF_IT_CHANGES

COPY ~bg2fixpack/eff/daystar2.eff~ ~override~ // for daystar fixes (see sw1h31.itm, daystar1.eff~

// daystar damage vs. evil undead fixes, pt. 2 (see sw1h31.itm, daystar2.eff)
COPY_EXISTING ~daystar1.eff~ ~override~
 WRITE_LONG  0x10		177 // use eff file
 WRITE_LONG  0x1c		  3 // against mask_evil...
 WRITE_LONG  0x20		  8 // ...from align.ids
 WRITE_ASCII 0x30 ~daystar2~ // then actually go to another +2 damage

Link to comment
Dragonslayer needs to drop sw1h32a. While the 1d8 extra damage is being ignored, the +2 is not--so dragon damage is actually 1d8+2 (base) +2 (sw1h32a) +1d8+2 (sw1h32c) = 2d8+6 instead of 2d8+4.
You missed the part where dice don't work? So that would be 1d8 + 6, except in the case that damage bonus may not stack, making it 1d8 + 4 (except in the case where none of it works at all, making it 1d8 + 2)?
Link to comment
Dragonslayer needs to drop sw1h32a. While the 1d8 extra damage is being ignored, the +2 is not--so dragon damage is actually 1d8+2 (base) +2 (sw1h32a) +1d8+2 (sw1h32c) = 2d8+6 instead of 2d8+4.
You missed the part where dice don't work? So that would be 1d8 + 6, except in the case that damage bonus may not stack, making it 1d8 + 4 (except in the case where none of it works at all, making it 1d8 + 2)?

sw1h32c is being applied on the melee header as a straight damage (12) effect (via dragon-targeted EFF), not a damage v. type (how sw1h32a is being applied). So yeah, it's actually 2d8+4 against dragons now and 1d8+2 otherwise.

Link to comment

Archived

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

×
×
  • Create New...