-
Posts
12,027 -
Joined
Content Type
Forums
Events
Downloads
Gallery
Mods
News
Store
Posts posted by CamDawg
-
-
Thanks for the reports guys, I'll take a look at the UI and see what's up.
-
What are you referring to?There are... other reasons... why you might want to prep these mods for a flipped NORH.And since Trent showed a screenshot at PAX, I no longer have to be subtle--the flipped NORH will be standard for BG2EE.
-
While I've run down some engine differences over in the IESDP forum, I'd thought I'd put together something more focused on the nuts-and-bolts on getting your mod to work on the new EE engines. The good news is that the major issues will (eventually) be handled by WeiDU itself (multi-language support, different save game paths, etc.) so everyone should head over to the WeiDU forum to give Wisp a big thank you for his work.
That being said, there are still some issues modders will need to address to get their mods to work on BGEE and BG2EE. The good news is that changes for BG2 mods should be fairly minor; BG mods will have some extra work to do.
The broad overview
The EE engine's closest equivalent would be the BG2 ToB engine with TobEx, BG2 Fixpack, and 1PP installed. There are also new 2das, opcodes, and scripting and several formerly broken/non-working aspects of the engine now work. I want to focus this how-to more on conversion, so I'm not going to address the new possibilities too much here.
Save games and baldur.ini are now located in the user's documents folders. Multiple languages are supported by having different tlk files in the game's lang folder (i.e. English talk is in lang/en_us). These changes will be handled by WeiDU itself.
The file formats are the same as BG2. In a few cases a few previously unused blocks are being utilized (i.e. like TobEx, bit 25 at 0x18 in the item header is used to flag critical hit protection). We'll do our best to continue to document changes in the IESDP.
File names are the same as the underlying games--Beregost is ar3300.are in BGEE, just like it was in BG. sw1h03.itm is Kondar. sppr101.spl is Bless. Early on, the EE developers were using the original Bio naming conventions (i.e. blun37.itm is a new BGEE club) but they've since started using their own modding prefixes, OH or BD for mainline content, and BP for Black Pits junk. You'll also spot an occasional modder prefix, too (my own CD is there in a few places, for example).
BGIIEE and IWDEE strings are pretty much exactly where they are in BG2 and IWD. That is not, unfortunately, the case with BGEE and BG.
Player education
Even after mods are nicely converted, there are still some critical issues on which we, as modders, need to educate players. First and foremost, the EEs are being actively developed and every time a patch is applied, it will wipe the player's current mod setup. A player in the middle of a modded game may want to delay applying a patch until their game is finished, since even a mod re-install may not allow them to continue their game as it was.
The other important point is how WeiDU will handle multi-language support. The first time a player installs a mod on EE, they will be prompted to select a language to use on their EE game (this is different than what language the mod will use to install). This allows WeiDU to select and use the correct tlk file in its modifications. The language preference will be saved in a configuration file--if the player later changes their mind about the language, we all need to learn how to walk them through that. Since the nuts and bolts are still being decided about language selection, I'll defer this to the beta thread in the WeiDU forums.
Get to the conversion already
So, the basic of basics. WeiDU, as of v232 (current version as of this update is v236), already support EE detection with both the GAME_IS and ENGINE_IS triggers, so it's nice and easy:ACTION_IF GAME_IS BGEE THEN BEGIN // bgee stuff, use BG2EE for bg2ee // do bgee stuff END
Item names and descriptions
The EE engine automatically generates the usable/unusable block of an item description, so you don't actually need it in the text. The other convention is that unique items now use their name--so sw1h03,itm was Bastard Sword +1, +3 vs. Shapeshifters in BG/BG2, but is known as Kondar +1 in BGEE/BG2EE. hamm03 is Ashideena +2, ring06 is the Ring of the Princes +1, and so on. I've been working around this with a special EE tra file (see Item Upgrade v40 for an example). The mod loads the usual setup.tra file in the language selection, but then I override the item description strings with a custom tra file. So, for example, this would be your normal setup.tra:@122 = ~Club +5: Pitchwife~ @123 = ~Club +5: Pitchwife Forged for <CHARNAME> by amalgamating the oaken, acidic club Blackblood and the splintered club Gnasher, Pitchwife pulses with destructive power. Covered in a tar-like pitchy substance that burns flesh on contact, Pitchwife also drives aggravating spines and splinters into the wound. Equipped Abilities: 25% acid resistance THAC0: +5 bonus Damage: 1D6 + 5, +5 acid damage, slivers add 3 points of extra damage each round for four rounds Damage type: crushing Weight: 3 Speed Factor: 1 Proficiency Type: Club Type: 1-handed Requires: 5 Strength Not Usable By: Mage~ @124 = ~Mace +5: Skullcrusher~ @125 = ~Mace +5: Skullcrusher This mace is permanently bloodstained; a telltale trace of its many years spent bashing heads. The weapon would have been the bane of humanoids throughout its history, but those that wielded it seem to have been purposely left out of historic record. Recently Skullcrusher was reforged into an even more awesome weapon by <CHARNAME>. STATISTICS: THAC0: +5 bonus Damage: 1D6 + 6, +6 extra damage to humanoid creatures, lowers target's maximum hit points by 2 for 10 rounds Damage type: crushing Weight: 6 Speed Factor: 2 Proficiency Type: Mace Type: 1-handed Requires: 10 Strength Not Usable By: Druid Mage Thief~
This is setup_ee.tra:
@123 = ~Club +5: Pitchwife Forged for <CHARNAME> by amalgamating the oaken, acidic club Blackblood and the splintered club Gnasher, Pitchwife pulses with destructive power. Covered in a tar-like pitchy substance that burns flesh on contact, Pitchwife also drives aggravating spines and splinters into the wound. Equipped Abilities: 25% acid resistance THAC0: +5 bonus Damage: 1D6 + 5, +5 acid damage, slivers add 3 points of extra damage each round for four rounds Damage type: crushing Weight: 3 Speed Factor: 1 Proficiency Type: Club Type: 1-handed Requires: 5 Strength ~ @125 = ~Mace +5: Skullcrusher This mace is permanently bloodstained; a telltale trace of its many years spent bashing heads. The weapon would have been the bane of humanoids throughout its history, but those that wielded it seem to have been purposely left out of historic record. Recently Skullcrusher was reforged into an even more awesome weapon by <CHARNAME>. STATISTICS: THAC0: +5 bonus Damage: 1D6 + 6, +6 extra damage to humanoid creatures, lowers target's maximum hit points by 2 for 10 rounds Damage type: crushing Weight: 6 Speed Factor: 2 Proficiency Type: Mace Type: 1-handed Requires: 10 Strength ~
Note how it only has descriptions strings (@123 and @125) and not the names (@122 and @124). The EE tra is not a full tra file; it overrides only the strings that need to be changed for an EE install. You should probably leave a comment in your EE tra file to let your translators know they can also copy their work over and save them some time. In the tp2, you'd just detect EE, load the custom tra, and then proceed as normal:
// load up ee-specific tra files on BG2EE ACTION_IF GAME_IS BG2EE THEN BEGIN LOAD_TRA ~c2/%LANGUAGE%/setup_ee.tra~ END COPY ~c2/itm/c2blun01.itm~ ~override~ SAY NAME2 @122 SAY DESC @123 COPY ~c2/itm/c2blun02.itm~ ~override~ SAY NAME2 @124 SAY DESC @125
EE games, since the extra tra was loaded, will pull @123 and @125 from setup_ee.tra whereas non-EE games will pull those strings from the regular setup.tra file.
Journal entries
This section of the tutorial was thoughtfully provided by Wisp.
The journal has been revamped for EE; the most noticeable improvement is that entries cluster under a given heading and can be collapsed. The bad news for modders is that the old methods of manipulating the journal won't work unless the entries are already registered in the bgee.sql file. In other words, code up your dialogues and scripts as usual but then we need to do an extra step. Enter WeiDU's new ADD_JOURNAL command:QuoteADD_JOURNAL [ EXISTING ] [ MANAGED ] [ TITLE ( text ) ] reference list [ USING traFile list ]
If the game is not BGEE, this action does nothing. If the game is BGEE, this action patches BGEE.SQL with the provided quests and journal entries, so they will work with BGEE’s journal system.To understand what you are doing with ADD_JOURNAL, it is necessary to first understand a little about how the BGEE journal system works. In BGEE's system, each quest forms a group, consisting of a title and one or more quest entries. A quest entry corresponds exactly to the journal entry of BG2. What's new in this system is the groups and their titles.
To illustrate this with an example, consider the following quest, which is Bodhi's kidnapping of the romanceable NPC E. G. McExample:Quote@1 = ~The Final Battle with Bodhi
We were ambushed by Bodhi and she kidnapped E. G.!~
@2 = ~The Final Battle with Bodhi
My beloved E. G. has been turned into a vampire!~
@3 = ~The Final Battle with Bodhi
E. G. has been restored to life! Joy!~In BG2, these three journal entries are not related beyond what the modder has scripted. Under the BGEE system, however, they would all go into a single group, with the title "The Final Battle with Bodhi". To make this quest compatible with the BGEE system, we use ADD_JOURNAL:
ADD_JOURNAL @1 @2 @3 USING ~mymod/tra/%LANGUAGE%/bodhi.tra~
ADD_JOURNAL allows you to specify any number of journal entries at the same time, and they need not all share a title. WeiDU will automatically extract the title of the journal entry ("The Final Battle with Bodhi", in this case) and group all journal entries that share a title into a single BGEE-group. You can also specify multiple tra files, with the usual restriction that you can't have and use e.g., @1 from two different tra files.
For example, suppose bodhi.tra also contained this quest:Quote@100 = ~Cookies!
I must get Bodhi's recipe for cookies.~
@101 = ~Cookies!
I was successful in convincing Bodhi to share her cookie recipe with me. Now for the nom-noms!~
@102 = ~Cookies!
Defeat! I had barely opened my mouth before Bodhi shot me down. Sad, sad day.~We can add both quests in a single ADD_JOURNAL, like so:
ADD_JOURNAL @1 @2 @3 @100 @101 @102 USING ~mymod/tra/%LANGUAGE%/bodhi.tra~
Two quest groups will be created, one with the title "The Final Battle with Bodhi", containing the journal entries @1, @2 and @3, and another with the title "Cookies!", containing the journal entries @100, @101 and @102.
If you want to add journal entries with different titles to the same group, you can use the TITLE keyword. Example:ADD_JOURNAL TITLE (~Interactions with Bodhi~) @1 @2 @3 @100 @101 @102 USING ~mymod/tra/%LANGUAGE%/bodhi.tra~
In this case, a single quest group will be created, with the title "Interactions with Bodhi" and containing all 6 journal entries.
Be default, ADD_JOURNAL will add entries as a new quest group, even if another quest group with the same title already exists. If you want to add entries to an existing quest group, you use the EXISTING keyword. If EXISTING is specified, ADD_JOURNAL looks for existing quest groups with matching titles and adds the specified journal entries to those groups. If no groups with matching titles exist, the journal entries will be added as a new group. You can combine TITLE and EXISTING (but it is not necessary).
ADD_JOURNAL's last keyword, MANAGED, is not yet useful and will not be explained here.
It should also be emphasized that ADD_JOURNAL does not replace the usual UNSOLVED_JOURNAL, SOLVED_JOURNAL, AddJournalentry() etc. ADD_JOURNAL augments the existing methods for adding journal entries and is used as an addition.
Finally, one piece of advice on using ADD_JOURNAL:
When you use EXISTING, it's best if you also use TITLE. BGEE stores the quest-group titles as separate STRREFs, so you can e.g., use ADD_JOURNAL EXISTING TITLE (#31270) to be sure that your journal entries really are added to the right group. Consider "The Final Battle with Bodhi" and "The Final Battle with Bodhi."; they are subtly different and BG2 and many mods are inconsistent on whether to use a full stop or not. WeiDU 232 will automatically strip any terminal full stop on titles it extracts from journal entries (but not from titles you provide through TITLE) to eliminate this source of error (the BGEE style is to not have any terminal full stop on its quest-group titles).
Existing resource file names
As mentioned briefly above, BGEE and BG2EE will use the same file names as the original game--this is great news for BG2 mods (since no changes required) and potentially the biggest obstacle for BG/BGT/Tutu mods.
The good news is that most of this is already alleviated for people who were using the Tutu/BGT variable libraries originally developed for Tutu/BGT compatibility. Probably the best place to get the libraries are from BG1 NPC's Github repo. If you look inside a mod like BG UB, you'll notice that it detects the game and then loads a library full of variable declarations for game resources, and then the tp2 is full of those resources. I.e. the library will declareOUTER_SPRINT "NEBaldursGate_SplurgingSturgeon_L2" "AR0104" // for vanilla BG OUTER_SPRINT "NEBaldursGate_SplurgingSturgeon_L2" "AR7204" // for BGT OUTER_SPRINT "NEBaldursGate_SplurgingSturgeon_L2" "FW0104" // for Tutu
since this area has a different file name under each of these games. In the tp2/dialogues/scripting you'll never see the area file directly referenced, just the variable:
COPY_EXISTING ~%NEBaldursGate_SplurgingSturgeon_L2%.ARE~ ~override~ // patch stuff
The attached library will set up all of these variables for BGEE, so if you've already taken this step to make your mod Tutu/BGT compatible you should be more or less good to go with some slightly altered detection code and a library load. If you haven't done so already, well, you're in for a miserable slog.
Audio and area tilesets
EE allows for ogg files to be played directly, negating the need for the usual ogg > wav conversion. Audio is now best handled by WeiDU's new HANDLE_AUDIO function, which will automatically convert (if needed) and copy audio files for you--refer to the WeiDU documentation for more information. HANDLE_AUDIO should really be the standard for all mods, not just EE.
EE uses a new PVRZ compression for tilesets which, at present, no modding tool can really handle properly. I believe DLTCEP can read them, but no tool can compress into PVRZ. The good news is that the old TIS files still work just fine. Just like HANDLE_AUDIO, HANDLE_TILESETS should be your new standard for unpacking tilesets--again, refer to the WeiDU documentation for Wisp's notes.
Portraits
Given that EE is written for a larger screen by default, the small and medium size portraits have been bumped up. The epilogue portrait remains 210x330, but the medium portrait is now 169x266 (from 110x170 in BG/BG2) and the small 54x84 (from 38x60 in BG/BG2).
Kits
A lot of the previous hardcoded aspects of kits are now softcoded--for example, monks and sorcerers can now be kitted; you can use a custom HP table for your kit; backstab multipliers can be applied for non-thieves; and all sorts of other goodies. (Yes, I need to write a new kit-making tutorial to explore all of the new possibilities.)
For the purposes of conversion though, WeiDU's ADD_KIT no longer quite adds to every 2DA needed. Fortunately Wisp has already solved this problem with a library that's included with WeiDU. In the WeiDU download package, look in the lib folder for fl#add_kit_ee folder, and specifically for the readme.html file within. You essentially include the tpa and call the macro after you run ADD_KIT--if you're not taking advantage of the new EE softcoding, that's more or less it. If you do want to take advantage, you can specify a custom HP table, default colors and biography, etc. through this macro. The macro will not do anything on a non-EE game, so you do not need to wrap it in a conditional statement; you can just call it directly.
Character Sets
To get a lot of fancy characters in for the translators, the EE versions use a different character encoding. This causes problems for non-English tra files in particular, but can also cause problems for English tra files. Non-converted tra files can introduce garbled text or even crash the game for your players. Again, Wisp to the rescue with HANDLE_CHARSETs.
As of v236, this is a standalone library; starting with v237 it will be included in WeiDU itself. The basic idea is that, when a mod install detects an EE game, HANDLE_CHARSETs will get invoked and convert your translation files to the proper UTF-8 encoding. For Windows packages you'll need to include a copy of the iconv utility; OS X and Linux users will either already have this utility or will need to install it themselves. Rather than re-hash what Wisp has already documented, I'll simply refer you to the linked thread above for help and questions.
General baseline content changes
Both BGEE and BG2EE will include One Pixel Productions and the BG2 Fixpack by default. (Some aspects of BG2FP could be fixed directly in the engine and some fixes didn't apply to BGEE, so it's not exactly the same as what's in the current BG2FP release.) Most aspects of TobEx are already included or being added in future patches.
Area MOS files are larger than vBG2, to accommodate the larger EE mini-maps.
BGEE adds three new NPCs and associated quests; BG2EE will add four. For the most part you can think of these as NPC mods (albeit with large side quests).
Black Pits is a new, separate campaign (i.e. not related to the Bhaalspawn), accessible from the game's main menu.
There are also a few new items scattered around the existing games. BGEE adds some Eastern weapons and some other more mundane items throughout the game, as does BG2EE. For the most part these additions will have minimal impact on mods except in very specific circumstances--i.e. both BG Unfinished Business and BGEE decided to give a new club to the great druid in Cloakwood.
There are some tentative plans to include some other material as a baseline, but nothing I can comment on at present. -
The Icewind Dale Fixpack is designed to fix several bugs and errors that remain in the game after the official patches have been applied. Version 6 adds a handful of new fixes and corrects a bug that would produce invincible revenants. The Fixpack works with or without the expansions Heart of Winter and Trials of the Luremaster installed. In fact, many issues quietly fixed by Heart of Winter or Trials of the Luremaster have been rolled back to every version of the game.
v6 Changelog
- The paperdoll fixes should play nicely with other mods
- Purvis' script will no longer keep trying to hide him after he's dead
- Fixed duplicate random drops in the expansion
- Fixed school of Charm Person (GOG version only)
- Charm Animal could charm non-animals in HoW/TotLM games
- More fixes for the Game Text Update
- Updated function library
- The paperdoll fixes should play nicely with other mods
-
clswpbon externalizes non-proficiency penalties, as well as which classes get the bonus APR from wspatck. UNARMED_DIVISOR sets number of attacks for unarmed (i.e. fist) characters--0 means no bonus, non-zero means level/value (rounded down) APR bonus.
This is also in error. A non-zero UNARMED_DIVISOR means 1 unarmed attack plus an additonal 1/2 (not full) attack per every (value of UNARMED_DIVISOR) levels.
-
The followup for the NDA'd links.
NearestDoor, used with a nested object, crashes ToB. It now behaves as expected, though NearestDoor(Myself) still misbehaves--just use NearestDoor().
Fo the contingency (232) opcode, quoth the Avenger:
12 - Killed - used in dorn's sword13 - TimeOfDay - used in blun38. 0x2c contains the time of day, param1 should be set to 0.
For opcode 319, quoth the Coriander:
Add to item equipped effectsOpcode #319 Usability
Spell level set to 1 means only usable by
Parameter #1: IDS Entry
Parameter #2: IDS File
Special: STRREF displayed in the item description.
Adding a special case for targeting name.Parameter 1: Name STRREF
Parameter 2: 10
The second quote is inaccurate (as was I in my first post), as it was later decided to use DV targeting. To make an item usable by only one creature, parameter2 is set to 10 and the resource field to the DV (paameter1 is not relevant).
The interesting revelation from the SetAreaScript thread is that every area in the engine has the full array of six script slots. From Cori:
We're adding a new script action that will set the area script. It's mostly self explanatory.The slot options are:
0 DEFAULT 1 GENERAL 2 RACE 3 CLASS 4 OVERRIDE 5+ DEFAULT
Only the default script is loaded when you move to an area or load.
So you can set an override/race/etc. script for an area, with a caveat. Apparently every object has the full array of these scripts (i.e. areas, containers) but they're not stored through save/load. Cori again:
The filetypes are just for storing information, anything that has a script is treated the same way by the engine. Which is why you get bugs like Ulgoth's Beard or Candlekeep displaying text in the upper left corner. If it was a creature, that's where it's head would be.An example usage she gave was
TEST.BS IF HotKey(D) THEN RESPONSE #100 SetAreaScript("chicken", 2) END CHICKEN.BCS IF TRUE() THEN RESPONSE #100 CreateCreatureObject("CHICKE", Player1, 0, 0, 0) END
which will flood the given area with chickens once you press D.
There's not really a lot to add to the 320 description above, or to the AdvanceTime command.
-
Apologies, but apparently some of the links in my OP are going to the private beta testing forums and are not necessarily available to the general public. I'll try to find better links or post the relevant discussions.
-
EE has dir.ids, which is now referenced by all of the actions that use an orientation argument (i.e. CreateCreature is now CreateCreature(S:NewObject*,P:Location*,I:Face*DIR):
IDS 0 S 1 SSW 2 SW 3 SWW 4 W 5 NWW 6 NW 7 NNW 8 N 9 NNE 10 NE 11 NEE 12 E 13 SEE 14 SE 15 SSE
A blank moraleai.ids is included just to shut up DLTCEP.
As for actions, I've already mentioned 352 and 353 above:
352 SetAreaScript(S:Script*,I:ScriptSlot) 353 AdvanceTime(I:Time*GTIMES) 354 RunAwayFromNoInterruptNoLeaveArea(O:Creature*,I:Time*) 355 RunAwayFromNoLeaveArea(O:Creature*,I:Time*) 356 TransformItem(S:OldItem*,S:NewItem*) 357 ForceRandomEncounter(S:Area*) 358 JumpToObject(O:Target*)
354 and 355 are simply variants of the existing RunAway actions.
TransformItem is a PsT import and allows for changing an item to a new one while still retaining all of the charges/flags of the previous item.
When called, ForceRandomEncounter will force the party into the selected area on their next worldmap travel. Only one ForceRandomEncounter can be in play at a time so subsequent use will clear the previous one. It will also be cleared once the party arrives in the designated area.
JumpToObject is an IWD2 import.
As for triggers:
0x40DD IsTouchGUI() 0x40DE HasDLC(S:DLCName*) 0x40DF BeenInParty(S:Name*)
IsTouchGUI() will return true for stuff like iPads and whatnot. HasDLC will always evaluate to true on Windows/OS X/Linux (there's no DLC); on other platforms it will return true or false based on whether the DLC has been purchased. BeenInParty will, oddly enough, return true of the designated object has been in the party.
TobEx's NextTriggerObject is in the works if not already in the nightly builds.
-
Next, new (and changed) 2da files.
backstab will now take additional rows for custom backstab multiplier progression:
2DA V1.0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 THIEF 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 SHADOWDANCER 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ASSASIN 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 BOUNTY_HUNTER 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 STALKER 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
banttimg controls the (previously hardcoded) timing of banters:
2DA V1.0 0 VALUE FREQUENCY 600 PROBABILITY 10 REPLAYDELAY 150 SPECIALPROBABILITY 25
clascolr sets default coloring for new characters based on their class/kit:
2DA V1.0 54 MAGE SORCERER FIGHTER CLERIC THIEF BARD PALADIN DRUID RANGER FIGHTER_MAGE FIGHTER_CLERIC FIGHTER_THIEF FIGHTER_MAGE_THIEF MAGE_THIEF CLERIC_MAGE CLERIC_THIEF FIGHTER_DRUID FIGHTER_MAGE_CLERIC CLERIC_RANGER ABJURER CONJURER DIVINER ENCHANTER ILLUSIONIST INVOKER NECROMANCER TRANSMUTER BERSERKER WIZARD_SLAYER KENSAI CAVALIER INQUISITOR UNDEAD_HUNTER FERALAN STALKER BEASTMASTER ASSASIN BOUNTY_HUNTER SWASHBUCKLER BLADE JESTER SKALD TOTEMIC_DRUID SHAPESHIFTER BEAST_FRIEND TALOS HELM LATHANDER MONK BARBARIAN WILDMAGE Blackguard SHADOWDANCER DWARVEN_DEFENDER DRAGON_DISCIPLE DARK_MOON SUN_SOUL METAL 57 67 30 25 24 24 25 30 30 57 25 24 24 57 57 24 30 24 25 57 57 57 57 57 57 57 57 72 72 72 67 25 93 28 93 30 182 24 93 24 24 24 30 30 30 25 18 67 25 30 57 182 142 28 67 25 67 MINOR_CLOTH 58 46 91 28 99 67 28 86 37 58 28 99 58 58 58 99 86 46 28 58 58 58 58 58 58 58 58 46 58 67 25 28 72 93 182 86 182 99 99 67 67 99 54 54 54 83 5 25 28 91 58 182 142 93 25 83 25 MAIN_CLOTH 122 47 93 57 169 56 57 37 86 122 57 169 169 122 122 169 37 57 37 122 122 122 122 122 122 122 122 47 122 169 70 57 169 91 136 37 136 144 169 56 56 169 52 52 52 66 24 79 57 93 122 136 136 91 70 66 79 LEATHER 1 2 23 2 2 2 2 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 1 2 2 93 93 2 93 91 184 1 184 2 93 2 2 2 23 23 23 28 27 23 2 23 1 184 182 91 94 28 23 ARMOR 43 43 93 24 93 25 24 110 110 43 24 93 93 43 43 93 110 93 24 43 43 43 43 43 43 43 43 93 93 72 43 24 72 93 93 110 142 93 72 25 25 25 30 30 30 23 30 24 24 93 43 142 136 93 43 23 24
clasiskl sets the initial scores for thieving abilities:
2DA V1.0 * MAGE FIGHTER CLERIC THIEF BARD PALADIN DRUID RANGER FIGHTER_MAGE FIGHTER_CLERIC FIGHTER_THIEF FIGHTER_MAGE_THIEF MAGE_THIEF CLERIC_MAGE CLERIC_THIEF FIGHTER_DRUID FIGHTER_MAGE_CLERIC CLERIC_RANGER ABJURER CONJURER DIVINER ENCHANTER ILLUSIONIST INVOKER NECROMANCER TRANSMUTER BERSERKER WIZARD_SLAYER KENSAI CAVALIER INQUISITOR UNDEAD_HUNTER FERALAN STALKER BEASTMASTER ASSASIN BOUNTY_HUNTER SWASHBUCKLER BLADE JESTER SKALD TOTEMIC_DRUID SHAPESHIFTER BEAST_FRIEND TALOS HELM LATHANDER MONK BARBARIAN SORCERER WILDMAGE DARK_MOON DRAGON_DISCIPLE DWARVEN_DEFENDER PICK_POCKETS 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 25 25 0 0 0 0 0 0 0 0 0 0 0 0 0 OPEN_LOCKS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FIND_TRAPS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 MOVE_SILENTLY 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 HIDE_IN_SHADOWS 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DETECT_ILLUSION 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SET_TRAPS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
clastext will allow for the setting of custom bios based on the character's class/kit, but is not yet finalized.
clasthac allows for setting additional thac0 penalties based on class/kit:
2DA V1.0 * MAGE FIGHTER CLERIC THIEF BARD PALADIN DRUID RANGER FIGHTER_MAGE FIGHTER_CLERIC FIGHTER_THIEF FIGHTER_MAGE_THIEF MAGE_THIEF CLERIC_MAGE CLERIC_THIEF FIGHTER_DRUID FIGHTER_MAGE_CLERIC CLERIC_RANGER ABJURER CONJURER DIVINER ENCHANTER ILLUSIONIST INVOKER NECROMANCER TRANSMUTER BERSERKER WIZARD_SLAYER KENSAI CAVALIER INQUISITOR UNDEAD_HUNTER FERALAN STALKER BEASTMASTER ASSASIN BOUNTY_HUNTER SWASHBUCKLER BLADE JESTER SKALD TOTEMIC_DRUID SHAPESHIFTER BEAST_FRIEND TALOS HELM LATHANDER MONK BARBARIAN SORCERER WILDMAGE DARK_MOON DRAGON_DISCIPLE DWARVEN_DEFENDER BONUS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
clsrcreq externalizes which races are allowed to select which classes, as well as which races can dual-class. Same implementation as TobEx.
2DA V1.0 1 HUMAN ELF HALF_ELF DWARF HALFLING GNOME HALFORC MAGE 1 1 1 0 0 1 0 FIGHTER 1 1 1 1 1 1 1 CLERIC 1 1 1 1 1 1 1 THIEF 1 1 1 1 1 1 1 BARD 1 0 1 0 0 0 0 PALADIN 1 0 0 0 0 0 0 FIGHTER_MAGE 0 1 1 0 0 1 0 FIGHTER_CLERIC 0 0 1 1 0 1 1 FIGHTER_THIEF 0 1 1 1 1 1 1 FIGHTER_MAGE_THIEF 0 1 1 0 0 0 0 DRUID 1 0 1 0 0 0 0 RANGER 1 1 1 0 0 0 0 MAGE_THIEF 0 1 1 0 0 1 0 CLERIC_MAGE 0 0 1 0 0 1 0 CLERIC_THIEF 0 0 0 0 0 1 1 FIGHTER_DRUID 0 0 1 0 0 0 0 FIGHTER_MAGE_CLERIC 0 0 1 0 0 0 0 CLERIC_RANGER 0 0 1 0 0 0 0 SORCERER 1 1 1 0 0 0 0 MONK 1 0 0 0 0 0 0 DUALCLASS 1 0 0 0 0 0 0
clswpbon externalizes non-proficiency penalties, as well as which classes get the bonus APR from wspatck. UNARMED_DIVISOR sets number of attacks for unarmed (i.e. fist) characters--0 means no bonus, non-zero means level/value (rounded down) APR bonus.
2DA V1.0 0 GETS_PROF_APR UNARMED_DIVISOR ZERO_SKILL_THAC0 MAGE 0 0 5 FIGHTER 1 0 2 CLERIC 0 0 3 THIEF 0 0 3 BARD 0 0 3 PALADIN 1 0 2 DRUID 0 0 3 RANGER 1 0 2 FIGHTER_MAGE 1 0 2 FIGHTER_CLERIC 1 0 2 FIGHTER_THIEF 1 0 2 FIGHTER_MAGE_THIEF 1 0 2 MAGE_THIEF 0 0 5 CLERIC_MAGE 0 0 3 CLERIC_THIEF 0 0 3 FIGHTER_DRUID 1 0 2 FIGHTER_MAGE_CLERIC 1 0 2 CLERIC_RANGER 1 0 2 ABJURER 0 0 5 CONJURER 0 0 5 DIVINER 0 0 5 ENCHANTER 0 0 5 ILLUSIONIST 0 0 5 INVOKER 0 0 5 NECROMANCER 0 0 5 TRANSMUTER 0 0 5 WILDMAGE 0 0 5 BERSERKER 1 0 2 WIZARD_SLAYER 1 0 2 KENSAI 1 0 2 CAVALIER 1 0 2 INQUISITOR 1 0 2 UNDEAD_HUNTER 1 0 2 FERALAN 1 0 2 STALKER 1 0 2 BEASTMASTER 1 0 2 ASSASIN 0 0 3 BOUNTY_HUNTER 0 0 3 SWASHBUCKLER 0 0 3 BLADE 0 0 3 JESTER 0 0 3 SKALD 0 0 3 TOTEMIC_DRUID 0 0 3 SHAPESHIFTER 0 0 3 BEAST_FRIEND 0 0 3 TALOS 0 0 3 HELM 0 0 3 LATHANDER 0 0 3 BARBARIAN 1 0 2 BLACKGUARD 1 0 2 SHADOWDANCER 0 0 5 DWARVEN_DEFENDER 1 0 2 DRAGON_DISCIPLE 0 0 5 MONK 1 3 2 DARK_MOON 1 3 2 SUN_SOUL 1 3 2
extanim and extspeed can be used to set various properties of new creature animations:
2DA V1.0 * ARMOR_MAX_CODE CAN_LIE_DOWN DETECTED_BY_INFRAVISION DOUBLE_BLIT EQUIP_HELMET SPLIT_BAMS COLOR_BLOOD COLOR_CHUNKS FALSE_COLOR HEIGHT_CODE HEIGHT_CODE_HELMET HEIGHT_CODE_SHIELD SND_FREQ PERSONAL_SPACE RESREF RESREF_PAPERDOLL RESREF_ARMORBASE RESREF_ARMORSPECIFIC RESREF_SHADOW
2DA V1.0 * SPEED 12288 6 28928 6 28929 6 29184 9 29185 9 29186 9 29187 9 29698 10 29697 10 29696 10 29952 7 29953 7 25600 9 53248 10 30466 5 30464 5 30720 7 32768 8 32523 10 32522 10 28672 7 33024 7 58368 7 58384 7 58400 7 58416 7 57424 6 58624 6 58656 6 57456 8 59392 7 59424 7 59408 7 59440 7 59456 7 59136 7 59152 7 59168 7 57520 7 33280 7 32525 6 36864 8 30465 5 31745 7 31744 7 31232 8 31233 8 31234 8 32559 8 31235 8 31236 8 32512 7 32527 7 31488 10 31490 10 31493 10 31494 10 31492 10 31491 10 31489 10 40960 9 4096 8 32557 8 32000 5
familiar lets you designate familiars per alignment:
2DA V1.0 FAMILIAR L_G FAMPSD N_G FAMPSD C_G FAMFAIR L_N FAMFER N_N FAMRAB C_N FAMCAT L_E FAMIMP N_E FAMDUST C_E FAMQUAS
hidespl lets you designate spells to hide from level-up selection screens. Same implementation as TobEx.
2DA V1.0 0 IS_HIDDEN IS_FINAL SPWI001 1 0 SPWI002 1 0 SPWI003 1 0 SPWI004 1 0 SPWI005 1 0 SPWI006 1 0 SPWI007 1 0 SPWI008 1 0 SPWI009 1 0 SPWI010 1 0 SPWI011 1 0 SPWI012 1 0 SPWI013 1 0 SPWI014 1 0 SPWI015 1 0 SPWI016 1 0 SPWI017 1 0 SPWI018 1 0 SPWI019 1 0 SPWI020 1 0 SPWI021 1 0 SPWI022 1 0 SPWI023 1 0 SPWI024 1 0 SPWI025 1 0 SPWI026 1 0 SPWI027 1 0 SPWI050 1 0 SPWI051 1 0 SPWI052 1 0 SPWI053 1 0 SPWI054 1 0 SPWI055 1 0 SPWI056 1 0 SPWI298 1 0 SPWI299 1 0 SPWI399 1 0 SPWI402 1 0 SPWI483 1 0 SPWI484 1 0 SPWI485 1 0 SPWI486 1 0 SPWI487 1 0 SPWI488 1 0 SPWI489 1 0 SPWI490 1 0 SPWI491 1 0 SPWI493 1 0 SPWI494 1 0 SPWI495 1 0 SPWI496 1 0 SPWI497 1 0 SPWI498 1 0 SPWI499 1 0 SPWI590 1 0 SPWI591 1 0 SPWI592 1 0 SPWI593 1 0 SPWI594 1 0 SPWI595 1 0 SPWI596 1 0 SPWI597 1 0 SPWI802 1 0 SPWI853 1 0 SPWI888 1 0 SPWI897 1 0 SPWI898 1 0 SPWI899 1 0 SPWI920 1 0 SPWI921 1 0 SPWI922 1 0 SPWI923 1 0 SPWI924 1 0 SPWI925 1 0 SPWI926 1 1 SPWI927 1 0 SPWI928 1 0 SPWI929 1 0 SPWI930 1 0 SPWI931 1 0 SPWI932 1 0 SPWI933 1 0 SPWI934 1 0 SPWI935 1 0 SPWI936 1 0 SPWI937 1 0 SPWI938 1 0 SPWI939 1 0 SPWI940 1 0 SPWI941 1 0 SPWI942 1 0 SPWI943 1 0 SPWI944 1 0 SPWI945 1 0 SPWI946 1 0 SPWI947 1 0 SPWI948 1 0 SPWI949 1 0 SPWI950 1 0 SPWI951 1 0 SPWI952 1 0 SPWI953 1 0 SPWI954 1 0 SPWI955 1 0 SPWI956 1 0 SPWI957 1 0 SPWI958 1 0 SPWI959 1 0 SPWI960 1 0 SPWI979 1 0 SPWI980 1 0 SPWI981 1 0 SPWI982 1 0 SPWI983 1 0 SPWI984 1 0 SPWI985 1 0 SPWI986 1 0 SPWI987 1 0 SPWI988 1 0 SPWI989 1 0 SPWI990 1 0 SPWI991 1 0 SPWI992 1 0 SPWI993 1 0 SPWI994 1 0 SPWI995 1 0 SPWI996 1 0 SPWI997 1 0 SPWI998 1 0 SPWI999 1 0 SPPR721 1 0 SPPR722 1 0 SPPR723 1 0 SPPR724 1 0 SPPR725 1 0 SPPR726 1 0 SPPR727 1 0 SPPR728 1 0 SPPR729 1 0 SPPR730 1 0 SPPR731 1 0 SPPR732 1 0
hpbarb externalizes the barbarian HP table, same as TobEx:
2DA V1.0 0 SIDES ROLLS MODIFIER 1 12 1 0 2 12 1 0 3 12 1 0 4 12 1 0 5 12 1 0 6 12 1 0 7 12 1 0 8 12 1 0 9 12 1 0 10 12 0 3 11 12 0 3 12 12 0 3 13 12 0 3 14 12 0 3 15 12 0 3 16 12 0 3 17 12 0 3 18 12 0 3 19 12 0 3 20 12 0 3 21 12 0 3 22 12 0 3 23 12 0 3 24 12 0 3 25 12 0 3 26 12 0 3 27 12 0 3 28 12 0 3 29 12 0 3 30 12 0 3 31 12 0 3 32 12 0 3 33 12 0 3 34 12 0 3 35 12 0 3 36 12 0 3 37 12 0 3 38 12 0 3 39 12 0 3 40 12 0 3
hpclass externalizes which HP table to use for each class/kit. New tables can also be created and referenced (see hpdd below). Same implementation as TobEx.
2DA V1.0 HPWAR TABLE FIGHTER HPWAR BERSERKER HPWAR WIZARD_SLAYER HPWAR KENSAI HPWAR DWARVEN_DEFENDER HPBARB RANGER HPWAR ARCHER HPWAR STALKER HPWAR BEAST_MASTER HPWAR PALADIN HPWAR CAVALIER HPWAR INQUISITOR HPWAR UNDEAD_HUNTER HPWAR BLACKGUARD HPWAR CLERIC HPPRS TALOS HPPRS HELM HPPRS LATHANDER HPPRS DRUID HPPRS TOTEMIC_DRUID HPPRS SHAPESHIFTER HPPRS BEAST_FRIEND HPPRS MAGE HPWIZ ABJURER HPWIZ CONJURER HPWIZ DIVINER HPWIZ ENCHANTER HPWIZ ILLUSIONIST HPWIZ INVOKER HPWIZ NECROMANCER HPWIZ TRANSMUTER HPWIZ WILDMAGE HPWIZ THIEF HPROG ASSASIN HPROG BOUNTY_HUNTER HPROG SWASHBUCKLER HPROG SHADOWDANCER HPROG BARD HPROG BLADE HPROG JESTER HPROG SKALD HPROG SORCERER HPWIZ DRAGON_DISCIPLE HPDD MONK HPMONK DARK_MOON HPMONK SUN_SOUL HPMONK BARBARIAN HPBARB FIGHTER_MAGE HPWAR FIGHTER_CLERIC HPWAR FIGHTER_THIEF HPWAR FIGHTER_MAGE_THIEF HPWAR MAGE_THIEF HPWIZ CLERIC_MAGE HPPRS CLERIC_THIEF HPPRS FIGHTER_DRUID HPWAR FIGHTER_MAGE_CLERIC HPWAR CLERIC_RANGER HPPRS
hpdd and hp monk are new HP progression tables:
2DA V1.0 0 SIDES ROLLS MODIFIER 1 6 1 0 2 6 1 0 3 6 1 0 4 6 1 0 5 6 1 0 6 6 1 0 7 6 1 0 8 6 1 0 9 6 1 0 10 6 1 0 11 6 0 1 12 6 0 1 13 6 0 1 14 6 0 1 15 6 0 1 16 6 0 1 17 6 0 1 18 6 0 1 19 6 0 1 20 6 0 1 21 6 0 1 22 6 0 1 23 6 0 1 24 6 0 1 25 6 0 1 26 6 0 1 27 6 0 1 28 6 0 1 29 6 0 1 30 6 0 1 31 6 0 1 32 6 0 1 33 6 0 1 34 6 0 1 35 6 0 1 36 6 0 1 37 6 0 1 38 6 0 1 39 6 0 1 40 6 0 1
2DA V1.0 0 SIDES ROLLS MODIFIER 1 8 1 0 2 8 1 0 3 8 1 0 4 8 1 0 5 8 1 0 6 8 1 0 7 8 1 0 8 8 1 0 9 8 1 0 10 8 0 2 11 8 0 2 12 8 0 2 13 8 0 2 14 8 0 2 15 8 0 2 16 8 0 2 17 8 0 2 18 8 0 2 19 8 0 2 20 8 0 2 21 8 0 2 22 8 0 2 23 8 0 2 24 8 0 2 25 8 0 2 26 8 0 2 27 8 0 2 28 8 0 2 29 8 0 2 30 8 0 2 31 8 0 2 32 8 0 2 33 8 0 2 34 8 0 2 35 8 0 2 36 8 0 2 37 8 0 2 38 8 0 2 39 8 0 2 40 8 0 2
item_use externalizes NPC undroppable items, i.e. Alora's luck rabbit foot or Edwin's amulet, as well as what they say about them. Same implementation as TobEx:
2DA V1.0 * USER STRREF FLAG MISC84 MINSC 10218 3 MISC88 ALORA 10219 1 MISC89 EDWIN 10222 1 SW1H13 XAN 10220 2 AROW14 ELDOTH 10221 2
itemanim is another TobEx import:
2DA V1.0 -1 SEQUENCE POTN00 -1 FIRESEED 8
itemtype allows for custom item types as well as their custom sound effects for picking them up and dropping them. There's some discussion of breaking up the misc category into more distinct item types, or using the IWD system of delineating shields and armor into their own types (buckers, small shields, etc. and leather, plate, etc.) but nothing has come of it yet.
2DA V1.0 0 TAKESOUND DROPSOUND SLOT 0 0 0 -1 1 0 0 -1 2 0 0 1 3 0 0 -1 4 0 0 -1 5 0 0 -1 6 0 0 -1 7 0 0 -1 8 0 0 -1 9 0 0 -1 10 0 0 -1 11 0 0 -1 12 0 0 -1 13 0 0 -1 14 0 0 -1 15 0 0 -1 16 0 0 -1 17 0 0 -1 18 0 0 -1 19 0 0 -1 20 0 0 -1 21 0 0 -1 22 0 0 -1 23 0 0 -1 24 0 0 -1 25 0 0 -1 26 0 0 -1 27 0 0 -1 28 0 0 -1 29 0 0 -1 30 0 0 -1 31 0 0 -1 32 0 0 -1 33 0 0 -1 34 0 0 -1 35 0 0 -1 36 0 0 -1 37 0 0 -1 38 0 0 -1 39 0 0 -1 40 0 0 -1 41 GAM_26A GAM_26B 9 42 0 0 -1 43 FAL_01B GAM_21B -1 44 GAM_39A GAM_39B -1 45 ABELA03 ABELA02 -1 46 GAM_23A GAM_23B -1 47 GAM_26A GAM_26B 9 48 FAL_01B GAM_21B -1 49 GAM_26A GAM_26B 9 50 GAM_05 GAM_06 -1 51 GAM_39A GAM_39B -1 52 GAM_21A GAM_21B -1 53 GAM_26A GAM_26B 9 54 GAM_21A GAM_21B -1 55 0 0 -1 56 GAM_38A GAM_38B -1 57 GAM_41A GAM_41B 35 58 GAM_15A GAM_15B -1 59 GAM_15A GAM_15B -1 60 GAM_15A GAM_15B 1 61 GAM_15A GAM_15B 1 62 GAM_16A GAM_16B 1 63 GAM_16A GAM_16B 1 64 GAM_17A GAM_17B 1 65 GAM_17A GAM_17B 1 66 GAM_15A GAM_15B 1 67 GAM_36A GAM_36B 1 68 GAM_16A GAM_16B 1 69 GAM_41A GAM_41B 35 70 0 0 -1 71 GAM_21A GAM_21B -1 72 0 0 -1 73 0 0 -1
loadh25 and loadhint are still present, but unused (no loading screens for EE).
mgsrcreq externalizes racial access to arcane kits, same as TobEx:
2DA V1.0 1 CLASS HUMAN ELF HALF_ELF DWARF HALFLING GNOME HALFORC 0x00004000 MAGE 1 1 1 0 0 0 0 0x00000040 ABJURER 1 0 0 0 0 0 0 0x00000080 CONJURER 1 0 1 0 0 0 0 0x00000100 DIVINER 1 1 1 0 0 0 0 0x00000200 ENCHANTER 1 1 1 0 0 0 0 0x00000400 ILLUSIONIST 1 0 0 0 0 1 0 0x00000800 INVOKER 1 0 0 0 0 0 0 0x00001000 NECROMANCER 1 0 0 0 0 0 0 0x00002000 TRANSMUTER 1 0 1 0 0 0 0 0x80000000 WILDMAGE 1 1 1 0 0 0 0
monkfist externalizes the assignment of monk fist weapons per level. It should also be noted that monk AC progression is now granted by their CLAB file and no longer hardcoded.
2DA V1.0 MFIST8 RESREF 1 MFIST1 2 MFIST1 3 MFIST2 4 MFIST2 5 MFIST2 6 MFIST3 7 MFIST3 8 MFIST3 9 MFIST4 10 MFIST4 11 MFIST4 12 MFIST5 13 MFIST5 14 MFIST5 15 MFIST6 16 MFIST6 17 MFIST6 18 MFIST6 19 MFIST7 20 MFIST7 21 MFIST7 22 MFIST7 23 MFIST7 24 MFIST7 25 MFIST8 26 MFIST8 27 MFIST8 28 MFIST8 29 MFIST8 30 MFIST8 31 MFIST8 32 MFIST8 33 MFIST8 34 MFIST8 35 MFIST8 36 MFIST8 37 MFIST8 38 MFIST8 39 MFIST8 40 MFIST8
numwslot externalizes the number of weapons slots per kit/class:
2DA V1.0 4 SLOTS MAGE 2 FIGHTER 4 CLERIC 2 THIEF 2 BARD 2 PALADIN 3 DRUID 2 RANGER 3 FIGHTER_MAGE 2 FIGHTER_CLERIC 2 FIGHTER_THIEF 2 FIGHTER_MAGE_THIEF 2 MAGE_THIEF 2 CLERIC_MAGE 2 CLERIC_THIEF 2 FIGHTER_DRUID 2 FIGHTER_MAGE_CLERIC 2 CLERIC_RANGER 2 ABJURER 2 CONJURER 2 DIVINER 2 ENCHANTER 2 ILLUSIONIST 2 INVOKER 2 NECROMANCER 2 TRANSMUTER 2 BERSERKER 4 WIZARD_SLAYER 4 KENSAI 4 CAVALIER 3 INQUISITOR 3 UNDEAD_HUNTER 3 FERALAN 3 STALKER 3 BEASTMASTER 3 ASSASIN 2 BOUNTY_HUNTER 2 SWASHBUCKLER 2 BLADE 2 JESTER 2 SKALD 2 TOTEMIC_DRUID 2 SHAPESHIFTER 2 BEAST_FRIEND 2 TALOS 2 HELM 2 LATHANDER 2 MONK 3 SORCERER 2 BARBARIAN 4 WILDMAGE 2 Blackguard 3 SHADOWDANCER 2 DWARVEN_DEFENDER 4 DRAGON_DISCIPLE 2 DARK_MOON 3 SUN_SOUL 3
profsmax is actually used and enforced in EE.
racetext sets default biographies by race. It's basically TobEx's externalization with a new bio column:
2DA V1.0 -1 ID NAME DESCSTR UPPERCASE BIOGRAPHY HUMAN 1 7193 9550 1096 15895 ELF 2 7194 9552 1097 15891 HALF_ELF 3 7197 9555 1098 15892 DWARF 4 7182 9551 1100 15890 HALFLING 5 7195 9554 1101 15893 GNOME 6 7196 9553 1099 15894 HALF_ORC 7 24200 24204 24202 31709 TIEFLING 153 24201 -1 24203 15891
racethac externalizes the racial to-hit bonuses with specific weapons:
2DA V1.0 0 LABEL HUMAN DWARF ELF GNOME HALF_ELF HALFLING HALFORC 89 BASTARDSWORD 0 0 0 0 0 0 0 90 LONGSWORD 0 0 1 0 0 0 0 91 SHORTSWORD 0 0 1 0 0 0 0 92 AXE 0 0 0 0 0 0 0 93 TWOHANDEDSWORD 0 0 0 0 0 0 0 94 KATANA 0 0 0 0 0 0 0 95 SCIMITARWAKISASHININJATO 0 0 0 0 0 0 0 96 DAGGER 0 0 0 0 0 0 0 97 WARHAMMER 0 0 0 0 0 0 0 115 CLUB 0 0 0 0 0 0 0 98 SPEAR 0 0 0 0 0 0 0 99 HALBERD 0 0 0 0 0 0 0 100 FLAILMORNINGSTAR 0 0 0 0 0 0 0 101 MACE 0 0 0 0 0 0 0 102 QUARTERSTAFF 0 0 0 0 0 0 0 103 CROSSBOW 0 0 0 0 0 0 0 104 LONGBOW 0 0 1 0 0 0 0 105 SHORTBOW 0 0 1 0 0 0 0 106 DART 0 0 0 0 0 0 0 107 SLING 0 0 0 0 0 1 0 111 2HANDED 0 0 0 0 0 0 0 112 SWORDANDSHIELD 0 0 0 0 0 0 0 113 SINGLEWEAPON 0 0 0 0 0 0 0 114 2WEAPON 0 0 0 0 0 0 0 116 EXTRA2 0 0 0 0 0 0 0 117 EXTRA3 0 0 0 0 0 0 0 118 EXTRA4 0 0 0 0 0 0 0 119 EXTRA5 0 0 0 0 0 0 0 120 EXTRA6 0 0 0 0 0 0 0 121 EXTRA7 0 0 0 0 0 0 0 122 EXTRA8 0 0 0 0 0 0 0 123 EXTRA9 0 0 0 0 0 0 0 124 EXTRA10 0 0 0 0 0 0 0 125 EXTRA11 0 0 0 0 0 0 0 126 EXTRA12 0 0 0 0 0 0 0 127 EXTRA13 0 0 0 0 0 0 0 128 EXTRA14 0 0 0 0 0 0 0 129 EXTRA15 0 0 0 0 0 0 0 130 EXTRA16 0 0 0 0 0 0 0 131 EXTRA17 0 0 0 0 0 0 0 132 EXTRA18 0 0 0 0 0 0 0 133 EXTRA19 0 0 0 0 0 0 0 134 EXTRA20 0 0 0 0 0 0 0
sltsteal allows for setting custom difficulties for pickpocketing per item slot; same implementation as TobEx.
songlist can be extended beyond 100, same as TobEx.
startare is now a generic starting 2da--i.e. startare is used by BGEE for the traditional BG cmapiagn, while startbp is used to kick off the Black Pits campaign. It's identical to BG2's startare except it includes a line to set the XP cap. I believe startpos is still used for player positioning.
2DA V1.0 BADVAL VALUE START_AREA AR2600 START_XPOS 1080 START_YPOS 530 START_AREA_TUTORIAL TU0015 START_XPOS_TUTORIAL 607 START_YPOS_TUTORIAL 660 START_AREA_MP AR4000 START_XPOS_MP 1311 START_YPOS_MP 2347 START_XP 0 START_XP_CAP 161000
stylbonu externalizes the effects of the weapon style proficiency bonii:
2DA V1.0 0 DAMAGE_RIGHT DAMAGE_LEFT THAC0_RIGHT THAC0_LEFT AC_BASE AC_MISSILE SPEED CRITICALROLL TWOHANDED-0 0 0 0 0 0 0 0 0 SINGLEWEAPON-0 0 0 0 0 0 0 0 0 SWORDANDSHIELD-0 0 0 0 0 0 0 0 0 TWOWEAPON-0 0 0 4 8 0 0 0 0 TWOHANDED-1 1 0 0 0 0 0 -2 1 SINGLEWEAPON-1 0 0 0 0 -1 0 0 1 SWORDANDSHIELD-1 0 0 0 0 0 -2 0 0 TWOWEAPON-1 0 0 2 6 0 0 0 0 TWOHANDED-2 1 0 0 0 0 0 -4 1 SINGLEWEAPON-2 0 0 0 0 -2 0 0 1 SWORDANDSHIELD-2 0 0 0 0 0 -4 0 0 TWOWEAPON-2 0 0 0 4 0 0 0 0 TWOWEAPON-3 0 0 0 2 0 0 0 0
summlimt externalizes the summoning caps:
2DA V1.0 0 LIMIT NORMAL 5 CELESTIAL 1
thiefscl scales thieving abilities as a percentage. A value of 300 would mean any point invested in a skill would actually mean 3 points when used in the game. A value of 0 disables the skill for the class/kit. By default these are all 100 or 0 to enable or disable thieving skills:
2DA V1.0 0 MAGE FIGHTER CLERIC THIEF BARD PALADIN DRUID RANGER FIGHTER_MAGE FIGHTER_CLERIC FIGHTER_THIEF FIGHTER_MAGE_THIEF MAGE_THIEF CLERIC_MAGE CLERIC_THIEF FIGHTER_DRUID FIGHTER_MAGE_CLERIC CLERIC_RANGER ABJURER CONJURER DIVINER ENCHANTER ILLUSIONIST INVOKER NECROMANCER TRANSMUTER BERSERKER WIZARD_SLAYER KENSAI CAVALIER INQUISITOR UNDEAD_HUNTER FERALAN STALKER BEASTMASTER ASSASIN BOUNTY_HUNTER SWASHBUCKLER BLADE JESTER SKALD TOTEMIC_DRUID SHAPESHIFTER BEAST_FRIEND TALOS HELM LATHANDER MONK BARBARIAN SORCERER WILDMAGE DARK_MOON DRAGON_DISCIPLE DWARVEN_DEFENDER SHADOWDANCER SUN_SOUL PICK_POCKETS 0 0 0 100 100 0 0 0 0 0 100 100 100 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 50 100 25 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 OPEN_LOCKS 0 0 0 100 0 0 0 0 0 0 100 100 100 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 FIND_TRAPS 0 0 0 100 0 0 0 0 0 0 100 100 100 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 0 0 0 0 0 0 0 0 0 100 0 0 0 100 0 0 100 100 MOVE_SILENTLY 0 0 0 100 0 0 0 100 0 0 100 100 100 0 100 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 100 100 100 0 0 0 0 0 0 0 0 0 100 0 0 0 100 0 0 100 100 HIDE_IN_SHADOWS 0 0 0 100 0 0 0 100 0 0 100 100 100 0 100 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 100 100 100 0 0 0 0 0 0 0 0 0 100 0 0 0 100 0 0 100 100 DETECT_ILLUSION 0 0 0 100 0 0 0 0 0 0 100 100 100 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 100 0 SET_TRAPS 0 0 0 100 0 0 0 0 0 0 100 100 100 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 STEALTH 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 100 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
thiefskl controls the points to distribute at character creation and at subsequent level-ups:
2DA V1.0 0 START_POINTS LEVEL_POINTS THIEF 40 25 SHADOWDANCER 30 15 ASSASIN 40 15 BOUNTY_HUNTER 40 20 SWASHBUCKLER 40 25 MONK 0 10 SUN_SOUL 0 10 DARK_MOON 0 10 FIGHTER_THIEF 40 25 MAGE_THIEF 40 25 CLERIC_THIEF 40 25 FIGHTER_MAGE_THIEF 40 25
tokentxt is used to allow modders to create custom tokens, but I don't actually have any information or examples about how it actually works:
2DA V1.0 * TOKEN_TEXT PROTAGONIST STAT VALUE EQUALITY STRINGT STRINGF
traplimt externalizes the trap cap:
2DA V1.0 0 LIMIT THIEF 6 FIGHTER_THIEF 6 FIGHTER_MAGE_THIEF 6 MAGE_THIEF 6 CLERIC_THIEF 6 ASSASIN 6 BOUNTY_HUNTER 6 SWASHBUCKLER 6 SHADOWDANCER 6
-
Just wanted to start a thread to try and document some of the new files and features of the EE-variant of the IE engine. For the most part, it's a straight BG2-ToB engine with some new wrinkles.
The AreaCheckObject trigger is more robust (i.e. no crashes).
Nearest object trigger was nreliable and now works. nthNearestObject and nthNearestMyGroupOfType would always return the nearest object and now actually behave as expected.
NearestDoor didn't work with nested objects (i.e. NearestDoor(Myself)) but does on EE.
The TakePartyItem action (and its variants), when performed by a non-party member, would fill the creature's magic weapon slot and then its inventory. In EE, the magic weapon slot is ignored and items taken go straight to the inventory.
PickPocketFailed() now just passes along PickPocketFailed and not AttackedBy. (Sorry, link goes to the NDA'd bug tracker, but EE treats this trigger exactly like TobEx.)
Opcode 243 (item charge drain) works in EE:
243 (0x0F3) Item: Drain Item Charges [243] Parameter #1: Item Type Parameter #2: Number to Drain Description: Magical items matching the 'Item Type' value on the targeted creature(s) will have their charges drained by Number to Drain. Non-recharging items drained of all their charges are destroyed. Known values for 'Item Type' are: 0 Magical items excluding weapons 1 Magical items including weapons
It only drains charges from magical headers (3) and does not destroy items that recharge (i.e. so it would drain Kitthix's figurine but not destroy; wands will be drained and destroyed). It will not drain items flagged as unsellable (bit 0 at 0x18) and will drain only if the item is flagged as magical and droppable (bits 2 and 6 at 0x18).
Opcodes 146, 147, and 148 now behave when used in conjunction with containers.
Opcode 232 has some additional arguments for parameter2. 12 is for making a kill and is used by Dorn's sword to grant him a 24-hour-long extra +1 thac0 after making a kill. 13 is TimeofDay (parameter1 needs to be set to 0, 0x2c contains the time). This is used by the Night Club to grant extra bonuses at night.
Opcode 319 is a new opcode used to restrict items to specific IDS values:
Opcode #319 Usability Spell level set to 1 means only usable by Parameter #1: IDS Entry Parameter #2: IDS File Special: STRREF displayed in the item description.
It also has a secondary use where it can be used to restrict items to a specific NPC--using the name STRREF in parameter1, death variable in the resource field, and parameter2 to 10.
Opcode 320 lets you change the weather:
Parameter #1: Type 1: Rain 2: Snow 3: Nothing
A new scripting action, 353 AdvanceTime( I:Time*GTIMES), allows for arbitrary advancement of the game time. Cromwell's forging really can take 24 hours without shenanigans.
352 SetAreaScript(S:Script*,I:ScriptSlot) lets you change and set area scripts on the fly. Unlike ChangeAIScript it doesn't have to be run from an area, i.e. it'll work on an area without a script.
Opcode 321 is basically IWD's 254, Removal: Effects specified by Resource, which allows you to dispel/remove effects based on what spell they came from. It should only be used with limited timing modes with 0 duration (otherwise it behaves like 206).
-
Have you thought of adding some of the IWD class progression? (Druid's modified shapeshift, paladin smite evil, etc). There's code in the main IWD-in-BG2 converter somewhere.
I've been pondering it, yeah.
I was also thinking of rolling out a component for HoW's arcane opposition schools as an alternative. Since the most noticeable effect would be Edwin losing Fireball, I suspect it would not be terribly popular.
-
Many of these can probably be back-ported into IWD-in-BG2.
Yeah, I've been keeping a running list. Some of these are also original IWD bugs that are getting ported over, so it's also some stuff for the Fixpack too.
-
Garclax's axe drops identified. Alicorn Lance's silver glow is ugly; swap it for a pulse. Shambling mound attack weapons are droppable.
-
Yeah, ADD_JOURNAL has been in since the last few betas.
I would also recommend the HANDLE_AUDIO function for your sounds, if any. I don't know how the situation with tilesets is on BGEE, but if you can just untiz them like normal, there will also be the HANDLE_TILESETS function (coded, but not included in beta 231.10).
EE supports normal TIS files as well as a new super-compressed PVRZ format--which at present, no modding tools can handle.
I'll be happy to take the new HANDLE_foo stuff for a spin with Tweaks. It now has a tileset with the NORH stuff, and a couple of wavs I never bothered ogg'ing since it was too much overhead for two files. If WeiDU can now do that natively, I will.
-
As soon as Wisp finishes the new journal-entry-function I would be very interested in knowing about it.
It's been in the beta for a few builds, I believe.
A question to the "usable/unusable by" descriptions: But I guess the engine wouldn't know things like "only usabel by NPC XY"?
Good and bad news here. There's a new EE-specific opcode that lets you set an item to actually be uniquely usable by an NPC; no more futzing around with trying to match the NPC's stats and class exactly with the existing usable flags. The bad news is that you'll have to detect-and-apply the new opcode at install time (or keep two items). Let me double-check my dev docs on that and come up with something.
So, if I use the OUTER_SPRINT for vanilla BG, adjust the item description and live with the fact that journal entries are not written into the journal, my mods would be directly compatible? No cre/itm/spl/are sort of compatibility problem, patching of 2das etcpp? I thought it's more complicated than that. What was the BG:EE compatibility problems the weidu beta versions were created for?A lot of game resources and settings are not where WeiDU expects it--the tlk is down two folders in lang/en_us; there are multiple tlk files for multi-language support; saves are located in the user's folder instead of the local save and mpsave folders; ini files are now actually SQL, etc. For modders, most of this will be handled internally by WeiDU, so you don't have to actually care that these resources have moved and/or changed.
There are a lot of new 2das that are basically softcoding of previously hardcoded features, but (so far at least) you shouldn't need to mess with them unless you're trying something really weird with a new kit.
One of my goals is to try and pull together all of our EE developer docs so that we can get all of this into the IESDP.
-
No joke, I really was going to sit down and write one this week.
The big things are really that all of the resources match their BG names (i.e. Beregost is ar3300) but the tlk is different than BG or BG2, so you should be very careful with straight string references like SAY #1234.
Journal entries are another issue that needs attention. Any journal entry not listed in the bgee.sql file will show up in the dialogue window, but not in the actual journal. The new system is needed so that all related journal entries coalesce under a unified, collapsible header. Wisp's coding up a new WeiDU function to make this easy.
Finally, any item descriptions shouldn't have the 'usable by/unusable by' blocks on them. The EE engine generates those directly from the underlying item. I detect EE (file check for OH1000.are for BGEE, oh6000.are for the forthcoming BG2EE) and load an alternate tra file with just the item descriptions without the usable blocks--see the item component of SP Collection, for example.
So if you've got, say, a mod that works on BG/BGT/Tutu, using the BGT/Tutu code with the BG resources set as variables will get you a very good had start.
-
Fix prices for the 2h axes
Change the internal IDS references to WIZARD_ and PRIEST_ for compat reasons
Update the cloud spells to go away with zones of sweet air
-
Thanks to Wisp, we have a workaround for this issue.
-
Well, damn. I was hoping the decidedly low-tech solution of biffing the new ar0903 resources would work, but I guess we'll wait for a new WeiDU.
Workaround for players at the moment: at any point before installing Sensible Entrance Points, go visit NORH (ar0903) in a game first. Then install the component. Tutu and BGEE players won't have any problems with this component.
-
So, this is what I've been spending the last two weeks of my life on. At this point I'm relatively certain that nothing will cause your computer to burst into flames, but there are some rough edges that need to be addressed for a non-beta v1:
-
Spell icons stand out, immensely, from the existing BG2 counterparts. - The two-handed axe artwork is borrowed from IWD and uses halberd description images.
-
Arcane spells are currently only obtainable from stores. These need to be scattered randomly, as do some of the divine spell scrolls. -
The unique axes have terrible placeholder descriptions. - Add druid/cleric availability to the readme for divine spells
-
Add in some new spells to enemy combat scripts - Write dialogue for Contact Other Plane
-
-
...which leads to the natural follow-up: how would I detect and/or avoid that?
-
Thank you, I'll include this into "for the next version" for RE. By the way, who's the current person to send "next versions"(of G3 mods) to?
Kat or I, though I'm probably more active nowadays.
-
What are you referring to?There are... other reasons... why you might want to prep these mods for a flipped NORH.So with the above code the Tweakpack changes Ajantis' and Bjornin's cooridnates accordingly?
How would I prevent the mixup in case the Tweakpack is installed before Ajantis? Would I need some code that changes the .d and .baf before they get installed?
If Tweaks installs first, Ajantis detects it (with the now-fixed code above) and adjusts the dialogue and scripts accordingly, but installs normally otherwise. If Ajantis is installed first it installs normally and then Tweaks adjusts it as needed. This should cover all bases.
For RE:
I don't know if it's a problem, but you are not setting the width variable here. (Maybe it's set outside the ACTION_IF, but that seems fragile.)
And for Ajantis:
You really ought to call the inlined file something more inline-y, say ".../ajantis/inlined/dammit_cam.d". Collisions are perhaps not very likely, but it'd be no fun if it were to happen.
This is what I get for throwing together some code w/o testing. Amended accordingly--thanks.
I didn't know WeiDU preserved inlined files between mod/components.
-
And yeah, this is sorted. As long as BG2 Tweaks (next vesion!) goes after RE and Ajantis, they'll be fine. You'll want to include compat code in RE and Ajantis anyway, but the good news is that it's pretty easy. For RE:
// RE compat code for flipped NORH ACTION_IF ((MOD_IS_INSTALLED ~BG2_TWEAKS/SETUP-BG2_TWEAKS.TP2~ ~3220~) OR (FILE_EXISTS_IN_GAME ~oh6000.are~)) THEN BEGIN OUTER_SET width = 2368 COPY_EXISTING ~arre07.are~ ~override~ READ_LONG 0xac anim_num READ_LONG 0xb0 anim_off FOR (index = 0 ; index < anim_num ; ++index) BEGIN WRITE_SHORT (anim_off + 0x20 + (index * 0x4c)) (width - THIS) // location END COPY_EXISTING ~c#bjcut1.bcs~ ~override~ DECOMPILE_AND_PATCH BEGIN REPLACE_EVALUATE ~\[\([0-9]+\)\.\([0-9]+\)\]~ BEGIN SET "RESULT" = (width - %MATCH1%) END ~[%RESULT%.%MATCH2%]~ REPLACE_EVALUATE ~Color(\[\([0-9]+\)\.\([0-9]+\)\]~ // don't mess up area fades BEGIN SET "RESULT" = (width - %MATCH1%) END ~Color([%RESULT%.%MATCH2%]~ END COPY_EXISTING ~ar0903.bcs~ ~override~ DECOMPILE_AND_PATCH BEGIN REPLACE_TEXTUALLY ~CreateCreature("C#BJORNI",\[1246\.1566\],8)~ ~CreateCreature("C#BJORNI",[1122.1566],8)~ END END
And for Ajantis:
// ajantis compat code for flipped NORH ACTION_IF ((MOD_IS_INSTALLED ~BG2_TWEAKS/SETUP-BG2_TWEAKS.TP2~ ~3220~) OR (FILE_EXISTS_IN_GAME ~oh6000.are~)) THEN BEGIN COPY_EXISTING ~ar0903.bcs~ ~override~ DECOMPILE_AND_PATCH BEGIN REPLACE_TEXTUALLY ~CreateCreature("C#KNIG05",\[820\.1500\],8)~ ~CreateCreature("C#KNIG05",[1548.1500],8)~ REPLACE_TEXTUALLY ~CreateCreature("C#Ajan\([01][0-9]\)",[1730.400],0)~ ~CreateCreature("C#Ajan\1",[638.400],8)~ REPLACE_TEXTUALLY ~CreateCreature("C#KNIG07",\[500\.410\],8)~ ~CreateCreature("C#KNIG07",[1868.410],8)~ END <<<<<<<< .../ajantis/inlined/dammit_cam.d REPLACE_ACTION_TEXT_REGEXP ~c#ajan[jp]?~ ~EscapeAreaMove("AR0903",1730,\([0-9]+\),0)~ ~EscapeAreaMove("AR0903",638,\1,0)~ >>>>>>>> COMPILE ~.../ajantis/inlined/dammit_cam.d~ END
This will be integrated where and when, and how would I detect it? Because I would have to change Ajantis' coordinates, too, or he will wait in the prelate's office instead of the quarters.
Unless you plan on your Ajantis mod to be installed after the Tweakpack, it would have have to be the Tweakpack that detects your Ajantis mod.
There are... other reasons... why you might want to prep these mods for a flipped NORH.
IWD Mod Install Order Thread
in Icewind Dale Mod Roundup
Posted
I wrote the Fixpack readme before I saw what 1pp Animation Fixes was actually doing--this thread is correct; run it before Fixpack.