Jump to content

Alaghor of Clangeddin Silverbeard


-JW-

Recommended Posts

Hello,

 

A couple of days ago my party reached the Cloakwood Mines, and after adding Yeslick to the group, I thought it would be great if he had a Clangeddin kit. A quick search through these forums revealed that the idea had already been brought up by others, and what's better, there was already detailed info about what the kit should be like.

 

So, lately I've been working on the kit just for personal use purposes, and thanks to the excellent tutorial here and (mostly) to shamelessly ripping off chunks of code from Divine Remix directly, I think I have pretty much done it.

 

Just some ends remain lose, and I was hopping you guys could help me out to finally be able to play the kit.

 

Adding the kit itself was easy, since there are very good tutorials about how to do it (e.g. here), and the macros provided by DR's authors are awesome.

 

My doubts come from adding the kit to Yeslick in the same way A#SHAR is added to Viconia. Two doubts:

 

First - This macro confuses me, I haven't found detailed info on what it does 'exactly' (besides browsing through WeiDU docs), so I could just try figure it out. There seems to be a macro for each kit spellbook, this one corresponds to Lorekeepers of Oghma (don't let the first comment mislead you) and is used to patch non-joinable priests of Oghma.

 

// kit stormlords, adjust spellbooks
DEFINE_PATCH_MACRO ~spellbook_oghma~ BEGIN

 WRITE_SHORT   0x244 0
 WRITE_BYTE	0x246 "%A#OGMA%"
 WRITE_BYTE	0x247 0x40
 READ_LONG 0x2A0 "sb_off"
 READ_LONG 0x2A4 "sb_num"
 READ_LONG 0x2A8 "meminfo_off"
 READ_LONG 0x2B0 "ms_off"
 READ_LONG 0x2B4 "ms_num"
 READ_LONG 0x2B8 "slot_off"
 READ_LONG 0x2BC "item_off"
 READ_LONG 0x2C4 "fx_off"
 SET "sb_delta" = 0
 FOR (index = 0; index < ms_num; index = index + 1) BEGIN // memorized spell adjustments
READ_ASCII ("%ms_off%" + ("%index%" * 0x0C)) "spell"
PATCH_IF ("SPPR105" STRING_COMPARE_CASE "%spell%" = 0) BEGIN
  SET "max" = 17
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR101~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR102~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR103~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR104~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDSUNSCO~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR106~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR107~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 8) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR108~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 9) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR109~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 10) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR110~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 11) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR111~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 12) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR113~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 13) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDCAUSLW~//
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 14) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDCURSE~//
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 15) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDDTGOOD~//
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 16) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDPRGOOD~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMSTRSTN~//
  END
END ELSE
PATCH_IF (("SPPR202" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR207" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  SET "max" = 15
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR201~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDBEAST~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR203~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR204~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR205~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR206~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR214~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 8) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR208~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 9) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR209~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 10) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR210~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 11) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR211~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 12) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR212~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 13) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR213~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 14) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDALCRN~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMRESACD~
  END
END ELSE
PATCH_IF (("SPPR302" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR310" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR311" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR312" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  SET "max" = 20
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR301~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDCAUSMW~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR303~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR304~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR305~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR306~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR307~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 8) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR308~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 9) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR309~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 10) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDPRGD10~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 11) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMCUREBD~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 12) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMCAUSDS~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 13) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMCAUSBD~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 14) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDNEGPP~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 15) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR315~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 16) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR317~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 17) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR318~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 18) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR319~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 19) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDEVL10~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~CDMNBLD~
  END
END ELSE
PATCH_IF (("SPPR402" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR406" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR407" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR408" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR409" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR410" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR413" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR414" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR417" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  SET "max" = 8
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR401~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR415~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR403~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR404~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR405~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR412~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR411~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR416~
  END
END ELSE
PATCH_IF (("SPPR501" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR504" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR507" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR508" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR511" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR515" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR517" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  SET "max" = 11
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR516~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR502~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR503~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR514~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR505~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR506~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR513~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 8) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR512~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 9) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR509~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 10) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR510~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMIMPREG~
  END
END ELSE
PATCH_IF (("SPPR602" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR609" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR613" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR614" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  SET "max" = 10
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR601~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR611~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR603~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR604~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR605~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR606~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR607~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 8) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR608~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 9) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR610~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR612~
  END
END ELSE
PATCH_IF (("SPPR707" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR708" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR711" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR712" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR713" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR717" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  SET "max" = 12
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR701~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR702~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR703~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR704~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR705~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR706~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMCONAIR~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 8) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR718~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 9) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR709~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 10) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR719~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 11) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR720~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~NMIMPERV~
  END
