Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1343 commits
Select commit Hold shift + click to select a range
796224f
94.40% zFEng: hoist ReadScriptTags key copy count
JohnDeved Mar 16, 2026
fb62e32
94.42% zFEng: improve ProcessPads pressed block ordering
JohnDeved Mar 16, 2026
74a3b2b
86.4% zFe2: add missing static initializations
JohnDeved Mar 16, 2026
91f2bb6
zFeOverlay 88.6%: match FindMatchingOption, define globals
JohnDeved Mar 16, 2026
3fd05f9
86.5% zFe2: match FECarRecord::GetNameHash
JohnDeved Mar 16, 2026
0333580
96.6%: zFe: match ClearMessage, ShowMessage, GiveTheMoviePlayerBandwidth
JohnDeved Mar 16, 2026
df02659
86.5% zFe2: match cSlider::SetValue using bMax/bMin inlines
JohnDeved Mar 16, 2026
f354958
zFeOverlay 88.7%: match FindInCartPart with inline list traversal
JohnDeved Mar 16, 2026
dfa1231
zFeOverlay 88.7%: match GetSelectedCarRecord and CommitChangeStartRace
JohnDeved Mar 16, 2026
dd6cd5e
zFeOverlay 88.8%: match NotifySoundMessage, GetSelectedCarRecord, Com…
JohnDeved Mar 17, 2026
9b7ea59
zFeOverlay 88.8%: match Perf::NotifySoundMessage, fix IsPerformancePk…
JohnDeved Mar 17, 2026
d374128
86.6% zFe2: match GameCompletionStats ctor, CommitHighScoresPauseQuit…
JohnDeved Mar 17, 2026
0bce986
zFeOverlay 88.8%: match BustedManager ctor, improve FindWhichScreenTo…
JohnDeved Mar 17, 2026
3572978
86.6% zFe2: match GetQuickRaceSettings, AddMilestone, FESliderWidget:…
JohnDeved Mar 17, 2026
687f1d0
86.7% zFe2: match LoadingScreen::LoadingScreen constructor
JohnDeved Mar 17, 2026
b8fc572
zFeOverlay 88.9%: fix FindScreenInfo/FindGarageCameraInfo/FindScreenC…
JohnDeved Mar 17, 2026
bcf10dc
86.9% zFe2: match all widget Show/Hide/UnsetFocus functions
JohnDeved Mar 17, 2026
8428d8d
86.8% zFe2: match widget SetFocus/UnsetFocus, CreateChyronScreen
JohnDeved Mar 17, 2026
96c8b07
87.0% zFe2: match Countdown and RadarDetector constructors
JohnDeved Mar 17, 2026
8882aff
94.5%: zFEng: localize listbox wrap math
JohnDeved Mar 17, 2026
377afa8
zFeOverlay 89.0%: improve UIQRChallengeSeries::RefreshHeader format s…
JohnDeved Mar 17, 2026
1028457
zFeOverlay 89.0%: match TakeControl store ordering
JohnDeved Mar 17, 2026
fabf94d
94.5%: zFEng: tighten MakeMove wrap assignments
JohnDeved Mar 17, 2026
45ba721
87.3% zFe2: match ShiftUpdater, TurboMeter, Infractions, MilestoneBoa…
JohnDeved Mar 17, 2026
b605fa4
zFeOverlay 89.1%: improve QRCarSelectBustedManager::RefreshHeader (pl…
JohnDeved Mar 17, 2026
cbabffc
zFeOverlay 89.1%: improve HandleRender (precompute eViews, fix compar…
JohnDeved Mar 17, 2026
c0fb47f
87.4% zFe2: match MenuZoneTrigger::HideDPadButton
JohnDeved Mar 17, 2026
a2fe54a
87.5% zFe2: match CareerPursuitScores::GetValue with switch
JohnDeved Mar 17, 2026
c846da3
zFeOverlay 89.2%: fix float conversion in BustedManager::Notification…
JohnDeved Mar 17, 2026
5fe12b1
94.5%: zFEng: precompute setter loop bounds
JohnDeved Mar 17, 2026
5f23abf
87.5% zFe2: improve IconOption::IconOption to 71.5%
JohnDeved Mar 17, 2026
88c2e5a
94.5%: zFEng: refine listbox setter loops
JohnDeved Mar 17, 2026
54e2f55
94.5%: zFEng: use cell pointers in setters
JohnDeved Mar 17, 2026
c032c2c
87.5% zFe2: match BustedMeter, TimeExtension, and SpeedBreakerMeter c…
JohnDeved Mar 17, 2026
77afb37
87.5% zFe2: improve Tachometer constructor setup
JohnDeved Mar 17, 2026
f6e6eff
zFeOverlay 89.3%: match UIQRChallengeSeries::Setup and improve Handle…
JohnDeved Mar 17, 2026
c67d39f
96.6% zFe: match MemoryCard::ProcessTask
JohnDeved Mar 17, 2026
a924966
87.6% zFe2: improve Minimap::SetupMinimap branch structure
JohnDeved Mar 17, 2026
556c9c6
agent %
JohnDeved Mar 17, 2026
f6ce8fe
94.5%: zFEng: tighten FEColor alpha clamp
JohnDeved Mar 17, 2026
95e1cb5
87.7% zFe2: improve Minimap update paths
JohnDeved Mar 17, 2026
2e1acd7
87.7% zFe2: improve Minimap cop and player update flow
JohnDeved Mar 17, 2026
748a410
zFeOverlay 89.4%: improve UIQRChallengeSeries::NotificationMessage
JohnDeved Mar 17, 2026
3d4db42
87.7% zFe2: improve PhotoFinishScreen::Setup stack layout
JohnDeved Mar 17, 2026
8ffa427
zFeOverlay 89.4%: improve UIQRCarSelect::NotificationMessage transmis…
JohnDeved Mar 17, 2026
15ff7af
94.5%: zFEng: switch directly on queued message target
JohnDeved Mar 17, 2026
da5d6d7
87.7% zFe2: remove synthetic GRacerInfo post-race helpers
JohnDeved Mar 17, 2026
ad430e4
87.7% zFe2: clean post-race helpers and improve minimap streaming
JohnDeved Mar 17, 2026
8ca5c09
94.5%: zFEng: share message queue package pointer
JohnDeved Mar 17, 2026
4c2b1ae
zFeOverlay 89.5%: improve UIQRCarSelect state checks
JohnDeved Mar 17, 2026
a10b6d2
94.6%: zFEng: tighten ProcessMessageQueue control flow
JohnDeved Mar 17, 2026
35a1bbd
96.6% zFe: match FEManager::WantControllerError
JohnDeved Mar 17, 2026
8c0ff36
zFeOverlay 89.5%: improve UIQRCarSelect impound state flow
JohnDeved Mar 17, 2026
d0f3cf1
87.7% zFe2: improve Minimap constructor initialization
JohnDeved Mar 17, 2026
2efc01d
zFeOverlay 89.5%: improve UIQRCarSelect career prompt flow
JohnDeved Mar 17, 2026
4bc00ab
94.7%: zFEng: align listbox real index locals
JohnDeved Mar 17, 2026
b4e3eaa
87.9% zFe2: rewrite IconScroller::UpdateFade
JohnDeved Mar 17, 2026
ea0a22f
94.7%: zFEng: remove script tag paramSize temp
JohnDeved Mar 17, 2026
a8cb6c4
zFeOverlay 89.5%: fix UIQRCarSelect dialog message flow
JohnDeved Mar 17, 2026
fdc512b
zFeOverlay 89.6%: restore UIQRCarSelect split-screen start flow
JohnDeved Mar 17, 2026
872af28
zFeOverlay 89.6%: align UIQRCarSelect sell dialog flow
JohnDeved Mar 17, 2026
1b99b57
zFeOverlay 89.6%: tighten UIQRCarSelect return path state
JohnDeved Mar 17, 2026
cdc339c
94.8%: zFEng: tighten scroll refill loop bounds
JohnDeved Mar 17, 2026
72d659d
zFeOverlay 89.7%: improve garage screen lookup branches
JohnDeved Mar 17, 2026
8438dbd
94.8%: zFEng: match listbox cell setter bounds
JohnDeved Mar 17, 2026
8681f50
87.9% zFe2: improve SetupLapStats stage stats
JohnDeved Mar 17, 2026
670027a
zFeOverlay 89.7%: align UIQRBrief header branches
JohnDeved Mar 17, 2026
0148458
zFeOverlay 89.7%: tighten UIQRCarSelect sell dialog stack shape
JohnDeved Mar 17, 2026
896516b
94.8%: zFEng: tighten SetColor and ProcessResponses
JohnDeved Mar 17, 2026
7fbeedb
zFeOverlay 89.7%: tighten UIQRCarSelect split-screen return check
JohnDeved Mar 17, 2026
aa91a4a
zFeOverlay 89.8%: improve GetCarPartList filter flow
JohnDeved Mar 17, 2026
e523e0d
94.8%: zFEng: match FEUpperCase
JohnDeved Mar 17, 2026
fc11ef3
87.9% zFe2: improve SetupLapStats speedtrap stats
JohnDeved Mar 17, 2026
9368564
87.9% zFe2: improve SetupLapStats race counts
JohnDeved Mar 17, 2026
c911b16
94.9%: zFEng: hoist AllocateStrings loop locals
JohnDeved Mar 17, 2026
a375927
94.9%: zFEng: match FEHash
JohnDeved Mar 17, 2026
0deff11
88.1% zFe2: reorder SetupLapStats cases
JohnDeved Mar 17, 2026
d4dc3c1
96.6% zFe: improve ShapeMemoryAllocator and PanToTrack
JohnDeved Mar 17, 2026
c107bc1
zFeOverlay 89.8%: tighten QR slider and menu shapes
JohnDeved Mar 17, 2026
e786ab7
88.2% zFe2: restore StatsPanel stat helpers
JohnDeved Mar 17, 2026
05be92a
88.3% zFe2: restore StatsPanel draw flow
JohnDeved Mar 17, 2026
99f8107
zFeOverlay 89.8%: tighten garage camera helper branch flow
JohnDeved Mar 17, 2026
97de777
94.9%: zFEng: fix missing referenced-packages return
JohnDeved Mar 17, 2026
1c5febb
88.3% zFe2: improve SetupResults flow
JohnDeved Mar 17, 2026
75b9636
88.3% zFe2: tighten HeatMeter update temps
JohnDeved Mar 17, 2026
c998ec1
zFeOverlay 89.8%: tighten garage screen lookup helpers
JohnDeved Mar 17, 2026
0dadbec
96.6% zFe: improve WorldMap::PanToCursor pointer aliases
JohnDeved Mar 17, 2026
3f7774b
88.3% zFe2: improve minimap art updates
JohnDeved Mar 17, 2026
0abcf54
96.7% zFe: improve WorldMap::MoveCursor aliases
JohnDeved Mar 17, 2026
d52f943
88.4% zFe2: use FEVector2 temporaries in SetupMinimap
JohnDeved Mar 17, 2026
386f7fc
zFeOverlay 89.8%: tighten garage mover construction
JohnDeved Mar 17, 2026
98b47a9
95.3%: zFEng: restructure ProcessPadsForPackage dispatch tree
JohnDeved Mar 17, 2026
c904dca
96.7% zFe: improve uiRapSheetTEP::Setup time check
JohnDeved Mar 17, 2026
cdd931d
88.4% zFe2: improve minimap cop pursuit flow
JohnDeved Mar 17, 2026
3141431
zFeOverlay 89.9%: use selected part path in CustomizeRims header
JohnDeved Mar 17, 2026
4eefb64
95.3%: zFEng: match FEMultMatrix, ReadMessageResponseTags, FEObject dtor
JohnDeved Mar 17, 2026
245319c
zFeOverlay 89.9%: match quick race count draw helpers
JohnDeved Mar 17, 2026
d1a828b
88.5% zFe2: fix nitrous gauge script branches
JohnDeved Mar 17, 2026
31b310f
96.7% zFe: improve MemcardCallbacks::CardChecked
JohnDeved Mar 17, 2026
92a408a
zFeOverlay 89.9%: match marker and car-list helpers
JohnDeved Mar 17, 2026
e12d4fe
88.5% zFe2: polish NitrousGauge SetNos
JohnDeved Mar 17, 2026
bb157dc
96.7% zFe: polish MemcardCallbacks::CardChecked
JohnDeved Mar 17, 2026
5c79697
zFeOverlay 90.0%: match cart search helpers
JohnDeved Mar 17, 2026
65f132e
88.8% zFe2: improve clip helper intersections
JohnDeved Mar 17, 2026
fd18e5c
95.5%: zFEng: use FENG_NEW for pool allocation, match 3 operator new …
JohnDeved Mar 17, 2026
7403b44
96.7% zFe: improve UIMemcardBase::NotificationMessage
JohnDeved Mar 17, 2026
796f992
zFeOverlay 90.0%: match GetActivePartFromSlot
JohnDeved Mar 17, 2026
505bd1d
88.8% zFe2: tighten SetupLapStats panel access
JohnDeved Mar 17, 2026
060f1a6
88.8% zFe2: tighten minimap update and lap stats
JohnDeved Mar 17, 2026
1bdd5fc
zFeOverlay 90.0%: improve CalcGameOver
JohnDeved Mar 17, 2026
b808820
zFeOverlay 90.0%: match CarViewer screen update helper
JohnDeved Mar 17, 2026
80c2669
97.0% zFe: reorder WorldMap::NotificationMessage blocks
JohnDeved Mar 17, 2026
414637f
88.8% zFe2: improve RenderString setup ordering
JohnDeved Mar 17, 2026
32fedea
97.0% zFe: refine WorldMap::NotificationMessage layout
JohnDeved Mar 17, 2026
cb992a3
88.8% zFe2: inline stage stat string lookups
JohnDeved Mar 17, 2026
a6a5eaf
88.8% zFe2: improve SetupMinimap local ordering
JohnDeved Mar 17, 2026
2161a73
zFeOverlay 90.0%: match track selection helper
JohnDeved Mar 17, 2026
33a57e5
95.5%: zFEng: use single Index variable in AllocBlock
JohnDeved Mar 17, 2026
3b455ec
97.0% zFe: reshape PauseMenu::NotificationMessage dispatch
JohnDeved Mar 17, 2026
b4cb207
88.9% zFe2: inline circuit and tollbooth stat lookups
JohnDeved Mar 17, 2026
bc86355
zFeOverlay 90.0%: match CalcGameOver
JohnDeved Mar 17, 2026
78f97c2
88.9% zFe2: use direct RacerStats access in lap stats
JohnDeved Mar 17, 2026
43d740d
89.0% zFe2: hoist final lap stat times
JohnDeved Mar 17, 2026
2909cf6
95.5%: zFEng: simplify FEKeyInterp switch cases
JohnDeved Mar 17, 2026
377b94c
89.0% zFe2: use panel alias for final lap stats
JohnDeved Mar 17, 2026
4019304
89.0% zFe2: use panel alias in speedtrap stats
JohnDeved Mar 17, 2026
6da3bc3
95.5%: zFEng: remove spurious pMask local from AllocBlock
JohnDeved Mar 17, 2026
2e6e9f8
89.1% zFe2: split camera select default path
JohnDeved Mar 17, 2026
84c8a38
97.0% zFe: match PauseMenu constructor
JohnDeved Mar 17, 2026
cca4751
zFeOverlay 90.0%: byte-match BuildPresetTrackList
JohnDeved Mar 17, 2026
9b2d062
89.1% zFe2: improve camera select attrib change flow
JohnDeved Mar 17, 2026
2a422ad
89.2% zFe2: emit missing frontend destructors
JohnDeved Mar 17, 2026
800944f
89.3% zFe2: use std vector for song reserve
JohnDeved Mar 17, 2026
0bbf819
89.4% zFe2: fix UTLVector push_back mangling
JohnDeved Mar 17, 2026
9707d38
zFeOverlay 90.0%: improve UIQRChallengeSeries::RefreshHeader
JohnDeved Mar 17, 2026
23fcbda
97.0% zFe: improve WorldMap flow and rankings setup
JohnDeved Mar 17, 2026
3f3ee5f
97.1% zFe: improve PauseMenu::NotificationMessage
JohnDeved Mar 17, 2026
0c6fe83
97.1% zFe: split PauseMenu script path
JohnDeved Mar 17, 2026
848bef3
89.6% zFe2: reconstruct slider widget positioning
JohnDeved Mar 17, 2026
9085085
89.7% zFe2: recover widget position flows
JohnDeved Mar 17, 2026
7a8ee31
97.1% zFe: improve uiRapSheetRankingsDetail::Setup
JohnDeved Mar 17, 2026
f5dc6da
89.9% zFe2: tighten widget and stats panel helpers
JohnDeved Mar 17, 2026
4460e43
97.1% zFe: match WorldMap::GetZoomFactor
JohnDeved Mar 17, 2026
746a7d3
95.5% zFEng: improve FECodeListBox::MakeMove control flow
JohnDeved Mar 17, 2026
ad815c4
90.0% zFe2: match post-race stats panel and tighten widgets
JohnDeved Mar 17, 2026
8f6d08b
97.1% zFe: improve WorldMap::NotificationMessage update loop
JohnDeved Mar 17, 2026
ab26f07
97.1% zFe: refine WorldMap::NotificationMessage loop temporaries
JohnDeved Mar 17, 2026
9594f12
zFeOverlay 90.1%: improve CustomizeRims::BuildRimsList
JohnDeved Mar 17, 2026
0c33d68
Merge remote-tracking branch 'origin/main'
JohnDeved Mar 17, 2026
a2663f1
Merge remote-tracking branch 'origin/dev'
JohnDeved Mar 17, 2026
2564a6a
agent %
JohnDeved Mar 17, 2026
0e46ff2
zFeOverlay 90.1%: tighten BuildRimsList and spoiler cart lookup
JohnDeved Mar 17, 2026
67972e2
zFeOverlay 90.2%: improve FEMarkerSelection constructor
JohnDeved Mar 17, 2026
43ed85d
97.2% zFe: bind WorldMap::NotificationMessage message register
JohnDeved Mar 17, 2026
1cac6dc
zFeOverlay 90.2%: tighten DoesCartHaveActiveParts guards
JohnDeved Mar 17, 2026
b62f7b8
97.2% zFe: hoist WorldMap::NotificationMessage loop temporaries
JohnDeved Mar 17, 2026
f92fa18
zFeOverlay 90.2%: cache UIQRTrackSelect package name
JohnDeved Mar 17, 2026
df0349a
zFeOverlay 90.2%: improve UIQRTrackSelect setup and scrolling
JohnDeved Mar 17, 2026
a0637a6
zFeOverlay 90.3%: improve UIQRChallengeSeries RefreshHeader
JohnDeved Mar 17, 2026
d482a21
97.2% zFe: improve WorldMap::AddRoadBlocks temporaries
JohnDeved Mar 17, 2026
7604ff9
zFeOverlay 90.3%: tighten UIQRChallengeSeries notification flow
JohnDeved Mar 17, 2026
6cd6f50
zFeOverlay 90.3%: tighten UIQRChallengeSeries RefreshHeader strings
JohnDeved Mar 17, 2026
604ee9b
zFeOverlay 90.3%: improve UIQRChallengeSeries RefreshHeader paging
JohnDeved Mar 17, 2026
8e36a04
zFeOverlay 90.3%: match UIQRTrackSelect Setup
JohnDeved Mar 17, 2026
7d72546
zFeOverlay 90.3%: match FindGarageCameraInfo
JohnDeved Mar 17, 2026
1a7003a
97.2% zFe: force word copies in WorldMap::NotificationMessage
JohnDeved Mar 17, 2026
61e3a86
97.2% zFe: materialize PanToCursor offset copies
JohnDeved Mar 17, 2026
9b86f45
97.2% zFe: tighten PauseMenu NotificationMessage D-Day check
JohnDeved Mar 17, 2026
096858e
97.2% zFe: post MNotifyRaceAbandoned from temporary
JohnDeved Mar 17, 2026
8dc21b1
97.2% zFe: inline PauseMenu garage type selection
JohnDeved Mar 17, 2026
e998fb6
97.2% zFe: reuse WorldMap pan offset temps
JohnDeved Mar 17, 2026
1afcc29
97.2% zFe: collapse UpdateCursor pan copy
JohnDeved Mar 17, 2026
d04c0de
Merge branch 'copilot-zfe-b40f' into zFE2
JohnDeved Mar 17, 2026
f6c3a7c
-
JohnDeved Mar 17, 2026
d028fd5
Delete .DS_Store
JohnDeved Mar 17, 2026
80df004
fix: link shared assets and track agent skills symlinks
JohnDeved Mar 17, 2026
d76c2f6
fix diff
JohnDeved Mar 18, 2026
e2205dc
Merge remote-tracking branch 'origin/main'
JohnDeved Mar 19, 2026
1a54bf3
improvements derived from zBWare review changes
JohnDeved Mar 19, 2026
1b8ec13
symlink
JohnDeved Mar 19, 2026
0bab6b8
tooling: bootstrap PS2 and Xbox assets
JohnDeved Mar 20, 2026
45403b8
tooling: add cross-platform build matrix checker
JohnDeved Mar 20, 2026
6b35f22
tooling: extend health checks for Xbox and PS2
JohnDeved Mar 20, 2026
c9b94f5
disallow sub agents
JohnDeved Mar 20, 2026
3ba9ca0
Merge branch 'main' into zFE2
JohnDeved Mar 21, 2026
0f24a6d
fix build
JohnDeved Mar 21, 2026
87211f2
fix ci
JohnDeved Mar 21, 2026
f24104f
fix other paths
JohnDeved Mar 21, 2026
362185a
fix broken matches
JohnDeved Mar 21, 2026
30ff3e3
dwarf TU scan tool
JohnDeved Mar 21, 2026
bffa7ee
Revert "fix broken matches"
JohnDeved Mar 21, 2026
80fecd8
94.7%: fix DWARF for FEng string setters
JohnDeved Mar 21, 2026
516ed48
97.6%: fix MemoryCard DWARF helpers
JohnDeved Mar 21, 2026
8decd07
97.6%: match more MemoryCard DWARF helpers
JohnDeved Mar 21, 2026
fd4c65c
94.8%: improve ProcessResponses switch shape
JohnDeved Mar 21, 2026
1581a36
97.6%: match MemoryCard save and load helpers
JohnDeved Mar 21, 2026
9b0e9aa
97.6%: match more MemoryCard utility helpers
JohnDeved Mar 21, 2026
1bb6c1d
97.6%: match MemoryCard autosave DWARF helpers
JohnDeved Mar 21, 2026
4bbc651
97.6%: match nearly all MemoryCard DWARF helpers
JohnDeved Mar 21, 2026
7e0b2af
97.6%: align MemoryCard command accessor DWARF
JohnDeved Mar 21, 2026
5301920
94.8%: match small FEngine and FEJoyPad helpers
JohnDeved Mar 21, 2026
6b73f9d
94.8%: match FEngine library list helpers
JohnDeved Mar 21, 2026
6fef5d7
94.8%: match small FEng data helpers
JohnDeved Mar 21, 2026
c217479
94.8%: match FEObject response lookup helper
JohnDeved Mar 21, 2026
412d89e
94.8%: match FEMinList ordinal lookup
JohnDeved Mar 21, 2026
de6fa1d
94.8%: match FEFieldNode default allocation
JohnDeved Mar 21, 2026
be0413e
94.8%: match FEButtonMap storage allocation
JohnDeved Mar 21, 2026
04741a0
94.8%: match FEResponse string allocation helper
JohnDeved Mar 21, 2026
d065efa
90.0%: match in-game movie launch helpers
JohnDeved Mar 21, 2026
fbab74a
90.3%: match shopping cart helper wrappers
JohnDeved Mar 21, 2026
489b032
90.0%: match toggle widget script helper
JohnDeved Mar 21, 2026
c7834b2
90.0%: match widget focus and visibility helpers
JohnDeved Mar 21, 2026
273f95d
90.0%: match loading screen init helpers
JohnDeved Mar 21, 2026
675a5e3
90.0%: match loading callback bridge helper
JohnDeved Mar 21, 2026
17f0a9e
90.0%: match frontend database utility helpers
JohnDeved Mar 21, 2026
1c42101
90.0%: match backroom availability stubs
JohnDeved Mar 21, 2026
243f1ed
90.0%: match FEMarkerManager buffer helpers
JohnDeved Mar 21, 2026
7687e76
90.0%: match minimap unloader helper
JohnDeved Mar 21, 2026
65900b6
90.0%: match post-race pursuit datum allocations
JohnDeved Mar 21, 2026
42ac4b6
90.0%: match more widget backing helpers
JohnDeved Mar 21, 2026
7edde48
90.0%: match slider unset-focus helpers
JohnDeved Mar 21, 2026
f73cfee
90.0%: match scrollbar dim helpers
JohnDeved Mar 21, 2026
d756562
90.0%: match text scroller update helper
JohnDeved Mar 21, 2026
9ba1b77
90.0%: match toggle and stat widget helpers
JohnDeved Mar 21, 2026
9246906
90.0%: match frontend save and score helpers
JohnDeved Mar 21, 2026
ff948c8
90.0%: match HUD and stats panel helpers
JohnDeved Mar 21, 2026
05b0c6a
90.0%: match widget menu and stats draw helpers
JohnDeved Mar 21, 2026
a2f3689
90.0%: match HUD minimap and fade helpers
JohnDeved Mar 21, 2026
d611170
90.0%: match pursuit score getter helper
JohnDeved Mar 21, 2026
6b28c71
90.0%: match boot flow screen finder helpers
JohnDeved Mar 21, 2026
d132ecf
90.0%: match pursuit and font notification helpers
JohnDeved Mar 21, 2026
76b6be2
90.0%: match unlock and career flag helpers
JohnDeved Mar 21, 2026
e28f109
90.0%: match scroller draw scrollbar helper
JohnDeved Mar 21, 2026
81f520b
90.0%: match small frontend data helpers
JohnDeved Mar 21, 2026
dd80979
90.0%: match icon scroller and photo finish helpers
JohnDeved Mar 21, 2026
08652c6
90.0%: match icon panel lookup helpers
JohnDeved Mar 21, 2026
3458db4
90.0%: match photo finish callback bridge
JohnDeved Mar 21, 2026
ba11a64
90.0%: match widget index and HUD joy helpers
JohnDeved Mar 21, 2026
8a283de
90.0%: match scroller count helper
JohnDeved Mar 21, 2026
e7e35a6
90.0%: match post-race stats constructors
JohnDeved Mar 21, 2026
23f8c87
90.0%: match widescreen and post-race helpers
JohnDeved Mar 21, 2026
26b9b81
90.0%: match slider show and hide helpers
JohnDeved Mar 21, 2026
16c8bd2
90.0%: match widget menu reposition
JohnDeved Mar 21, 2026
d44e92e
90.0%: match icon and tuning focus helpers
JohnDeved Mar 21, 2026
8cdae06
90.0%: match clipaligned locals
JohnDeved Mar 21, 2026
341da30
90.0%: match render object ownership
JohnDeved Mar 21, 2026
96e9c2f
90.0%: match notify delete car ownership
JohnDeved Mar 21, 2026
97d3ab8
90.0%: improve loading screen ctor dwarf
JohnDeved Mar 22, 2026
70fc6a7
90.0%: refine loading screen ctor dwarf
JohnDeved Mar 22, 2026
3890048
90.0%: improve render string dwarf
JohnDeved Mar 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .agents/skills/code_style
1 change: 1 addition & 0 deletions .agents/skills/execute
1 change: 1 addition & 0 deletions .agents/skills/ghidra
1 change: 1 addition & 0 deletions .agents/skills/implement
1 change: 1 addition & 0 deletions .agents/skills/line_lookup
1 change: 1 addition & 0 deletions .agents/skills/lookup
1 change: 1 addition & 0 deletions .agents/skills/refiner
1 change: 1 addition & 0 deletions .agents/skills/scaffold
1 change: 1 addition & 0 deletions .claude
33 changes: 32 additions & 1 deletion .github/skills/code_style/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ python tools/code_style.py audit --base origin/main
- `audit` also checks touched `class` / `struct` declarations against known header declarations and, when no header exists, against the PS2 visibility rule.
- `audit` warns on touched local forward declarations when the repo already has a header for that type.
- `audit` warns on touched type members that look like invented padding or placeholder names such as `pad`, `unk`, or `field_1234`.
- `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, and missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's guard region is touched.
- `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, bare `#if MACRO` presence checks, recovered layout members that still use raw `unsigned char` / `unsigned short`, and missing or misordered `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's prologue is touched.
- `audit` groups repeated findings by file so branch-wide output stays readable.
- Use `audit --category safe-cpp` when you want a smaller Frontend/FEng-focused subset and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code.
- `format --check` is an opt-in wrapper around the repo's `.clang-format`, and by default it targets eligible changed C/C++ files, including match-sensitive code.
Expand Down Expand Up @@ -95,14 +95,22 @@ Foo::Foo()
- Use `nullptr` exclusively for null pointers.
- Prefer `if (ptr)` / `if (!ptr)` over explicit null comparisons when the change is local and verified safe.
- When a match-sensitive TU has many explicit `nullptr` checks and you decide to normalize them, prefer one mechanical full-TU pass over piecemeal cleanup. Rebuild the unit and re-check its status before keeping the rewrite.
- When a helper is doing address arithmetic, prefer `intptr_t` / `uintptr_t` or byte-pointer (`reinterpret_cast<char *>`) math over plain `int` parameters or integerized pointer subtraction.
- Inline assembly is acceptable when it is needed to preserve dead-code compares, ordering, or other compiler behavior that source alone cannot reproduce.
- In low-level list / node / allocator code, prefer existing helper methods such as `AddBefore`, `AddAfter`, `Remove`, `GetPrev`, `GetNext`, or typed accessors over open-coding link rewiring once the helper exists.

### Header prologues and preprocessor checks

- In headers, keep the guard / `EA_PRAGMA_ONCE_SUPPORTED` block before any project `#include`; do not place includes ahead of `#pragma once`.
- Use `#ifdef MACRO` / `#ifndef MACRO` for presence checks. Reserve bare `#if MACRO` for cases where you really need the macro's numeric value.

### Forward declarations and local prototypes

- Prefer including the owning repo header over adding a local forward declaration for a project type.
- If the repo already has a header declaration/definition for a type, include that header instead of redeclaring the type locally.
- If the repo only has an empty or stub owner header, and line info / surrounding source clearly points at that header's subsystem, prefer populating that owner header over leaving a recovered project type declaration inside a `.cpp`.
- Only keep a local forward declaration when no canonical repo header exists yet and you have verified that the ownership is still unresolved.
- Likewise for project free functions: if a declaration is shared across translation units, move it into the owning header instead of leaving ad-hoc local prototypes in `.cpp` files.
- Prefer moving helper template declarations next to their real use site instead of leaving them in an unrelated file.

### Pointer style
Expand All @@ -117,10 +125,13 @@ Foo::Foo()
- Preserve the original `class` / `struct` kind from existing headers or Dwarf / PS2 evidence; do not treat it as a cosmetic style choice.
- Treat header declarations as the repo source of truth. If the repo only has local `.cpp` partial declarations, verify the kind with the PS2 dump instead of copying them blindly.
- Even forward declarations and local partial declarations should use the accurate keyword when known.
- Keep the `// total size: 0x...` comment above the recovered type declaration instead of burying it inside the body.
- When a recovered type is a `class`, keep explicit access sections and put the method/accessor block before the member layout block unless existing repo evidence shows otherwise.
- Preserve the member naming style that DWARF shows. Some types use `mMember`, others use `m_member`; do not normalize them.
- Preserve recovered member names, types, order, and offset comments. Do not invent placeholder members named `pad`, `unk`, `unknown`, or `field_XXXX` for game code just to make a layout compile.
- If a member is genuinely unknown, stop and verify it with `find-symbol.py`, GC Dwarf, and PS2 data. If the layout is still incomplete, add a short TODO above the type instead of burying uncertainty in fake member names.
- Add offset / size comments when you are writing recovered type layouts from DWARF.
- In recovered layouts, prefer explicit-width aliases such as `uint8` / `uint16` when the field width is known. Use plain `char` for text / byte buffers and `signed char` when the field is a signed 8-bit counter.
- Define inline member functions in headers only when DWARF shows that they are genuinely inlined in the binary.
- Use `struct` for POD-like data carriers with public fields; use `class` for behavior-heavy types only when that matches the recovered type information.
- Keep tiny placeholder methods as concise inline bodies when that is already the local pattern.
Expand All @@ -134,13 +145,27 @@ Foo::Foo()
### Dense local code

- Expand dense one-line helper structs, declaration blocks, and function bodies in non-match-sensitive files into normal multiline formatting.
- In low-level headers, prefer normal multi-line bodies for touched inline operators and accessors instead of stacking `{ return ...; }` on one line, unless the surrounding file clearly uses intentional placeholder one-liners.
- Prefer readable blocks over stacked one-line statements when behavior does not depend on exact source shape.
- In touched validation/parsing code, prefer explicit min/max or boundary checks over equivalent magic-constant arithmetic when the clearer form still compiles to the verified result.
- In parser/state-table code, prefer named enums and enum-typed state variables over anonymous integer state codes when that rewrite is verified safe.

### Recovery markers

- Remove stale recovery markers such as `// TODO`, `// UNSOLVED`, or `// STRIPPED` when the touched code is now implemented or understood.
- If a marker still needs to stay, give it short context such as ownership uncertainty, a Dwarf caveat, a platform/config note, or a scratch/link reference. Avoid bare marker-only comments.
- Do not leave `// TODO` hanging off a declaration or helper you just implemented; either finish the thought or remove the marker.

### Uncertain ownership

- If a declaration or global clearly compiles but its original home is uncertain, add a short TODO comment instead of inventing structure you cannot justify yet.
- When ownership matters, verify it with `decomp-workflow.py`, `decomp-context.py`, and `line-lookup` before moving code.

### Readable helper extraction

- When touched recovered code repeats the same pointer/boundary arithmetic, prefer a short named helper or accessor such as `GetTop`, `GetBot`, `GetNext`, `GetPrev`, `GetStringTableStart`, or `GetStringTableEnd` if that shape is already supported by Dwarf/inlining evidence.
- Prefer call sites that use those helpers or existing container APIs over re-encoding the same arithmetic or link manipulation inline.

## Phase 3: Things Not To "Clean Up" Blindly

- Do not move an inline method out of a header just because it looks cleaner.
Expand Down Expand Up @@ -172,3 +197,9 @@ Keep the cleanup only if the build succeeds and the relevant match status is unc
- The trailing `//` initializer-list markers are an intentional repo convention, not noise to remove.
- Small `if (ptr)` cleanup batches can be kept in match-sensitive code, but only after rebuilding the affected unit.
- Dense frontend shim files benefit from multiline struct/prototype/function formatting.
- Header prologues should keep the `EA_PRAGMA_ONCE_SUPPORTED` block ahead of includes, not after them.
- Bare `#if MACRO` presence checks are review bait; use `#ifdef` / `#ifndef` unless you are intentionally testing a numeric config value.
- Reviewed recovered headers tend to keep total-size comments above the type, methods before fields, explicit access sections, and fixed-width aliases for width-known narrow integer members.
- Reviewed fixups also remove stale bare recovery markers or replace them with context, and prefer existing list/node helpers over hand-written pointer/link rewiring.
- Some reviewed fixups improved readability without losing match by replacing opaque range-check arithmetic with explicit bounds and by moving repeated pointer/boundary math behind short named helpers.
- Other recurring review churn came from plain-`int` address helpers, stray local `.cpp` prototypes for shared functions, and integer-coded parser states where named enums were clearer but still matched.
9 changes: 9 additions & 0 deletions .github/skills/execute/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ the produced C++ compiles to byte-identical object code against the original ret

For each function, "done" means both objdiff and normalized DWARF are exact.

Human review is not a substitute for running `dwarf compare`. Each function should hit
its own `verify` gate before you treat it as ready to hand off, commit, or move past.

## Overview

This workflow combines several smaller workflows:
Expand Down Expand Up @@ -152,6 +155,10 @@ python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName
If it fails, follow up with `decomp-workflow.py diff` and `decomp-workflow.py dwarf`
until both checks pass.

Do not queue up several "probably done" functions and leave the DWARF check for later.
Close the `verify` gate per function before moving on whenever feasible; otherwise the
reviewer ends up doing avoidable DWARF triage.

### 3g. Periodic reassessment

After every few functions, re-run the full status check:
Expand Down Expand Up @@ -189,6 +196,8 @@ For any remaining nonmatching functions, make one final pass using the implement
or refiner workflow with all context accumulated during the session.

Do not report a function as complete unless its per-function `verify` check also passes.
Do not hand a function to review as "done except maybe DWARF" — either resolve the DWARF
failure yourself or explicitly call out the blocker and why it remains.

## Phase 5: Report

Expand Down
29 changes: 29 additions & 0 deletions .github/skills/implement/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ Your goal is to decompile a specific function: writing C++ source that compiles

A function is not done until it is exact in both objdiff and normalized DWARF.

Reviewers should not be spending their time rediscovering DWARF mismatches. Before you
report progress, ask for review, hand the function off, or switch to another target, you
must run the per-function verification gate yourself and treat any DWARF failure as your
next task, not as review debt.

## Phase 1: Gather Context

Collect data from **all** of these sources in parallel where possible.
Expand Down Expand Up @@ -156,6 +161,16 @@ python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName

If the build fails, fix compilation errors first.

As soon as you have a compiling draft, run the combined verification gate immediately:

```sh
python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName
```

Do this before you spend a long time polishing late instruction mismatches. If `verify`
already shows a DWARF failure, fix that first so you are not polishing code the reviewer
will bounce anyway.

### Check the diff

```sh
Expand Down Expand Up @@ -203,6 +218,17 @@ debug-line owner files for each DWARF `// Range:` block, which makes it much eas
spot inlines that are coming from the wrong header or owner file. Exact line-number
agreement is a useful secondary hint, but file ownership is the first thing to check.

Use this as the default loop when the function compiles but `verify` is still failing:

1. Run `verify`.
2. If DWARF fails, run `dwarf`.
3. Fix the structural issue the DWARF diff is pointing at first: missing/extra locals,
wrong qualifiers or parameter types, wrong inline ownership, wrong helper/header owner,
or a source shape that outlined something that should be inlined.
4. Rebuild and rerun `verify`.
5. Only return to instruction-by-instruction cleanup once the remaining failures are no
longer obvious DWARF-compare issues.

Manual fallback:

After writing your code, you can also run the dwarf dump on the compiled output and then query your output dump with lookup.py to compare your decompiled functions against the originals. Since the address of the function you're working on can keep changing
Expand Down Expand Up @@ -233,6 +259,9 @@ Every mismatched instruction is a signal — don't settle for "close enough".
Reaching 100% instruction matching status is not enough. Stay in the loop until `verify`
passes, which means the DWARF of the function also matches after normalization.

Do not leave a function in a "review-ready" or "good enough for now" state with a known
DWARF failure unless you are explicitly blocked and you document that blocker clearly.

## Phase 5: Report

Summarize:
Expand Down
19 changes: 19 additions & 0 deletions .github/skills/refiner/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,25 @@ approaches that were tried before — instead, apply systematic lateral analysis
- A diff is available (`decomp-diff.py -u <TU> -d <func>`).
- The "obvious" translation from Ghidra has been attempted.
- You have been given the current source code and the diff.
- You have already run the per-function `verify` gate and know whether the remaining work
is still structural DWARF cleanup or true late-stage instruction cleanup.

Refiner is not the place to dump unresolved DWARF debt on a reviewer. If `verify` or
`dwarf` is still showing obvious structural mismatches (missing locals, wrong types,
wrong inline ownership, wrong helper/header owner), fix those first or drop back to the
implementer workflow before doing late instruction polish.

## Phase 1: Read the full diff without collapsing

Before you start a refiner pass, confirm the gate status:

```sh
python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName
```

If the combined gate is failing for reasons that are still clearly visible in the DWARF
diff, address those first instead of treating them as reviewer follow-up.

Preferred shortcut:

```sh
Expand Down Expand Up @@ -151,6 +167,9 @@ DWARF mismatches to watch for:
- Wrong return type
- Missing inlined function records (means an inline call was outlined)

If these mismatches are still present, you are not in pure refiner territory yet. Resolve
them before you ask a reviewer to spend time on the function.

## Phase 4: Report

Summarize:
Expand Down
20 changes: 19 additions & 1 deletion .github/skills/scaffold/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ Preserve the real `class` / `struct` kind while scaffolding. Check existing head
then use Dwarf plus PS2 visibility / vtable info to decide the type kind. Even temporary
forward declarations should match the known original kind.

Keep the header prologue in repo order: header guard, `EA_PRAGMA_ONCE_SUPPORTED` block,
then includes. Do not drop project includes ahead of `#pragma once`.

If the repo already has a header for a type you need, include that header instead of
adding a new local forward declaration. Only forward-declare when no canonical repo header
exists yet and you have verified that the ownership is still unresolved.
Expand All @@ -47,11 +50,26 @@ Preserve real member names, types, order, and offset comments while scaffolding.
fill gaps with invented `pad`, `unk`, or `field_XXXX` members for game types; verify the
layout from Dwarf / PS2 data and leave a TODO over the type if a field is still uncertain.

Keep the `// total size: 0x...` comment above the recovered type declaration. When the
recovered type is a `class`, keep explicit access sections and prefer putting methods /
accessors before the member layout block unless existing repo evidence says otherwise.

When a recovered field width is known, prefer explicit-width aliases such as `uint8` /
`uint16` over raw `unsigned char` / `unsigned short`. Use plain `char` for string or byte
buffers and `signed char` when the field is a signed 8-bit counter.

If a recovered type repeatedly walks neighbors, boundaries, or in-object offsets, prefer
small named helpers such as `GetTop`, `GetBot`, `GetNext`, `GetPrev`, or boundary getters
instead of repeating raw pointer arithmetic at each call site.

When those helpers operate on addresses or byte offsets, prefer `intptr_t` / `uintptr_t`
or explicit byte-pointer arithmetic instead of plain `int` address parameters.

Only create headers if it's really necessary (the struct doesn't have inlines so you can't determine in which header file it goes and it's thematically very different from the other structs that use it), otherwise put it into the one you determined to be correct.

The dwarf often has duplicated inlines, clean those up according to the order in the PS2 info.

Write a TODO comment over the struct/class if you aren't 100% sure that it belongs to the correct header.
Write a TODO comment over the struct/class if you aren't 100% sure that it belongs to the correct header, and say why (ownership uncertainty, circular dependency, dwarf caveat, etc.) instead of leaving a bare marker.

## Phase 3: Add needed files to jumbo file and compile

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,4 @@ vc80.pdb
undefined_funcs_auto.txt
undefined_syms_auto.txt
.splache
.com/
Loading
Loading