Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
4056888
Initial pass of the Component class
Kenix3 Nov 4, 2025
63b9038
Adds debug menu draw to Component. Also returns boolean from the vari…
Kenix3 Nov 4, 2025
ed0f2e8
Adds stringification and const correctness to Component
Kenix3 Nov 4, 2025
0703488
Adds missing end of tick update of parent<->child relationships on co…
Kenix3 Nov 4, 2025
7863c46
Splits Component into Tickable and Component
Kenix3 Nov 11, 2025
a4ed4bf
Fixes semantics of the Component callbacks.
Kenix3 Nov 13, 2025
309dc28
Fleshes out the component class more and adds the TickableComponent h…
Kenix3 Nov 16, 2025
99b17d1
Now uses an 'action' system on Tickable.
Kenix3 Nov 22, 2025
ac14831
Initial pass of adding Components to the Context
Kenix3 Apr 8, 2026
53ba963
Complete: implement full Component/Tickable/Action hierarchy system
Copilot Apr 15, 2026
2e380f1
Fix: Tick overloads now return actual elapsed time instead of 0.0
Copilot Apr 15, 2026
ee74624
Restore INCLUDE_PROFILING guards around all timing/clock code in Acti…
Copilot Apr 15, 2026
7fc4eb4
Fix Component mutex guard, return PartList from GetParents/GetChildre…
Copilot Apr 15, 2026
1943f7e
Use COMPONENT_THREAD_SAFE flag for mutex; move Has(name) to PartList;…
Copilot Apr 15, 2026
28e21d7
Apply clang-format-14 to all ship module files to pass CI format check
Copilot Apr 15, 2026
6e22574
Convert Ship namespace classes managed by Context to inherit from Com…
Copilot Apr 15, 2026
0618f29
Changes before error encountered
Copilot Apr 15, 2026
c45752c
Fix GuiMenuBar constructor to pass name to GuiElement after Component…
Copilot Apr 15, 2026
d94ecd0
Address PR review: fix Action ref cycle, Tick<T> profiling/guards, Cr…
Copilot Apr 15, 2026
b4892da
Remove all GetXxx() typed accessors from Context; use GetChild<T>() p…
Copilot Apr 15, 2026
754a84c
Planning: remove GetChild/GetTickableComponent, add LoggerComponent, …
Copilot Apr 15, 2026
133868e
Remove GetChild<T>() from Component, remove GetTickableComponent meth…
Copilot Apr 15, 2026
2615a7e
Address code review: simplify weak_ptr init, cache thread pool, remov…
Copilot Apr 15, 2026
fc4b124
Apply clang-format-14 to fix CI tidy-format-validation
Copilot Apr 15, 2026
1803580
Merge origin/main into copilot/update-component-hierarchy
Copilot Apr 15, 2026
8c04555
Apply clang-format-14 after merging main
Copilot Apr 15, 2026
36fb90d
Fix build: qualify Ship::Window in FastMouseStateManager.cpp
Copilot Apr 15, 2026
e98daf6
docs: Add Doxygen/Javadoc documentation to Component-hierarchy headers
Copilot Apr 16, 2026
918a219
Add Doxygen documentation to core component system header files
Copilot Apr 16, 2026
14d0eea
Fix build errors, add javadoc to all new/changed headers, run clang-f…
Copilot Apr 16, 2026
61061f6
Merge remote-tracking branch 'origin/copilot/update-component-hierarc…
Copilot Apr 16, 2026
075dbbe
Convert EventSystem, ScriptLoader, and Keystore to Components; remove…
Copilot Apr 16, 2026
f3da8ca
Fix clang-format-14 formatting issues in Context.h, Context.cpp, and …
Copilot Apr 16, 2026
c396d0c
Fix Windows build: replace removed GetConsoleVariables() with GetChil…
Copilot Apr 16, 2026
dcc86d0
Restore javadoc comments stripped during component migration
Copilot Apr 16, 2026
bd0e6a1
Apply suggestion from @Copilot
Kenix3 Apr 16, 2026
da5f379
Refactor Component: const ref GetName, const GetMutex, move name meth…
Copilot Apr 17, 2026
6085e1f
Remove parent/child methods from Component, add permission hooks to P…
Copilot Apr 17, 2026
023e988
Remove ResourceManager cached thread pool, rename Tickable.Tick to Run
Copilot Apr 17, 2026
4ca7a0c
Move action management from Tickable to ActionList
Copilot Apr 17, 2026
e0cc496
Add TickableList, remove Tickable inheritance from Context
Copilot Apr 17, 2026
914cc1b
Make PartList thread-safe with recursive mutex
Copilot Apr 17, 2026
6a285e3
Add bidirectional parent/child relationships on Component
Copilot Apr 17, 2026
49ea923
Add BFS hierarchy search methods to Component
Copilot Apr 17, 2026
29636ee
Change parent/child lists from PartList to ComponentList
Copilot Apr 17, 2026
a344010
Auto-sync TickableList when TickableComponents added/removed from hie…
Copilot Apr 17, 2026
2b558ad
Run clang-format and fix clang-tidy warnings
Copilot Apr 17, 2026
b2d7875
Remove ChildList and ParentList classes; use role-based ComponentList
Copilot Apr 17, 2026
37644cc
Merge remote-tracking branch 'origin/main' into copilot/cherry-pick-a…
Copilot Apr 24, 2026
a60bebe
Address review comments: fix Action dispatch, CrashHandler null check…
Copilot Apr 24, 2026
f8d2f83
Merge origin/main into copilot/cherry-pick-and-edit-code; update DISA…
Copilot Apr 29, 2026
d4f30e2
Fix ComponentList default constructor for MSVC (Windows) C2512
Copilot May 1, 2026
996f0a2
Address review: GetLogger→Get, GetThreadPool returns component, Keyst…
Copilot May 2, 2026
d7c342f
Address review: Add(vector)/Remove(vector) mutex guards, TickableComp…
Copilot May 2, 2026
d64f06b
Merge remote-tracking branch 'origin/copilot/cherry-pick-and-edit-cod…
Copilot May 2, 2026
430b3a6
refactor: component structure, EventSystem→Events rename, Gui as Comp…
Copilot May 2, 2026
5e71412
feat: add Component::Init/OnInit/IsInitialized/MarkInitialized; init-…
Copilot May 2, 2026
306a4c1
fix: use direct Context construction in SetContextMovesFromOldToNew t…
Copilot May 2, 2026
fbbb819
Merge origin/main (Gate keystore behind ENABLE_SCRIPTING) into copilo…
Copilot May 2, 2026
67fe32d
fix: clang-format, and cache component dependencies in Init()
Copilot May 2, 2026
cc18eb9
refactor: remove InitBase, use OnInit in Window/Fast3dWindow, cache F…
Copilot May 2, 2026
1033300
fix: break circular include between Config.h and Audio.h via AudioBac…
Copilot May 2, 2026
7e033f9
feat: add GetDependencies() and JSON-driven Init to Component
Copilot May 2, 2026
6ed4f3a
refactor: remove hard-coded dependency checks, add hierarchical JSON …
Copilot May 2, 2026
e282c6b
fix: improve error messages in dependency checking
Copilot May 2, 2026
754def3
refactor: unify Actions and Events, remove ActionType enum, add Event…
Copilot May 2, 2026
5be9c5b
test: update tests for string-based event names, fix Context.cpp incl…
Copilot May 2, 2026
38efe43
Remove tickableDefaults, add per-component initArgs/priority in JSON,…
Copilot May 3, 2026
5e7dcd6
Plan for fixing CI failures and completing Gui Component integration
Copilot May 3, 2026
c854b8e
Fix CI: clang-format, C++17 for tests, ResourceManager null-safety, G…
Copilot May 3, 2026
b7cf381
Rename ThreadPoolComponent→ThreadPool, LoggerComponent→Logger, FileDr…
Copilot May 3, 2026
100216d
Add GitHub Pages site with Jekyll (just-the-docs) and Doxygen API ref…
Copilot May 3, 2026
0972049
docs: add enablement: true to configure-pages action
Copilot May 3, 2026
b93382e
docs: only deploy to GitHub Pages from main branch
Copilot May 3, 2026
61788b9
docs: allow deploy from any branch temporarily
Copilot May 3, 2026
9958f1a
docs: only deploy pages from main branch
Copilot May 3, 2026
06b3725
docs: move configure-pages to deploy job, remove stale baseurl override
Copilot May 3, 2026
65ec5df
docs: allow deploy from copilot/** branches for preview
Copilot May 3, 2026
1ef42c1
docs: upload built site as downloadable artifact for preview on copil…
Copilot May 3, 2026
3e8ebac
docs: add hierarchical navigation sections (Guides and Community)
Copilot May 3, 2026
423db83
docs: add navigation section to index.md home page
Copilot May 3, 2026
9e11ecc
docs: add API Reference link to home page navigation table
Copilot May 3, 2026
1d78db4
docs: fix Ship namespace description, expose OtrArchive, exclude MTL/…
Copilot May 3, 2026
845d44b
docs: add comprehensive PREDEFINED macros to Doxyfile for full code c…
Copilot May 3, 2026
a70a4cf
docs: add OS-specific defines to Doxyfile and improve Ship namespace …
Copilot May 3, 2026
6a96111
docs/tests: fix Doxygen class exclusions, add OTR deprecation, test c…
Copilot May 3, 2026
08277ee
docs: exclude include/libultraship/libultra directory from Doxygen
Copilot May 3, 2026
3e47e58
fix: guard ConsoleVariable::Load/Save/ClearVariable/ClearBlock agains…
Copilot May 3, 2026
71773cb
fix: supply Config dependency in BuildComponentsFromJson tests; restr…
Copilot May 3, 2026
fda84cc
Merge origin/main: integrate Fast3dGui split, WindowBackend enum, and…
Copilot May 4, 2026
31413d0
Cache component references on Init; add GfxDebuggerWindow back; updat…
Copilot May 4, 2026
33de27b
Address PR review comments: rename GetPool→Get, GetList→protected, Ev…
Copilot May 4, 2026
4513127
Fix Windows CI failures: move sDX11ResourceManager declaration, make …
Copilot May 4, 2026
8c98799
Restore missing Fast3dWindow methods, fix Config const ref, remove co…
Copilot May 5, 2026
e3b065a
Add Part OnAdded/OnRemoved callbacks, InParents BFS methods, remove J…
Copilot May 5, 2026
933c658
Cache component references in Gui instead of repeated runtime lookups
Copilot May 5, 2026
95cb559
Cache ConsoleVariable and Window references in controller subsystem c…
Copilot May 5, 2026
12370e1
Rewrite InChildren/InParents BFS to be fully recursive, add deep test…
Copilot May 5, 2026
16c9901
Cache component references to avoid repeated Context lookups
Copilot May 5, 2026
98e97de
Fix LEDMappingFactory duplicate variable, revert Archive caching that…
Copilot May 5, 2026
8398aaf
Cache component lookups in GuiWindow, GuiMenuBar, ControllerButton, I…
Copilot May 5, 2026
5b2e244
Fix remaining Context lookups: Fast3dWindow self-ref, GuiWindow/MenuB…
Copilot May 5, 2026
e92fb54
Revert Fast3dWindow static callbacks to Context lookup (static C fn p…
Copilot May 7, 2026
ce88ce9
Run clang-format-14 and fix context-safety regressions in Archive/Res…
Copilot May 7, 2026
0c22495
Address PR review: cache components, remove Component mutex, Init→OnI…
Copilot May 10, 2026
5227c0b
IsLoaded→IsInitialized, constructor caching, remove comment-only COMP…
Copilot May 10, 2026
4c8f9f1
Replace IsLoaded with IsInitialized for resource/archive stack and in…
Copilot May 10, 2026
47d89c8
Fix compilation errors: ConsoleVariable Config fwd-decl, Config self-…
Copilot May 11, 2026
1235d8a
Add missing Gui.h includes to fix incomplete type errors after Window…
Copilot May 11, 2026
81949aa
Add missing Gui.h include to ConsoleWindow.cpp
Copilot May 11, 2026
b416d8e
Fix build failures: add missing Context.h include and forward declare…
Copilot May 11, 2026
d5b138f
Fix Archive.cpp missing ResourceManager.h include and Window.cpp nami…
Copilot May 11, 2026
3d04be5
Fix static variable naming convention: deps -> sDeps in all GetDepend…
Copilot May 11, 2026
697e71c
Update archive/resource tests for IsInitialized and JSON init APIs
Copilot May 11, 2026
1e93e4d
Fix FolderArchive path separator mismatch causing Windows test crash
Copilot May 11, 2026
1d40a59
Update include/ship/audio/Audio.h
Kenix3 May 12, 2026
8a761d7
Update include/ship/audio/Audio.h
Kenix3 May 12, 2026
39c6aaa
Update include/ship/audio/Audio.h
Kenix3 May 12, 2026
8a8ebd3
Refactor component dependency checks to cached validated access
Copilot May 12, 2026
00665f1
refactor: constructor-injection for Config, ControlDeck, GfxDebuggerW…
Copilot May 12, 2026
a57698e
refactor: inline-validate Config dependency in Audio::GetConfig()
Copilot May 12, 2026
59de05a
Refactor controller mapping constructors and factory cache ownership
Copilot May 12, 2026
49dfc01
Address mapping constructor injection scope and resolve open Audio re…
Copilot May 13, 2026
a3bb648
Remove Context::GetInstance() from constructors in controller and GUI…
Copilot May 13, 2026
caa6f9b
Eliminate remaining Context::GetInstance() from constructors: GlobalS…
Copilot May 13, 2026
cb1547a
Dependency injection: inject cv/w into GuiWindow hierarchy, rename In…
Copilot May 13, 2026
e980fd8
Remove unused Config param from entire controller mapping hierarchy
Copilot May 13, 2026
32332f0
Fix constructor call mismatches and run clang-format-14 across source…
Copilot May 13, 2026
0bf7f4a
implement all reviewer feedback: Tickable sort-on-insert, ActionList …
Copilot May 22, 2026
a6389d1
apply new feedback: constructor-injection paths for Gui/GameOverlay, …
Copilot May 22, 2026
4bf636c
format with clang-format-14 and finalize no-GetInstance feedback round
Copilot May 22, 2026
e3cb38b
inject dx11 backend deps and remove fast3d context lookups
Copilot May 22, 2026
7464c8f
remove getcurrent and refactor context consumers
Copilot May 23, 2026
d1919ed
fix context-based leftovers after singleton removal
Copilot May 23, 2026
b189517
feedback: remove statics, fix caching, add ToTreeString and Component…
Copilot May 23, 2026
5660f67
Address four feedback bullet points and run clang-format
Copilot May 30, 2026
3a08784
Fix Windows CI build failures and clang-tidy issues
Copilot May 30, 2026
609a9af
Refactor interpreter/window and WheelHandler dependency usage
Copilot May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: docs

on:
push:
branches:
- main
workflow_dispatch:

# Allow one concurrent deployment
concurrency:
group: pages
cancel-in-progress: false

permissions:
contents: read
pages: write
id-token: write

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Doxygen and Graphviz
run: sudo apt-get install -y doxygen graphviz

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"

- name: Install Jekyll dependencies
run: |
cd docs
bundle install

- name: Generate Doxygen API docs
run: doxygen Doxyfile

- name: Build Jekyll site
run: |
cd docs
bundle exec jekyll build \
--destination ../_site

- name: Copy Doxygen output into site
run: cp -r doxygen_out/html _site/api

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: _site

- name: Upload site preview artifact
uses: actions/upload-artifact@v4
with:
name: site-preview
path: _site
retention-days: 7

deploy:
if: github.ref == 'refs/heads/main'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Configure Pages
uses: actions/configure-pages@v5
with:
enablement: true

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -371,4 +371,8 @@ extern/nlohmann-json/*_jsonConfig*
*.pbxproj
*.xcworkspace
*.xcsettings
build*
build*
doxygen_out/
docs/_site/
docs/.jekyll-cache/
docs/Gemfile.lock
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ if(POLICY CMP0141)
endif()

option(NON_PORTABLE "Build a non-portable version" OFF)
option(INCLUDE_PROFILING "Enable action and tickable profiling timers" OFF)
option(COMPONENT_THREAD_SAFE "Enable thread safety for Component parent/child lists" OFF)
option(DISABLE_DLL_LOADER "Disable dynamic library loading support" OFF)
option(ENABLE_SCRIPTING "Enable TCC-based C mod compilation and scripting system" OFF)

Expand Down
117 changes: 117 additions & 0 deletions Doxyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Doxyfile for libultraship
# Run: doxygen Doxyfile

#---------------------------------------------------------------------------
# Project
#---------------------------------------------------------------------------
PROJECT_NAME = "libultraship"
PROJECT_BRIEF = "Reimplementations of libultra (N64 SDK) functions for modern hardware"
PROJECT_LOGO =

#---------------------------------------------------------------------------
# Input
#---------------------------------------------------------------------------
INPUT = include/ README.md
RECURSIVE = YES
FILE_PATTERNS = *.h *.hpp *.md
EXTENSION_MAPPING =
USE_MDFILE_AS_MAINPAGE = README.md
EXCLUDE = include/libultraship/libultra
EXCLUDE_PATTERNS = */fast/README.md

