Develop the BG3 Script Extender macOS port using Ghidra for reverse engineering...
| Project | Path |
|---|---|
| bg3se-macos | /Users/tomdimino/Desktop/Programming/bg3se-macos |
| bg3se (Windows ref) | /Users/tomdimino/Desktop/Programming/bg3se |
# Build
cd /Users/tomdimino/Desktop/Programming/bg3se-macos/build
cmake .. && cmake --build .
# Test
./scripts/launch_bg3.sh
tail -f ~/Library/Application\ Support/BG3SE/bg3se.log
# Ghidra (headless, optimized)
./ghidra/scripts/run_analysis.sh <script.py>
__TEXT hooksSee macos-patterns.md for detailed differences.
src/
βββ injector/main.c # Core (~2900 lines): hooks, Osi.*, Lua state
βββ entity/ # ECS: guid_lookup, component_lookup, arm64_call
βββ lua/ # Ext.* APIs: stats, debug, osiris, json
βββ osiris/ # Osiris types, functions, custom_functions
βββ stats/ # RPGStats, GlobalStringTable
βββ console/ # Socket server, file-based console
βββ input/ # CGEventTap keyboard capture
| Namespace | Status | Notes |
|---|---|---|
Osi.* |
95% | Dynamic metatable, Query/Call/Event |
Ext.Osiris |
95% | RegisterListener, NewCall/Query/Event |
Ext.Stats |
95% | Property read/write |
Ext.Entity |
50% | Get, GetComponent, GetAllEntitiesWithComponent |
Ext.Events |
75% | 7 events |
Ext.Timer |
100% | Complete |
Ext.Debug |
100% | Memory introspection |
Not implemented: Ext.Net, Ext.UI, Ext.Level, Client Lua State
| Symbol | Address/Offset |
|---|---|
esv::EocServer::m_ptr |
0x10898e8b8 |
| EntityWorld | EocServer+0x288 |
RPGStats::m_ptr |
base+0x89c5730 |
RPGStats.FixedStrings |
+0x348 |
| GlobalStringTable | base+0x8aeccd8 |
# IMPORTANT: cd into project first
cd /Users/tomdimino/Desktop/Programming/bg3se-macos
osgrep "how does entity lookup work"
osgrep "Ext.Stats property resolution"
# Windows reference
cd /Users/tomdimino/Desktop/Programming/bg3se
osgrep "CustomFunctionManager"
Add new Ext. API:*
src/lua/lua_*.clua_*_register() functionDiscover offset:
ghidra/offsets/*.mdPort Windows feature:
osgrep "feature" -p /path/to/bg3seCrashes on launch: Check dylib signing (codesign -dv), verify ARM64 (file)
Hooks not called: Only hook libOsiris, not main binary
Entity lookup NULL: EoCServer may not be initialized; verify offset 0x288
osgrep no results: Run from project directory or use -p flag