END ELSE
PATCH_IF (("SPPR722" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR729" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  SET "max" = 8
  PATCH_IF (RANDOM (1 "%max%") = 1) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR721~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 2) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR731~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 3) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR723~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 4) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR724~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 5) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR725~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 6) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR730~
  END ELSE
  PATCH_IF (RANDOM (1 "%max%") = 7) BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR728~
  END ELSE BEGIN
	WRITE_ASCII ("%ms_off%" + (("%index%") * 0x0C)) ~SPPR732~
  END
END
 END
 FOR (index = sb_num; index > 0; index = index - 1) BEGIN // spellbook adjustments
READ_ASCII ("%sb_off%" + (("%index%" - 1) * 0x0C)) "spell"
PATCH_IF (("SPPR105" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR202" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR207" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR302" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR310" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR311" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR312" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR402" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR406" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR407" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR408" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR409" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR410" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR413" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR414" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR417" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR501" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR504" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR507" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR508" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR511" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR515" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR517" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR602" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR609" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR613" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR614" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR707" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR708" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR711" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR712" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR713" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR717" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR722" STRING_COMPARE_CASE "%spell%" = 0) OR
		  ("SPPR729" STRING_COMPARE_CASE "%spell%" = 0)) BEGIN
  // deletes spells from spellbook. For non-joinables, this makes no difference.
  // For joinables, they'll get the proper spells re-added upon joining.
  DELETE_BYTES ("%sb_off%" + (("%index%" - 1) * 0x0C)) 0x0C
  SET "sb_delta" = "%sb_delta%" + 1
END
 END

END

 

This seems to be some kind of spell replace macro (got that from the comments in the tp2, actually). I can see in the first lines of code it's patching the appropiate CREs (conditions defined in tp2) with the kit. Then reads a lot of info on spell memorization, and proceeds to patch it with spells?. Finally, in the last portion after the comments, it deletes certain spells if their corresponding PATCH_IF condition is true?

 

So why is this needed? I mean, I can see why patching the CRE kit is, but I don't understand all this spell patching mumbo jumbo (sorry for the expression). I've applied this exact macro to my Yeslick kit, and besides adding properly the kit to him, I can see no difference in his CREs spellbook.

 

Second - Related to the first doubt, if that macro is really needed for anything spellbook related, then this is something I don't think Nythrun's Level One NPCs does. So, if I use Lvl1NPCs to give Tiax a Strifeleader of Cyric kit from Divine Remix... how would this affect to Tiax not having run the aforementioned macro before?

 

 

Well, that's all for now. The next post will contain the info source I used for the kit, and will ask for some advices about weapon proficiencies.

 

Thanks for reading, I hope this gets to be read at least!

Link to post

Ok, so here is the kit breakthrough. The info below is a snip from here

 

SPECIALTY PRIESTS Alaghor

REQUIREMENTS: Strength 15, Wisdom 9

PRIME REQUISITES: Strength, Wisdom

ALIGNMENT: LG, LN

WEAPONS: Any

ARMOR: Any

MAJOR SPHERES: All, Combat, Guardian, Law, Protection, Sun, War

MINOR SPHERES: Charm, Creation, Divination, Elemental (earth), Healing, Necromantic, Travelers, Wards

 

* While most alaghor (the plural form of alaghar) are shield dwarves or gold dwarves, members of nearly every dwarven subrace are called to be specialty priests of Clangeddin's clergy.

* Alaghor may multiclass as alaghar/fighters, and if the DM allows kits for multiclassed characters, they may take any allowed fighter/cleric kit for dwarves.

* Alaghor may select nonweapon proficiencies from the warrior group and fighting style specializations normally available only to warriors without penalty if the DM is using fighting style specializations from the Complete Fighter's Handbook or PLAYER'S OPTION: Combat & Tactics. Such fighting style specializations include weapon and shield style, two-handed weapon style, two weapon style, etc.

* Alaghor can cast command (as the 1st-level priest spell) in combat situations twice per day.

* At 3rd level, alaghor can cast spiritual hammer or rockburst (as the 2nd-level priest spells) once per day.

* At 5th level, alaghor can cast strength (as the 2nd-level wizard spell) on themselves once per day, receiving the benefit as if they were warriors, or they can cast strength of one (as the 3rd-level priest spell) once per day.

* At 7th level, alaghor can cast axe storm of Clangeddin (as the 4th-level priest spell) or defensive harmony (as the 4th-level priest spell) once per day.

* At 7th level, alaghor who are not multiclassed can make three melee attacks every two rounds.

* At 10th level, alaghor can cast detect magic (as the 1st-level priest spell) at will.

* At 13th level, alaghor can inflict a triple-damage battle axe blow once per day. (The attack must be selected after a successful hit, but before the damage is rolled.)

* At 13th level, alaghor who are not multiclassed can make two melee attacks per round.

* At 15th level, alaghor can cast blade barrier (as the 6th-level priest spell) once per day.

 

Clangeddite Spells

 

Silverbeard

(Alteration)

Level 1

Sphere: Combat

Range: 0

Components: V,S,M

Duration: 1 turn + 1 round / level

Casting Time: 4

Area of Effect: The caster

Saving Throw: None

 

By means of this spell, the priest temporarily transforms his or her beard into refined silver. In addition to the stunning visual impact of this spell effect, a silverbeard serves as an unusual shield in combat situations.

 

If the priest is unarmored, silverbeard confers a base AC of 8 (7 if a shield is also borne) for the duration of the spell. If armor of any sort is worn, this spell confers a +1 AC bonus for the duration of the spell. Repeated use of this spell gradually transforms the color of the priest's beard to silver.

 

The material component is the priest's holy symbol.

 

 

Rockburst

(Alteration)

Level 2

Sphere: Combat

Range: 10 yards / level

Components: V, S

Duration: 1 round

Casting Time: 5

Area of Effect: 1 cubic foot / level

Saving Throw: Special

 

This spell allows the caster to make a boulder or rockpile explode suddenly, propelling jagged shards in all directions. If the pile or area of rock targeted is larger than the volume the priest can affect, only part of it flies about.

 

Shrapnel endangers all beings within 20 feet of the center of the effected rock. Those beings within 10 feet must succeed at a saving throw vs. spell for half damage. Those beings between 10 and 20 feet distant who succeed at a saving throw are allowed a second saving throw. If both rolls are successful, they avoid all damage (due to luck, dodging, and cover). If only one roll is successful, they suffer half damage. The presence of cover or armor does not automatically lessen damage due to the unpredictability of ricochets, bounces, and the like.

 

The shrapnel does a base damage of 1d4+l points per level of the caster (in other words, 1d4+1 points per cubic foot of rock) to a maximum of 10d4+10. In rare cases, the explosion removes enough rock to cause an avalanche or cave-in, but the DM decides the likelihood of this event.

 

 

Axe Storm of Clangeddin

(Alteration)

Level 4

Sphere: Combat

Range: 0

Components: V, S, M

Duration: 3 rounds

Casting Time: 7

Area of Effect: 40 foot cube, 1 dwarf / 2 levels of caster

Saving Throw: None

 

When this spell is cast, each affected dwarf gains an additional attack per round with every axe wielded in melee combat or hurled at an opponent. Movement, spellcasting, spell effects, or attacks with weapons other than axes are not hastened. For the purposes of this spell, axes include battle axes, hand axes, hatchets, throwing axes, and two-handed battle axes; these may be nonmagical or magical.

 

This spell is not cumulative with itself or with other similar magic. A slow spell negates the effects of an axe storm of Clangeddin, but otherwise has no effect.

 

The material components of this spell are the priest's holy symbol and a small sealed glass vial of air capped in the midst of a thunderstorm.

 

I would like some advice regarding the kit:

 

- I have called the kit "Alaghar of Clangeddin Silverbeard", is this an appropiate name? Alaghor should be the plural, that's why I changed it, but I don't know if it is supposed to be read like that.

 

- Although it says it can use any weapon, I don't know how many proficiencies it should be allowed, any advice?

 

- Because I don't have a better name, I called the increased attacks per round abilities "Speed of Battle" and "Greater Speed of Battle", although I suppose there is not need for names, since nobody will be seeing those.

 

I'm still figuring out a good way to implement the extra attacks per round at different levels. At the moment weirdness occur when two modifiers pile on, and setting them to a fixed number at level 7 will prevent the second one to apply at level 13. I face the same problem for "Axe Storm of Clangeddin" spell, plus I don't think it can be set to apply only for axes and not multiclassed characters (aside via scripting, something I'm very green on).

 

- Because the same reason as before, I have named the x3 damage attack ability (this one has to be activated, so the name is visible) "Might of the Many". Problems: I cannot make it work only for 'one and successful' attack unless I make it an item, plus it will work with every weapon, not only battle axes. At the moment I have made it so every attack in the round, if it hits, backstabs for triple damage (similar to assassination HLA).

 

- The Holy Symbol. It says it is two crossed battle axes, but no clue if it should be a ring, a shield... For now I have made it a mithral armor, with the default bam for the mithral armor in-game (because I'm the worst artistic painter ever). Could be overpowered, I don't know...

 

Well, I'd really appreciate some imput in these matters. I want to do it right. Thanks a lot for reading.

Link to post

Ok, I have the kit working and it applies to Yeslick correctly (used the same macro I posted), so there is little else I can do. Also the ability spells are somehow stacking properly, I still lack of custom bams, but the default ones kind of fit.

 

I'm going to try and learn some scripting to try and polish how things are handled.

 

Any advice will always be welcome, I'll check this thread often... until it gets buried into oblivion

 

EDIT:

 

By the way I also have added some custom greeting dialog to Oisig in the Temple District, the other kits had this feature too so I thought it would be a nice touch :)

Link to post

Cool stuff - I am swamped at the moment, and most of the kit work is out of my area of specialty, but keep going - there will be folks along soon that know this stuff soon, I am sure :)

 

Check with/PM Caedwyr, too and see if he is available - he dealt with all sorts of cool things with his Geomantic Sorceror mod. Yarpen has a full kit mod Paladins of Faerun, and I know he added DR stuff to it. Some of the other folks are out of commission due to RL stuff, but both of those folks should be able to point you in the direction of some answers.

Link to post

Thanks cmorgan, I just read about G3 anniversary and that everybody is kind of busy with that, so I'll probably should wait until the thing has passed before PM'ing anybody.

 

About the kit, I have added some stronghold fixes regarding Telwyn and Oisig (this last one was not needed I believe, since he's the one who appears by default, but anyway...). That should pretty much cover everything DR does with its kits.

 

It has been fun doing this, I'm actually thinking of making something nice and original (this rather has been copy-pasting :)). I got my eyes on a SimDing0's scripting tutorial and some other cool stuff around here, if I can actually learn something... well, I've got some ideas that I'd like to try (not kit related) .

 

Talk to you when there are less things going on around here :(

Link to post

Nah, don't wait - life's too short, and there's *always* something going on - if you are excited and having fun doing it, just dive in! SimDing0's tutorial is a must-read, and if you take a poke through cirrerek's stuff (gMinion et al, but he is retired), Yovaneth's scripting stuff (mostly at SHS but he can be gotten here too), and if your brain is ready for some serious torching, DavidW's materials, you can get lots of good information.

For messing about with custom spells, right now Demivrgvs is actively developing new spell and item stuff, mostly by building and overwriting - Galactygon has been contributing spell developments and packs since the ancient glory days and does heavy duty patching macros (his work is in things like The longer Road, BG2 Tweak Pack, PnP Celestials, and his own Spellpack over at BWL, I think).

 

And if you are talking about the whole "add your own dialog and mes with building a new mod" thing, there's lots to keep you busy reading... so if you don't get an answer fast, poke about here, at PPG, and at SHS.

Link to post

Okay! I'll start poking people around when I need it (or when my head starts to really hurt after trying the different bazillion self-help tutorials around :()

 

At the moment I'm working in the first phase of a mod regarding bioware NPCs that could make them seem more 'alive'. It's nothing fancy, but it's nice and original (at least in BG)... and I was hoping once the first stage is complete, I could actually ask you guys about integrating it into BG1NPC.

 

Of course everything is susceptible to stop, I just learned my college classes start this Monday and this is gonna be a really hard year, so I hope I get enough time to keep it going.

 

Anyhow, thanks a lot for your responses, cmorgan.

 

EDIT: I really need to learn how to write in proper English :)

Link to post

Archived

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

×
×
  • Create New...