#---------------------------------------------------------------------------
# Output
#---------------------------------------------------------------------------
OUTPUT_DIRECTORY = doxygen_out
GENERATE_HTML = YES
HTML_OUTPUT = html
GENERATE_LATEX = NO

#---------------------------------------------------------------------------
# Extraction
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_STATIC = YES
EXTRACT_PRIVATE = NO
EXTRACT_ANON_NSPACES = NO

#---------------------------------------------------------------------------
# Filtering
#---------------------------------------------------------------------------
# Define all feature-gate and platform macros so Doxygen sees the complete API
# surface. OS macros are defined simultaneously so that every platform-specific
# code path appears in the generated documentation.
PREDEFINED = INCLUDE_MPQ_SUPPORT \
INCLUDE_PROFILING \
COMPONENT_THREAD_SAFE \
INIT_EVENT_IDS \
ENABLE_SCRIPTING \
ENABLE_OPENGL \
ENABLE_DX11 \
ENABLE_DX12 \
DECLARE_GFX_DXGI_FUNCTIONS \
USE_OPENGLES \
USE_GBI_TRACE \
_WIN32 \
_MSC_VER \
__APPLE__ \
__linux__ \
__OpenBSD__ \
__cplusplus

# Exclude symbols that live outside the Ship / LUS / Fast namespace hierarchy.
# This includes:
# - Objective-C bridge namespaces used by Metal headers (MTL, CA, NS).
# - The tinyxml2 library namespace exposed by forward declarations.
# - Global-scope utility classes (StringHelper, Path, DiskFile, Directory,
# BitConverter, Endianness) that have not yet been moved into a Ship sub-namespace.
# - Global-scope C-compatible structs/enums from fast/interpreter.h
# (ColorCombinerKey, CCFeatures, ShaderOpts) that must remain at global scope
# for C-linkage but are not part of the public C++ API.
EXCLUDE_SYMBOLS = MTL MTL::* CA CA::* NS NS::* tinyxml2 tinyxml2::* \
StringHelper \
Path \
DiskFile \
Directory \
BinaryReader \
BitConverter \
Endianness \
ColorCombinerKey \
CCFeatures \
ShaderOpts

