Jump to content

Removing BG1 profs


Nythrun

Recommended Posts

Thank you pro5 for pointing this out :)

 

Three hundred odd creatures are equipped with weapons (mostly claws and such) with proficiency type 0x00, and also have non-zero values in the longsword proficiency creature field. Zeroing this out will deprive dragons, Bohdi, et alis of +4 to hit and damage and will deprive fighters of bonus attacks also. It's particularly bad for Drizzt's gang, who with their non-proficiency penalties now resemble the Stooges even more than before. Locally,

	WRITE_LONG 0x6e 0
WRITE_LONG 0x72 0

is getting changed to

	WRITE_ASCIIT 0x6f ~~ #7

in Super Happy Fun Lucky Modder Thingy, and Drizzt & Co. get

COPY_EXISTING ~c6drizz.cre~   ~override~
		  ~c6drizz2.cre~  ~override~
		  ~c6drizz3.cre~  ~override~
 PATCH_IF (%SOURCE_SIZE% > 0x2d3) THEN BEGIN
READ_LONG  0x2a0 "kso"
READ_LONG  0x2a4 "ksc"
READ_LONG  0x2a8 "smo"
READ_LONG  0x2ac "smc"
READ_LONG  0x2b0 "mso"
READ_LONG  0x2b4 "msc"
READ_LONG  0x2b8 "iso"
READ_LONG  0x2bc "ilo"
READ_LONG  0x2c0 "ilc"
READ_LONG  0x2c4 "fxo"
READ_LONG  0x2c8 "fxc"
WRITE_LONG 0x2c8 ("fxc" + 0x02)
INSERT_BYTES "fxo" (0x108 * 0x02)
  FOR ("i" = 0x00; "i" < 0x02; "i" += 0x01) BEGIN
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x08) 0xe9 // opcode: weaponprof
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x1c) 0x09 // perm. after death
  END
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x14) 0x05 // stars
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x18) 0x5f // scimitar prof
  WRITE_LONG   ("fxo" + (0x108 * 0x01) + 0x14) 0x03 // stars
  WRITE_LONG   ("fxo" + (0x108 * 0x01) + 0x18) 0x72 // two-weapon prof
