Jump to content

Editing proficiencies in CREs


subtledoctor

Recommended Posts

Introduction: I have a little (?) mod in development over on the Beamdog forums. One of the thing it aims to do is collapse Bastard Sword and 2-Handed Sword proficiencies, only using the latter. This means every CRE mob in the game who carries a bastard sword, must be given proficiency in 2-Hand Sword to use it properly. A nice person have me this code to use:

 

COPY_EXISTING_REGEXP GLOB ~.*\.cre~ ~override~
  PATCH_IF (SOURCE_SIZE > 0x2c8) BEGIN
  READ_LONG 0x2c4 "effect_offset"
  READ_LONG 0x2c8 "effect_count"
    FOR (loop = 0 ; loop < effect_count ; ++loop) BEGIN
      READ_LONG (effect_offset + 0x10 + (loop * 0x110)) "opcode"
        PATCH_IF opcode = 233 BEGIN
          READ_LONG (effect_offset + 0x20 + (loop * 0x110)) prof
            PATCH_IF prof = 99 BEGIN
              WRITE_LONG (effect_offset + 0x20 + (loop * 0x110)) 98
            END
        END
    END
  END
BUT_ONLY
But I'm getting this error when trying to install:

 

ERROR: illegal 4-byte read from offset 1592 of 1336-byte file AJANTI.CRE
ERROR: [AJANTI.CRE] -> [override/AJANTI.CRE] Patching Failed (COPY) (Failure("AJANTI.CRE: read out of bounds"))
Stopping installation because of error.
Any idea why?
Link to comment

The macro assumes creature effects of type 1. Creature files can also use the old effect 0 type, in which case the effects are only 0x30 in length (like the ones in spells and items) so that loop * 0x110 will go beyond EOF.

 

Now's a chance to pimp my new ALTER_EFFECT macro.

 

 

COPY_EXISTING_REGEXP GLOB ~^.+\.cre$~ ~override~
  LPF ALTER_EFFECT INT_VAR match_opcode = 233 match_parameter2 = 99 parameter2 = 98 END
  BUT_ONLY

This will be in WeiDU v237, or you can just grab the macro in the WeiDU forums in the mean time.

Link to comment
Now's a chance to pimp my new ALTER_EFFECT macro.

...

This will be in WeiDU v237, or you can just grab the macro in the WeiDU forums in the mean time.

You didn't actually write the ALTER_EFFECT macro, just the DELETE_EFFECT & CLONE_EFFECT macro'es here. :D

Or at least I can't see it there. Is it in a PM to Wisp ? Or something.

Link to comment

CamDawg gave you the answer but for non joinable NPCs i.e. basically all creatures that might be encountered as enemies you could just use:

 

 

WRITE_BYTE 0x006e n //Large sword proficiency

 

Where 'n' is the number of stars they had in bastard swords, since the BG2 engine still recognizes BG1 proficiencies.

 

Mod-added NPCs with pips in bastard swords might still be a problem, so Cam's idea is probably better.

Link to comment

... you could just use: ...

But the fix is based on the fact that the character already has points in the BG2 proficiency of Bastard swords... it has nothing to do with the BG1's Large Weapons prof. So this is better for everyone.

Ups, yeah, the ALTER_EFFECT is indeed defined the post I linked to... the PPG's code box just fooled me a bit(actually plenty). :(

Link to comment

CamDawg gave you the answer but for non joinable NPCs i.e. basically all creatures that might be encountered as enemies you could just use:

WRITE_BYTE 0x006e n //Large sword proficiency

Where 'n' is the number of stars they had in bastard swords, since the BG2 engine still recognizes BG1 proficiencies.

 

Mod-added NPCs with pips in bastard swords might still be a problem, so Cam's idea is probably better.

 

Wha? So if I give CREs proficiency in "blunt" they will be able to use all clubs, maces, flails, morning stars and quarterstaves? For non-joinable NPCs that would indeed be a quick and easy way to do it. But I wonder how it handles weapons not in BG1 - i.e. what about halberds, katanas, ninja-tos? Etc.

 