#---------------------------------------------------------------------------
# Source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO

#---------------------------------------------------------------------------
# Graphs (requires Graphviz)
#---------------------------------------------------------------------------
HAVE_DOT = YES
DOT_IMAGE_FORMAT = svg
INTERACTIVE_SVG = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
DIRECTORY_GRAPH = YES
DOT_CLEANUP = YES

#---------------------------------------------------------------------------
# Messages
#---------------------------------------------------------------------------
QUIET = YES
WARNINGS = YES
WARN_IF_UNDOCUMENTED = NO

#---------------------------------------------------------------------------
# HTML appearance
#---------------------------------------------------------------------------
GENERATE_TREEVIEW = YES
DISABLE_INDEX = NO
FULL_SIDEBAR = NO
HTML_COLORSTYLE = AUTO_LIGHT
3 changes: 3 additions & 0 deletions docs/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
source "https://rubygems.org"

gem "just-the-docs", "~> 0.10"
6 changes: 6 additions & 0 deletions docs/PORTING.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
---
title: Porting Guide
parent: Guides
nav_order: 1
---

# Libultraship (LUS) Porting Guide

**Libultraship (LUS)** is a library designed to facilitate PC ports of Nintendo 64 games. It is not a recompilation tool; rather, it allows developers to build a game's original source code (derived from decompilation) on modern hardware by providing a header-compatible wrapper around modern reimplementations of N64 SDK functions.
Expand Down
6 changes: 6 additions & 0 deletions docs/SCRIPTING.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
---
title: Scripting
parent: Guides
nav_order: 2
---

# Scripting System

This document covers the C-based mod scripting system — how archives are structured, how the manifest is parsed, how signing and integrity verification work, and how to write a mod using the event system.
Expand Down
25 changes: 25 additions & 0 deletions docs/_config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
title: libultraship
description: >-
A library providing reimplementations of libultra (N64 SDK) functions
for modern hardware. Enables PC ports of N64 games.

theme: just-the-docs

url: "https://kenix3.github.io"
baseurl: "/libultraship"

aux_links:
GitHub: "https://github.com/Kenix3/libultraship"

aux_links_new_tab: true

nav_external_links:
- title: API Reference
url: api/index.html
hide_icon: false

# Exclude source files Jekyll should not process
exclude:
- Gemfile
- Gemfile.lock
- "*.gemspec"
Loading
Loading