File information

Last updated

Original upload

Created by


Uploaded by


Virus scan

Some manually verified files

About this mod

An OBSE plugin containing bug fixes for the Oblivion game engine.

Permissions and credits


EngineBugFixes is an OBSE plugin containing bug fixes for the Oblivion game engine.
It distinguishes two types of engine modifications:

1) Fix    Fixes something that probably everyone would consider a bug.
2) Patch    Changes something that may or may not be considered a bug but which I felt could be improved.

See below for a current list of fixes/patches.
Detailed information about each fix/patch can be found in the readme file.
All fixes and patches can be enabled/disabled separately to ensure maximum compatibility with other OBSE plugins.

1) Extract the files to a temporary location.
2) Copy the files in the Data folder to (install folder)\Oblivion\Data\

1) Delete the files/folders associated with the mod.

To enable a particular fix or patch set its value in the INI file to 1. To disable, set the value to 0.

Source Code
The included source code (separate download) gives you an overview of the locations in the engine that will be patched
as well as a general insight into the patches themselves.
However, it is currently NOT possible to compile the plugin from the code as it is missing the project that recreates
the game engine classes and maps functions to memory addresses.
This project is HUGE and currently not for share (not in a sharable state anyway...).

Patch List

1) InitRendererFix (v1.0)
Fixes a small bug in the renderer initialization code which prevents the game from properly showing an error message box
when you try to start the game with an unsupported screen resolution specified in the INI file.

2) SpeedTreeLoadFix (v1.0)
Fixes missing thread safety in the SpeedTree loading code which causes random CTDs in the wilderness.

3) ShadowCameraFix (v1.0)
Fixes the shadow & self shadow code using outdated camera data when evaluating whether an actor's shadow should be rendered or not.

4) CreatureLightingFix (v1.0)
Fixes GetLightAmount always returning 0 for certain creature types (which affects detection handling).

5) WeaponCollisionFix (v1.0)
Fixes 'floating weapons' problem with some non-standard skeleton NIFs.

6) SexChangeFix (v1.0)
Fixes CTD in 'SexChange' script command when used on an actor who currently has a 3D object.

7) GetAlarmedFix (v1.0)
Fixes CTD in 'GetAlarmed' script command when used on an actor who does not have an AI package.

8) CellDistanceFix (v1.0)
Fixes a small bug in the calculation of an actor's distance to a specific (exterior) cell. This affects path finding and cell scans.

9) FollowerDoubleFaceFix (v1.0)(v2.2)
Fixes the well-known double face/helmet bug when using fast travel with followers.

10) ShutdownCTDFix (v1.0)(v1.7)
This is now a collection fix for various problems that may cause CTD when quitting the game. Check readme file for details.
NOTE: The collection currently fixes some but not (yet) all reasons for CTD on shutdown.

11) DeathItemFix (v1.0)
Fixes a small bug and memory leak in the function that resolves death items.
The bug only occurs when the specified leveled list produces more than one item (which doesn't happen very often).

12) DropItemFix (v1.0)
Fixes CTD when the game tries to add player character ownership to a dropped item with no extra data list.

13) LoadCreatedBaseObjectsFix (v1.0)
This is NOT an engine bug fix but rather an OBSE bug fix which hopefully will become obsolete in the future.
Fixes form IDs in created base objects not getting resolved properly after changing the load order.

14) PlayerDeathCameraFix (v1.1)(v1.3)(v2.0)
Prevents the camera getting stuck on ground level after using the Resurrect command on the player.
Additionally, the LoadGame menu timer is reset so the menu does not pop up immediately the second time the player dies.

15) UseItemAtPackageFix (v1.2)(v1.3)
Fixes UseItemAt AI packages not working properly with certain objects types or only working the first time.

16) Cell3x3LocalMapIconsFix (v1.2)
Fixes icons/markers not showing on local map if an exterior cell with certain map grid x/y coordinates is defined or modified in a non-master file.

17) CellChangeCollidedArrows3DFix (v1.3)
Fixes arrows stuck in the player ending up as a clump on the ground when moving to a cell that is not loaded.

18) ScriptPackageFix (v1.3)
Fixes some problems related to the AddScriptPackage/RemoveScriptPackage script commands. Check the readme file for details.

19) HUDInfoQualityIconFix (v1.3)
Fixes HUD icon for the quality of apparatus type objects not getting shown because of a bug in the code.