What I'm trying to do here is not so much mod CREs, but rather mod the proficiency system. E.g. I'm collapsing halberds and spears into a single "polearms" category. So I've patched all halberd ITMs to use the Spears proficiency, and patched weapprof.2da to disallow anyone taking points in halberd. Now I need to patch the CREs so that enemies carrying halberds won't suddenly be unable to use their own weapon effectively against the player. (Joinable NPCs are getting a whole different treatment - my system certain grants profs at level 1 based on class/kit; so every joinable NPC has to be patched with a handful of new proficiencies. Enemies only need to be able to use what they're carrying, so I can paint them with a broader, simpler, brush.)

 

In any event, Camdawg's macro installed sucessfully! I need to delve into NI/playtesting to make sure it's all correct, but so far so good! Thanks!

Link to comment

It's been a while, but IIRC the old prof system worked on the weapon's item type (short at 0x1c in the item file). Since katanas are generally classed as large swords (20), they'd naturally fall into the existing large swords BG prof, as would ninja-tos. Wakizashis fall into small swords (19). Some of the profs (like blunt) encompassed multiple item types, so it's not always a 1:1 match.

Link to comment

It's been a while, but IIRC the old prof system worked on the weapon's item type (short at 0x1c in the item file). Since katanas are generally classed as large swords (20), they'd naturally fall into the existing large swords BG prof, as would ninja-tos. Wakizashis fall into small swords (19). Some of the profs (like blunt) encompassed multiple item types, so it's not always a 1:1 match.

I think the though behind the original question is: Does a creature that has both Katana and LargeSword proffs and uses the Katana get both bonuses, or just the higher ones ? :D

Link to comment

Well, that macro seems to be working great. Only issue is it sometimes doubles up - e.g. AJANTI6.cre has 2 stars in both 2-hand sword and bastard sword... when I merge bastard swords into 2-hand swords, his CRE now has two effects of opcode 233 indicating "set 2-hand sword proficiency to two stars." I don't think that hurts anything, in-game. I suppose it might be an issue if they differ in how many stars to apply, but then I assume either the greater number, or the one that comes last, wins out. As long as it doesn't cause crashes, whatever.

 

Anyway while people are listening to me, here's my recent problem: the component successfully installs, and updates the strings for proficiency choices in the character generation screen. The strings appear correct in NI, but in-game they show as "INVALID: 35001"

I narrowed it down to, of all things, the weapprof.2da edits. Granted, this is an overhaul of every kit's proficiencies, so there are a LOT of weapprof.2da edits. But, how can that affect the game's ability to display strings in the proficiency choice screen??

 

My code is below, in spoilers (warning, it's loooong). Or, you can follow this link to download a little mini-mod I made to demonstrate this. You can edit the .tp2, and see how commenting out the weapprof.2da edits causes the string changes to work.

http://forum.baldursgate.com/discussion/33657/scales-of-balance-get-it-kits-and-tweaks#latest

 

 

 

//UPDATE PROFICIENCY STRINGS__________________________
//
ACTION_IF GAME_IS ~bgee~ THEN BEGIN
STRING_SET 24315 ~Proficiency Slot Table:

1 slot: none

2 slots: +1 to hit, +1 to damage, -1 to speed.

3 slots: +2 to hit, +2 to damage, -1 to speed, an extra attack every other round.

4 slots: +4 to hit, +2 to damage, -1 to speed, one extra attack.
~
STRING_SET 25000 ~Special~
STRING_SET 25004 ~Greatswords~
STRING_SET 25005 ~...~
STRING_SET 25006 ~Scimitar/Katana~
STRING_SET 25007 ~Daggers/Darts~
STRING_SET 25010 ~Spears/Halberds~
STRING_SET 25011 ~...~
STRING_SET 25016 ~...~
STRING_SET 25017 ~Bows~
STRING_SET 25018 ~...~
STRING_SET 25024 ~ ~
STRING_SET 25028 ~HEAVY SWORDS: The hallmark of the traditional muscle bound warrior is the greatsword: claymores, bastard swords, and other double-edge blades large enough to be used with two hands. This proficiency class allows you to use these heavy swords to mangle your opponents.
~
STRING_SET 25029 ~ ~
STRING_SET 25030 ~CURVED SWORDS: This weapon class allows the character to use various single-edged blades, including the Scimitar, the katana, and the Wakazashi.
~
STRING_SET 25031 ~DAGGERS: DAGGER: This weapons class covers daggers, dirks, knives and darts - any small blades used for stabbing or hurling at enemies. While small, daggers are still extremely useful and many warriors carry them in case their larger weapons are stolen or destroyed.
~
STRING_SET 25034 ~POLEARMS: This weapon class includes long spears, pikes, halberds and other polearms. Their long 'reach' makes them very useful against most opponents.
~
STRING_SET 25035 ~ ~
STRING_SET 25040 ~ ~
STRING_SET 25041 ~BOWS: This proficiency allows a character to skillfully wield various bows, which are easy to use and have a high rate of fire.
~
STRING_SET 25042 ~ ~
END
ACTION_IF ENGINE_IS ~tob bg2ee~ THEN BEGIN
STRING_SET 9588 ~Proficiency Slot Table:

1 slot: none

2 slots: +1 to hit, +1 to damage, -1 to speed.

3 slots: +2 to hit, +2 to damage, -1 to speed, an extra attack every other round.

4 slots: +4 to hit, +2 to damage, -1 to speed, one extra attack.
~
STRING_SET 31113 ~Special~
STRING_SET 31117 ~Greatswords~
STRING_SET 31118 ~...~
STRING_SET 31119 ~Scimitar/Katana~
STRING_SET 31120 ~Daggers/Darts~
STRING_SET 31122 ~Spears/Halberds~
STRING_SET 31123 ~...~
STRING_SET 31128 ~...~
STRING_SET 31129 ~Bows~
STRING_SET 31130 ~...~
STRING_SET 34146 ~ ~
STRING_SET 34150 ~HEAVY SWORDS: The hallmark of the traditional muscle bound warrior is the greatsword: claymores, bastard swords, and other double-edge blades large enough to be used with two hands. This proficiency class allows you to use these heavy swords to mangle your opponents.
~
STRING_SET 34151 ~ ~
STRING_SET 34152 ~CURVED SWORDS: This weapon class allows the character to use various single-edged blades, including the Scimitar, the katana, and the Wakazashi.
~
STRING_SET 34153 ~DAGGERS: DAGGER: This weapons class covers daggers, dirks, knives and darts - any small blades used for stabbing or hurling at enemies. While small, daggers are still extremely useful and many warriors carry them in case their larger weapons are stolen or destroyed.
~
STRING_SET 34157 ~POLEARMS: This weapon class includes long spears, pikes, halberds and other polearms. Their long 'reach' makes them very useful against most opponents.
~
STRING_SET 34158 ~ ~
STRING_SET 34163 ~ ~
STRING_SET 34164 ~BOWS: This proficiency allows a character to skillfully wield various bows, which are easy to use and have a high rate of fire.
~
STRING_SET 34165 ~ ~
END
//_________________________________________________________

//AMEND WEAPPROF.2DA__________________________________
//
COPY_EXISTING ~WEAPPROF.2da~ ~override~
REPLACE_TEXTUALLY ~ 2~ ~ 3~
REPLACE_TEXTUALLY ~ 5~ ~ 4~
// Fighter
SET_2DA_ENTRY 13 5 1 ~3~
SET_2DA_ENTRY 14 5 1 ~3~
SET_2DA_ENTRY 17 5 1 ~3~
SET_2DA_ENTRY 18 5 1 ~3~
SET_2DA_ENTRY 25 5 1 ~3~
SET_2DA_ENTRY 26 5 1 ~3~
SET_2DA_ENTRY 28 5 1 ~3~
SET_2DA_ENTRY 30 5 1 ~3~
SET_2DA_ENTRY 31 5 1 ~2~
SET_2DA_ENTRY 32 5 1 ~2~
SET_2DA_ENTRY 33 5 1 ~2~
SET_2DA_ENTRY 11 5 1 ~0~
SET_2DA_ENTRY 16 5 1 ~0~
SET_2DA_ENTRY 22 5 1 ~0~
SET_2DA_ENTRY 27 5 1 ~0~
SET_2DA_ENTRY 29 5 1 ~0~
SET_2DA_ENTRY 20 5 1 ~3~
// Cleric
SET_2DA_ENTRY 7 6 1 ~2~
SET_2DA_ENTRY 8 6 1 ~2~
SET_2DA_ENTRY 10 6 1 ~2~
SET_2DA_ENTRY 19 6 1 ~2~
SET_2DA_ENTRY 23 6 1 ~2~
SET_2DA_ENTRY 24 6 1 ~2~
SET_2DA_ENTRY 25 6 1 ~2~
SET_2DA_ENTRY 30 6 1 ~2~
SET_2DA_ENTRY 11 6 1 ~0~
SET_2DA_ENTRY 16 6 1 ~0~
SET_2DA_ENTRY 22 6 1 ~0~
SET_2DA_ENTRY 27 6 1 ~0~
SET_2DA_ENTRY 29 6 1 ~0~
SET_2DA_ENTRY 20 6 1 ~2~
SET_2DA_ENTRY 26 6 1 ~1~
// Thief
SET_2DA_ENTRY 4 7 1 ~2~
SET_2DA_ENTRY 7 7 1 ~2~
SET_2DA_ENTRY 10 7 1 ~2~
SET_2DA_ENTRY 12 7 1 ~2~
SET_2DA_ENTRY 13 7 1 ~2~
SET_2DA_ENTRY 17 7 1 ~2~
SET_2DA_ENTRY 18 7 1 ~2~
SET_2DA_ENTRY 25 7 1 ~2~
SET_2DA_ENTRY 26 7 1 ~2~
SET_2DA_ENTRY 28 7 1 ~2~
SET_2DA_ENTRY 30 7 1 ~2~
SET_2DA_ENTRY 31 7 1 ~0~
SET_2DA_ENTRY 32 7 1 ~0~
SET_2DA_ENTRY 33 7 1 ~2~
SET_2DA_ENTRY 34 7 1 ~3~
SET_2DA_ENTRY 11 7 1 ~0~
SET_2DA_ENTRY 16 7 1 ~0~
SET_2DA_ENTRY 22 7 1 ~0~
SET_2DA_ENTRY 27 7 1 ~0~
SET_2DA_ENTRY 29 7 1 ~0~
SET_2DA_ENTRY 20 7 1 ~1~
// Bard
SET_2DA_ENTRY 3 8 1 ~2~
SET_2DA_ENTRY 4 8 1 ~2~
SET_2DA_ENTRY 5 8 1 ~2~
SET_2DA_ENTRY 6 8 1 ~0~
SET_2DA_ENTRY 7 8 1 ~2~
SET_2DA_ENTRY 8 8 1 ~2~
SET_2DA_ENTRY 9 8 1 ~2~
SET_2DA_ENTRY 10 8 1 ~2~
SET_2DA_ENTRY 12 8 1 ~2~
SET_2DA_ENTRY 13 8 1 ~2~
SET_2DA_ENTRY 14 8 1 ~2~
SET_2DA_ENTRY 15 8 1 ~0~
SET_2DA_ENTRY 17 8 1 ~2~
SET_2DA_ENTRY 18 8 1 ~2~
SET_2DA_ENTRY 19 8 1 ~2~
SET_2DA_ENTRY 21 8 1 ~0~
SET_2DA_ENTRY 23 8 1 ~2~
SET_2DA_ENTRY 24 8 1 ~2~
SET_2DA_ENTRY 25 8 1 ~0~
SET_2DA_ENTRY 26 8 1 ~2~
SET_2DA_ENTRY 28 8 1 ~2~
SET_2DA_ENTRY 30 8 1 ~2~
SET_2DA_ENTRY 31 8 1 ~1~
SET_2DA_ENTRY 32 8 1 ~1~
SET_2DA_ENTRY 33 8 1 ~1~
SET_2DA_ENTRY 34 8 1 ~1~
SET_2DA_ENTRY 11 8 1 ~0~
SET_2DA_ENTRY 16 8 1 ~0~
SET_2DA_ENTRY 22 8 1 ~0~
SET_2DA_ENTRY 27 8 1 ~0~
SET_2DA_ENTRY 29 8 1 ~0~
SET_2DA_ENTRY 20 8 1 ~1~
// Paladin
SET_2DA_ENTRY 31 9 1 ~2~
SET_2DA_ENTRY 32 9 1 ~2~
SET_2DA_ENTRY 33 9 1 ~2~
SET_2DA_ENTRY 34 9 1 ~2~
SET_2DA_ENTRY 11 9 1 ~0~
SET_2DA_ENTRY 16 9 1 ~0~
SET_2DA_ENTRY 22 9 1 ~0~
SET_2DA_ENTRY 27 9 1 ~0~
SET_2DA_ENTRY 29 9 1 ~0~
SET_2DA_ENTRY 20 9 1 ~1~
// Druid
SET_2DA_ENTRY 7 10 1 ~2~
SET_2DA_ENTRY 8 10 1 ~2~
SET_2DA_ENTRY 10 10 1 ~2~
SET_2DA_ENTRY 17 10 1 ~2~
SET_2DA_ENTRY 18 10 1 ~2~
SET_2DA_ENTRY 20 10 1 ~2~
SET_2DA_ENTRY 21 10 1 ~2~
SET_2DA_ENTRY 25 10 1 ~2~
SET_2DA_ENTRY 30 10 1 ~2~
SET_2DA_ENTRY 11 10 1 ~0~
SET_2DA_ENTRY 16 10 1 ~0~
SET_2DA_ENTRY 22 10 1 ~0~
SET_2DA_ENTRY 27 10 1 ~0~
SET_2DA_ENTRY 29 10 1 ~0~
// Ranger
SET_2DA_ENTRY 31 11 1 ~2~
SET_2DA_ENTRY 32 11 1 ~0~
SET_2DA_ENTRY 33 11 1 ~2~
SET_2DA_ENTRY 34 11 1 ~3~
SET_2DA_ENTRY 11 11 1 ~0~
SET_2DA_ENTRY 16 11 1 ~0~
SET_2DA_ENTRY 22 11 1 ~0~
SET_2DA_ENTRY 27 11 1 ~0~
SET_2DA_ENTRY 29 11 1 ~0~
SET_2DA_ENTRY 20 11 1 ~1~
// Fighter/Mage
SET_2DA_ENTRY 31 12 1 ~2~
SET_2DA_ENTRY 32 12 1 ~0~
SET_2DA_ENTRY 33 12 1 ~2~
SET_2DA_ENTRY 11 12 1 ~0~
SET_2DA_ENTRY 16 12 1 ~0~
SET_2DA_ENTRY 22 12 1 ~0~
SET_2DA_ENTRY 27 12 1 ~0~
SET_2DA_ENTRY 29 12 1 ~0~
SET_2DA_ENTRY 20 12 1 ~1~
// Fighter/Cleric
SET_2DA_ENTRY 31 13 1 ~2~
SET_2DA_ENTRY 32 13 1 ~2~
SET_2DA_ENTRY 33 13 1 ~2~
SET_2DA_ENTRY 11 13 1 ~0~
SET_2DA_ENTRY 16 13 1 ~0~
SET_2DA_ENTRY 22 13 1 ~0~
SET_2DA_ENTRY 27 13 1 ~0~
SET_2DA_ENTRY 29 13 1 ~0~
SET_2DA_ENTRY 20 13 1 ~1~
// Fighter/Thief
SET_2DA_ENTRY 31 14 1 ~0~
SET_2DA_ENTRY 32 14 1 ~0~
SET_2DA_ENTRY 33 14 1 ~2~
SET_2DA_ENTRY 11 14 1 ~0~
SET_2DA_ENTRY 16 14 1 ~0~
SET_2DA_ENTRY 22 14 1 ~0~
SET_2DA_ENTRY 27 14 1 ~0~
SET_2DA_ENTRY 29 14 1 ~0~
SET_2DA_ENTRY 20 14 1 ~1~
// Fighter/Mage/Thief
SET_2DA_ENTRY 31 15 1 ~0~
SET_2DA_ENTRY 32 15 1 ~0~
SET_2DA_ENTRY 33 15 1 ~2~
SET_2DA_ENTRY 11 15 1 ~0~
SET_2DA_ENTRY 16 15 1 ~0~
SET_2DA_ENTRY 22 15 1 ~0~
SET_2DA_ENTRY 27 15 1 ~0~
SET_2DA_ENTRY 29 15 1 ~0~
SET_2DA_ENTRY 20 15 1 ~1~
// Mage/Thief
SET_2DA_ENTRY 4 16 1 ~2~
SET_2DA_ENTRY 7 16 1 ~2~
SET_2DA_ENTRY 10 16 1 ~2~
SET_2DA_ENTRY 12 16 1 ~2~
SET_2DA_ENTRY 13 16 1 ~2~
SET_2DA_ENTRY 17 16 1 ~2~
SET_2DA_ENTRY 18 16 1 ~2~
SET_2DA_ENTRY 25 16 1 ~2~
SET_2DA_ENTRY 26 16 1 ~2~
SET_2DA_ENTRY 28 16 1 ~2~
SET_2DA_ENTRY 30 16 1 ~2~
SET_2DA_ENTRY 31 16 1 ~0~
SET_2DA_ENTRY 32 16 1 ~0~
SET_2DA_ENTRY 33 16 1 ~2~
SET_2DA_ENTRY 34 16 1 ~3~
SET_2DA_ENTRY 11 16 1 ~0~
SET_2DA_ENTRY 16 16 1 ~0~
SET_2DA_ENTRY 22 16 1 ~0~
SET_2DA_ENTRY 27 16 1 ~0~
SET_2DA_ENTRY 29 16 1 ~0~
SET_2DA_ENTRY 20 16 1 ~1~
// Cleric/Mage
SET_2DA_ENTRY 7 17 1 ~2~
SET_2DA_ENTRY 8 17 1 ~2~
SET_2DA_ENTRY 10 17 1 ~2~
SET_2DA_ENTRY 19 17 1 ~2~
SET_2DA_ENTRY 23 17 1 ~2~
SET_2DA_ENTRY 24 17 1 ~2~
SET_2DA_ENTRY 25 17 1 ~2~
SET_2DA_ENTRY 30 17 1 ~2~
SET_2DA_ENTRY 31 17 1 ~1~
SET_2DA_ENTRY 32 17 1 ~0~
SET_2DA_ENTRY 33 17 1 ~1~
SET_2DA_ENTRY 34 17 1 ~0~
SET_2DA_ENTRY 11 17 1 ~0~
SET_2DA_ENTRY 16 17 1 ~0~
SET_2DA_ENTRY 22 17 1 ~0~
SET_2DA_ENTRY 27 17 1 ~0~
SET_2DA_ENTRY 29 17 1 ~0~
SET_2DA_ENTRY 20 17 1 ~1~
// Cleric/Thief
SET_2DA_ENTRY 7 18 1 ~2~
SET_2DA_ENTRY 8 18 1 ~2~
SET_2DA_ENTRY 10 18 1 ~2~
SET_2DA_ENTRY 19 18 1 ~2~
SET_2DA_ENTRY 23 18 1 ~2~
SET_2DA_ENTRY 24 18 1 ~2~
SET_2DA_ENTRY 25 18 1 ~2~
SET_2DA_ENTRY 30 18 1 ~2~
SET_2DA_ENTRY 31 18 1 ~1~
SET_2DA_ENTRY 32 18 1 ~0~
SET_2DA_ENTRY 33 18 1 ~2~
SET_2DA_ENTRY 34 18 1 ~3~
SET_2DA_ENTRY 11 18 1 ~0~
SET_2DA_ENTRY 16 18 1 ~0~
SET_2DA_ENTRY 22 18 1 ~0~
SET_2DA_ENTRY 27 18 1 ~0~
SET_2DA_ENTRY 29 18 1 ~0~
SET_2DA_ENTRY 20 18 1 ~1~
// Fighter/Druid
SET_2DA_ENTRY 31 19 1 ~2~
SET_2DA_ENTRY 32 19 1 ~2~
SET_2DA_ENTRY 33 19 1 ~2~
SET_2DA_ENTRY 11 19 1 ~0~
SET_2DA_ENTRY 16 19 1 ~0~
SET_2DA_ENTRY 22 19 1 ~0~
SET_2DA_ENTRY 27 19 1 ~0~
SET_2DA_ENTRY 29 19 1 ~0~
SET_2DA_ENTRY 20 19 1 ~3~
// Fighter/Mage/Cleric
SET_2DA_ENTRY 31 20 1 ~2~
SET_2DA_ENTRY 32 20 1 ~0~
SET_2DA_ENTRY 33 20 1 ~2~
SET_2DA_ENTRY 11 20 1 ~0~
SET_2DA_ENTRY 16 20 1 ~0~
SET_2DA_ENTRY 22 20 1 ~0~
SET_2DA_ENTRY 27 20 1 ~0~
SET_2DA_ENTRY 29 20 1 ~0~
SET_2DA_ENTRY 20 20 1 ~1~
// Ranger/Cleric
SET_2DA_ENTRY 31 21 1 ~2~
SET_2DA_ENTRY 32 21 1 ~2~
SET_2DA_ENTRY 33 21 1 ~2~
SET_2DA_ENTRY 11 21 1 ~0~
SET_2DA_ENTRY 16 21 1 ~0~
SET_2DA_ENTRY 22 21 1 ~0~
SET_2DA_ENTRY 27 21 1 ~0~
SET_2DA_ENTRY 29 21 1 ~0~
SET_2DA_ENTRY 20 21 1 ~1~
// Wizards
SET_2DA_ENTRY 11 4 1 ~0~
SET_2DA_ENTRY 16 4 1 ~0~
SET_2DA_ENTRY 22 4 1 ~0~
SET_2DA_ENTRY 27 4 1 ~0~
SET_2DA_ENTRY 29 4 1 ~0~
SET_2DA_ENTRY 20 4 1 ~1~
SET_2DA_ENTRY 11 22 1 ~0~
SET_2DA_ENTRY 16 22 1 ~0~
SET_2DA_ENTRY 22 22 1 ~0~
SET_2DA_ENTRY 27 22 1 ~0~
SET_2DA_ENTRY 29 22 1 ~0~
SET_2DA_ENTRY 20 22 1 ~1~
SET_2DA_ENTRY 11 23 1 ~0~
SET_2DA_ENTRY 16 23 1 ~0~
SET_2DA_ENTRY 22 23 1 ~0~
SET_2DA_ENTRY 27 23 1 ~0~
SET_2DA_ENTRY 29 23 1 ~0~
SET_2DA_ENTRY 20 23 1 ~1~
SET_2DA_ENTRY 11 24 1 ~0~
SET_2DA_ENTRY 16 24 1 ~0~
SET_2DA_ENTRY 22 24 1 ~0~
SET_2DA_ENTRY 27 24 1 ~0~
SET_2DA_ENTRY 29 24 1 ~0~
SET_2DA_ENTRY 20 24 1 ~1~
SET_2DA_ENTRY 11 25 1 ~0~
SET_2DA_ENTRY 16 25 1 ~0~
SET_2DA_ENTRY 22 25 1 ~0~
SET_2DA_ENTRY 27 25 1 ~0~
SET_2DA_ENTRY 29 25 1 ~0~
SET_2DA_ENTRY 20 25 1 ~1~
SET_2DA_ENTRY 11 26 1 ~0~
SET_2DA_ENTRY 16 26 1 ~0~
SET_2DA_ENTRY 22 26 1 ~0~
SET_2DA_ENTRY 27 26 1 ~0~
SET_2DA_ENTRY 29 26 1 ~0~
SET_2DA_ENTRY 20 26 1 ~1~
SET_2DA_ENTRY 11 27 1 ~0~
SET_2DA_ENTRY 16 27 1 ~0~
SET_2DA_ENTRY 22 27 1 ~0~
SET_2DA_ENTRY 27 27 1 ~0~
SET_2DA_ENTRY 29 27 1 ~0~
SET_2DA_ENTRY 20 27 1 ~1~
SET_2DA_ENTRY 11 28 1 ~0~
SET_2DA_ENTRY 16 28 1 ~0~
SET_2DA_ENTRY 22 28 1 ~0~
SET_2DA_ENTRY 27 28 1 ~0~
SET_2DA_ENTRY 29 28 1 ~0~
SET_2DA_ENTRY 20 28 1 ~1~
SET_2DA_ENTRY 11 29 1 ~0~
SET_2DA_ENTRY 16 29 1 ~0~
SET_2DA_ENTRY 22 29 1 ~0~
SET_2DA_ENTRY 27 29 1 ~0~
SET_2DA_ENTRY 29 29 1 ~0~
SET_2DA_ENTRY 20 29 1 ~1~
// Berserker
SET_2DA_ENTRY 3 30 1 ~3~
SET_2DA_ENTRY 4 30 1 ~3~
SET_2DA_ENTRY 5 30 1 ~3~
SET_2DA_ENTRY 6 30 1 ~3~
SET_2DA_ENTRY 7 30 1 ~3~
SET_2DA_ENTRY 8 30 1 ~3~
SET_2DA_ENTRY 9 30 1 ~3~
SET_2DA_ENTRY 10 30 1 ~3~
SET_2DA_ENTRY 12 30 1 ~3~
SET_2DA_ENTRY 13 30 1 ~3~
SET_2DA_ENTRY 14 30 1 ~3~
SET_2DA_ENTRY 15 30 1 ~3~
SET_2DA_ENTRY 17 30 1 ~3~
SET_2DA_ENTRY 18 30 1 ~3~
SET_2DA_ENTRY 19 30 1 ~3~
SET_2DA_ENTRY 21 30 1 ~3~
SET_2DA_ENTRY 23 30 1 ~3~
SET_2DA_ENTRY 24 30 1 ~3~
SET_2DA_ENTRY 25 30 1 ~3~
SET_2DA_ENTRY 31 30 1 ~1~
SET_2DA_ENTRY 32 30 1 ~1~
SET_2DA_ENTRY 33 30 1 ~1~
SET_2DA_ENTRY 34 30 1 ~1~
SET_2DA_ENTRY 11 30 1 ~0~
SET_2DA_ENTRY 16 30 1 ~0~
SET_2DA_ENTRY 22 30 1 ~0~
SET_2DA_ENTRY 27 30 1 ~0~
SET_2DA_ENTRY 29 30 1 ~0~
SET_2DA_ENTRY 20 30 1 ~1~
// Wizard Slayer
SET_2DA_ENTRY 3 31 1 ~3~
SET_2DA_ENTRY 4 31 1 ~3~
SET_2DA_ENTRY 5 31 1 ~3~
SET_2DA_ENTRY 6 31 1 ~3~
SET_2DA_ENTRY 7 31 1 ~3~
SET_2DA_ENTRY 8 31 1 ~3~
SET_2DA_ENTRY 9 31 1 ~3~
SET_2DA_ENTRY 10 31 1 ~3~
SET_2DA_ENTRY 12 31 1 ~3~
SET_2DA_ENTRY 13 31 1 ~3~
SET_2DA_ENTRY 14 31 1 ~3~
SET_2DA_ENTRY 15 31 1 ~3~
SET_2DA_ENTRY 17 31 1 ~3~
SET_2DA_ENTRY 18 31 1 ~3~
SET_2DA_ENTRY 19 31 1 ~3~
SET_2DA_ENTRY 21 31 1 ~3~
SET_2DA_ENTRY 23 31 1 ~3~
SET_2DA_ENTRY 24 31 1 ~3~
SET_2DA_ENTRY 25 31 1 ~3~
SET_2DA_ENTRY 26 31 1 ~3~
SET_2DA_ENTRY 28 31 1 ~3~
SET_2DA_ENTRY 30 31 1 ~3~
SET_2DA_ENTRY 31 31 1 ~2~
SET_2DA_ENTRY 32 31 1 ~2~
SET_2DA_ENTRY 33 31 1 ~2~
SET_2DA_ENTRY 11 31 1 ~0~
SET_2DA_ENTRY 16 31 1 ~0~
SET_2DA_ENTRY 22 31 1 ~0~
SET_2DA_ENTRY 27 31 1 ~0~
SET_2DA_ENTRY 29 31 1 ~0~
SET_2DA_ENTRY 20 31 1 ~1~
// Kensai
SET_2DA_ENTRY 31 32 1 ~2~
SET_2DA_ENTRY 32 32 1 ~0~
SET_2DA_ENTRY 33 32 1 ~2~
SET_2DA_ENTRY 11 32 1 ~0~
SET_2DA_ENTRY 16 32 1 ~0~
SET_2DA_ENTRY 22 32 1 ~0~
SET_2DA_ENTRY 27 32 1 ~0~
SET_2DA_ENTRY 29 32 1 ~0~
SET_2DA_ENTRY 20 32 1 ~1~
// Cavalier
SET_2DA_ENTRY 31 33 1 ~2~
SET_2DA_ENTRY 32 33 1 ~2~
SET_2DA_ENTRY 33 33 1 ~2~
SET_2DA_ENTRY 34 33 1 ~2~
SET_2DA_ENTRY 11 33 1 ~0~
SET_2DA_ENTRY 16 33 1 ~0~
SET_2DA_ENTRY 22 33 1 ~0~
SET_2DA_ENTRY 27 33 1 ~0~
SET_2DA_ENTRY 29 33 1 ~0~
SET_2DA_ENTRY 20 33 1 ~1~
// Inquisitor
SET_2DA_ENTRY 31 34 1 ~2~
SET_2DA_ENTRY 32 34 1 ~2~
SET_2DA_ENTRY 33 34 1 ~2~
SET_2DA_ENTRY 34 34 1 ~2~
SET_2DA_ENTRY 11 34 1 ~0~
SET_2DA_ENTRY 16 34 1 ~0~
SET_2DA_ENTRY 22 34 1 ~0~
SET_2DA_ENTRY 27 34 1 ~0~
SET_2DA_ENTRY 29 34 1 ~0~
SET_2DA_ENTRY 20 34 1 ~1~
// Undead Hunter
SET_2DA_ENTRY 31 35 1 ~2~
SET_2DA_ENTRY 32 35 1 ~2~
SET_2DA_ENTRY 33 35 1 ~2~
SET_2DA_ENTRY 34 35 1 ~2~
SET_2DA_ENTRY 11 35 1 ~0~
SET_2DA_ENTRY 16 35 1 ~0~
SET_2DA_ENTRY 22 35 1 ~0~
SET_2DA_ENTRY 27 35 1 ~0~
SET_2DA_ENTRY 29 35 1 ~0~
SET_2DA_ENTRY 20 35 1 ~1~
// Archer
SET_2DA_ENTRY 3 36 1 ~2~
SET_2DA_ENTRY 4 36 1 ~2~
SET_2DA_ENTRY 5 36 1 ~2~
SET_2DA_ENTRY 6 36 1 ~2~
SET_2DA_ENTRY 7 36 1 ~2~
SET_2DA_ENTRY 8 36 1 ~2~
SET_2DA_ENTRY 9 36 1 ~2~
SET_2DA_ENTRY 10 36 1 ~2~
SET_2DA_ENTRY 12 36 1 ~2~
SET_2DA_ENTRY 13 36 1 ~2~
SET_2DA_ENTRY 14 36 1 ~2~
SET_2DA_ENTRY 15 36 1 ~2~
SET_2DA_ENTRY 17 36 1 ~2~
SET_2DA_ENTRY 18 36 1 ~2~
SET_2DA_ENTRY 19 36 1 ~2~
SET_2DA_ENTRY 21 36 1 ~2~
SET_2DA_ENTRY 23 36 1 ~2~
SET_2DA_ENTRY 24 36 1 ~2~
SET_2DA_ENTRY 25 36 1 ~2~
SET_2DA_ENTRY 26 36 1 ~2~
SET_2DA_ENTRY 30 36 1 ~2~
SET_2DA_ENTRY 31 36 1 ~2~
SET_2DA_ENTRY 32 36 1 ~0~
SET_2DA_ENTRY 33 36 1 ~2~
SET_2DA_ENTRY 34 36 1 ~3~
SET_2DA_ENTRY 11 36 1 ~0~
SET_2DA_ENTRY 16 36 1 ~0~
SET_2DA_ENTRY 22 36 1 ~0~
SET_2DA_ENTRY 27 36 1 ~0~
SET_2DA_ENTRY 29 36 1 ~0~
SET_2DA_ENTRY 20 36 1 ~1~
// Stalker
SET_2DA_ENTRY 3 37 1 ~0~
SET_2DA_ENTRY 4 37 1 ~4~
SET_2DA_ENTRY 5 37 1 ~2~
SET_2DA_ENTRY 6 37 1 ~0~
SET_2DA_ENTRY 7 37 1 ~2~
SET_2DA_ENTRY 8 37 1 ~2~
SET_2DA_ENTRY 9 37 1 ~2~
SET_2DA_ENTRY 10 37 1 ~2~
SET_2DA_ENTRY 12 37 1 ~2~
SET_2DA_ENTRY 13 37 1 ~4~
SET_2DA_ENTRY 14 37 1 ~2~
SET_2DA_ENTRY 15 37 1 ~0~
SET_2DA_ENTRY 17 37 1 ~2~
SET_2DA_ENTRY 18 37 1 ~4~
SET_2DA_ENTRY 19 37 1 ~2~
SET_2DA_ENTRY 21 37 1 ~0~
SET_2DA_ENTRY 23 37 1 ~2~
SET_2DA_ENTRY 24 37 1 ~2~
SET_2DA_ENTRY 25 37 1 ~0~
SET_2DA_ENTRY 26 37 1 ~2~
SET_2DA_ENTRY 28 37 1 ~2~
SET_2DA_ENTRY 30 37 1 ~2~
SET_2DA_ENTRY 31 37 1 ~0~
SET_2DA_ENTRY 32 37 1 ~0~
SET_2DA_ENTRY 33 37 1 ~2~
SET_2DA_ENTRY 34 37 1 ~3~
SET_2DA_ENTRY 11 37 1 ~0~
SET_2DA_ENTRY 16 37 1 ~0~
SET_2DA_ENTRY 22 37 1 ~0~
SET_2DA_ENTRY 27 37 1 ~0~
SET_2DA_ENTRY 29 37 1 ~0~
SET_2DA_ENTRY 20 37 1 ~1~
// Beastmaster
SET_2DA_ENTRY 21 38 1 ~3~
SET_2DA_ENTRY 25 38 1 ~3~
SET_2DA_ENTRY 26 38 1 ~0~
SET_2DA_ENTRY 28 38 1 ~3~
SET_2DA_ENTRY 30 38 1 ~3~
SET_2DA_ENTRY 31 38 1 ~2~
SET_2DA_ENTRY 32 38 1 ~0~
SET_2DA_ENTRY 33 38 1 ~2~
SET_2DA_ENTRY 34 38 1 ~3~
SET_2DA_ENTRY 11 38 1 ~0~
SET_2DA_ENTRY 16 38 1 ~0~
SET_2DA_ENTRY 22 38 1 ~0~
SET_2DA_ENTRY 27 38 1 ~0~
SET_2DA_ENTRY 29 38 1 ~0~
SET_2DA_ENTRY 20 38 1 ~1~
// Assassin
SET_2DA_ENTRY 4 39 1 ~2~
SET_2DA_ENTRY 7 39 1 ~2~
SET_2DA_ENTRY 10 39 1 ~2~
SET_2DA_ENTRY 12 39 1 ~2~
SET_2DA_ENTRY 13 39 1 ~2~
SET_2DA_ENTRY 17 39 1 ~2~
SET_2DA_ENTRY 18 39 1 ~3~
SET_2DA_ENTRY 26 39 1 ~2~
SET_2DA_ENTRY 28 39 1 ~2~
SET_2DA_ENTRY 30 39 1 ~2~
SET_2DA_ENTRY 31 39 1 ~0~
SET_2DA_ENTRY 32 39 1 ~0~
SET_2DA_ENTRY 33 39 1 ~2~
SET_2DA_ENTRY 34 39 1 ~3~
SET_2DA_ENTRY 11 39 1 ~0~
SET_2DA_ENTRY 16 39 1 ~0~
SET_2DA_ENTRY 22 39 1 ~0~
SET_2DA_ENTRY 27 39 1 ~0~
SET_2DA_ENTRY 29 39 1 ~0~
SET_2DA_ENTRY 20 39 1 ~1~
// Bounty Hunter
SET_2DA_ENTRY 4 40 1 ~2~
SET_2DA_ENTRY 7 40 1 ~2~
SET_2DA_ENTRY 10 40 1 ~2~
SET_2DA_ENTRY 12 40 1 ~2~
SET_2DA_ENTRY 13 40 1 ~2~
SET_2DA_ENTRY 17 40 1 ~2~
SET_2DA_ENTRY 18 40 1 ~2~
SET_2DA_ENTRY 26 40 1 ~2~
SET_2DA_ENTRY 28 40 1 ~2~
SET_2DA_ENTRY 30 40 1 ~2~
SET_2DA_ENTRY 31 40 1 ~0~
SET_2DA_ENTRY 32 40 1 ~0~
SET_2DA_ENTRY 33 40 1 ~2~
SET_2DA_ENTRY 34 40 1 ~3~
SET_2DA_ENTRY 11 40 1 ~0~
SET_2DA_ENTRY 16 40 1 ~0~
SET_2DA_ENTRY 22 40 1 ~0~
SET_2DA_ENTRY 27 40 1 ~0~
SET_2DA_ENTRY 29 40 1 ~0~
SET_2DA_ENTRY 20 40 1 ~1~
// Swashbuckler
SET_2DA_ENTRY 31 41 1 ~0~
SET_2DA_ENTRY 32 41 1 ~0~
SET_2DA_ENTRY 33 41 1 ~2~
SET_2DA_ENTRY 11 41 1 ~0~
SET_2DA_ENTRY 16 41 1 ~0~
SET_2DA_ENTRY 22 41 1 ~0~
SET_2DA_ENTRY 27 41 1 ~0~
SET_2DA_ENTRY 29 41 1 ~0~
SET_2DA_ENTRY 20 41 1 ~1~
// Blade
SET_2DA_ENTRY 3 42 1 ~0~
SET_2DA_ENTRY 4 42 1 ~3~
SET_2DA_ENTRY 6 42 1 ~0~
SET_2DA_ENTRY 10 42 1 ~3~
SET_2DA_ENTRY 12 42 1 ~3~
SET_2DA_ENTRY 13 42 1 ~3~
SET_2DA_ENTRY 14 42 1 ~3~
SET_2DA_ENTRY 15 42 1 ~0~
SET_2DA_ENTRY 17 42 1 ~3~
SET_2DA_ENTRY 18 42 1 ~3~
SET_2DA_ENTRY 19 42 1 ~0~
SET_2DA_ENTRY 21 42 1 ~0~
SET_2DA_ENTRY 23 42 1 ~0~
SET_2DA_ENTRY 24 42 1 ~0~
SET_2DA_ENTRY 25 42 1 ~0~
SET_2DA_ENTRY 26 42 1 ~1~
SET_2DA_ENTRY 28 42 1 ~1~
SET_2DA_ENTRY 30 42 1 ~1~
SET_2DA_ENTRY 31 42 1 ~0~
SET_2DA_ENTRY 32 42 1 ~0~
SET_2DA_ENTRY 33 42 1 ~2~
SET_2DA_ENTRY 34 42 1 ~3~
SET_2DA_ENTRY 11 42 1 ~0~
SET_2DA_ENTRY 16 42 1 ~0~
SET_2DA_ENTRY 22 42 1 ~0~
SET_2DA_ENTRY 27 42 1 ~0~
SET_2DA_ENTRY 29 42 1 ~0~
SET_2DA_ENTRY 20 42 1 ~1~
// Jester
SET_2DA_ENTRY 3 43 1 ~2~
SET_2DA_ENTRY 4 43 1 ~2~
SET_2DA_ENTRY 5 43 1 ~2~
SET_2DA_ENTRY 6 43 1 ~0~
SET_2DA_ENTRY 7 43 1 ~2~
SET_2DA_ENTRY 8 43 1 ~2~
SET_2DA_ENTRY 9 43 1 ~2~
SET_2DA_ENTRY 10 43 1 ~2~
SET_2DA_ENTRY 12 43 1 ~2~
SET_2DA_ENTRY 13 43 1 ~2~
SET_2DA_ENTRY 14 43 1 ~2~
SET_2DA_ENTRY 15 43 1 ~0~
SET_2DA_ENTRY 17 43 1 ~2~
SET_2DA_ENTRY 18 43 1 ~2~
SET_2DA_ENTRY 19 43 1 ~2~
SET_2DA_ENTRY 21 43 1 ~0~
SET_2DA_ENTRY 23 43 1 ~2~
SET_2DA_ENTRY 24 43 1 ~2~
SET_2DA_ENTRY 25 43 1 ~0~
SET_2DA_ENTRY 26 43 1 ~2~
SET_2DA_ENTRY 28 43 1 ~2~
SET_2DA_ENTRY 30 43 1 ~2~
SET_2DA_ENTRY 31 43 1 ~1~
SET_2DA_ENTRY 32 43 1 ~1~
SET_2DA_ENTRY 33 43 1 ~1~
SET_2DA_ENTRY 34 43 1 ~1~
SET_2DA_ENTRY 11 43 1 ~0~
SET_2DA_ENTRY 16 43 1 ~0~
SET_2DA_ENTRY 22 43 1 ~0~
SET_2DA_ENTRY 27 43 1 ~0~
SET_2DA_ENTRY 29 43 1 ~0~
SET_2DA_ENTRY 20 43 1 ~1~
// Skald
SET_2DA_ENTRY 3 44 1 ~3~
SET_2DA_ENTRY 4 44 1 ~3~
SET_2DA_ENTRY 5 44 1 ~3~
SET_2DA_ENTRY 6 44 1 ~0~
SET_2DA_ENTRY 7 44 1 ~3~
SET_2DA_ENTRY 8 44 1 ~3~
SET_2DA_ENTRY 9 44 1 ~3~
SET_2DA_ENTRY 10 44 1 ~3~
SET_2DA_ENTRY 12 44 1 ~3~
SET_2DA_ENTRY 13 44 1 ~3~
SET_2DA_ENTRY 14 44 1 ~3~
SET_2DA_ENTRY 15 44 1 ~0~
SET_2DA_ENTRY 17 44 1 ~3~
SET_2DA_ENTRY 18 44 1 ~3~
SET_2DA_ENTRY 19 44 1 ~3~
SET_2DA_ENTRY 21 44 1 ~0~
SET_2DA_ENTRY 23 44 1 ~3~
SET_2DA_ENTRY 24 44 1 ~3~
SET_2DA_ENTRY 25 44 1 ~0~
SET_2DA_ENTRY 26 44 1 ~3~
SET_2DA_ENTRY 28 44 1 ~3~
SET_2DA_ENTRY 30 44 1 ~3~
SET_2DA_ENTRY 31 44 1 ~1~
SET_2DA_ENTRY 32 44 1 ~1~
SET_2DA_ENTRY 33 44 1 ~1~
SET_2DA_ENTRY 34 44 1 ~1~
SET_2DA_ENTRY 11 44 1 ~0~
SET_2DA_ENTRY 16 44 1 ~0~
SET_2DA_ENTRY 22 44 1 ~0~
SET_2DA_ENTRY 27 44 1 ~0~
SET_2DA_ENTRY 29 44 1 ~0~
SET_2DA_ENTRY 20 44 1 ~1~
// Totemic Driud
SET_2DA_ENTRY 7 45 1 ~2~
SET_2DA_ENTRY 8 45 1 ~2~
SET_2DA_ENTRY 10 45 1 ~2~
SET_2DA_ENTRY 17 45 1 ~2~
SET_2DA_ENTRY 18 45 1 ~2~
SET_2DA_ENTRY 21 45 1 ~2~
SET_2DA_ENTRY 25 45 1 ~2~
SET_2DA_ENTRY 30 45 1 ~2~
SET_2DA_ENTRY 11 45 1 ~0~
SET_2DA_ENTRY 16 45 1 ~0~
SET_2DA_ENTRY 22 45 1 ~0~
SET_2DA_ENTRY 27 45 1 ~0~
SET_2DA_ENTRY 29 45 1 ~0~
SET_2DA_ENTRY 20 45 1 ~2~
// Shapeshifter
SET_2DA_ENTRY 7 46 1 ~2~
SET_2DA_ENTRY 8 46 1 ~2~
SET_2DA_ENTRY 10 46 1 ~2~
SET_2DA_ENTRY 17 46 1 ~2~
SET_2DA_ENTRY 18 46 1 ~2~
SET_2DA_ENTRY 21 46 1 ~2~
SET_2DA_ENTRY 25 46 1 ~2~
SET_2DA_ENTRY 30 46 1 ~2~
SET_2DA_ENTRY 11 46 1 ~0~
SET_2DA_ENTRY 16 46 1 ~0~
SET_2DA_ENTRY 22 46 1 ~0~
SET_2DA_ENTRY 27 46 1 ~0~
SET_2DA_ENTRY 29 46 1 ~0~
SET_2DA_ENTRY 20 46 1 ~2~
// Avenger
SET_2DA_ENTRY 7 47 1 ~2~
SET_2DA_ENTRY 8 47 1 ~2~
SET_2DA_ENTRY 10 47 1 ~2~
SET_2DA_ENTRY 17 47 1 ~2~
SET_2DA_ENTRY 18 47 1 ~2~
SET_2DA_ENTRY 21 47 1 ~2~
SET_2DA_ENTRY 25 47 1 ~2~
SET_2DA_ENTRY 30 47 1 ~2~
SET_2DA_ENTRY 11 47 1 ~0~
SET_2DA_ENTRY 16 47 1 ~0~
SET_2DA_ENTRY 22 47 1 ~0~
SET_2DA_ENTRY 27 47 1 ~0~
SET_2DA_ENTRY 29 47 1 ~0~
SET_2DA_ENTRY 20 47 1 ~2~
// Talos
SET_2DA_ENTRY 7 48 1 ~2~
SET_2DA_ENTRY 8 48 1 ~2~
SET_2DA_ENTRY 10 48 1 ~2~
SET_2DA_ENTRY 19 48 1 ~2~
SET_2DA_ENTRY 23 48 1 ~2~
SET_2DA_ENTRY 24 48 1 ~2~
SET_2DA_ENTRY 25 48 1 ~2~
SET_2DA_ENTRY 30 48 1 ~2~
SET_2DA_ENTRY 11 48 1 ~0~
SET_2DA_ENTRY 16 48 1 ~0~
SET_2DA_ENTRY 22 48 1 ~0~
SET_2DA_ENTRY 27 48 1 ~0~
SET_2DA_ENTRY 29 48 1 ~0~
SET_2DA_ENTRY 20 48 1 ~1~
// Helm
SET_2DA_ENTRY 7 49 1 ~2~
SET_2DA_ENTRY 8 49 1 ~2~
SET_2DA_ENTRY 10 49 1 ~2~
SET_2DA_ENTRY 19 49 1 ~2~
SET_2DA_ENTRY 23 49 1 ~2~
SET_2DA_ENTRY 24 49 1 ~2~
SET_2DA_ENTRY 25 49 1 ~2~
SET_2DA_ENTRY 30 49 1 ~2~
SET_2DA_ENTRY 11 49 1 ~0~
SET_2DA_ENTRY 16 49 1 ~0~
SET_2DA_ENTRY 22 49 1 ~0~
SET_2DA_ENTRY 27 49 1 ~0~
SET_2DA_ENTRY 29 49 1 ~0~
SET_2DA_ENTRY 20 49 1 ~1~
// Lathander
SET_2DA_ENTRY 7 50 1 ~2~
SET_2DA_ENTRY 8 50 1 ~2~
SET_2DA_ENTRY 10 50 1 ~2~
SET_2DA_ENTRY 19 50 1 ~2~
SET_2DA_ENTRY 23 50 1 ~2~
SET_2DA_ENTRY 24 50 1 ~2~
SET_2DA_ENTRY 25 50 1 ~2~
SET_2DA_ENTRY 30 50 1 ~2~
SET_2DA_ENTRY 11 50 1 ~0~
SET_2DA_ENTRY 16 50 1 ~0~
SET_2DA_ENTRY 22 50 1 ~0~
SET_2DA_ENTRY 27 50 1 ~0~
SET_2DA_ENTRY 29 50 1 ~0~
SET_2DA_ENTRY 20 50 1 ~1~
// Monk
SET_2DA_ENTRY 11 51 1 ~0~
SET_2DA_ENTRY 16 51 1 ~0~
SET_2DA_ENTRY 22 51 1 ~0~
SET_2DA_ENTRY 27 51 1 ~0~
SET_2DA_ENTRY 29 51 1 ~0~
SET_2DA_ENTRY 20 51 1 ~1~
// Barbarian
SET_2DA_ENTRY 31 52 1 ~0~
SET_2DA_ENTRY 32 52 1 ~0~
SET_2DA_ENTRY 33 52 1 ~0~
SET_2DA_ENTRY 34 52 1 ~0~
SET_2DA_ENTRY 11 52 1 ~0~
SET_2DA_ENTRY 16 52 1 ~0~
SET_2DA_ENTRY 22 52 1 ~0~
SET_2DA_ENTRY 27 52 1 ~0~
SET_2DA_ENTRY 29 52 1 ~0~
SET_2DA_ENTRY 20 52 1 ~1~
// Wild Mage
SET_2DA_ENTRY 11 53 1 ~0~
SET_2DA_ENTRY 16 53 1 ~0~
SET_2DA_ENTRY 22 53 1 ~0~
SET_2DA_ENTRY 27 53 1 ~0~
SET_2DA_ENTRY 29 53 1 ~0~
SET_2DA_ENTRY 20 53 1 ~1~
BUT_ONLY

ACTION_IF GAME_IS ~bgee bg2ee~ THEN BEGIN
COPY_EXISTING ~WEAPPROF.2da~ ~override~
// Blackguard
SET_2DA_ENTRY 31 54 1 ~2~
SET_2DA_ENTRY 32 54 1 ~2~
SET_2DA_ENTRY 33 54 1 ~2~
SET_2DA_ENTRY 34 54 1 ~3~
SET_2DA_ENTRY 11 54 1 ~0~
SET_2DA_ENTRY 16 54 1 ~0~
SET_2DA_ENTRY 22 54 1 ~0~
SET_2DA_ENTRY 27 54 1 ~0~
SET_2DA_ENTRY 29 54 1 ~0~
SET_2DA_ENTRY 20 54 1 ~1~
// Shadowdancer
SET_2DA_ENTRY 4 55 1 ~2~
SET_2DA_ENTRY 7 55 1 ~2~
SET_2DA_ENTRY 10 55 1 ~2~
SET_2DA_ENTRY 12 55 1 ~2~
SET_2DA_ENTRY 13 55 1 ~2~
SET_2DA_ENTRY 17 55 1 ~2~
SET_2DA_ENTRY 18 55 1 ~2~
SET_2DA_ENTRY 25 55 1 ~2~
SET_2DA_ENTRY 26 55 1 ~2~
SET_2DA_ENTRY 28 55 1 ~2~
SET_2DA_ENTRY 30 55 1 ~2~
SET_2DA_ENTRY 31 55 1 ~0~
SET_2DA_ENTRY 32 55 1 ~0~
SET_2DA_ENTRY 33 55 1 ~2~
SET_2DA_ENTRY 34 55 1 ~3~
SET_2DA_ENTRY 11 55 1 ~0~
SET_2DA_ENTRY 16 55 1 ~0~
SET_2DA_ENTRY 22 55 1 ~0~
SET_2DA_ENTRY 27 55 1 ~0~
SET_2DA_ENTRY 29 55 1 ~0~
SET_2DA_ENTRY 20 55 1 ~1~
// Dwarven Defender
SET_2DA_ENTRY 31 56 1 ~2~
SET_2DA_ENTRY 32 56 1 ~2~
SET_2DA_ENTRY 33 56 1 ~2~
SET_2DA_ENTRY 34 56 1 ~0~
SET_2DA_ENTRY 11 56 1 ~0~
SET_2DA_ENTRY 16 56 1 ~0~
SET_2DA_ENTRY 22 56 1 ~0~
SET_2DA_ENTRY 27 56 1 ~0~
SET_2DA_ENTRY 29 56 1 ~0~
SET_2DA_ENTRY 20 56 1 ~1~
// Dragon Disciple
SET_2DA_ENTRY 11 57 1 ~0~
SET_2DA_ENTRY 16 57 1 ~0~
SET_2DA_ENTRY 22 57 1 ~0~
SET_2DA_ENTRY 27 57 1 ~0~
SET_2DA_ENTRY 29 57 1 ~0~
SET_2DA_ENTRY 20 57 1 ~1~
// Dark Moon Monk
SET_2DA_ENTRY 11 58 1 ~0~
SET_2DA_ENTRY 16 58 1 ~0~
SET_2DA_ENTRY 22 58 1 ~0~
SET_2DA_ENTRY 27 58 1 ~0~
SET_2DA_ENTRY 29 58 1 ~0~
SET_2DA_ENTRY 20 58 1 ~1~
// Sun Soul Monk
SET_2DA_ENTRY 11 59 1 ~0~
SET_2DA_ENTRY 16 59 1 ~0~
SET_2DA_ENTRY 22 59 1 ~0~
SET_2DA_ENTRY 27 59 1 ~0~
SET_2DA_ENTRY 29 59 1 ~0~
SET_2DA_ENTRY 20 59 1 ~1~
BUT_ONLY
END
//_________________________________________________________

 

 

 

 

Link to comment

Aaaaand, another question (when it rains it pours!):

 

My new prof system takes away players' choice for initial allocation of proficiencies, and instead grants proficiency with a set list of weapons, depending on class/kit. To give joinable NPCs the proper proficiencies, I need to either 1) drop every NPC CRE to level zero, a la the 'Level 1 NPCs' mod, or 2) just patch the CREs with extra profs. 1) is turnign out to be extremely problematic, so I'me trying to do 2), adapting the code I found in Berelinde's 'b!tweaks' mod. An example of the code is here:

 

 

COPY_EXISTING ~ajanti.cre~ ~override~
  READ_LONG 0x2c4 "effects_offset"
  READ_LONG 0x2c8 "effects_number"

WHILE ("%effects_number%" > 0)
  BEGIN
    SET "effects_number" = ("%effects_number%" - 1)
      READ_LONG ("%effects_offset%" + 0x08 + ("%effects_number%" * 0x108)) "type"
      READ_LONG ("%effects_offset%" + 0x18 + ("%effects_number%" * 0x108)) "wpn"
        PATCH_IF (("%type%" = 233) AND ("%wpn%" = 0x61)) // warhammer
          BEGIN
            WRITE_LONG ("%effects_offset%" + 0x18 + ("%effects_number%" * 0x108)) 0x62 // spear
          END
        PATCH_IF (("%type%" = 233) AND ("%wpn%" = 107)) // sling
          BEGIN
            WRITE_LONG ("%effects_offset%" + 0x18 + ("%effects_number%" * 0x108)) 0x67 // crossbow
          END
        PATCH_IF (("%type%" = 233) AND ("%wpn%" = 101)) // mace
          BEGIN
            WRITE_LONG ("%effects_offset%" + 0x18 + ("%effects_number%" * 0x108)) 0x5a // long sword
          END
  END
BUT_ONLY_IF_IT_CHANGES

 

 

 

Before I plod through copyig and adapting this for every joinable CRE, am I going to run into the same problem of some using Effect Type 1 and some using Effect Type 1? Should I adapt Camdawg's ALTER_EFFECT macro for this task too?

Link to comment

Okay: (I can't edit posts here even though I'm logged in... maybe because I'm on the mobile site?)

 

Ahem - Okay: I've figured out the issue with strings and weapprof. So go ahead and ignore the question two posts up.

 

So my only remaining concern is about patching proficiencies onto specific CREs. Can I use the ALTER_EFFECT macro and, instead of this:

COPY_EXISTING_REGEXP GLOB ~^.+\.cre$~ ~override~
  LPF ALTER_EFFECT INT_VAR match_opcode = 233 match_parameter2 = 99 parameter2 = 98 END
  BUT_ONLY
... do something like this?

 

COPY_EXISTING ~ajanti.cre~ ~override~
  LPF ALTER_EFFECT INT_VAR match_opcode = 233 parameter2 = 98 END
  BUT_ONLY
Link to comment

Okay: (I can't edit posts here even though I'm logged in... maybe because I'm on the mobile site?)

This is because your profile has the "Awaiting Authorisation" tag under the profile picture(which doesn't probably show on the mobile side).

Your best bet is to use a regular computer, log in ones, and edit your profile, it should have easy to find resend request for authorization email, to which you need to send back the authorization message from your email account you use to log in.

Link to comment

Okay, for my "universal clubs" expansion I dorpped the CLONE_EFFECT macro in (cut and pasted verbatim) and wrote this to add club proficiency to Ajantis (he has 1 star in longbow, so I used 104 as match_parameter2 so that he would gain 1 star in clubs):

COPY_EXISTING ~ajanti.cre~
	LPF CLONE_EFFECT INT_VAR match_opcode = 233 match_parameter2 = 104 parameter2 = 115 END
	BUT_ONLY

But it's giving me a Parsing:Parse_error "near text: LPF"

 

?

Link to comment

Archived

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

×
×
  • Create New...