Jump to content

CamDawg

Gibberling Poobah
  • Posts

    12,027
  • Joined

Posts posted by CamDawg

  1. I know this is an old post, but hoping it's still looked at. Thanks for the effort with this; it's much appreciated. I'm just a little confused, though. the README for the IWD Fixpack states:

     

    The Animation fixes for Icewind Dale: TotLM [1pp] mod can potentially nullify fixes--specifically, if you install the 'enable combat stance animations' component and choose the 'Replace scripts' option. Using the component with the 'Keep Old Scripts' option should be safe, and should follow the Fixpack in the install order. Using the 'Replace scripts' option is
    not
    recommended, but if you insist, install it before the Fixpack.

     

    So, the README says it should go before the 1pp Animation fixes, but you suggest it should be opposite for similar reasons.

     

    One Pixel Productions Animation Fixes for IWD:TotLM: Contains some animation fixes for Icewind Dale. The Restore combat stance animations component misbehaves a little in that it not only overwrites some scripts, but the scripts include some minor syntax errors. This is the reason why this is listed before...

     

    The IWD Fixpack: Fixes are good, and lots of fixes are better. The only reason it's not first is because the mods before it are currently a little overwrite-y. If you use this you do not need Grog's IWD Fixes from AB or...

     

    Also, this doesn't state which option should be used, so I'm thinking it's better to follow the Fixpack README unless there's something else I'm missing or not understanding.

     

    Thanks for any comments.

    I wrote the Fixpack readme before I saw what 1pp Animation Fixes was actually doing--this thread is correct; run it before Fixpack.

  2. 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:

    Quote

    ADD_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 declare

    OUTER_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.

  3. 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

  4. 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.

  5. 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 sword

    13 - 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 effects

     

    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.

    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.

  6. 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.

  7. 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
    
    

     

  8. 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).

  9. 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.

  10. 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.

  11. 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.

  12. 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.

  13. 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.

  14. 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
  15. There are... other reasons... why you might want to prep these mods for a flipped NORH.
    What are you referring to?

    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.

  16. 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.

×
×
  • Create New...