Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
711 commits
Select commit Hold shift + click to select a range
8d25115
82.7%: improve GTrigger::GTrigger
JohnDeved Mar 20, 2026
90d576a
82.8%: improve GManager::OnQueryVehicleCache
JohnDeved Mar 20, 2026
1e8eff3
82.8%: improve GTrigger::GTrigger
JohnDeved Mar 20, 2026
b8d8dfc
82.8%: improve GTrigger::GTrigger
JohnDeved Mar 20, 2026
181bf1c
82.8%: improve GTrigger::GTrigger
JohnDeved Mar 20, 2026
055fff6
82.8%: improve GTrigger::GTrigger
JohnDeved Mar 20, 2026
faa57cf
82.8%: improve GRacerInfo::CreateVehicle
JohnDeved Mar 20, 2026
c90c37e
82.9%: improve GRacerInfo::CreateVehicle
JohnDeved Mar 20, 2026
dbc6b41
82.9%: improve GRacerInfo::CreateVehicle
JohnDeved Mar 20, 2026
d58a347
83.0%: improve GRacerInfo::CreateVehicle
JohnDeved Mar 20, 2026
bfbb205
83.0%: improve GTrigger::GTrigger
JohnDeved Mar 20, 2026
b7d6564
83.0%: improve GTrigger::GTrigger
JohnDeved Mar 20, 2026
e7e46cf
83.2%: match+ GManager::UpdatePendingSMS
JohnDeved Mar 20, 2026
ffaa771
83.3%: match+ gameplay helper emissions
JohnDeved Mar 20, 2026
34b441d
83.3%: improve Attrib::Attribute::Get<GCollectionKey>
JohnDeved Mar 20, 2026
c692dea
83.4%: match+ global constructors keyed to GRuntimeInstance::sRingLis…
JohnDeved Mar 20, 2026
fd0f74f
83.4%: improve GCharacter::AttemptSpawn
JohnDeved Mar 20, 2026
336f077
83.4%: improve GCharacter::AttemptSpawn
JohnDeved Mar 20, 2026
db6ecc6
83.6%: match GRaceParameters::GRaceParameters
JohnDeved Mar 20, 2026
60c57ef
83.6%: dwarf improve GCharacter::AttemptSpawn
JohnDeved Mar 20, 2026
58bd7ef
83.6%: improve GRuntimeInstance::ConnectToInstance
JohnDeved Mar 20, 2026
3249d8c
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 20, 2026
778a6dd
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 20, 2026
090aacd
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 20, 2026
79c7d41
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 20, 2026
e607372
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 20, 2026
289f112
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 20, 2026
58e3f60
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
a38f742
83.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
70443c7
83.7%: improve GRacerInfo::IsBehind
JohnDeved Mar 21, 2026
45bae17
83.8%: improve GRacerInfo::IsBehind
JohnDeved Mar 21, 2026
83ac437
83.9%: match+ GCharacter::OnDetached
JohnDeved Mar 21, 2026
0971553
84.0%: match+ GCharacter::ReleaseVehicle
JohnDeved Mar 21, 2026
36d6822
84.0%: match+ GCharacter spawn-state helpers
JohnDeved Mar 21, 2026
1a7d095
84.0%: improve GRacerInfo::IsBehind
JohnDeved Mar 21, 2026
643cf5f
84.0%: improve GRacerInfo::IsBehind
JohnDeved Mar 21, 2026
578947d
84.0%: improve GRacerInfo::Update
JohnDeved Mar 21, 2026
0c838e1
84.0%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
bdc3401
84.0%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
7c08b1c
84.0%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
ce4cd18
84.0%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
5f5cef9
84.0%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
4e59b73
84.1%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
c3dd7e1
84.1%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
04a627e
84.1%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
2b6259b
84.1%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
77fe0bc
84.1%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
25fc4fd
84.1%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
9fa248f
84.1%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
119d3b3
84.2%: improve GActivity::ActivateReferencedTriggers
JohnDeved Mar 21, 2026
0be9e14
84.3%: match GActivity::ActivateReferencedTriggers
JohnDeved Mar 21, 2026
3d5a775
84.3%: improve GRacerInfo::Update
JohnDeved Mar 21, 2026
089a1a2
84.3%: improve GRacerInfo::Update
JohnDeved Mar 21, 2026
6a5713f
84.4%: improve GRacerInfo::Update
JohnDeved Mar 21, 2026
82e5d91
84.4%: improve GRacerInfo::Update
JohnDeved Mar 21, 2026
62d0192
84.4%: improve GRacerInfo::Update
JohnDeved Mar 21, 2026
75a2ba1
84.4%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
fbfed2c
84.4%: improve GCharacter::IsNoLongerUseful
JohnDeved Mar 21, 2026
f44754a
84.4%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
13fa493
84.5%: improve GRaceCustom::GetCheckpointDirection
JohnDeved Mar 21, 2026
17a8965
84.5%: improve GRaceCustom::GetCheckpointDirection
JohnDeved Mar 21, 2026
35bd3ae
84.5%: improve GRaceCustom::GetCheckpointDirection
JohnDeved Mar 21, 2026
bbcfd3c
84.5%: improve GRaceCustom::GetCheckpointDirection
JohnDeved Mar 21, 2026
c6b96b5
84.5%: improve GRaceCustom checkpoint helpers
JohnDeved Mar 21, 2026
9ff25b5
84.6%: improve GRaceStatus::ClearRacers
JohnDeved Mar 21, 2026
a1ba714
84.7%: improve GRaceStatus::RaceAbandoned
JohnDeved Mar 21, 2026
15687f7
84.7%: improve GRaceStatus::ClearRacers
JohnDeved Mar 21, 2026
3c0febc
84.8%: improve GRaceParameters::GetIsMiddayRace
JohnDeved Mar 21, 2026
93f811e
84.8%: match GRaceParameters::GetIsMiddayRace
JohnDeved Mar 21, 2026
86eaa6c
84.9%: match GRaceParameters::GetIsSunsetRace
JohnDeved Mar 21, 2026
87a78ec
84.9%: match GRaceParameters::GetNumOpponents
JohnDeved Mar 21, 2026
5016b54
85.0%: improve GRaceParameters::GetBarrierIsFlipped
JohnDeved Mar 21, 2026
0f0aed5
85.1%: improve GRaceParameters barrier marker accessors
JohnDeved Mar 21, 2026
c235511
85.1%: improve GRaceParameters::GetIsAvailable
JohnDeved Mar 21, 2026
fbcfbaa
85.2%: improve GRaceParameters lookup helpers
JohnDeved Mar 21, 2026
a6bb035
85.2%: match GRaceParameters::HasFinishLine
JohnDeved Mar 21, 2026
ea0be81
85.2%: improve GRaceParameters::GetRivalBestTime
JohnDeved Mar 21, 2026
7f8fa44
85.5%: improve GRaceParameters marker transform helpers
JohnDeved Mar 21, 2026
a961ee8
85.5%: improve GRaceParameters object lookup helpers
JohnDeved Mar 21, 2026
eeb131b
85.6%: improve GRaceStatus::GetRaceTimeRemaining
JohnDeved Mar 21, 2026
c00f051
85.6%: improve GRaceStatus::ClearTimes
JohnDeved Mar 21, 2026
6220057
85.7%: match GRaceStatus::GetWinningPlayerInfo
JohnDeved Mar 21, 2026
980e63d
85.8%: match+ GRaceStatus timer helpers
JohnDeved Mar 21, 2026
9667b16
85.8%: improve GRaceStatus lap time helpers
JohnDeved Mar 21, 2026
a0d372b
85.8%: improve GRaceStatus::DetermineRaceLength
JohnDeved Mar 21, 2026
9109b56
85.8%: improve GRaceStatus::Update(float)
JohnDeved Mar 21, 2026
f05e594
85.9%: match GRaceStatus::GetWorstLapTime
JohnDeved Mar 21, 2026
5010de6
85.9%: match GRaceStatus::GetBestLapTime
JohnDeved Mar 21, 2026
e74999f
85.9%: dwarf improve GRaceStatus::DetermineRaceLength
JohnDeved Mar 21, 2026
8107901
85.9%: improve GRacerInfo::Update
JohnDeved Mar 21, 2026
1cb14b5
85.9%: match GRacerInfo::StartRace
JohnDeved Mar 21, 2026
9cd5468
86.0%: match GRaceStatus::CanUnspawnRoamer
JohnDeved Mar 21, 2026
3667bc3
86.0%: match GRaceDatabase::BuildBinList
JohnDeved Mar 21, 2026
a9a73f2
86.0%: match+ GRaceDatabase::ClearStartupRace
JohnDeved Mar 21, 2026
5514395
86.0%: match GRaceDatabase::NotifyVaultUnloading
JohnDeved Mar 21, 2026
62baddc
86.1%: improve GManager::OnQueryVehicleCache
JohnDeved Mar 21, 2026
dba8377
86.1%: dwarf improve GManager::OnQueryVehicleCache
JohnDeved Mar 21, 2026
29bae87
86.1%: improve GManager::OnQueryVehicleCache
JohnDeved Mar 21, 2026
127104c
86.1%: dwarf improve GManager::OnQueryVehicleCache
JohnDeved Mar 21, 2026
5f9028e
86.1%: improve GTrigger::GTrigger
JohnDeved Mar 21, 2026
2bb0eb0
86.2%: improve GManager::GetObjectStateBlock
JohnDeved Mar 21, 2026
8a6b92f
86.2%: improve GManager::CalcMapCoordsForMarker
JohnDeved Mar 21, 2026
1ce7e27
86.2%: improve GManager::SaveGameplayData
JohnDeved Mar 21, 2026
fa41fea
86.3%: improve GManager::UpdatePursuit
JohnDeved Mar 21, 2026
123761d
86.3%: improve GManager::UpdatePursuit
JohnDeved Mar 21, 2026
35c197f
86.3%: improve GManager::GetRespawnLocation
JohnDeved Mar 21, 2026
a46fc5f
86.3%: improve GManager::CalcMapCoordsForMarker
JohnDeved Mar 21, 2026
6809c81
86.3%: improve GManager::CalcMapCoordsForMarker
JohnDeved Mar 21, 2026
1fe60d7
86.3%: improve GManager::GetRespawnLocation
JohnDeved Mar 21, 2026
4753903
86.3%: improve GManager::GetRespawnLocation
JohnDeved Mar 21, 2026
9c4ff3a
Revert "86.3%: improve GManager::GetRespawnLocation"
JohnDeved Mar 21, 2026
80c9c3d
86.3%: improve GRaceParameters::ExtractDirection
JohnDeved Mar 21, 2026
f7a998c
86.5%: match GManager::ConnectRuntimeInstances
JohnDeved Mar 21, 2026
24d33fb
86.6%: match+ GActivity::HandleMessage
JohnDeved Mar 21, 2026
c64f1de
86.6%: improve GRaceStatus::CalculateRankings
JohnDeved Mar 21, 2026
d754f05
86.6%: improve GRaceStatus::SetRoaming
JohnDeved Mar 21, 2026
2df6a2e
86.7%: improve GRaceStatus::Update
JohnDeved Mar 21, 2026
1c0b75a
86.7%: improve GActivity::SerializeVars
JohnDeved Mar 21, 2026
ecba995
86.8%: match GActivity::SerializeVars
JohnDeved Mar 21, 2026
d945ff1
86.8%: improve GRacerInfo::FinalizeRaceStats
JohnDeved Mar 21, 2026
b22b69e
86.9%: improve GRacerInfo::FinalizeRaceStats
JohnDeved Mar 21, 2026
6bf6952
86.9%: match GRacerInfo::FinalizeRaceStats
JohnDeved Mar 21, 2026
df0a9e0
86.9%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 21, 2026
15fa5fe
87.0%: improve GManager::RefreshEngageTriggerIcons
JohnDeved Mar 21, 2026
e0e697e
87.0%: match GManager::RefreshEngageTriggerIcons
JohnDeved Mar 21, 2026
48e57a3
87.0%: improve GRacerInfo::SaveStartPosition
JohnDeved Mar 21, 2026
a9a0c0b
87.1%: match+ GRacerInfo::SaveStartPosition
JohnDeved Mar 21, 2026
ba1de57
87.1%: match GActivity::CollectionIsHandlerForState
JohnDeved Mar 21, 2026
b3c383a
87.2%: match GIcon::SnapToGround
JohnDeved Mar 21, 2026
3924b4f
87.3%: improve GVault::PreloadTransient
JohnDeved Mar 21, 2026
cbcefa2
87.3%: improve GVault::PreloadTransient
JohnDeved Mar 21, 2026
0cee853
87.3%: improve GVault::PreloadTransient
JohnDeved Mar 21, 2026
37ca7bf
87.4%: improve GRaceStatus::SetRoaming
JohnDeved Mar 21, 2026
b08de50
87.5%: match+ GManager::ReleaseStockCar
JohnDeved Mar 21, 2026
0791c1b
87.5%: improve GManager::SaveGameplayData
JohnDeved Mar 21, 2026
eb9e45f
87.5%: improve GManager::CalcMapCoordsForMarker
JohnDeved Mar 21, 2026
dc01de1
87.5%: improve GManager::LoadGameplayData
JohnDeved Mar 21, 2026
34c920f
87.5%: improve GManager::LoadGameplayData
JohnDeved Mar 21, 2026
dbce564
87.5%: dwarf improve GManager::LoadGameplayData
JohnDeved Mar 21, 2026
115e684
87.5%: dwarf improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 21, 2026
23b8c42
87.6%: improve GManager::LoadGameplayData
JohnDeved Mar 21, 2026
eb2c5b9
87.6%: improve GManager::LoadGameplayData
JohnDeved Mar 21, 2026
0059686
87.6%: dwarf improve GManager::LoadGameplayData
JohnDeved Mar 21, 2026
80d31c0
87.6%: dwarf improve GManager::LoadGameplayData
JohnDeved Mar 21, 2026
045580d
87.6%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 21, 2026
99f9632
87.6%: improve GManager::DefragObjectStateStorage
JohnDeved Mar 21, 2026
55b5763
87.6%: improve GManager::DefragObjectStateStorage
JohnDeved Mar 21, 2026
8e6ff04
87.6%: improve GManager::DefragObjectStateStorage
JohnDeved Mar 21, 2026
2a3fa50
87.6%: improve GManager::DefragObjectStateStorage
JohnDeved Mar 21, 2026
5444752
87.7%: match+ GManager::FindInstance
JohnDeved Mar 21, 2026
0b8e779
87.7%: improve GRaceParameters::NotifyParentVaultUnloading
JohnDeved Mar 21, 2026
70b1e07
87.9%: match GRaceStatus::EnableBarriers
JohnDeved Mar 21, 2026
3a2870b
88.0%: match+ GRaceStatus::DisableBarriers
JohnDeved Mar 21, 2026
22a06f6
87.9%: match+ GRaceStatus::EnableBinBarriers
JohnDeved Mar 21, 2026
64f95eb
87.9%: match+ GRaceBin::GetBarrierCount
JohnDeved Mar 21, 2026
e97f321
87.9%: match GRaceBin::GetBarrierIsFlipped
JohnDeved Mar 21, 2026
9d36d78
87.9%: match GRaceParameters::GetBarrierIsFlipped
JohnDeved Mar 21, 2026
ba35432
88.1%: improve FindInstances
JohnDeved Mar 21, 2026
c291e8e
88.1%: improve FindInstances local order
JohnDeved Mar 21, 2026
2f8ab22
88.1%: match+ GManager release cleanups
JohnDeved Mar 21, 2026
e0ae205
88.1%: match+ GManager::ReleaseObjectStateStorage
JohnDeved Mar 21, 2026
b32dcc0
88.1%: match+ GManager::ResetAllGameplayData
JohnDeved Mar 21, 2026
c70fc3d
88.1%: match+ GManager::UnloadTransientVaults
JohnDeved Mar 21, 2026
b00ee41
88.1%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 21, 2026
0a29d95
88.2%: match GManager::ConnectChildren
JohnDeved Mar 21, 2026
18b4f6d
88.2%: match+ GManager::PreBeginGameplay
JohnDeved Mar 21, 2026
c66ab1f
dwarf TU scan tool
JohnDeved Mar 21, 2026
cf579e8
88.2%: match+ GManager::FindVault
JohnDeved Mar 21, 2026
6ec341c
88.2%: match GRaceStatus::SetRacing
JohnDeved Mar 21, 2026
ecb459d
88.2%: improve GRaceStatus::OnQueryVehicleCache
JohnDeved Mar 21, 2026
97a7091
88.2%: match+ GRaceStatus::Shutdown
JohnDeved Mar 21, 2026
63f66a9
88.2%: match+ GRaceStatus::RaceAbandoned
JohnDeved Mar 21, 2026
cfa7f81
88.2%: match+ GRaceStatus::OnQueryVehicleCache
JohnDeved Mar 21, 2026
f533728
88.2%: match+ GEventTimer::SetName
JohnDeved Mar 21, 2026
55faa9a
88.2%: match+ GEventTimer::Update
JohnDeved Mar 21, 2026
fdd247e
88.2%: match+ GEventTimer::Deserialize
JohnDeved Mar 21, 2026
72e570c
88.2%: match+ GObjectBlock::~GObjectBlock
JohnDeved Mar 21, 2026
e824f61
88.2%: match+ GRaceStatus::ClearRacers
JohnDeved Mar 21, 2026
96a30e7
88.2%: match+ GRacerInfo::AddToPointTotal
JohnDeved Mar 21, 2026
2d14026
88.2%: match+ GRaceStatus::GetAdaptiveDifficutly
JohnDeved Mar 21, 2026
3437cb9
88.3%: improve GRaceStatus::GetBestSpeedTrapSpeed
JohnDeved Mar 21, 2026
28d9a79
88.4%: match+ GRaceStatus::GetRaceSpeedTrapSpeed
JohnDeved Mar 21, 2026
392e773
88.4%: match+ GRaceStatus::GetBestLapTime
JohnDeved Mar 21, 2026
f102386
88.4%: match+ GRaceStatus::GetBestSpeedTrapSpeed
JohnDeved Mar 21, 2026
bd31bda
88.5%: match+ GRaceStatus::GetLapTime
JohnDeved Mar 21, 2026
9a55322
88.5%: match+ GRaceStatus::GetLapPosition
JohnDeved Mar 21, 2026
b4be1c9
88.5%: improve GManager::GetRespawnLocation
JohnDeved Mar 21, 2026
9448fa6
88.5%: match+ GRaceDatabase::SetStartupRace
JohnDeved Mar 21, 2026
a91bd8e
88.5%: restore GRaceBin::GetBarrierHash
JohnDeved Mar 21, 2026
36461f7
88.5%: match+ GManager::NotifyPursuitStarted
JohnDeved Mar 21, 2026
2d3ade1
88.6%: match+ GRaceStatus::GetRacerInfo
JohnDeved Mar 21, 2026
ab08e70
88.6%: match+ GHandler::Detach
JohnDeved Mar 21, 2026
1bf8c9a
88.6%: match+ GHandler::HandleMessage
JohnDeved Mar 21, 2026
d8f415d
88.6%: match GRacerInfo::IsBehind
JohnDeved Mar 21, 2026
27ea99b
88.6%: improve GRaceStatus::DetermineRaceSegmentLength
JohnDeved Mar 21, 2026
3318d56
88.6%: match+ GRaceStatus::ClearTimes
JohnDeved Mar 21, 2026
c7846cb
88.6%: match+ GObjectBlock::CalcSpaceRequired
JohnDeved Mar 21, 2026
6c9ee0f
88.6%: match+ GRaceDatabase::ClearRaceScores
JohnDeved Mar 21, 2026
f72feb8
88.6%: match GManager::CanPlaySMS
JohnDeved Mar 21, 2026
7191c60
88.6%: match GObjectBlock::CollectionIsInstanceOfTemplate
JohnDeved Mar 21, 2026
ec372a9
88.6%: match+ GManager::BeginGameplay
JohnDeved Mar 21, 2026
7af8fb3
88.6%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 21, 2026
c65ae9c
88.6%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 21, 2026
545760d
88.6%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 21, 2026
14aa4bf
88.6%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 21, 2026
0ee4ae0
88.7%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 21, 2026
cded525
88.7%: improve GTrigger::GTrigger
JohnDeved Mar 21, 2026
96820c6
88.7%: improve GTrigger::GTrigger
JohnDeved Mar 21, 2026
8799283
88.7%: improve GRaceCustom::GRaceCustom
JohnDeved Mar 21, 2026
20c5423
88.7%: match GRaceCustom::GRaceCustom
JohnDeved Mar 21, 2026
b181b68
88.8%: improve GManager::GetRespawnLocation
JohnDeved Mar 21, 2026
0590f64
88.9%: match GManager::AllocateMilestones
JohnDeved Mar 21, 2026
217e8cd
89.0%: match GManager::AllocateSpeedTraps
JohnDeved Mar 21, 2026
2b6d7b0
89.0%: match GManager::ResetSpeedTraps
JohnDeved Mar 21, 2026
c436ab1
89.0%: match GManager::FindBountySpawnPoints
JohnDeved Mar 21, 2026
527dbfd
89.1%: improve GObjectBlock::CreateObjects
JohnDeved Mar 21, 2026
004aeb6
89.2%: improve GHandler::MessagePassesFilters
JohnDeved Mar 21, 2026
855cd4b
89.2%: improve GRaceStatus::GRaceStatus
JohnDeved Mar 21, 2026
3ae3986
89.2%: match+ GManager::WarpToMarker
JohnDeved Mar 21, 2026
170fd22
89.3%: match+ GRaceBin::RefreshProgress
JohnDeved Mar 21, 2026
4c3d497
89.4%: improve GManager::UpdatePursuit
JohnDeved Mar 21, 2026
225c19b
89.5%: match+ GManager::GManager
JohnDeved Mar 21, 2026
785d706
89.5%: match+ GActivity::Run
JohnDeved Mar 21, 2026
01e017d
89.6%: match+ GManager::ClearStockCars
JohnDeved Mar 21, 2026
765294b
89.6%: improve GHandler::Attach
JohnDeved Mar 22, 2026
d89f702
89.7%: match GManager::IncValue
JohnDeved Mar 22, 2026
8ced866
89.8%: match+ GManager::StockCarsLoaded
JohnDeved Mar 22, 2026
362eed0
89.8%: match+ GManager::GetNextSpeedTrap
JohnDeved Mar 22, 2026
f1c02a3
89.8%: improve GManager::UpdatePursuit
JohnDeved Mar 22, 2026
63a5a2e
89.8%: improve GManager::UpdatePursuit
JohnDeved Mar 22, 2026
d34a871
89.9%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 22, 2026
dd600ba
89.9%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
bfad831
89.9%: dwarf improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
8e2176f
89.9%: dwarf improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
f5193a3
89.9%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
7373093
89.9%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
f15609e
90.0%: improve GRaceCustom::CreateRaceActivity
JohnDeved Mar 22, 2026
e1d4da6
90.0%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
22aabb2
90.0%: improve GHandler::MessagePassesFilters
JohnDeved Mar 22, 2026
32ce87c
90.0%: improve GManager::RecursivePreloadCharacterCars
JohnDeved Mar 22, 2026
211f51b
90.1%: improve GManager::GetRandomEmergencyStockCar
JohnDeved Mar 22, 2026
05bd59c
90.1%: match GManager::GetRandomEmergencyStockCar
JohnDeved Mar 22, 2026
fa63af3
90.1%: improve GRaceStatus::ComputeCatchUpSkill
JohnDeved Mar 22, 2026
36c29d4
90.2%: improve GRaceStatus::ComputeCatchUpSkill
JohnDeved Mar 22, 2026
586a268
90.2%: improve GRaceStatus::ComputeCatchUpSkill
JohnDeved Mar 22, 2026
7e234b2
90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
13237af
90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
29ab414
90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
5d1be13
90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 2026
8c640c4
90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty
JohnDeved Mar 22, 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
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
42 changes: 41 additions & 1 deletion .github/skills/code_style/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,15 @@ In this repo, style cleanup must preserve decomp progress.
- If a style tweak changes codegen or match status, revert it.
- Extend this skill only from patterns you actually verified in the repo.

### Authenticity Over Hacks

A 100% match is the goal, but **how** we get there matters just as much.

- Do not use "any means necessary" to force a match if it results in unreadable or unnatural code.
- Always think about what the original code probably looked like and write it that way.
- Even if a function matches 100% binary-wise, it is not "correct" if the source is unreadable or contains logic that no human developer would have written.
- If you find a stubborn mismatch, look for a more natural C++ expression or a different architectural pattern instead of resorting to opaque hacks.

## Quick Tooling

Use the repo-local helper before doing a style pass:
Expand All @@ -31,7 +40,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 +104,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 +134,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 +154,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 +206,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
.DS_Store
Loading
Loading