Latest:6dff9b5f - CLEANUP: H3UI child element Lifetime & documentation improvements

09902d1b - CLEANUP: Major stylistic passover on H3UI; YAMATO

4713682c - FIX: Make selected chrome a proper surface layer

7832f56f - FEAT: Make UI mutation actually local

a12aa4ee - FEAT: H3UI child scope implementation for nested Element API

a1b2d56e - PERF: Initial nested openmw.ui.Element impl for inventory and magic examples

f79bb7b4 - PERF: Major refactor with centralized event dispatching and guaranteed single-draw-per-mutation semantics

1d856ff7 - CLEANUP: Further internal simplification by removing node and various performance improvements

3ebce62c - CLEANUP: Simplify H3UI component invalidation inputs

13b36101 - FEAT: Expansion and simplification of public-facing H3UI API

875e644f - CLEANUP: Significantly improve Vanilla parity in examples

6be4f835 - FEAT: Add `selected` field and expand example UIs

12346eb6 - CLEANUP: Further consolidation of H3UI API inputs and documentation

a51b754c - CLEANUP: Mass simplification pass over H3UI arguments, components, and input properties

17ff70f4 - CLEANUP: We don't actually need settings back-compatibility

0cca91e1 - FIX: Actually this pcall was necessary so we can get color values to use as cache keys without relying on Sol implementation details to identify that specific usertype

5cfa2845 - ASSET: H3UI in-game atlases

1fc9d312 - FEAT: Major expansion of H3UI borders/chrome functionality

60560af6 - FIX: Pin and caption both should be 20, 20, not 19, 19

52496e5b - CLEANUP: Scroll chrome is 8px

fdf0da65 - FEAT: Solidify theming impl and use atlasses for chrome instead of individual assets (yay)

68c3a3fc - FEAT: Expand H3UI interface to include a theming engine

bd3fe8b5 - FIX: TextRules used the wrong color for head blocks

f573f825 - DOC: Cod3x as the OpenMW Lua scripting bible

f30561cf - FIX: BookFrame should use the theme's background properties

64a0a169 - FEAT: Expand theme implementation with Starwind and OpenMW themes (openmw.cfg) and improve invalidation/update mechanism

a1420b0d - FEAT: Initial H3UI interface commit

1215f061 - FEAT: Add gap props to grid and optional borders to searchInput, properly center text in searchInput

4dc629e7 - FIX: Window component discarded layer

f84cf2e3 - CLEANUP: H3 doc navigation improvements

16104faa - FEAT: Finalize H3UI component example docs with executable examples for each

e3c0092d - FIX: RelativeSize test

334b0c2a - FIX: Correct default text colors in Text component and componentTest modules

bee6aaa5 - FEAT: Add a new series of component tests to validate H3UI components

affbc119 - CLEANUP: Heroic H3 components rewrite lol

a1ff4099 - PERF: Stylistic & hoisting refactor, plus convert componentTest.lua to use openmw.ui.Element

4be710e3 - FEAT: Initial builds of H3 component expansions

feddef3a - DOCS: Take the nuclear option

c056a88d - FEAT: Implement DragOptions in H3

cc0a097a - DOC: H3 Utilities pass

8642e74b - CLEANUP: Don't always lowercase text inputs

8847d6d5 - CLEANUP: Run formatter on renderers.lua

eea456d5 - DOCS: Document H3 utilities

4e8235f5 - FIX: Use uniform integer selection in randomGen

5fe529f7 - DOC: Second run of H3 API Documentation

494ebdc4 - FIX: `false` case in ImageAtlas was broken

3d1c39fa - CLEANUP: Run stylua on s3lf

5b6684e1 - CLEANUP: Actually-working LOAD context support in logMessage

b0fdfa23 - CLEANUP: Correct annotation scope in spellUtil

eb724e19 - FIX: A small series of bugs and optimizations found during documentation

d8452e24 - DOC: Initial H3 modules

27c5eb07 - FIX: Allow using `subscribeHandler = false` in ProtectedTable (again)

15ed3678 - CLEANUP: Update old MOMW urls to DW ones

Version 0.82:bd31677e - FEAT: Bump H3 to 0.82

02a00845 - FIX: Stabilize NPC target positions by only querying their bounding boxes once

70c895cc - CLEANUP: Remove unnecessary allocation in camHelper

334d7493 - FIX: Correct inconsistency in camHelper.objectIsOnscreen

e6a18a18 - FIX: Optimization pass on protectedTable.lua, improve annotations for it

1d874eb5 - DOC: Fix camHelper interface annotations

8d8f2025 - PERF: Rewrite the shit out of camHelper.lua

Version 0.81:db2f5504 - DOC: Bump H3 version

cbdf14b9 - FEAT: Port isHostile from C++

Version 0.8:7cf404c4 - FEAT: Bump H3 version for new S3maphore release

0b5bd6d2 - CLEANUP: Hoisting/annotation/formatter pass on h3/spellUtil.lua

192e9d22 - CLEANUP: Rearrange hoists in randomGen

0595f2b1 - FIX: Make randomGen.range non-allocating