20) CreatureBipedObjectEquipFix (v1.4)(v1.7)
Fixes creature's 3D getting duplicated every time the EquipItem script command is used on it with a clothing or armor (except shields) object.

21) DialogueWaitFix (v1.4)
Fixes Dialogue AI package between two NPCs occasionally getting stuck in the Wait procedure.

22) ExteriorCellTempObjectsLoadFix (v1.4)
Fixes cell temporary objects not getting loaded if the defining mod is a master file and not loaded with the same mod index as it had in the editor.

23) BuyItemFromContainerFix (v1.5)(v2.1)
Fixes a bug which prevents NPCs from buying food, etc. from containers owned by merchants. This bug can occasionally lead to CTD.

24) DialogMenuEmptyTopicsFix (v1.5)
Fixes dialog menu topic list staying invisible if dialogue was started while menus were hidden.

25) LoadCellTempDataFix (v1.5)(v2.2)
Fixes modified exterior cells failing to load if an object moved into the cell while the cell was not loaded.

26) RunScriptLineFix (v1.5)
Fixes an OBSE bug which affects script commands 'RunScriptLine' and 'RunBatchScript'.

27) SpellPurchaseCrashFix (v1.6)
Fixes CTD when buying the last spell from a vendor's spell list using the arrow keys on the keyboard.

28) GlobalAnimTimerFix (v1.6)
Regularly resets the global animation timer to avoid problems with non-actor animations after long playing times.
This bug is widely known as the 'A-Bomb' bug.

29) AIPackageScheduleEvaluationFix (v1.6)
Fixes broken AI package schedule evaluation for schedules crossing midnight and schedule durations > 24 hours.
Check the readme file for details and limitations of the new evaluation function.

30) AcquireWeaponNoAmmoFix (v1.7)
Fixes a (rare) bug causing actors in combat to get stuck in the Acquire maneuver if the combat AI chooses ranged melee strategy
but the actor currently does not have ammo equipped.

31) BloodDecalMemLeakFix (v1.7)
Fixes a severe memory leak in blood decal generation code if ini setting 'bDecalsOnSkinnedGeometry' is set to 0.

32) BowAndTorch3DFix (v1.7)
Fixes CTD caused by torch 3D accidently getting attached to the back weapon node in some cases if an actor has both a bow and a torch. 

33) PickupItemOwnershipFix (v1.7)
Fixes two bugs related to picking up dropped ingredient items.

34) SummonAILocationTargetFix (v1.8)
Fixes a bug in summoned creature AI package initialization that prevents setting of the package's location target.

35) VerboseMessagesFix (v1.8)
A collection fix for bugs related to the 'Verbose' console command.

36) UIMessageFix (v1.8)
Fixes notice message queue getting stuck if an empty message gets queued. Also fixes a bug related to the subtitle display timer.

37) CrimeGoldRemovalFix (v1.8)
Fixes NPC bounty not getting removed after paying and/or when actor is resurrected.

38) ActivateDoorWhileInvisibleFix (v1.8)
Prevents player getting stuck after activating a load door while Invisibility actor value is not 0.

39) ActorWithoutProcessCTDFix (v1.9)
A collection fix for CTD caused by some script commands when called on an actor who currently doesn't have an AI process assigned.

40) BoundItemEvaluationFix (v1.9)
Fixes potential issues with equipped bound weapons during equipment evaluation.

41) CanHaveFlamesFix (v1.9)
Prevents CTD in script command 'CanHaveFlames' when used on a ref that has no 3D.

42) HighProcessTeleportFix (v1.9)
Fixes actors occasionally failing to pass through load doors if both the current and the destination cell are loaded.

43) MagicCastFailureSoundFix (v1.9)
Fixes player cast failure sounds not being played anymore after cell purging and similar cleanup actions.

44) PackageStartEquipmentFix (v1.9)
Fixes NPC AI package evaluation not checking the Unequip Armor + Unequip Weapons flags on the new package when the package changes.

45) SoundEffectsFix (v1.9)
Fixes 3D sound effects in the current cell not playing anymore after closing a menu.

46) StaffEnchantmentCastTypeFix (v1.9)
Prevents the enchantment menu from treating staffs as regular weapons and creating enchantment effects that use the Touch effect range
instead of the Target range (which is the correct effect range for staffs).

47) UnloadedObjectReferencesFix (v1.9)
Fixes a bug in the code that unregisters unloaded objects from all other objects that may be referencing them. The bug prevents an
unloaded object from getting properly unregistered in two places in the player character instance, which causes save game bloat +
possibly CTD.

