Thanks once again, I'll check that out. I agree with your sentiment on effects and lore though, all of the items I'm creating follow the lore of Abeir-Toril very closely, and I'm having a blast writing stories of that nature, but I'm also adding a lot of items that expand on the variability among weapons (i.e. masterwork, silver/cold iron/mithral/adamantine/darkwood etc.) Sometimes that'll make a % chance hard to justify if it's "just the nature of the enchantment," no angry demon trapped in the sword or something, but I'm trying to keep it plausible.
I notice in the link "CamDawg's Kit mods tutorial for BG2" that it says sorcerors can not be kitted. Is that still the case or has EE changed this since it has the dragon disciple kit?
I notice in the link "CamDawg's Kit mods tutorial for BG2" that it says sorcerors can not be kitted. Is that still the case or has EE changed this since it has the dragon disciple kit?
All classes (except the Barbarian which is coded as a Fighter kit) can be kitted in the EEs.
Ok next question. I'm reading through a lot of documentation at the moment and there's one thing I haven't come across. Is it possible to grant a kit more frequent proficiency points than the base class? For example can I give the sorceror the proficiency point gain rate of a fighter?
I'm basically trying to assess how possible it would be to make a sorc kit that can somewhat mimic a fighter/sorceror multiclass via an exp penalty. I realize some things like 18/xx strength and con scores counting over 16 are probably hard coded.
Is it possible to grant a kit more frequent proficiency points than the base class? For example can I give the sorceror the proficiency point gain rate of a fighter?
Yes. You'll have to modify the file profs.2da on the RATE column (I recommend taking a look at it with NearInfinity and if you're going to release the mod change it with WeiDU with a command like SET_2DA_ENTRY).
Watch out, because this changes it for the Sorcerer class, there actually isn't a way of doing this for a kit only (though you can make a Feature Request to make this possible).
I'm basically trying to assess how possible it would be to make a sorc kit that can somewhat mimic a fighter/sorceror multiclass via an exp penalty. I realize some things like 18/xx strength and con scores counting over 16 are probably hard coded.
The 18/XX thing with STR is hardcoded IIRC and AFAIK... But you can change it for other classes (yes, ALL the other classes other than the Warrior classes) by editing the OTHER column in the file hpconbon.2da.
Edit: you might want to edit the file clswpbon.2da to give your Sorcerer kit access to the APR bonus from specialization by putting a 1 on the GETS_PROF_APR column on your kit's row.
Hi, Thank you very much for your help @CrevsDaak . I just wanted to let you know that your example script was hugely useful but there is one small error in it I think.
the line
thiefscl = ~100 100 100 100 100 100 100~
only has 7 values where the 2DA requires 8. This threw up an error until I added the extra value.
I am having a problem with one of the passive abilities I added that increments on level up. If I use 'add kit' in EEKeeper the increments add fine and work in game, yet if I level up in game they simply don't get applied (if opening the file after levelling in EEKeeper there are no effects showing as added).
Attached is what I have if anyone could shed some light.
Hi, Thank you very much for your help @CrevsDaak . I just wanted to let you know that your example script was hugely useful but there is one small error in it I think.
the line
thiefscl = ~100 100 100 100 100 100 100~
only has 7 values where the 2DA requires 8. This threw up an error until I added the extra value.
I am having a problem with one of the passive abilities I added that increments on level up. If I use 'add kit' in EEKeeper the increments add fine and work in game, yet if I level up in game they simply don't get applied (if opening the file after levelling in EEKeeper there are no effects showing as added).
Attached is what I have if anyone could shed some light.
It is '1AFSTHACO.SPL' giving me the issues
The name's too long :) for the engine. The game only supports up to 8 characters on a filename (without counting the extension).
Thanks that fixed it. I'm glad it was a silly mistake like that than something bigger.
I think I have the mod getting as close as it can to emulating a fighter/sorc multiclass... but a lot of the solutions are very hacked together so I doubt it's worth releasing.
To save myself time from reading every post, custom kits now work for the games? I recall one time they didn't because a a patch did something to the game.
Hello I desperatly need your help :P I started modding baldurs gate 1 & 2 ee about a year ago. My first mod was a mindflayer kit. With loads of help from people i got it to work. I played almost true shadow of amn with it, no issues except i found out that some new spells etc had to be implemented to be able to run single run true the game. Then i had almost a year break from baldurs gate in general.
So then i tryed to fix it so that instead of invi creature was going to make me into a mindflayer which would not happen before i level'd up 1 level, i tryed to get it to shapechange as once(with a lot of help ofc) But after this suddenly i can't make a new game, the char dies at once u start and irenicus movie never starts... Doesent even mather what char, its impossible to start any char, they just die.
I tried to unninstal kit mod, dident work. At the end i i applied the latest update, 1.3. It said it would remove all mods. And it did, but still character dies at very first start, before first movie.
So i uninstalled bg2ee, deleted folder under C: disk. Redownloaded it and reinstalled it with newest patch. I tried to make a new game and it worked. I installed XP cap mod. Saradas chapechanger. Made a totally new werewolf kit, where i used my other .tp2 file as a base. Weidu installed it after i fixed 4 writing errors. I started a new game, and same shit happens again. The char dies. What is wrong? :P
What should i do? Make a totally new .tp2 kit file? And remake the entire kit? Is it somewhere there the fault is? Or should i just give up on the kit and just make a mod which changes the wherewolf cla and lua tables and adds my spells/weps into those etc?
Need help, totally stucked and need to reinstall bg2ee again for the second time this evening xD
So after about three years I've decided to fire up BG:EE. I guess I have to update my custom kits to 1.3. It's been so long I'd probably have to reteach myself. I guess the question is, is there and easy fix (a specific line or two) to make my kits work in 1.3? I installed it without fixing it and neither kit is select-able after selecting fighter.
So after about three years I've decided to fire up BG:EE. I guess I have to update my custom kits to 1.3. It's been so long I'd probably have to reteach myself. I guess the question is, is there and easy fix (a specific line or two) to make my kits work in 1.3? I installed it without fixing it and neither kit is select-able after selecting fighter.
Check out other EE compatible kit mods. You are likely missing stuff involving fl#add_kit_ee.tpa
@joshuar9476 I can't attach the fl#add_kit_ee.tpa here, but this is what it would look like:
/* * fl#add_kit_ee - An ADD_KIT supplement for EE-type games * Author: Fredrik Lindgren, a.k.a., Wisp * Licence: public domain * Date: 2014-09-28 */
OUTER_SPRINT fl#add_kit_ee#version "1.1.0"
DEFINE_ACTION_FUNCTION fl#add_kit_ee#get_row STR_VAR file = "" row_rame = "" column = 0 RET row BEGIN COPY_EXISTING "%file%.2da" override COUNT_2DA_COLS num_col READ_2DA_ENTRIES_NOW file num_col SPRINT row "" FOR (i = 0; i < file; ++i) BEGIN READ_2DA_ENTRY_FORMER file i column label PATCH_IF "%label%" STRING_EQUAL_CASE "%row_name%" BEGIN FOR (j = 1; j < num_col; ++j) BEGIN READ_2DA_ENTRY_FORMER file i j item SPRINT row "%row% %item%" END END END BUT_ONLY END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#get_column STR_VAR file = "" column_name = "" RET column BEGIN COPY_EXISTING "%file%.2da" override COUNT_2DA_COLS num_col READ_2DA_ENTRIES_NOW file num_col - 1 SPRINT column "" FOR (i = 0; i < num_col - 1; ++i) BEGIN READ_2DA_ENTRY_FORMER file 0 i label PATCH_IF "%label%" STRING_EQUAL_CASE "%column_name%" BEGIN FOR (j = 1; j < file; ++j) BEGIN READ_2DA_ENTRY_FORMER file j i + 1 item SPRINT column "%column% %item%" END END END BUT_ONLY END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#add_row STR_VAR kit_name = "" input = "" file = "" clone = "" BEGIN ACTION_IF "%input%" STR_CMP "" BEGIN OUTER_SPRINT append "%kit_name% %input%" APPEND "%file%.2da" "%append%" UNLESS "%kit_name%" END ELSE ACTION_IF "%clone%" STR_CMP "" BEGIN LAF fl#add_kit_ee#get_row STR_VAR file row_name = EVAL "%clone%" RET row END OUTER_SPRINT append "%kit_name% %row%" APPEND "%file%.2da" "%append%" UNLESS "%kit_name%" END END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#add_column STR_VAR kit_name = "" input = "" file = "" clone = "" BEGIN ACTION_IF "%input%" STR_CMP "" BEGIN OUTER_SPRINT append "$ $ %kit_name% %input%" APPEND_COL "%file%.2da" "%append%" UNLESS "%kit_name%" END ELSE ACTION_IF "%clone%" STR_CMP "" BEGIN LAF fl#add_kit_ee#get_column STR_VAR file column_name = EVAL "%clone%" RET column END OUTER_SPRINT append "$ $ %kit_name% %column%" APPEND_COL "%file%.2da" "%append%" UNLESS "%kit_name%" END END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#validate INT_VAR kit_number = 0 kit_class = 0 STR_VAR kit_name = "" backstab = "" clswpbon = "" hpclass = "" numwslot = "" thiefskl = "" traplimt = "" clascolr = "" clasiskl = "" clasthac = "" thiefscl = "" sneakatt = "" crippstr = "" RET backstab thiefskl traplimt sneakatt crippstr BEGIN ACTION_IF kit_class != 4 AND ("%backstab%" STR_CMP "" OR "%thiefskl%" STR_CMP "" OR "%traplimt%" STR_CMP "" OR "%sneakatt%" STR_CMP "" OR "%crippstr%" STR_CMP "") BEGIN WARN ~WARNING: the arguments for thief-only 2DAs should only be provided for thief kits~ OUTER_SPRINT backstab "" OUTER_SPRINT thiefskl "" OUTER_SPRINT traplimt "" OUTER_SPRINT sneakatt "" OUTER_SPRINT crippstr "" END END
DEFINE_PATCH_FUNCTION fl#add_kit_ee#get_2da_value STR_VAR row = "" column = "" req_column_count = 2 value = "" RET value BEGIN COUNT_2DA_COLS num_col READ_2DA_ENTRIES_NOW file req_column_count FOR (i = 0; i < file; ++i) BEGIN READ_2DA_ENTRY_FORMER file i 0 row_label PATCH_IF "%row_label%" STRING_EQUAL_CASE "%row%" BEGIN // We assume the top row is off by one FOR (j = 0; j < num_col - 1; ++j) BEGIN READ_2DA_ENTRY_FORMER file 0 j col_label PATCH_IF "%col_label%" STRING_EQUAL_CASE "%column%" BEGIN READ_2DA_ENTRY_FORMER file i j + 1 value i = file j = num_col END END END END END
COPY_EXISTING kitlist.2da override READ_2DA_ENTRIES_NOW kitlist 9 FOR (i = 0; i < kitlist; ++i) BEGIN READ_2DA_ENTRY_FORMER kitlist i 1 k PATCH_IF "%k%" STRING_EQUAL_CASE "%kit_name%" BEGIN READ_2DA_ENTRY_FORMER kitlist i 0 kit_number READ_2DA_ENTRY_FORMER kitlist i 2 kit_lower READ_2DA_ENTRY_FORMER kitlist i 3 kit_mixed READ_2DA_ENTRY_FORMER kitlist i 4 kit_desc READ_2DA_ENTRY_FORMER kitlist i 8 kit_class END END BUT_ONLY
ACTION_IF kit_number < 0 BEGIN FAIL ~ERROR: the kit %kit_name% was not found in kitlist.2da~ END
LAF fl#add_kit_ee#validate INT_VAR kit_number kit_class STR_VAR kit_name backstab clsrcreq clswpbon hpclass numwslot thiefskl traplimt clascolr clasiskl clasthac thiefscl sneakatt crippstr RET backstab thiefskl traplimt sneakatt crippstr END
COPY_EXISTING kitlist.2da override INNER_ACTION BEGIN COPY_EXISTING kit.ids override READ_2DA_ENTRIES_NOW file 2 FOR (i = file - 1; i >= 0; --i) BEGIN READ_2DA_ENTRY_FORMER file i 1 k PATCH_IF "%k%" STRING_EQUAL_CASE "%kit_name%" BEGIN READ_2DA_ENTRY_FORMER file i 0 number END END BUT_ONLY END INNER_PATCH_SAVE kitids "%number%" BEGIN REPLACE_TEXTUALLY "0x\([0-9]+\)" "0x0000\1" END SPRINT w "[ %TAB%]+" SPRINT ow "[ %TAB%]*" SPRINT d "[0-9]+" SPRINT h "[0-9x]+" REPLACE_TEXTUALLY ~\(%d%%w%%kit_name%%w%%d%%w%%d%%w%%d%%w%.+%w%%d%%w%%h%%w%%d%%ow%$\)~ ~\1 %kitids%~ BUT_ONLY
OUTER_PATCH 0 BEGIN LOOKUP_IDS_SYMBOL_OF_INT class class kit_class END
ACTION_IF biography < "-1" OR briefdesc < "-1" OR fallen_notice < "-1" BEGIN COPY_EXISTING clastext.2da override PATCH_FOR_EACH column IN biography briefdesc fallen_notice BEGIN PATCH_IF EVAL "%column%" < "-1" AND FILE_CONTAINS_EVALUATED (clastext.2da "%column%") BEGIN LPF fl#add_kit_ee#get_2da_value STR_VAR row = EVAL "%class%" column req_column_count = 8 RET value END SET EVAL "%column%" = value END END BUT_ONLY END
ACTION_DEFINE_ARRAY row_files BEGIN backstab clsrcreq clswpbon hpclass numwslot thiefskl traplimt sneakatt crippstr END
ACTION_DEFINE_ARRAY col_files BEGIN clascolr clasiskl clasthac thiefscl END
ACTION_PHP_EACH row_files AS _ => item BEGIN ACTION_IF FILE_EXISTS_IN_GAME "%item%.2da" BEGIN ACTION_IF FILE_CONTAINS_EVALUATED ("%item%.2da" "^[ %TAB%]*%class%[ %TAB%]+") BEGIN OUTER_SPRINT clone "%class%" END ELSE BEGIN OUTER_SPRINT clone "" END LAF fl#add_kit_ee#add_row STR_VAR kit_name input = EVAL EVAL "%%item%%" file = EVAL "%item%" clone END END END
ACTION_PHP_EACH col_files AS _ => item BEGIN ACTION_IF FILE_EXISTS_IN_GAME "%item%.2da" BEGIN LAF fl#add_kit_ee#add_column STR_VAR kit_name input = EVAL EVAL "%%item%%" file = EVAL "%item%" clone = EVAL "%class%" END END END
ACTION_DEFINE_ARRAY cleanup BEGIN kitlist END OUTER_SET index = 1
ACTION_PHP_EACH row_files AS _ => file BEGIN OUTER_SPRINT $cleanup("%index%") "%file%" OUTER_SET ++index END ACTION_PHP_EACH col_files AS _ => file BEGIN OUTER_SPRINT $cleanup("%index%") "%file%" OUTER_SET ++index END
ACTION_PHP_EACH cleanup AS _ => file BEGIN ACTION_IF FILE_EXISTS_IN_GAME "%file%.2da" BEGIN COPY_EXISTING "%file%.2da" override PRETTY_PRINT_2DA BUT_ONLY END END END END
All credit to Fredrik Lindgren, a.k.a., Wisp.
Then the kit's tp2 would include something like this:
Anyone familiar with the latest additions to kit externalizations/the fl#add_kit_ee routine? I feel like I've read that you can restrict a thief kit to only using a few different skills. If I want to make a kit that can *only* use Hide in Shadows, Move Silently, and Detect Illusions, how would I do that?
If you mean the changes in the beta, I have no idea as I didn't download it yet.
If you mean that the player can/cannot spend points in a certain thieving ability with a certain kit, then you should look at thiefscl.2da. In the OP I talk about it. I believe it's ruled by percentages (100 = can spend, 0 = can't) and it's also used in how many points/level Bards and Rangers get in their thieving abilities (for example, some Bard kits get less Pick Pockets than the base and such things) if it's set to anything but 100 or 0.
Also I'll be revamping the guide when I finished doing so... Which will be when I actually finish doing so :p
As of the 1.4 patch, (iwdee) thiefscl.2da only cares about 0 and 100 values for classes that can select their skill percentages manually (e.g. the thief), but other values can be added for the classes that automatically get their skill points (e.g. the blade and their 25 in pick pockets).
Edit: I'm not sure about values higher than 100. Maybe it's possible (e.g.) to create a bard kit with double the pick pocket progression. Not sure
What decides whether the kit will have a spellbook, whether it will have access to sneaking, and things like that? Is it dependent entirely on what class it belongs to?
What decides whether the kit will have a spellbook, whether it will have access to sneaking, and things like that? Is it dependent entirely on what class it belongs to?
Yes. Though you can use spl files to restrict access to buttons.
@elminster, is it possible to change a class's in game sprite? For example, could you give a ranger a thief sprite? Or a bard a Mage sprite?
You can make a script that uses the ChangeAnimationNoEffect, ChangeAnimation, or Polymorph action. That or you could make a kit that has a non-dispellable spell that changes their animation.
Comments
Sometimes that'll make a % chance hard to justify if it's "just the nature of the enchantment," no angry demon trapped in the sword or something, but I'm trying to keep it plausible.
I'm basically trying to assess how possible it would be to make a sorc kit that can somewhat mimic a fighter/sorceror multiclass via an exp penalty. I realize some things like 18/xx strength and con scores counting over 16 are probably hard coded.
Watch out, because this changes it for the Sorcerer class, there actually isn't a way of doing this for a kit only (though you can make a Feature Request to make this possible). The 18/XX thing with STR is hardcoded IIRC and AFAIK... But you can change it for other classes (yes, ALL the other classes other than the Warrior classes) by editing the OTHER column in the file hpconbon.2da.
Edit: you might want to edit the file clswpbon.2da to give your Sorcerer kit access to the APR bonus from specialization by putting a 1 on the GETS_PROF_APR column on your kit's row.
the line
thiefscl = ~100 100 100 100 100 100 100~
only has 7 values where the 2DA requires 8. This threw up an error until I added the extra value.
Attached is what I have if anyone could shed some light.
It is '1AFSTHACO.SPL' giving me the issues
Don't feel bad--this has happened to everyone
I think I have the mod getting as close as it can to emulating a fighter/sorc multiclass... but a lot of the solutions are very hacked together so I doubt it's worth releasing.
I desperatly need your help :P
I started modding baldurs gate 1 & 2 ee about a year ago. My first mod was a mindflayer kit. With loads of help from people i got it to work. I played almost true shadow of amn with it, no issues except i found out that some new spells etc had to be implemented to be able to run single run true the game. Then i had almost a year break from baldurs gate in general.
So then i tryed to fix it so that instead of invi creature was going to make me into a mindflayer which would not happen before i level'd up 1 level, i tryed to get it to shapechange as once(with a lot of help ofc)
But after this suddenly i can't make a new game, the char dies at once u start and irenicus movie never starts... Doesent even mather what char, its impossible to start any char, they just die.
I tried to unninstal kit mod, dident work. At the end i i applied the latest update, 1.3. It said it would remove all mods. And it did, but still character dies at very first start, before first movie.
So i uninstalled bg2ee, deleted folder under C: disk. Redownloaded it and reinstalled it with newest patch. I tried to make a new game and it worked.
I installed XP cap mod. Saradas chapechanger.
Made a totally new werewolf kit, where i used my other .tp2 file as a base. Weidu installed it after i fixed 4 writing errors. I started a new game, and same shit happens again. The char dies.
What is wrong? :P
What should i do?
Make a totally new .tp2 kit file? And remake the entire kit? Is it somewhere there the fault is?
Or should i just give up on the kit and just make a mod which changes the wherewolf cla and lua tables and adds my spells/weps into those etc?
Need help, totally stucked and need to reinstall bg2ee again for the second time this evening xD
* fl#add_kit_ee - An ADD_KIT supplement for EE-type games
* Author: Fredrik Lindgren, a.k.a., Wisp
* Licence: public domain
* Date: 2014-09-28
*/
OUTER_SPRINT fl#add_kit_ee#version "1.1.0"
DEFINE_ACTION_FUNCTION fl#add_kit_ee#get_row
STR_VAR
file = ""
row_rame = ""
column = 0
RET
row
BEGIN
COPY_EXISTING "%file%.2da" override
COUNT_2DA_COLS num_col
READ_2DA_ENTRIES_NOW file num_col
SPRINT row ""
FOR (i = 0; i < file; ++i) BEGIN
READ_2DA_ENTRY_FORMER file i column label
PATCH_IF "%label%" STRING_EQUAL_CASE "%row_name%" BEGIN
FOR (j = 1; j < num_col; ++j) BEGIN
READ_2DA_ENTRY_FORMER file i j item
SPRINT row "%row% %item%"
END
END
END
BUT_ONLY
END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#get_column
STR_VAR
file = ""
column_name = ""
RET
column
BEGIN
COPY_EXISTING "%file%.2da" override
COUNT_2DA_COLS num_col
READ_2DA_ENTRIES_NOW file num_col - 1
SPRINT column ""
FOR (i = 0; i < num_col - 1; ++i) BEGIN
READ_2DA_ENTRY_FORMER file 0 i label
PATCH_IF "%label%" STRING_EQUAL_CASE "%column_name%" BEGIN
FOR (j = 1; j < file; ++j) BEGIN
READ_2DA_ENTRY_FORMER file j i + 1 item
SPRINT column "%column% %item%"
END
END
END
BUT_ONLY
END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#add_row
STR_VAR
kit_name = ""
input = ""
file = ""
clone = ""
BEGIN
ACTION_IF "%input%" STR_CMP "" BEGIN
OUTER_SPRINT append "%kit_name% %input%"
APPEND "%file%.2da" "%append%" UNLESS "%kit_name%"
END ELSE ACTION_IF "%clone%" STR_CMP "" BEGIN
LAF fl#add_kit_ee#get_row
STR_VAR
file
row_name = EVAL "%clone%"
RET
row
END
OUTER_SPRINT append "%kit_name% %row%"
APPEND "%file%.2da" "%append%" UNLESS "%kit_name%"
END
END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#add_column
STR_VAR
kit_name = ""
input = ""
file = ""
clone = ""
BEGIN
ACTION_IF "%input%" STR_CMP "" BEGIN
OUTER_SPRINT append "$ $ %kit_name% %input%"
APPEND_COL "%file%.2da" "%append%" UNLESS "%kit_name%"
END ELSE ACTION_IF "%clone%" STR_CMP "" BEGIN
LAF fl#add_kit_ee#get_column
STR_VAR
file
column_name = EVAL "%clone%"
RET
column
END
OUTER_SPRINT append "$ $ %kit_name% %column%"
APPEND_COL "%file%.2da" "%append%" UNLESS "%kit_name%"
END
END
DEFINE_ACTION_FUNCTION fl#add_kit_ee#validate
INT_VAR
kit_number = 0
kit_class = 0
STR_VAR
kit_name = ""
backstab = ""
clswpbon = ""
hpclass = ""
numwslot = ""
thiefskl = ""
traplimt = ""
clascolr = ""
clasiskl = ""
clasthac = ""
thiefscl = ""
sneakatt = ""
crippstr = ""
RET
backstab
thiefskl
traplimt
sneakatt
crippstr
BEGIN
ACTION_IF kit_class != 4 AND ("%backstab%" STR_CMP "" OR
"%thiefskl%" STR_CMP "" OR
"%traplimt%" STR_CMP "" OR
"%sneakatt%" STR_CMP "" OR
"%crippstr%" STR_CMP "")
BEGIN
WARN ~WARNING: the arguments for thief-only 2DAs should only be provided for thief kits~
OUTER_SPRINT backstab ""
OUTER_SPRINT thiefskl ""
OUTER_SPRINT traplimt ""
OUTER_SPRINT sneakatt ""
OUTER_SPRINT crippstr ""
END
END
DEFINE_PATCH_FUNCTION fl#add_kit_ee#get_2da_value
STR_VAR
row = ""
column = ""
req_column_count = 2
value = ""
RET
value
BEGIN
COUNT_2DA_COLS num_col
READ_2DA_ENTRIES_NOW file req_column_count
FOR (i = 0; i < file; ++i) BEGIN
READ_2DA_ENTRY_FORMER file i 0 row_label
PATCH_IF "%row_label%" STRING_EQUAL_CASE "%row%" BEGIN
// We assume the top row is off by one
FOR (j = 0; j < num_col - 1; ++j) BEGIN
READ_2DA_ENTRY_FORMER file 0 j col_label
PATCH_IF "%col_label%" STRING_EQUAL_CASE "%column%" BEGIN
READ_2DA_ENTRY_FORMER file i j + 1 value
i = file
j = num_col
END
END
END
END
END
DEFINE_ACTION_FUNCTION fl#add_kit_ee
INT_VAR
biography = "-2"
fallen = 0
briefdesc = "-2"
fallen_notice = "-2"
STR_VAR
kit_name = ""
backstab = ""
clsrcreq = ""
clswpbon = ""
hpclass = ""
numwslot = ""
thiefskl = ""
traplimt = ""
clascolr = ""
clasiskl = ""
clasthac = ""
thiefscl = ""
sneakatt = ""
crippstr = ""
BEGIN
ACTION_IF GAME_IS ~bgee bg2ee iwdee~ BEGIN
PRINT "Doing EE-type kit extensions for kit %kit_name%"
OUTER_SET kit_number = "-1"
COPY_EXISTING kitlist.2da override
READ_2DA_ENTRIES_NOW kitlist 9
FOR (i = 0; i < kitlist; ++i) BEGIN
READ_2DA_ENTRY_FORMER kitlist i 1 k
PATCH_IF "%k%" STRING_EQUAL_CASE "%kit_name%" BEGIN
READ_2DA_ENTRY_FORMER kitlist i 0 kit_number
READ_2DA_ENTRY_FORMER kitlist i 2 kit_lower
READ_2DA_ENTRY_FORMER kitlist i 3 kit_mixed
READ_2DA_ENTRY_FORMER kitlist i 4 kit_desc
READ_2DA_ENTRY_FORMER kitlist i 8 kit_class
END
END
BUT_ONLY
ACTION_IF kit_number < 0 BEGIN
FAIL ~ERROR: the kit %kit_name% was not found in kitlist.2da~
END
LAF fl#add_kit_ee#validate
INT_VAR
kit_number
kit_class
STR_VAR
kit_name
backstab
clsrcreq
clswpbon
hpclass
numwslot
thiefskl
traplimt
clascolr
clasiskl
clasthac
thiefscl
sneakatt
crippstr
RET
backstab
thiefskl
traplimt
sneakatt
crippstr
END
COPY_EXISTING kitlist.2da override
INNER_ACTION BEGIN
COPY_EXISTING kit.ids override
READ_2DA_ENTRIES_NOW file 2
FOR (i = file - 1; i >= 0; --i) BEGIN
READ_2DA_ENTRY_FORMER file i 1 k
PATCH_IF "%k%" STRING_EQUAL_CASE "%kit_name%" BEGIN
READ_2DA_ENTRY_FORMER file i 0 number
END
END
BUT_ONLY
END
INNER_PATCH_SAVE kitids "%number%" BEGIN
REPLACE_TEXTUALLY "0x\([0-9]+\)" "0x0000\1"
END
SPRINT w "[ %TAB%]+"
SPRINT ow "[ %TAB%]*"
SPRINT d "[0-9]+"
SPRINT h "[0-9x]+"
REPLACE_TEXTUALLY ~\(%d%%w%%kit_name%%w%%d%%w%%d%%w%%d%%w%.+%w%%d%%w%%h%%w%%d%%ow%$\)~ ~\1 %kitids%~
BUT_ONLY
OUTER_PATCH 0 BEGIN
LOOKUP_IDS_SYMBOL_OF_INT class class kit_class
END
ACTION_IF biography < "-1" OR briefdesc < "-1" OR fallen_notice < "-1" BEGIN
COPY_EXISTING clastext.2da override
PATCH_FOR_EACH column IN biography briefdesc fallen_notice BEGIN
PATCH_IF EVAL "%column%" < "-1" AND FILE_CONTAINS_EVALUATED (clastext.2da "%column%") BEGIN
LPF fl#add_kit_ee#get_2da_value
STR_VAR
row = EVAL "%class%"
column
req_column_count = 8
RET
value
END
SET EVAL "%column%" = value
END
END
BUT_ONLY
END
OUTER_SPRINT clastext "%kit_name% %kit_class% %kit_number% %kit_lower% %kit_desc% %kit_mixed% %biography% %fallen% %briefdesc%"
ACTION_IF FILE_CONTAINS_EVALUATED (clastext.2da "FALLEN_NOTICE") BEGIN
OUTER_SPRINT clastext "%clastext% %fallen_notice%"
END
APPEND clastext.2da "%clastext%" UNLESS "%kit_name%"
ACTION_DEFINE_ARRAY row_files BEGIN
backstab
clsrcreq
clswpbon
hpclass
numwslot
thiefskl
traplimt
sneakatt
crippstr
END
ACTION_DEFINE_ARRAY col_files BEGIN
clascolr
clasiskl
clasthac
thiefscl
END
ACTION_PHP_EACH row_files AS _ => item BEGIN
ACTION_IF FILE_EXISTS_IN_GAME "%item%.2da" BEGIN
ACTION_IF FILE_CONTAINS_EVALUATED ("%item%.2da" "^[ %TAB%]*%class%[ %TAB%]+") BEGIN
OUTER_SPRINT clone "%class%"
END ELSE BEGIN
OUTER_SPRINT clone ""
END
LAF fl#add_kit_ee#add_row
STR_VAR
kit_name
input = EVAL EVAL "%%item%%"
file = EVAL "%item%"
clone
END
END
END
ACTION_PHP_EACH col_files AS _ => item BEGIN
ACTION_IF FILE_EXISTS_IN_GAME "%item%.2da" BEGIN
LAF fl#add_kit_ee#add_column
STR_VAR
kit_name
input = EVAL EVAL "%%item%%"
file = EVAL "%item%"
clone = EVAL "%class%"
END
END
END
ACTION_DEFINE_ARRAY cleanup BEGIN kitlist END
OUTER_SET index = 1
ACTION_PHP_EACH row_files AS _ => file BEGIN
OUTER_SPRINT $cleanup("%index%") "%file%"
OUTER_SET ++index
END
ACTION_PHP_EACH col_files AS _ => file BEGIN
OUTER_SPRINT $cleanup("%index%") "%file%"
OUTER_SET ++index
END
ACTION_PHP_EACH cleanup AS _ => file BEGIN
ACTION_IF FILE_EXISTS_IN_GAME "%file%.2da" BEGIN
COPY_EXISTING "%file%.2da" override
PRETTY_PRINT_2DA
BUT_ONLY
END
END
END
END
Then the kit's tp2 would include something like this:
INT_VAR
biography = ~-1~
briefdesc = 102499
fallen = 0
fallen_notice = ~-1~
STR_VAR
kit_name = KIT
clswpbon = ~1 0 3~
numwslot = ~2~
clascolr = ~57 58 122 1 43~
clasiskl = ~0 0 0 0 0 0 0~
clasthac = ~0~
thiefscl = ~0 0 0 0 0 0 0 0~
hpclass = ~HPFM~
clsrcreq = ~0 1 0 0 0 0 0~
If you mean that the player can/cannot spend points in a certain thieving ability with a certain kit, then you should look at thiefscl.2da. In the OP I talk about it. I believe it's ruled by percentages (100 = can spend, 0 = can't) and it's also used in how many points/level Bards and Rangers get in their thieving abilities (for example, some Bard kits get less Pick Pockets than the base and such things) if it's set to anything but 100 or 0.
Also I'll be revamping the guide when I finished doing so... Which will be when I actually finish doing so :p
Edit: I'm not sure about values higher than 100. Maybe it's possible (e.g.) to create a bard kit with double the pick pocket progression. Not sure