8d35f9d1 - CLEANUP: Run formatter and annotate randomGen

bf0b6505 - FEAT: Add a table-clear module to H3 which allows using Rubic0n's table clear OR a pure Lua one, but the Lua one is slower

edd96129 - FEAT: Add a normalizePath function to H3 so I don't have to rewrite it 100 million times

196a1fc7 - CLEANUP: Improve annotations for `spacer` component

75ee4341 - FEAT: Add simplified argument forms for `spacer`

d62ab075 - FIX: Don't send S3LFCellChanged if the old cell was nil and didn't actually trigger a transition

ab0f894e - FIX: S3LFCellChanged should emit the *old* cell ID, not the new one.

114c3378 - CLEANUP: Minor hoisting optimization in lf.lua

fcf9dd91 - FIX: Minor optimization in szudzik.lua to minimize allocation

Version 0.7:8222ef0d - FIX: Remove non-existent MWSE imports from H3

ce5fb991 - FIX: Correct dependency to non-existent modules in H3 renderers

63ac54ea - FIX: Correct dependency on non-existent modules in randomGen

7cb5a731 - CLEANUP: Move some SSS modules into H3 since there were already repeated instances of duplicate code and szudzik is already used elsewhere

a4d44527 - FIX: Correct broken dependency to nonexistent modules in s3lf

86ebf07a - CLEANUP: Remove H3 modules that now exist in Rubic0n

2b316756 - fix(h3): stabilize ScreenPosition popup layout

ad9ce4e9 - feat(h3): add ScreenPosition popup title support

24ae4a46 - fix(h3): center ScreenPosition popup controls

1fc2a04b - fix(h3): track ScreenPosition vector values

bab449dd - fix(h3): render ScreenPosition popup buttons directly

9b7708ea - fix(h3): size ScreenPosition popup panel correctly

4f36a7c3 - fix(h3): show ScreenPosition popup above settings

5935bbc2 - fix(h3): persist ScreenPosition release outside picker

95a1c780 - refactor(h3): make ScreenPosition use popup editor

4dbeb8be - feat(h3): add OpenMW Lua fixture probes

c4fb97d1 - FIX: Prevent H3 component test layout squashing

30828d28 - CLEANUP: Update types and annotations in H4ND

954e74f5 - FIX: Annotate s3lf re-exported fields

e701b1c4 - FEAT: Add H3 component test interface

5a7009d0 - FEAT: Add H3 UI item slot component

993dba23 - FEAT: Add H3 UI book frame component

4b648028 - FEAT: Add H3 UI tooltip component

8a0aa53c - FEAT: Add H3 UI dialog component

6b14e8dc - FEAT: Add H3 UI grid component

8fe511dd - FEAT: Add H3 UI list component

96ef6d25 - FEAT: Add H3 UI list item component

b420101a - FEAT: Add H3 UI meter component

69c58246 - FEAT: Add H3 UI icon button component

086b6524 - FEAT: Add H3 UI button component

a39314ed - FEAT: Add H3 UI box component

de95a4ad - FEAT: Add H3 UI image component

1f1b5ef4 - FEAT: Add H3 UI text input component

97e314ee - FEAT: Add H3 UI text component

c30eb49d - FEAT: Add H3 UI spacer component

92925022 - FEAT: Add H3 UI column component

1f6b67e2 - FEAT: Add H3 UI row component

ce5e2bd6 - FEAT: Add H3 UI container component

624f2991 - FEAT: Add H3 UI widget component

a781de8c - FIX: Handle delayed s3lf cold storage initialization

32aaeea9 - FEAT: Add a series of new helper modules into H3

145c6bcb - CLEANUP: Improve s3lf formatting

71c8a463 - CLEANUP: Fix s3lf annotations and add some type-casting helper functions

410b2397 - CLEANUP: minor safety/annotation improvement in Magic.getEnchantmentBaseCost

b7e88b4a - CLEANUP: Add context annotations to all h3 modules

449d8b42 - CLEANUP: Update type annotations in camHelper and imageAtlas

26fe7542 - FEAT: Add support for the `load` context in scriptContext/logmessage

675dc555 - CLEANUP: Add context annotations to s3lf

2eb79b96 - FIX: don't call `require` directly but instead pass it and `openmw.core` as two separate arguments to `pcall`

08aa0d33 - FIX: Adjust all other scripts (probably) for new s3lf layout

f025dc8f - CLEANUP: Final local optimization pass on h3

f8ba264b - CLEANUP: Localize more stuff and get rid of more cruft in s3lf

b84bba8a - FEAT: Add sortedPairs into global table module

52437648 - CLEANUP: Minor readability refactor of sortedPairs

d0b3363f - CLEANUP: Refactor sortedPairs to be its own function and do most of the init work in a do-end block so locals can get discarded

6f82beca - CLEANUP: Remove some unnecessary gameObject/cellInfo fields and make the return values prettier

3be7e8f9 - CLEANUP: Merge special-behavior table keys into a single numeric enum provided by global storage

73157676 - FIX: Actually enable the global script as that was broken somehow

1564ab51 - CLEANUP: Remove internal usages of the `object` field and don't use rawget when indexing constant tables

