Skip to content

Releases: Bubb13/EEex

EEex v0.11.0-alpha

27 Aug 23:36

Choose a tag to compare

EEex v0.11.0-alpha Pre-release
Pre-release

Important Note: Old versions of Near Infinity have the potential to corrupt EEex saves. This bug is caused by EEex storing data in a nonstandard location since v0.10.3-alpha. If you plan on using Near Infinity to edit your save files, please ensure you are using the latest version.

Features

  • Added the "EEex Options" menu, allowing most EEex modules and options to be configured in game.
  • Increased the cap of FoW-clearing creatures to 32,768.

Fixes

  • Vanilla Bugfix: "Auto-Pause - Spell Cast" no longer breaks spell effect probabilities.
  • Vanilla Bugfix: Changes in scrollbar visibility no longer cause single-frame text wrapping discrepancies.
  • Vanilla Bugfix: Text areas that have their scrollbar hidden no longer erroneously apply the scrollbar pad.
  • Vanilla Bugfix: UI templates no longer maintain an invalid capture state when destroyed.

Miscellaneous

  • Reimplemented EEex's op319 SPLPROT.2DA modes.

    Note: The parameter order has changed versus the previous implementation:

    • power == 2 -> Not usable by (SPLPROT)
    • power == 3 -> Usable by (SPLPROT)
  • Added translation files for EEex's installer / UI text.

  • Bumped LuaJIT version.

EEex v0.10.3.1-alpha

16 May 03:03

Choose a tag to compare

EEex v0.10.3.1-alpha Pre-release
Pre-release

Important Note: Old versions of Near Infinity have the potential to corrupt EEex saves. This bug is caused by EEex storing data in a nonstandard location since v0.10.3-alpha. If you plan on using Near Infinity to edit your save files, please ensure you are using the latest version.

Fixes

  • Critical Fix: Editing a save with EEKeeper will no longer cause EEex to drop local variables on modified characters.
  • The Effect Menu module now properly scales spell icons in the event that another mod increased their resolution.

EEex v0.10.3-alpha

15 May 00:07

Choose a tag to compare

EEex v0.10.3-alpha Pre-release
Pre-release

Fixes

  • Fixed several crashes when running EEex on IWD:EE due to some patterns resolving incorrectly for the IWD:EE binary.

  • Fixed a crash that occurred when EEex was run under recent Wine versions. Infinity Loader now automatically detects if it is being run under Wine and corrects its behavior accordingly, (obsoleting the [General].ProtonCompatibility option in InfinityLoader.ini).

  • Fixed a crash that occurred when executing an invalid command in the debug console.

  • Fixed custom concentration handlers (CONCENTR.2DA[VALUE,CHECK_MODE] = EEex-LuaFunction=<function name>) not running for all disruptable spell actions; was previously only executed for Spell() and SpellPoint().

  • Fixed op403 (Screen Effects) and op408 (Projectile Mutator) instances entering invalid states when they were removed during the middle of an effect list pass.

  • Fixed minimizing a fullscreen game erroneously calling listeners registered by EEex_Menu_AddWindowSizeChangedListener().

  • Fixed EEex data marshalling handlers incorrectly saving unsigned integers.

  • Vanilla Fix: Enabled the previously disabled ac318 (ForceSpellRange) and ac319 (ForceSpellRangeRES).


For Modders

Details (Click to Expand)

New Features

Actionbar

  • Added EEex_Actionbar_AddButtonsUpdatedListener(listener: function).

    • Registers listener, which is called after the engine has built its internal button data when switching to a new actionbar state.

    • Signature of listenerfunction() -> boolean.

    • Returning true suppresses the execution of any remaining listeners.