PATCH_IF (("kso" > "fxo") AND ("ksc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a0 ("kso" + (0x108 * 0x02))
END
PATCH_IF (("smo" > "fxo") AND ("smc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a8 ("smo" + (0x108 * 0x02))
END
PATCH_IF (("mso" > "fxo") AND ("msc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2b0 ("mso" + (0x108 * 0x02))
END
PATCH_IF  ("iso" >= "fxo")					 THEN BEGIN
  WRITE_LONG 0x2b8 ("iso" + (0x108 * 0x02))
END
PATCH_IF (("ilo" >= "fxo") AND ("ilc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2bc ("ilo" + (0x108 * 0x02))
END
 END
BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING ~c6wulf.cre~	~override~
		  ~c6wulf2.cre~   ~override~
 PATCH_IF (%SOURCE_SIZE% > 0x2d3) THEN BEGIN
READ_LONG  0x2a0 "kso"
READ_LONG  0x2a4 "ksc"
READ_LONG  0x2a8 "smo"
READ_LONG  0x2ac "smc"
READ_LONG  0x2b0 "mso"
READ_LONG  0x2b4 "msc"
READ_LONG  0x2b8 "iso"
READ_LONG  0x2bc "ilo"
READ_LONG  0x2c0 "ilc"
READ_LONG  0x2c4 "fxo"
READ_LONG  0x2c8 "fxc"
WRITE_LONG 0x2c8 ("fxc" + 0x01)
INSERT_BYTES "fxo" (0x108 * 0x01)
  FOR ("i" = 0x00; "i" < 0x01; "i" += 0x01) BEGIN
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x08) 0xe9 // opcode: weaponprof
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x1c) 0x09 // perm. after death
  END
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x14) 0x05 // stars
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x18) 0x61 // warhammer prof
PATCH_IF (("kso" > "fxo") AND ("ksc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a0 ("kso" + (0x108 * 0x01))
END
PATCH_IF (("smo" > "fxo") AND ("smc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a8 ("smo" + (0x108 * 0x01))
END
PATCH_IF (("mso" > "fxo") AND ("msc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2b0 ("mso" + (0x108 * 0x01))
END
PATCH_IF  ("iso" >= "fxo")					 THEN BEGIN
  WRITE_LONG 0x2b8 ("iso" + (0x108 * 0x01))
END
PATCH_IF (("ilo" >= "fxo") AND ("ilc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2bc ("ilo" + (0x108 * 0x01))
END
 END
BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING ~c6catti.cre~   ~override~
		  ~c6catti2.cre~  ~override~
 PATCH_IF (%SOURCE_SIZE% > 0x2d3) THEN BEGIN
WRITE_BYTE 0x247 0x02
READ_LONG  0x2a0 "kso"
READ_LONG  0x2a4 "ksc"
READ_LONG  0x2a8 "smo"
READ_LONG  0x2ac "smc"
READ_LONG  0x2b0 "mso"
READ_LONG  0x2b4 "msc"
READ_LONG  0x2b8 "iso"
READ_LONG  0x2bc "ilo"
READ_LONG  0x2c0 "ilc"
READ_LONG  0x2c4 "fxo"
READ_LONG  0x2c8 "fxc"
WRITE_LONG 0x2c8 ("fxc" + 0x02)
INSERT_BYTES "fxo" (0x108 * 0x02)
  FOR ("i" = 0x00; "i" < 0x02; "i" += 0x01) BEGIN
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x08) 0xe9 // opcode: weaponprof
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x1c) 0x09 // perm. after death
  END
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x14) 0x05 // stars
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x18) 0x5a // longsword prof
  WRITE_LONG   ("fxo" + (0x108 * 0x01) + 0x14) 0x05 // stars
  WRITE_LONG   ("fxo" + (0x108 * 0x01) + 0x18) 0x69 // shortbow prof
PATCH_IF (("kso" > "fxo") AND ("ksc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a0 ("kso" + (0x108 * 0x02))
END
PATCH_IF (("smo" > "fxo") AND ("smc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a8 ("smo" + (0x108 * 0x02))
END
PATCH_IF (("mso" > "fxo") AND ("msc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2b0 ("mso" + (0x108 * 0x02))
END
PATCH_IF  ("iso" >= "fxo")					 THEN BEGIN
  WRITE_LONG 0x2b8 ("iso" + (0x108 * 0x02))
END
PATCH_IF (("ilo" >= "fxo") AND ("ilc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2bc ("ilo" + (0x108 * 0x02))
END
 END
BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING ~c6bruen.cre~   ~override~
		  ~c6bruen2.cre~  ~override~
 PATCH_IF (%SOURCE_SIZE% > 0x2d3) THEN BEGIN
READ_LONG  0x2a0 "kso"
READ_LONG  0x2a4 "ksc"
READ_LONG  0x2a8 "smo"
READ_LONG  0x2ac "smc"
READ_LONG  0x2b0 "mso"
READ_LONG  0x2b4 "msc"
READ_LONG  0x2b8 "iso"
READ_LONG  0x2bc "ilo"
READ_LONG  0x2c0 "ilc"
READ_LONG  0x2c4 "fxo"
READ_LONG  0x2c8 "fxc"
WRITE_LONG 0x2c8 ("fxc" + 0x01)
INSERT_BYTES "fxo" (0x108 * 0x01)
  FOR ("i" = 0x00; "i" < 0x01; "i" += 0x01) BEGIN
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x08) 0xe9 // opcode: weaponprof
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x1c) 0x09 // perm. after death
  END
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x14) 0x05 // stars
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x18) 0x5c // axe prof
PATCH_IF (("kso" > "fxo") AND ("ksc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a0 ("kso" + (0x108 * 0x01))
END
PATCH_IF (("smo" > "fxo") AND ("smc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a8 ("smo" + (0x108 * 0x01))
END
PATCH_IF (("mso" > "fxo") AND ("msc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2b0 ("mso" + (0x108 * 0x01))
END
PATCH_IF  ("iso" >= "fxo")					 THEN BEGIN
  WRITE_LONG 0x2b8 ("iso" + (0x108 * 0x01))
END
PATCH_IF (("ilo" >= "fxo") AND ("ilc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2bc ("ilo" + (0x108 * 0x01))
END
 END
BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING ~c6regis.cre~   ~override~
		  ~c6regis2.cre~  ~override~
 PATCH_IF (%SOURCE_SIZE% > 0x2d3) THEN BEGIN
READ_LONG  0x2a0 "kso"
READ_LONG  0x2a4 "ksc"
READ_LONG  0x2a8 "smo"
READ_LONG  0x2ac "smc"
READ_LONG  0x2b0 "mso"
READ_LONG  0x2b4 "msc"
READ_LONG  0x2b8 "iso"
READ_LONG  0x2bc "ilo"
READ_LONG  0x2c0 "ilc"
READ_LONG  0x2c4 "fxo"
READ_LONG  0x2c8 "fxc"
WRITE_LONG 0x2c8 ("fxc" + 0x01)
INSERT_BYTES "fxo" (0x108 * 0x01)
  FOR ("i" = 0x00; "i" < 0x01; "i" += 0x01) BEGIN
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x08) 0xe9 // opcode: weaponprof
	WRITE_LONG ("fxo" + (0x108 * "i" ) + 0x1c) 0x09 // perm. after death
  END
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x14) 0x05 // stars
  WRITE_LONG   ("fxo" + (0x108 * 0x00) + 0x18) 0x5c // axe prof
PATCH_IF (("kso" > "fxo") AND ("ksc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a0 ("kso" + (0x108 * 0x01))
END
PATCH_IF (("smo" > "fxo") AND ("smc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2a8 ("smo" + (0x108 * 0x01))
END
PATCH_IF (("mso" > "fxo") AND ("msc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2b0 ("mso" + (0x108 * 0x01))
END
PATCH_IF  ("iso" >= "fxo")					 THEN BEGIN
  WRITE_LONG 0x2b8 ("iso" + (0x108 * 0x01))
END
PATCH_IF (("ilo" >= "fxo") AND ("ilc" > 0x00)) THEN BEGIN
  WRITE_LONG 0x2bc ("ilo" + (0x108 * 0x01))
END
 END
BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING ~bruenaxe.itm~ ~override~
 PATCH_IF (%SOURCE_SIZE% > 0x71) THEN BEGIN
WRITE_BYTE 0x31 0x5c // axe proficiency
READ_LONG  0x64 "ho"
READ_SHORT 0x68 "hc"
READ_LONG  0x6a "eo"
FOR ("i" = 0x00; "i" < "hc"; "i" += 0x01) BEGIN
  READ_BYTE	 ("hc" + (0x38 * "i") + 0x00) "at"
  PATCH_IF ("at" = 0x01) THEN BEGIN
	WRITE_SHORT ("hc" + (0x38 * "i") + 0x18) 0x01 // dice thrown
  END
END
 END
BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING ~aegis.itm~  ~override~
		  ~aegis2.itm~ ~override~
 PATCH_IF (%SOURCE_SIZE% > 0x71) THEN BEGIN
SAY		 0x08 #6345 // unidentified name
WRITE_BYTE  0x31 0x61  // warhammer proficiency
WRITE_LONG  0x60 0x03  // enchantment level
 END
BUT_ONLY_IF_IT_CHANGES

 

The Ravager, Spectral Brand +5, the Kobold Shaman in the Lilarcor Sewers, and a whole lot more also need changing.

Link to comment

These values were either defaults from the toolset or leftover when the resources were imported (and subsequently cloned) from Baldur's Gate. They shouldn't have any effect on any usable item in the game (they probably have no effect ever, unless the "old" proficiency specs actually do something).

 

There's no point in overwriting them either, though, except for PCs (since the crud apparently shows up in the proficiency list).

Link to comment

They absolutely do have an effect. The only BG1 proficiency type that's used in any BG2 items is 0x00, and it's not Large Swords now, it's default/none, which most critter attack items are.

 

Give your PC five stars in this and go punch something :) Or take away Bohdi's five stars, and watch her damage wane.

Link to comment

0 is unarmed (and can be influenced with the fist THAC0 and damage modifiers).

 

Five stars in what (which of the old proficiencies)? You're saying that if I give Imoen +5 of the old large sword proficiency stat, it'll be treated as grand mastery when wielding a long sword? Or that raising any of the old proficiency stats influences unarmed (default) attacks?

Link to comment

It's not unarmed for the weapon that non-monks get, that one's totally hardcoded. You need to wield a monster skull/attack which is 0x00 at 0x1c to get the bonus.

 

What I'm saying is that the old Large Sword stat modifies proficiency type 0x00, and that most creature unarmed attacks (and Aegis Fang, and a bunch of other junk) use this proficiency type.

 

If you gave Imoen five stars in small swords, it would make her a grandmaster of small swords. But there are none in BG2 for her to use, so it's meaningless. Short swords are a totally distinct proficiency type. Giving her five stars in the old Long Swords stat makes her a grandmaster of anything that uses proficiency type 0x00...and there are quite a few of these, it's just that most aren't accessible to the player.

 

It still displays in a screwy way (blank "proficiency") in the wrong place on the character record, and the to-hit rolls in the extended feedback are all wrong just as they are when someone uses the Chant opcode. But the extra stuff you get from the .2da is really there.

 

I'm somewhat skeptical that the dragons were copied over from a BG1 resource, and I'd like them to keep their extra melee prowess :)

Link to comment

A lot of misunderstanding came from A) not reading your post too closely, and B) the tense of some of your statements. :)

 

It's not unarmed for the weapon that non-monks get, that one's totally hardcoded. You need to wield a monster skull/attack which is 0x00 at 0x1c to get the bonus.
Which fist the monk gets is hard-coded; any weapon with a proficiency of 0 should get the same unarmed attack bonuses as simply having no weapon at all equipped (i.e., the fist). That said, proficiencies have always been down at the bottom of the list of things I care about, so I haven't ever made any real effort to investigate.

 

If you gave Imoen five stars in small swords, it would make her a grandmaster of small swords. But there are none in BG2 for her to use, so it's meaningless. Short swords are a totally distinct proficiency type.
This is, I think, how it was always assumed all the leftover proficiencies worked. (I don't know that the specs mapped in the 2da can actually be used; I doubt anybody ever bothered to test.)

 

Giving her five stars in the old Long Swords stat makes her a grandmaster of anything that uses proficiency type 0x00...and there are quite a few of these, it's just that most aren't accessible to the player.
The simple fix is to not change these for the modder's pack. I don't think we should go around granting proficiencies to all and sundry except in cases where we explicitly change the proficiency type of an item (and we shouldn't change it for AEGIS.itm, meaning we can drop Wulfgar entirely).

 

I'm somewhat skeptical that the dragons were copied over from a BG1 resource, and I'd like them to keep their extra melee prowess :)
Resources were cloned. Or the editor simply defined default values, or the editor featured templates. We don't change the proficiency value for dragon attack items, so their melee prowess remains undiminished.

 

The modder's pack isn't intended for people who actually play the game. I'd certainly agree with anyone who opined that it should be removed entirely and stuck in some G3 suite presentation for-the-good-of-the-modding-community. ;)

Link to comment
Which fist the monk gets is hard-coded; any weapon with a proficiency of 0 should get the same unarmed attack bonuses as simply having no weapon at all equipped (i.e., the fist). That said, proficiencies have always been down at the bottom of the list of things I care about, so I haven't ever made any real effort to investigate.

Please take a leap of faith with me and believe that when I say "non-monk fist" I do in fact mean non-monk fist. Proficiency type 0x00 doesn't affect the non-monk fist, it's hardcoded also, and differently.

The simple fix is to not change these for the modder's pack. I don't think we should go around granting proficiencies to all and sundry except in cases where we explicitly change the proficiency type of an item (and we shouldn't change it for AEGIS.itm, meaning we can drop Wulfgar entirely).
I know you think I was natally dropped on my head a lot or something, but there's no mention of all and sundry anywhere above. I do not think you should go around embedding effects cause offset juggling is a wacky good time. Nor am I recommending you change anything at all. I'm saying that I am changing it locally, that's all, do what you like. Bruenor's Axe is a player accessible item and thus I want it to have a valid proficiency type, but not at the expense of making him suffer LarryCurleyandMoe penalties with his own weapon that he's meant to be grandmaster of.

 

Resources were cloned. Or the editor simply defined default values, or the editor featured templates. We don't change the proficiency value for dragon attack items, so their melee prowess remains undiminished.
They're losing the grandmastery +4 damage, +4 to-hit, and -3 speed factor, because their claws are all proficiency type zero. And if you think Parisa having two stars worth of proficiency and Bodhi having five is happenstance, and that they ought to both have none, that's perfectly okay with me - I'll just luxuriantly revert it. Again, do what you like :)
Link to comment
I know you think I was natally dropped on my head a lot or something,
Weren't we all? :)

 

Bruenor's Axe is a player accessible item and thus I want it to have a valid proficiency type, but not at the expense of making him suffer LarryCurleyandMoe penalties with his own weapon that he's meant to be grandmaster of.
Only Aegis2.itm can be dropped. He wields Aegis.itm, which cannot be obtained.

 

I agree that it is an issue, but I don't think converting old-style proficiencies to new proficiencies is something we should do unless we change the proficiency type of a weapon where the creature wielding it would have received a proficiency bonus before the change. That was the only real point of my post. (I purposely didn't factor in the modder pack zeroing of the old values since it's not really part of the core fixpack.)

Link to comment
This is also probably a good time to mention that one of ideas for Tweaks v4 was to give profs to non-joinable NPCs for a more challenging game experience.

 

I had absolutely no intention of writing something like that until you mentioned it, hee.

Link to comment

OK, these proficiencies are just still working for some reason. They behave identically as in Baldur's Gate. Each proficiency applies bonuses based on the category of the item being wielded (giving +5 small swords will make Imoen a grandmaster of all small swords, from the short sword to the ninja-to). The covered categories for each proficiency is pretty self-explanatory (daggers and small swords for small swords, long swords for large swords, crossbows, slings, and darts for missile weapons, etc.).

 

The item proficiency is irrelevant. You shouldn't be seeing different THAC0 and damage values from creatures that aren't wielding the correct category items with and without the old-style proficiencies.

Link to comment
giving +5 small swords will make Imoen a grandmaster of all small swords, from the short sword to the ninja-to...
Has someone tested this for all the BG1-style categories? In other words, giving a CRE the BG1 Axe proficiency will also give them the BG2 Axe proficiency? Is applying an effect the only other way to apply BG2 proficiencies to a CRE? (This is related to my other questions about CREs.)
Link to comment

No. I don't know if the old-style proficiencies use the same tables or if it even gives the right bonuses. The proficiency will apply to equipped weapons based on category (rather than the proficiency value set in the item definition). So you'd get some sort of bonus for a creature wielding any axe category item.

 

You should never use these for player characters; I don't think it matters for NPCs, but I don't think it's necessary unless you're giving them player weapons to wield (a proficiency value of 0 will allow the creature to attack without any penalties, so you can bypass proficiencies altogether if you want).

 

Baldur's Gate II proficiencies are attached effects. You need to add an EFF v2 structure to the creature definition to add a proficiency.

Link to comment

Archived

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

×
×
  • Create New...