deda448e - CLEANUP: Migrate Constants for S3lf into a global script we can retrieve from storage

436394d3 - FIX: This isn't actually necessary as __index only gets called on misses

6e18875f - CLEANUP: Attempt and fail at optimizing s3lf

96676ae0 - CLEANUP: Slightly more refactor of protectedtable

2499548e - CLEANUP: Optimize the shit out of protectedtable

5f051eee - CLEANUP: Unroll loop and delete table allocs in ProtectedTable __index

f10e06e8 - CLEANUP: Massive perf optimization for randomGen; it no longer uses a live interface in any context or engine

69a2b4e9 - FEAT: Merge all the functions from openmw_aux.util for tables into the big tableUtil also

00642980 - FEAT: Add __name and __metatable fields to s3lfobject for identifiability

78145bc3 - FEAT: Add getBoundingBox to s3lf and fix sendObjectEvent

f9a6f8d9 - FIX: Update all the H3 consumers for the new version /w fixed sendEvent and renamed gameObject to object

48ce0a4a - FEAT: Add another field to `s3lf` which refers to the local object

48dab92a - Revert "CLEANUP: Always assign the `object` field of the `s3lf` to the LObject variant"

be65baa0 - CLEANUP: Always assign the `object` field of the `s3lf` to the LObject variant

9d61dd49 - FIX: Call realTime instead of doing math on the function! :sob:

cb767802 - FEAT: Add a table clear function

b520057d - CLEANUP: Localize type in RandomGen

5c58212c - FEAT: Add a main.lua for H3 to be used in MWSE

194400a4 - CLEANUP: Remove double quotes

bd1491ac - FEAT: Make randomGen.lua MWSE-ready

a9afe80a - FEAT: Add isOpenMW module to H3

a6c0d1ba - CLEANUP: Run formatter on spellUtil

7a8d1e3a - CLEANUP: Combine the require and assert lines

fec0bdc9 - FEAT: Just make whole-ass replacement modules for `math` and `table`

50f85630 - CLEANUP: Further localizations of vars and more rawset/rawget action

a05184e0 - CLEANUP: Use rawget/rawset when checking if a cell has already been visited or not

6c4d7175 - CLEANUP: Also use rawget in targetData

bf58489e - CLEANUP: use rawget in sendEvent

1ff4fe36 - CLEANUP: Shuffle around branching a little bit so the more common case is checked for first

09150735 - CLEANUP: But only do that if we need to fall through to a non-cached value since these lookups are rarer than cached ones but more common than uncached ones

b38c5d2a - CLEANUP: Localize combatTargetTracker further to players only, and restore the impliedFields section of the __index handler

efbad8af - CLEANUP: Remove `knownKeys` and instead make those functions direct fields of the instance table if the instance refers to a player

f61043ba - CLEANUP: Merge handling of already-cached and uncacheable keys into the main s3lf __index

20bba07c - CLEANUP: We don't need to check if this was called by a player because we know only players call it now

db0a2c4b - CLEANUP: Remove the cached fields from the handler chain and run those directly

9fbd3f17 - CLEANUP: use rawget for ignoredBaseKeys

c4a579bb - CLEANUP: Rename knownKeys to KnownKeys and only add that field to the lookup table for players

bd22a4b7 - CLEANUP: Rename `instance.gameObject` back to `instance.object`; remove GameObjectKeyHandlers and bake those fields directly into the table. Use rawget for pulling values from `UncacheableKeys`

7e1073c3 - CLEANUP: Remove bad sendEvent impl

a5f8b77e - FIX: `cell` and `position` are still uncacheable, so, we have to check the cache first, then uncacheable fields, for it to work properly

2535439e - CLEANUP: Don't do weird unnecessary stuff when constructing a cellInfo

36714648 - FIX: Use rawset when assigning fields of `CellInfo`

4f6ca8e9 - CLEANUP: Don't clear `S3lfCache`s on death

cd16c7cc - FEAT: Add a nullFunction module

54163d10 - CLEANUP: Rename `instance` to `Instance`

387425a9 - CLEANUP: Prebake all `stat` fields for actor types

dacf9375 - FEAT: Actually we CAN cache the cell and position, and will do so now

ed865359 - CLEANUP: Document the __instance thing

c1e1a61f - CLEANUP: Don't even tell people this one exists

32ef6c71 - CLEANUP: `nearby.players` is a thing, so use it instead of `nearby.actors` to make instanceDisplay much cheaper

4012c51b - CLEANUP: Reformat and generally clean up s3/lf.lua

4be09fd5 - CLEANUP: Don't do the concatenation if the assert fails

d1d48175 - CLEANUP: Throw if s3lf is used in a global script

cdd43e4a - CLEANUP: Only index for gameObject IDs once

267eb8e5 - FIX: Search for uncacheable keys first so those lookups are performed faster

3a914c36 - CLEANUP: Remove objectType for memory savings

4ade36f6 - CLEANUP: Misc optimization improvements to s3lf.lua

a869eabf - FEAT: Covert all template content to st4sh content. Based on old squashed commits

f432a618 - CLEANUP: Migrate to zola site structure