AIBase

  • The LastSummonerOf scripting object is now persisted across reloads.

  • Added EEex_AIBase_AddScriptingObjectUpdatedListener(listener: function).

    • Registers listener, which is called after the engine has updated a scripting object for a script runner, (e.g. LastSummonerOf on the summon).

    • Signature of listenerfunction(aiBase: CGameAIBase, scriptingObject: EEex_ScriptingObject).

    • Valid EEex_ScriptingObject values:

      Name
      ATTACKER
      ORDERED_BY
      HITTER
      HELP
      TRIGGER
      SEEN
      TALKED_TO
      HEARD
      SUMMONED_BY
      KILLED

Logging

  • Added the InfinityLoader.ini -> [General].LogFile option.

    • Causes all console output to be automatically mirrored to the specified log file.

Object

  • Added the EEex_LuaDecode() scripting object.

    • This object calls its string parameter as a Lua chunk and uses the return value (should be derived from CGameAIBase) as the resulting target. The primary purpose of this object is its ability to resolve to a new target every time it is decoded by the engine.

    • The Lua global EEex_LuaDecode_Object is set to the script runner before the Lua chunk is executed.

Resource

  • EEex_Resource_Demand() can now demand PRO and EFF files.

    • EFF files are exposed as CGameEffectBase instances.

    • PRO files are exposed as either CProjectileFileFormat, CProjectileBAMFileFormat, or CProjectileAreaFileFormat instances depending on the file header.


  • Added EEex_Resource_FreeScript(script: CAIScript).

    • Frees the memory associated with script.

    • Don't use this on an object that the engine holds a reference to!


  • Added EEex_Resource_LoadScript(resref: string, bPlayerScript: boolean) -> CAIScript.

    • Returns a CAIScript instance that represents the .BCS / .BS with resref.

    • If bPlayerScript is true, signifies that resref has the extension .BS instead of .BCS.

      Note: Due to the enhanced edition’s use of script caching, the engine has trouble differentiating between .BS and .BCS files with the same name. If a script with the given resref has already been loaded by the engine, that script will be returned, regardless of bPlayerScript.

Sprite

  • Added EEex_Sprite_AddAlterBaseWeaponDamageListener(listener: function).

    • Registers listener, which is called after the engine has built the base op12 (damage) effect for a weapon hit.

    • Signature of listenerfunction(context: table).

    • context has the following fields:

      Name Type
      ability Item_ability_st
      attacker CGameSprite
      effect CGameEffect
      isCritical boolean
      isLeftHand boolean
      launcher CItem
      target CGameSprite
      weapon CItem

  • Added EEex_Sprite_AddBlockWeaponHitListener(listener: function).

    • Registers listener, which is called before a sprite's swing hits its target.

    • Signature of listenerfunction(context: table) -> boolean.

    • context has the following fields:

      Name Type
      attackingSprite CGameSprite
      targetSprite CGameSprite
      weapon CItem
      weaponAbility Item_ability_st
    • Returning true blocks the hit.


  • Added EEex_Sprite_AddLoadedListener(listener: function).

    • Registers listener, which is called when a sprite is first created in a game session, after its effect list has been loaded (but not processed).

    • Signature of listenerfunction(sprite: CGameSprite).


  • Added EEex_Sprite_GetFromUUID(uuid: number) -> CGameSprite.

    • Returns the sprite in the current game session with the given uuid.

    • If the sprite with the given uuid is currently unloaded, returns nil.


  • Added EEex_Sprite_GetUUID(sprite: CGameSprite) -> number.

    • Returns the uuid of the given sprite.

  • Added EEex_Sprite_LoadedWithUUIDCallback(sourceSprite: CGameSprite, uuid: number, callback: function).

    • Registers callback, which is called once after a sprite with uuid is loaded into the current game session.

    • Signature of callbackfunction(sourceSprite: CGameSprite, loadedSprite: CGameSprite).

EEex v0.10.2.1-alpha

22 May 21:08

Choose a tag to compare

EEex v0.10.2.1-alpha Pre-release
Pre-release

Fixed

  • A regression that caused EEex's IDS-handling functions to break.

EEex v0.10.2-alpha

22 Mar 04:58

Choose a tag to compare

EEex v0.10.2-alpha Pre-release
Pre-release