48) WeaponSwitchFix (v1.9)(v2.0)
Fixes creatures with bow and melee weapon switching to hand-to-hand instead of melee weapon when the player gets too close for ranged weapons.

49) CellChangedRefMemLeakFix (v2.0)
Fixes memory leak and possible CTD at shutdown if specific references that moved from their original cell are loaded from a saved game. 

50) ObjectPaletteFix (v2.0)
Fixes Gamebryo AV object palette (a structure to quickly lookup mesh parts in an object's 3D by name) containing pointers to deleted objects
after an actor unequips an item, which causes CTD if such an object is accessed later.

51) SavedHavokDataFix (v2.0)(v2.2)
Fixes two problems related to saving and loading havok (rag-doll) data.

52) CombatBuffSpellSelectionFix (v2.1)
Fixes wrong classification of Absorb Magicka spell (instead of Spell Absorption) as a buff spell during NPC combat spell selection.

53) HaggleDispositionFix (v2.1)
Fixes game not using merchant's disposition towards the player for calculating item prices when the player wants to sell something.

54) RemoveExcessDeadFix (v2.1)
Prevents respawning actors from staying permanently disabled after getting removed by the game's 'Remove Excess Dead'
routine (which attempts to preserve performance in a complex scene by selectively disabling dead actors).

55) SleepCastLoopFix (v2.1)
Prevent NPCs from getting stuck in a casting animation loop when they try to restore their own health while attempting to use a bed or bedroll.

56) SneakPowerAttackFix (v2.1)
Fixes normal sneak attack animation getting replaced with the power attack animation when the player's Acrobatics skill is 50 or higher.

57) BackgroundCellLoadFix (v2.2)
Fixes two bugs related to background loading of exterior cells, affecting overall stability and performance.

58) InventoryFix (v2.2)
A collection fix for problems related to containers and actor inventories. See readme for details.

1) SmallBushBillboadPatch (v1.0)
Lowers the threshold size for distant LOD tree billboards from 200x350 to 10x10. Distant LOD for smaller bushes will become visible.

2) EvaluateEquipmentPatch (v1.0)(v1.8)
Modifies the evaluation hierarchy for equipment slots so that items using multiple slots only get selected by the highest slot in
the hierarchy. Please refer to the readme file for detailed information about what this patch does as well as potential side effects.

3) CombatBlockPatch (v1.3)
Modifies blocking behavior to prevent NPCs from blocking even though nobody is hitting them.

4) FloraOwnershipPatch (v1.4)
Changes flora harvesting so that harvesting owned plants is considered a crime.

5) HavokMovedDataLoadPatch (v1.4)(v2.0)
Deprecated. Removed and replaced by the SavedHavokDataFix in v2.0. 

6) TerrainLODLoadPatch (v1.4)
Allows LOD mesh and texture files to be named in an alternative, load order independent way to avoid LOD problems with world
spaces defined in master files. For a more detailed explanation please refer to the readme file.

7) DialogConditionsEvalPatch (v1.7)
Prevents unexpected behavior in dialog topic item condition evaluation when the topic item's parent quest's condition list ends
with a condition that has the OR flag set.

8) PluginLoadErrorMessageBoxPatch (v1.7)
Shows a message box when the game CTDs on startup because of a missing master file. The message tells you the name of the plugin
that caused the CTD and the master file that is missing.

9) SleepWearPatch (v1.9)
Unifies the sleep wear behavior for NPCs when they enter a bed. See readme file for details.
This patch is disabled in the default ini file and must be enabled by the user before it can be used.

10) AIPackageNeverRunFlagPatch (v2.2)
Allows reviving AI packages which have been tagged by the game with the 'Never Run' flag because their package target died or was deleted.

11) ParentCellUpdatePatch
Prevents the game from saving movement data (position/rotation/etc.) for every persistent object in exterior cells on load.

Thanks to the OBSE team for the Oblivion Script Extender.
Thanks to Bethesda for creating Oblivion.
Thanks to TESNexus.com for the a one-stop-shop resource for authors and players.
Thanks to LHammonds for the Readme Generator this file was based on.
Thanks to Gruftikus for adding support for the TerrainLODLoadPatch in tes4ll.
Thanks to everyone who helped with debugging and testing.

This mod is provided as "is".
The author is not responsible for any damage done to your save game, game installation
or even your computer (though such an event happening is highly unlikely).
Use at your own risk.