Added

  • Empty container module – Highlight empty containers in gray instead of cyan.

Fixed

  • A crash that occurred due to a regression in the Lua Bindings system; affected Enhanced Powergaming Scripts.

EEex v0.10.1.1-alpha

08 Mar 07:54

Choose a tag to compare

EEex v0.10.1.1-alpha Pre-release
Pre-release

For Modders

Added:

  • Lua:

    • EEex_Menu_AddWindowSizeChangedListener(listener)listener(newWidth, newHeight) is called whenever the engine changes the window size of the interface.

EEex v0.10.1-alpha

08 Mar 06:19

Choose a tag to compare

EEex v0.10.1-alpha Pre-release
Pre-release

For Modders

Added:

  • 2DA:

    • X-CLSERG.2DA: Allows kits to ignore the close-range thac0 penality based on weapon ITEMCAT.IDS type – (Thanks @4Luke4!)

EEex v0.10.0.1-alpha

22 Feb 00:39

Choose a tag to compare

EEex v0.10.0.1-alpha Pre-release
Pre-release

Fixed

  • Opening the world map with the "Experimental - Use LuaJIT (can help stuttering)" component and LeUI installed no longer crashes the game.

EEex v0.10.0-alpha

16 Feb 23:59

Choose a tag to compare

EEex v0.10.0-alpha Pre-release
Pre-release

Features

  • Overhauled much of EEex's code to improve performance issues on certain modded installs.

  • Added an experimental component that replaces the engine's embedded Lua version with LuaJIT. This can drastically speed up EEex's Lua scripting.

Engine Fixes

  • op182 now works as intended – (Thanks @4Luke4!)

  • Fix v2.6 regressions regarding op206 / op232 / op256 – (Thanks @4Luke4!):

    • op206's param1 only worked for values 0xF00074 and 0xF00080
    • op232 and op256's "you cannot cast multiple instances" message failed to display

For Modders

Added:

  • Effects:

    • op214:

      • param2 == 3 – Call the global Lua function with the name in resource to get a CButtonData iterator. Then, use this iterator to determine which spells should be shown to the player. Note that the function name must be 8 characters or less, and be ALL UPPERCASE.

      • resource – Name of the global Lua function when param2 == 3

    • op333:

      • (param3 & BIT0) != 0 – The effect's saving throw is only checked once – (Thanks @4Luke4!)
    • Saving throw field:

      • BIT23 causes the effect to bypass op101 – (Thanks @4Luke4!)
  • Actions:

    • SpellObjectOffset() family that targets spells at the ground relative to an object – (Thanks @4Luke4!):

      • 476 EEex_SpellObjectOffset(O:Target*,I:Spell*Spell,P:Offset*)
      • 476 EEex_SpellObjectOffsetRES(S:RES*,O:Target*,P:Offset*)
      • 477 EEex_SpellObjectOffsetNoDec(O:Target*,I:Spell*Spell,P:Offset*)
      • 477 EEex_SpellObjectOffsetNoDecRES(S:RES*,O:Target*,P:Offset*)
      • 478 EEex_ForceSpellObjectOffset(O:Target*,I:Spell*Spell,P:Offset*)
      • 478 EEex_ForceSpellObjectOffsetRES(S:RES*,O:Target*,P:Offset*)
      • 479 EEex_ReallyForceSpellObjectOffset(O:Target*,I:Spell*Spell,P:Offset*)
      • 479 EEex_ReallyForceSpellObjectOffsetRES(S:RES*,O:Target*,P:Offset*)
  • Items:

    • .ITM header flags:

      • BIT18 causes the weapon to ignore weapon styles (as if the item was in SLOT_FIST) – (Thanks @4Luke4!)

EEex v0.9.22.1-alpha

03 Jan 03:14

Choose a tag to compare

EEex v0.9.22.1-alpha Pre-release
Pre-release
  • Fixed:
    • Projectile traps (e.g. thief innate ability, skull trap) no longer forget their effect payload on reload.