Skip to content

Commit e23e7b7

Browse files
authored
Refactor code base (isledecomp#500)
* Name remaining race/powerups placeholders; drop orphan interface shapes - GrapplingHookAction: Shutdown/ReleaseHook, hook entity/billboard/smoke members, state + sound enums, rope/aim/pull constants - HomingMissileAction: Shutdown/LaunchProjectile, missile entity/trail/index, targeting cone + sound distance constants; HomingProjectile targeting params - Manager: p_level on all fire/use methods, ReclaimAction levels, Draw(p_warpOnly), Params fields, aim/dynamite/hook target-acquisition globals, brick-color switch cases - TargetPointList::Entry::Set + m_position/m_index; Field0x2804::Load; TgbTxtParser token enum (e_target/e_position/e_index) - Curse/Oil/Magnet/Dynamite/Turbo/Shield/Cannonball/Lightning/Warp/Tether/ColorBrick/ PickupBrick/BrickDebris signature params; template-entity params named per consumer - WarpAction::TeleportEntity; RaceCameraController::m_targetFov; CutsceneParticleRef m_particle/m_flags/c_flagInUse; GolBoundingVolume::Field0x0c::m_normal - Brick scale/drop + lightning chain/reach + warp sound/fov/launch constants - Delete unused RacePowerupManager::Field0x54/Field0x1968 and ShieldAction::Field0x18 * Name RaceState racer-search and route-record family - FindRacerInCone/FindNextRacerInCone/FindFarthestRacerInCone/FindNearestRacerInCone/ FindNearestRacerInRange with min/max distance-squared + cone-cosine params - GetTimeBehind (lap-crossing HUD delta), ComputeStandingsDeltas (+ Racer wrapper), FindNearestRouteRecord - RaceRouteRecord m_pathPoints/m_pathPointCount * Name route playback cursor and RRB record fields - RouteCursor (was Field0x74c): Attach/AttachAtLoop/Advance/SeekByDelta; segment interpolation members (start/end position+rotation+index, playback speed, corridor widths) - RaceRouteRecord: Load/Destroy/Reset/ParsePathPoints; start + loop transform fields; RrbTxtParser token enum (0x27-0x2d) - PathPoint::Load + GetWidthLeft/GetWidthRight; path quantization scale globals * W1 audit: name cheat flags, stereo/mono, lap count settings - Cheat-code flag enum moved to app/cheatflags.h; Context::m_cheatFlags, powerup manager m_cheatFlags (color-forcing masks spelled as c_pgllrd etc.), turbo fly-high check uses c_flyskyhgh - Context::m_useBinaryFiles (passed as p_binary everywhere), m_lapCount - PersistentGameState::m_stereo/m_lapCount + GameState accessors (options screen STEREO/MONO toggle and 1-5 lap carousel per MENUTEXT.SRF) - SoundManager::m_flags + c_flagMono + Set/ClearMonoFlag - RaceSession::m_lapCount * Name Racer::Field0x018 (car visuals holder) - Entities: body model (leaning visual), car entity (physics-driven), driver entity (reaction/celebration part animations), curse skull entity, entity group - Effects: per-wheel skid marks/particles, dust/tire-smoke/car-smoke particles, turbo skid material swap, slide skids, impostor billboard render, shadow decal projection + camera-distance fade, color transform + flash - Driver animation state machine decoded (reverse look-back, lean, look-at-nearby, crash-stop, finish celebrations); body lean springs (pitch/roll) - Racer::m_soundSource/m_raceState; wheel contact records + on-ground flag * Name racer subsystem classes; start race/racer/ split - Field0x018 -> CarVisuals, Field0x004 -> SoundSource, Field0xc70 -> DriveController, Field0x3e8 -> Physics (+ PhysicsBase chain), Field0x1dc -> PhysicsView, Field0x1a4 -> WheelContact, Field0x00c -> Records - RaceSessionField0x27d4::Item::Field0x004 -> Decal (collision repair) - racervisuals.cpp split out of racestate.cpp; routecursor/racerouterecord/ racerphysics(+helpers)/drivecontroller files moved into race/racer/ * Name Racer state flags and lifecycle methods - d04 bits: shielded/halted/ghost/turbo/drifting/cursed - Halt/Resume (was misnamed EndTurbo), Enter/LeaveGhostMode, StartDrift/EndDrift (drift input flag + skid/sound wiring) - m_turboTimerMs, m_curseTimerMs, m_curseTickMs * Name Racer sound/timer subsystem - SpatialSoundResource (was Field0xd8c); turbo L0-L2 + ghost loop sounds, engine idle/drive/fast crossfade (active index + per-engine volumes), curse loop sound - UpdateTimers/UpdateEngineSound/UpdateSpatialSounds/UpdateCarAnimation/ UpdateDriftLean/InitializeSounds/ResetRaceProgress - Cooldowns: taunt/reaction/scrape-sound; airborne accumulator; speed-ramp recovery timer + c_flagSpeedRamping; AI powerup-use check interval - m_turboLevel (fixes earlier m_turboTimerMs misname), m_controlMode, m_lapTransitionCount, c_flagPreStart, c_flagEngineSounds * Name racer collision response and shove mechanism - Rigid-body collision callback decoded: contact point/normal/penetration depth, inverse inertia tensor on event targets, restitution constant - ApplyShove (timed grab-release impulse shared by tether and shield shove), c_flagShoveActive, m_shoveReleaseAction; StopEngineSounds - Collapse bogus Racer unions (m_soundSource, m_raceState); racer context m_resourceMgr properly typed as SoundSource* * Name racer AI powerup brain and cheat flag mirrors - AiConsiderPowerup/AiUsePowerup: per-color use-chance bytes (driver stats), charge-up color/target (wait for more white bricks), 20-effect-entity cap - Racer cheat mirrors c_flagCheatRedOnly/MaxPowerups/FastForward (auto turbo L2) - m_whiteBricks/m_whiteBrickCount, m_voiceBank, CollectColorBrick(p_brickColor) * Name checkpoint graph (.cpb) and racer progress tracking - CheckpointGraph (was RaceSessionField0x27f4): Entry plane normal/distance, position, lap fraction, successor indices; CpbTxtParser token enum; Load/ GetCheckpoint; file renamed checkpointgraph.{h,cpp} - Racer: OnCheckpointCrossed (forward/backward crossing +/- with pending flag), GetRaceProgress (checkpoints + fraction), m_checkpoint/m_checkpointForward/ m_checkpointCount/m_checkpointGraph, wrong-way detector flags + timer, look-target API (Set/Clear/UpdateLookTarget + left/right flags), SwitchToAiControl, OnRaceStart (AI start boost), StartEngine - DriveController::m_driveValue * Name finish-line zones, camera view API, race setup block - Finish-line zone state machine (open track / finish zone / post-line zone history; CrossFinishLine validates lap + records time behind) - PlayTaunt (per-driver taunt sound id), UpdateFacing, SetStandingsPosition (m_lapTimes[5] = standings position; reactions on position change), AbsorbShieldHit distances/cooldown - Camera: SetCameraView/ReapplyCameraView/CycleCameraView/InvalidateCamera, m_cameraViewIndex - RaceSetup (was Field0x284): roster + pacing update + texture list/material library/lap count * Name racer creation pipeline - RaceState::CreateRacers/CreateRacer (driver cosmetic + champion + chassis table wiring, per-racer 'carshadN' shadow texture/material, placement slots) - Racer::Initialize; g_racerDatabaseNames (drivers/champs/chassis) - CarVisuals shadow texture/material re-rename (impostor renders into the per-racer shadow texture) * Name race update loop, standings, start positions - LoadStartPositions (.spb + SpbTxtParser token enum), UpdateRacers (controller mode dispatch, physics step, drift lean, event dispatch, anims, sounds, timers), UpdateStandings (progress sort + checkpoint-plane tie-break + passing-car proximity sound), StartRace, UpdateShadows, DrawRacersTransparent, DrawRacerEntities (cockpit view hides own car), InitializeRacerVisuals - c_flagFinished (bit12: frozen standings, louder engine, cockpit-view rule) - RacerProgressEntry m_progress/m_tieBreakDistance; m_enginePitchScale * Name Racer::Initialize internals - Driver stats array feeds AI per-color use chances (scaled+biased+clamped); voice bank -> per-driver taunt sound id table; racer lap count copy - m_powerupManager (0x008), m_displayNameBuffer; InitializePhysics - Cheat mirror fixes: bit27 is FLYSKYHGH (constant turbo L2 = fly), bit26 is NSLWJ; context flags0x3c bit positions match cheatflags.h values * Name racer physics engine, drive controller, and racer structural cleanup Physics chain: PhysicsBase0xd0/0xe4/0x74c -> RigidBody/BoxBody/CarBody with full member/method naming (force/torque accumulators, inertia tensors, wheel ground probes, surface handling params, wall collision resolution with plane cache and save/restore state, roll/pitch/yaw impulse timers, slide lift/bank, powerslide, boost/curse-slow/route-ghost, route playback motion). DriveController fully named (steering curve, drift boost, curse-reversed controls, stuck-reverse, return-to-path autopilot, brake-to-stop). Structural: CarVisuals::PhysicsView + WheelContact view classes deleted (aliased Physics at shifted offsets); Field0x371c0/Field0x371c0Vehicle/ Field0x36df0Params unions flattened into RacerContext view + Racer::SetupParams; Racer::Records deleted (Entry promoted into RaceRouteRecord, StandingsDeltaEntry hoisted); RaceActionSource0x24 -> RaceActionSource (m_right -> m_forward, it holds the facing direction); Field0x0f0 -> RaceRoster; c_flags0xaa8* aliases replaced by Physics::c_flag* (they were physics 0x6c0 bits at racer offset 0xaa8); racer flag word m_unk0xd04 -> m_flags with cheat/ghost bits spelled. All 4562 LEGORACERS entries byte-identical to baseline; datacmp/vtable/folded/ decomplint clean. * Name racer data tables, roster broadphase, engine sounds, and W3 residue DriverCosmeticTable::Entry stats (red/yellow/green/blue AI-use stats, voice bank index, champion/chassis refs), ChassisModelTable::Item (wheel offsets + physics wheel positions, center of mass, base mass, shadow/skid dims, engine pitch, handling/acceleration/topSpeed stats), ChampionDefinition (chassis name, mass, center of mass). RaceRoster sweep-and-prune racer collision broadphase (X-sorted body event list: SortBodyEvents/TestRacerCollisions/ PruneBodyEvents). SoundSource::ResolveSoundId (id ranges -> sound groups). CheckpointGraph::AdvanceAlongGraph (warp path walk). Engine/brake sound constants and m_brakeSound; rubber-band boost; player racer slots; secondary chassis model entity; ~90 semantic parameter names across physics/drive controller/visuals; racestate support files renamed (racersoundsource.cpp, racestatequeries.cpp, checkpointgraphwalk.cpp, raceroster.cpp). All 4562 entries byte-identical; datacmp/vtable/folded/decomplint clean. * Name the track hazard system (.hzb): HazardManager + 21 hazard types RaceEventDispatcher0x08 -> HazardManager (loads .hzb hazard instances, fans out event start/end notifications, per-frame Update/UpdatePerRacer/Draw). Item -> Hazard base (m_eventTable/m_triggerId/m_state, OnActivate/OnDeactivate/ Load/Update/UpdatePerRacer/Draw/CanRetrigger/ResetState/OnEventStart/OnEventEnd slots). Hazard types named from model/particle/sound evidence: WarpPadHazard (warps racers), OscillatorHazard (bobbing node), FallingPillarHazard (piltop/ pilcol), SphinxHazard (sphinx blowup), HammerHazard (rkhamm), GhostHazard (ghostly + gtrail ribbon + spooky sounds, spins out racers), LavaGeyserHazard (mmlavbl/lavasmk), CodePuzzleHazard (mmcode1-3 door code), RocketHazard (mmrocon/off), SnowfallHazard, SmokeVentHazard (dp_def), MovingObstacleHazard (shadow decal + contact spin), Launcher/MultiLauncherHazard (cannonb projectile emitters), TriggeredAnimationHazard, RollingRockHazard (rk* BoxBody physics rock), CurseDropHazard, SweepCannonHazard (oscillating red-powerup cannon), CannonballRainHazard, GrabberHazard. Context fields/getters named; the three identical nested collision-flag records unified into HazardManager:: ColliderRecord. Files: hazardmanager.{h,cpp}. All 4562 entries byte-identical; datacmp/vtable/folded/decomplint clean. * Name RaceEventTable0x90 dispatch methods StartEventsAt/EndEventsAt/FireEventsAt (position variants), StartEventsForRacer/ EndEventsForRacer/FireEventsForRacer, ForceEvents (state 5 + hazard force); EntryBase::OnEventStart/OnEventEnd/ForceEventStart/ForceEventEnd. The table fans event ids out over its 13 typed resource arrays and the HazardManager. All 4562 entries byte-identical. * Merge Field0x2098 + RaceEventTable0x90 into RaceEventTable; name resources RaceSession::Field0x2098 embedded RaceEventTable0x90 at offset 0 behind a union (the generic-entry dispatch view of the same object, wired through a (RaceEventTable0x90*) cast). Merged into one top-level RaceEventTable (.evb): 13 typed resource arrays + counts (m_sounds/m_partAnimations/ m_materialAnimations/m_particles/m_eventLinks/m_skyStates/m_timers/ m_nodeTransforms/m_colorTransforms/m_lapZones/m_modelDistances/m_lookTargets/ m_externalForces) with the duplicate Entry0xNN shells deleted. Resource kinds named: SoundResource, PartAnimationResource, MaterialAnimationResource, ParticleResource, SkyStateResource, TimerResource (min-duration hold gate), NodeTransformResource, ColorTransformResource (tint zones), LapZoneResource (drives EnterOpenTrack/CrossFinishLine/EnterPostLineZone), ModelDistanceResource, LookTargetResource (racer look-at), ExternalForceResource (physics force channels), EventLink (event id -> forced event chains). Resource base slots: OnStartForRacer/OnStartAt/OnEndForRacer/OnEnd/Update/GetKind + OnEventStart/ OnEventEnd/Force* helpers + NotifyStateChange (fires per-state chained ids). Parsers named per kind; Field0x24 target view replaced by RacePowerupManager::TargetPointList (+ DisableTargetPoints). RaceSession:: Field0x2f90 hoisted to top-level RaceSkyState (racesky.h). RaceSessionField0x32b4 -> TriggerWorld (Initialize/IntersectSegment). Files: raceeventtable.{h,cpp}, raceeventtabledispatch.cpp, lapzoneresource.cpp, colortransformresource.cpp, triggerworld.{h,cpp}. All 4562 entries byte-identical; datacmp/vtable/folded/decomplint clean. * Name hazard members and RaceEventRecord surface fields Per-hazard member sweep across all 21 hazard types (triggers, entities, collision events, particle/sound handles, sweep-cannon timing, ghost trail state, launcher positions/event ids, grabber state). RaceEventRecord::m_kind (the surface event kind char) and Target fields named from their consumers: m_enterEventId/m_leaveEventId/m_touchEventId, m_surfaceForce, m_surfaceSoundId, m_wheelParticleName, and the wheel handling params m_supportThreshold/ m_friction/m_lateralGrip/m_rollingResistance mapped 1:1 onto WheelProbe; flags spelled (c_flagEnterEvent..c_flagRollingResistance, c_flagNonSolid, c_flagFinish). All 4562 entries byte-identical; datacmp/vtable/decomplint clean. * Name event resource payload fields SoundResource (sound id/volume/frequency/distance range/probability/position), TimerResource (hold event id + duration), LookTargetResource position, ExternalForceResource (force vector/channel/arm event id), LapZoneResource zone, ParticleResource (particle name/handle/tracked entity/node index), ColorTransformResource (transform + tinted entity). All 4562 entries byte-identical. * Name RaceForceFeedback, RaceCameraController, and the RaceSession hub Force feedback: pulse state machine (on/off/total ms), continuous surface rumble from wheel rolling resistance, turbo/reaction/light/scrape rumbles, and the DirectInput sine engine-vibration effect (pause/resume on focus). Camera controller: view profiles table (pitch/height angles, follow distance, position/rotation exponential lag), raw->smoothed transform pipeline, shake state, look-back, audio listener node updates; racesessionfield0x2ad4.cpp -> racecameracontroller.cpp, racesessionfield0x340.cpp -> raceforcefeedback.cpp. RaceSession hub: the ~30 thirteen-byte .rab asset-name slots named by their consumers (world/sky/track model/collision+trigger worlds/powerup+turbo DBs/ event/hazard/checkpoint/targets/start positions/fonts/images/music/sound banks/camera), world database and sub-object members named (m_powerupManager, m_hazardManager, m_decalManager, m_checkpointGraph, m_targetPoints, m_trails, m_cameras + m_cameraControllers, m_skyState, m_triggerWorld, m_soundSource, m_musicGroup, m_playerControls, m_forceFeedback, HUD font/image tables). All 4562 entries byte-identical; datacmp/vtable/decomplint clean. * Name PlayerControls (per-player race input dispatch) RaceSession::Field0x258 -> PlayerControls: analog throttle axis + button handlers (steer left/right, throttle w/ hold tracking, brake that finishes an active spin at alignment, use-powerup, camera cycle, trail cycle, look-back), the pre-start boost window (hold throttle before GO -> green boost), and the per-player update pipeline. File playercontrols.cpp. All 4562 entries byte-identical. * Name session trigger/timer/surface/input/reset/collision subsystems - TriggerList + RacerTriggerList (ex Field0x2128/0x2080): entry virtuals Destroy/Update/Reset, projectile-vs-racer trigger registration, collision-world activation and lap gating; file triggerlists.cpp - RaceTimerList (ex Field0x213c): on/off duration timer resources with randomized phases and initial delay; file racetimerlist.cpp - SurfaceTable (ex Field0x27e0): named .tmb flag enums, Unload wrapper; file surfacetable.cpp - PlayerControls::InputState (ex Field0x04): binding table + input state (pre-start boost arming, AI-control state, SideWinder analog throttle); OnDrift proven by c_inputFlagDrift - RaceInputRouter (ex Field0x23c): device routing to InputState sinks; file raceinputrouter.cpp - RacerCollisionWorlds (ex Field0x32c4): per-racer world TTL activation, c_activationTtl=150; file racercollisionworlds.cpp - LoadingScreen: tick image, Destroy; file loadingscreen.cpp - RaceReset/RaceSoundSource files racereset.cpp/racesoundsource.cpp - TimeRaceManager::ResetRun (ex FUN_004234f0) - Session members m_triggers/m_racerTriggers/m_timers/m_surfaceTable/ m_racerCollisionWorlds/m_inputRouter * Name session run loop, decals, sky, dialog, loaders - RaceDecalManager (ex RaceSessionField0x27d4): Trail items with 3-slot segment ring (AddSample/BakeSegment/WeldVertices, fade alpha), Decal projector (Project/BeginGeometry/ProcessGroups/EmitTriangle/FlushBatch, UV projection globals); skid marks + oil/scorch/shadow decals; files racedecalmanager.cpp + racedecal.cpp - RaceSkyState: 3-band gradient dome (top/middle/bottom keyframe colors), named-state transitions, ModelBuilder sphere generator; racesky.cpp - RaceDialog (ex SlateBridge0x68): in-race pause/confirm dialog with blinking selection; racedialog.cpp - RaceSession: full method naming - lifecycle (Reset/AttachContext/ InitializeSound/LoadStringsAndFonts/LoadHudImages/LoadDatabases/ LoadRouteRecords/LoadRaceContent/CreateCameras/InitializeInput + Destroy counterparts), state machine (UpdateIntroState/Countdown/ Racing/Finished/Results), draw chain (Draw/DrawScene/DrawTransparent/ DrawHuds/DrawOverlaysForStateN/DrawDemoText/DrawLoadProgress), pause flow (OpenPauseDialog/ProcessPauseDialog/RestartRace), OnKeyDown/OnKeyUp virtuals, BindSurfaceMaterials/TakeScreenshot - Session members: camera start pose, map bounds, fonts, m_demoMode/ m_splitScreen/m_pauseState/m_finishedCount/m_musicVolume etc. - RaceSession::TargetPointList (ex Field0x2804); targetpointlist.cpp - Param/context field fixes: HazardManager::Context m_triggerWorld (was misnamed m_skyState), RaceEventTable Params/InitParams, RacerContext::m_surfaceTable, CreateRacersParams::m_splitScreen * Name RaceHud (ex CobaltTrail0x140) and RaceTrailManager internals - RaceHud: countdown/GO banner, lap & position panels with pulse anim, best/total/behind time rows, wrong-way warning, powerup panel with brick-level colors, gadget cycle (fixed map / speedometer / rotating map), minimap triangle clip pipeline, map arrow; racehud.{h,cpp} - Racer::m_hud (ex m_trail), CycleHudGadget (ex FUN_0043a0c0), PlayerControls::OnCycleHud; session m_huds/m_hudScratchString; session map bounds m_mapMinX/m_mapMaxX corrected via HUD math - RaceTrailManager::Trail: ribbon trail (Sample ring with per-sample points[5]+center, head/tail indices, taper via m_endScale/m_endAlpha, AdvanceTail drain, RebuildGeometry ribbon mesh); Acquire/ReleaseTrail; used by turbo boost, cannonball, homing missile, ghost hazard * Name DecalGeometry, CarShadowRenderState, CircuitStandings; split racer.cpp - DecalGeometry (ex MarblePath0x114): decal mesh buffer base with batch counters, projection basis (width/length axes + normal), W-row globals proven as constant projection row; decalgeometry.{h,cpp} - CarShadowRenderState (ex RacerBillboardRenderState0x33c): renders the car silhouette orthographically into the shadow texture (transparent fill + dark silhouette, per-bpp triangle rasterizers); impostor naming was a misnomer - Racer::CarVisuals::RenderShadowSilhouette - CircuitStandings: AwardPoints (30/20/10/3/2/1 by position), ClearRoundPoints, Update, Draw; m_font/m_raceState/m_stringTable - RaceRoster::m_racerEvents/m_soundSource; SetupParams::m_surfaceTable - racestate.cpp split at clean address boundary: RaceState::Racer methods (0x00436990-0x0043a400) now in race/racer/racer.cpp * Name menu resource/style/binding table internals - MenuResourceTable: Reset/CreateParser/ParseSection virtuals, BeginLoad/ReadHeader/ReadSectionCount/ParseSections, m_renderer/ m_loaded/m_entryCount/m_entryCapacity - MenuStyleTable: per-type Parse*/Load* methods, FindStyle fallback chain, style arrays m_imageStyles..m_iconStyles, m_fallback; style fields (ImageStyle m_image/m_color/m_hasColor, TextStyle m_font/m_color/m_hasColor, FrameStyle m_images/m_color0/m_color1/ m_hasColors, ButtonStyle m_stateImages, MultiStateStyle m_stateFonts/ m_rect, HotspotStyle m_image/m_hotspotCount/m_hotspotIds/ m_hotspotRects, SelectorStyle m_frameStyle, CompositeStyle m_stateImages/m_soundIds) - SharedMenuStyleTable: ParseTextButtonStyle/LoadTextButtonStyles, m_textButtonStyles - MenuInputBindingTable: per-widget Parse*Binding methods, InitIconDefaults/ParseIconField/ParseSelectorField - MenuGameScreen::ButtonBindingTable overrides follow * Name MenuManager internals and MenuGameContext fields - MenuManager: OpenScreen (screen factory + create params + input dispatcher wiring), SetupCamera, InitializeSaveSystem, PrepareRaceContext, LoadPartResources/ReleasePartResources, BuildPlayerCarModel/BuildPlayerDriverModel, ApplySettings, HasPendingMemoryCardSaves, CommitBestTimes, ProcessRecordBeaten, TakeScreenshot; m_gameContext/m_screenFactory/m_dialog/m_screenName/ m_cursorImageName/m_screenCreateParams/m_activeScreen - MenuGameContext::m_carBuildModel/m_colorTable * Name MenuWidget virtual slots and base members across widget tree - MenuWidget virtuals: Destroy(0x08)/SetRect(0x10)/SetColor(0x14)/ BroadcastEvent(0x18)/Draw(0x1c)/DispatchCursorEvent(0x20)/ DispatchKeyDown(0x24)/DispatchKeyUp(0x28)/OnCursorEvent(0x2c)/ OnKeyDown(0x30)/OnKeyUp(0x34)/DrawSelf(0x38)/OnEvent(0x3c), renamed across all ~30 widget subclasses incl. TextLine, SceneWidget, RacerModelSlot, MainMenuModelSlot, CarPartPlacement, CarPartCarousel - MenuWidget members: m_focusedChild/m_eventHandler/m_id/m_rect/ m_scaleX/m_scaleY/m_offsetX/m_offsetY; GetId accessor - MenuScreenInterface slots deliberately kept as VTable0xNN (own family) * Fix MenuWidget base handler shadowing: m_notifyHandler The base 0x28 member shadowed MenuIcon's own m_eventHandler (0x170), silently redirecting notification writes to the wrong member (caught by the byte gate at 0x472790). Base member renamed m_notifyHandler. * Name MenuIcon state machine virtuals across icon family - Enable/Disable (Bit0), Select/Deselect + SetSelected/ClearSelected chain walk with m_selectedChild links (Bit1), Focus/Unfocus (Bit2), IsEnabled, SelectNext/SelectPrevious/SelectFirst/SelectLast keyboard navigation, SetIconEventHandler, Create/InitializeFromParams, FindSelectedLeaf - Applied across MenuButton/MenuHotspotButton/MenuTextButton/ MenuSelectorBase/MenuSelector/MenuTextField/MenuTextEntry/ OptionsRowBase/OptionsRow and all screen call sites * Name MenuScreenInterface callback slots across all screens - OnWidgetCreated/Destroyed/Moved/Resized, OnWidgetFocused/Unfocused, OnWidgetKeyDown/KeyUp, HandleKeyDown/HandleKeyUp (dispatcher-level), OnIconEnabled/Disabled/Focused/Unfocused/Selected/Deselected, OnWidgetValueChanged, OnCarouselSettled, OnSelectorSettled - Renamed on the interface and every screen override (30 screen classes) * Name carousel family virtuals, members, and CarouselStyle fields - MenuCarousel: SnapToSelection/StartScroll/SetItemColors/ SetFocusedItemColors/SetSelection/ScrollNext/ScrollPrevious/ LayoutItem virtuals; m_style/m_soundGroupBinding/m_slotCount/ m_focusedSlot/m_itemCount/m_selectedIndex/m_scrolling/ m_scrollDurationMs; WrapIndex/Create - MenuScrollCarousel: SelectChild/AddItem/RemoveItem/RemoveItemByIndex/ RemoveAllItems, m_selectedChild/m_scrollSpeed/m_scrollPosition - CarouselStyle: m_soundIds[3]/m_scrollDurationMs/m_pageMode/m_wrap - Applied across MenuCarouselNavigator/MenuModelCarousel/ MenuRacerCarousel/CarPartCarousel * Name MenuSelector navigation internals - MenuSelectorBase: m_prevButton/m_nextButton arrow buttons, MapCursorToNavigation (mouse-over-arrow to nav code), TranslateNavigationEvent (key/axis to canonical prev/next), StepPrevious/StepNext (carousel step + OnWidgetValueChanged), OnPreviousPressed/OnNextPressed, HandleNavigationKeyDown/KeyUp, Create/CreateDefault/CreateWithFrame - MenuSelector: m_carousel/m_scrollPending * Fix CreateDefault base-Create qualification Both calls bound to MenuSelectorBase::Create after the rename (derived overload hides MenuIcon::Create); the first call must stay the icon base create. Caught by the byte gate at 0x467150. * Name MenuSceneView internals - Create/LoadWorlds (world + optional 'blended' overlay), SetupCamera (params carry eye/target/(fov,near,far) vec3s), SetCameraLookAt with world-scale, AddElement, GetEntityScreenRect (bounding-sphere projection), UpdateElements, ClampToScreen - Members m_elements/m_world/m_blendedWorld/m_camera/m_savedCamera/ m_cameraEye/m_cameraTarget/m_worldScale; CreateParams m_cameraEye/ m_cameraTarget/m_cameraSettings/m_worldScale/m_worldName/ m_hasBlendedWorld/m_aspectScale * Name MenuModelCarousel internals - Create/SetupCamera (cameraSettings[9]: fov/distance/farClip), UpdateViewport/PushCamera/PopCamera/CreateItems/DestroyItems/ InitializeItem/GetItemPosition - m_items/m_camera/m_savedCamera/m_materialColor/m_light/ m_cameraDistance; Item m_primaryColor/m_secondaryColor; CreateParams m_slotCount/m_focusedSlot/m_cameraSettings/m_aspectScale * Fix CarPartCarousel::Create base qualification (gate 0x485300) * Name MenuRacerCarousel cosmetic part picker internals - CollectItems dispatch by m_partType (0=hats/1=faces/2=torsos/3=legs) honoring unlock flags (0x80 = all-races-unlocked reward), CollectHats/CollectFaces/CollectTorsos/CollectLegs, SelectValue, CreateMaterialTables; m_context/m_partType/m_itemValues * Name OptionsRow slider internals - OptionsRowBase/OptionsRow is the options slider row: m_thumb/m_track images, m_stepCount/m_value/m_trackMinX/m_trackMaxX/m_stepWidth/ m_trackRect/m_soundIds; LayoutButtons/LayoutTrack/LayoutThumb/ SnapThumbToValue/SetValue virtuals, ComputeThumbRange, Create, GetValue * Name text widget internals - MenuTextLabel: SetString/SetStringByIndex virtuals, Create, WrapText - MenuTextButton: m_image/m_label/m_styleEntry/m_textStyle/m_stateFonts/ m_stateImages/m_stateColors/m_maxTextWidth; Create/CreateImage/ CreateLabel/SetText/SetTextByIndex; CreateParams m_stateFonts/ m_stateImages/m_stateColors/m_stringTable/m_stringId; TextButtonStyle m_stateFonts/m_stateImages/m_stateColors - MenuTextField: HandleEditAction/SetText; CreateParams m_stringTable/ m_font/m_maxLength - MenuWidget::CreateWidget (ex FUN_00472a60), MenuImage::Create * Name MenuSceneElement family and sceneview free camera - MenuSceneElement (NOT a MenuWidget): Draw/Update virtuals (wrong widget-sweep SetRect name reverted), Create/Append, m_prev/m_next/ m_golExport/m_renderer/m_sceneView/m_created; CreateParams m_sceneView - MenuSceneView free-fly camera: UpdateFreeCamera (ex UpdateElements misnomer), smoothed forward/strafe speeds, yaw/pitch/zoom rates, m_forward/m_right/m_up basis, m_viewportClearMode * Name small widget internals - MenuColorBox: Create/SetPosition/SetWidth/SetHeight, m_width/m_height - MenuTriangle::Create; MenuClippedImage: ClipToRect, m_sourceRect/ m_clippedRect - MenuFrame: Create/CreateFill/CreateBorder/SetBorderColors, m_fill/ m_borderImages[8], CreateParams m_fillColor/m_hasFillColor - MenuTextEntry: Create/UpdateCaret (caret is a MenuColorBox), m_caret/m_buffer/m_cosmetics + getters * Fix MenuTextEntry buffer shadowing MenuTextField::GetBuffer/m_buffer The entry's 0x300 buffer names shadowed the base text-field buffer (0x1b4), rebinding DriverLicenseScreen call sites (gate 0x47b750). Renamed to GetEntryBuffer/m_entryBuffer. * Name MenuIcon state arrays; resolve textbutton color shadowing - MenuIcon: m_stateRects (per-state relative rects from style), m_stateTargetRects (parent-space transition targets), m_stateColors (per-state colors, applied via RefreshVisualState), m_attached - MenuTextButton: its 0x1f0 color array feeds the button image (bytes: image<-0x1f0 derived, label<-0x174 base) so it is m_stateImageColors; base m_stateColors reaches the label * Name car-build tooltip system and MenuIcon help string ids - CarBuildScreenBase tooltip: 3s hover to show, 20s auto-hide, 250ms quick-show window; ShowTooltip/HideTooltip/SuppressTooltip/ ResetTooltip; GetHelpString/GetHelpFont/GetTooltipLayout virtuals; m_hoverIcon/m_tooltipMs/m_hoverMs/m_quickShowMs/m_tooltipRect/ m_tooltipX/Y/m_tooltipWrapWidth/m_tooltipString/m_tooltipFont - MenuIcon::m_helpStringId (0x168, from binding token 0x2c); GetHelpStringId - RacerModelScreenBase VTable0x98-0xa0 kept (own family, different signatures) * Name CarPartPlacement and Placement move operations - CarBuildModel::Placement: MoveRight/MoveLeft/MoveForward/MoveBackward (10x6 grid clamps), MoveX/MoveY delta wrappers - CarPartPlacement: SelectPieceChoice, RotateViewAnalog/RotateViewStep/ SnapViewRotation (8-slot orbit), PitchViewAnalog/PitchViewStep/ SnapViewPitch, BeginViewReset, RotatePiece/MovePieceX/MovePieceY/ CommitPiece (TryPlacePiece result, error sound 18)/UndoLastPiece (pops last placed piece back to cursor, sound 13), FocusCar/ FocusPiece/ClearFocusPane (m_focusedPane highlight), GetViewPosition, BeginResetAnimation; view-orbit members and m_placement/m_pieceEntity/ m_piecePosition * Name CarPartPlacement scene setup helpers - ResetCamera/CreatePieceModel/CreateDriverModel/CreateCarGroup/ SetViewSlot/ApplyViewAngle; m_carGroup/m_driverEntity/m_driverModel/ m_bodySceneNode/m_bodyModelPart/m_pieceModel/m_cameraEye/m_pitchTarget * Name CarPartPlacement update stages - UpdatePieceBob (1000ms hover cycle), StartPieceRaise/StartPieceLower (placement feedback phases), UpdateViewRotation/UpdateViewPitch/ UpdateCommitFeedback/UpdateResetAnimation dispatched by m_animFlags * Name CarBuildScreen buttons and hotspot index - m_movePad (8-direction piece drag hotspots), m_viewPad (pitch/rotate/ reset hotspots 1/3/5/7/9), m_placeButton/m_rotateButton/m_undoButton/ m_doneButton, m_pieceViewRegion/m_carViewRegion focus panes - CarModelScreenBase::m_partPlacement; MenuHotspotButton:: GetHotspotIndex/m_hotspotIndex * Name CarModelScreenBase mode machine and part selectors - Mode state machine (m_mode/m_nextMode, ApplyModeChange dispatch): Enter/ExitBrowseMode, Enter/ExitCarViewMode, Enter/ExitPieceViewMode, Enter/ExitBusyMode virtuals (0xa4-0xc0), ShowPlacementError (0xc4); m_carouselAction (4=refresh choices after commit, 5=view reset) - m_categorySelector + m_categoryCarousel + m_categoryIcons (part categories), m_pieceSelector wrapping m_partCarousel, m_sceneView, m_errorPopup; MenuGameContext::m_partSet (CarPartSet) * Name CarBuildScreen input handlers - PointInRect, HandleSceneClick, HandleCursorDrag (8-direction drag to piece moves via offset tables), HandleBuildKey, HandleViewModeKey, HandleMouseButton (button1 rotates piece under cursor), RouteWidgetKeyUp, HandleViewDrag, UpdateHoverRegions (projected car/piece rects drive pane focus), MovePieceByDrag, UndoPiece * Name RacerModelScreenBase slot system and RacerUnlockState methods - Per-slot driver+car preview: CreateCarModels/CreateDriverModels, RefreshSlotModel (record cosmetics -> driver model + car data -> car group), SwapSlotModel double-buffer, SelectNextRecord/ SelectPreviousRecord, UpdateSourceLabel (record source string), CommitRecordSelections (writes selections to game state, pushes menu 0x30), DetachSlotWidgets, PlayRandomAnimation/ PlayRandomNamedAnimation (rsanim parts) - Arrays m_carGroups/m_bodySceneNodes/m_driverModels/ m_carModelEntities/m_carModels/m_driverEntities/m_modelSlots/ m_recordCyclers/m_sourceLabels - RacerUnlockState: SelectNext/SelectPrevious/GetSelectedRecord * Name GarageScreen buttons, pages, and actions - Main page: m_newRacerButton/m_editButton (opens edit submenu)/ m_loadButton (pick-memory)/m_deleteButton (confirm dialog with m_confirmYesButton/m_confirmNoButton)/m_testDriveButton (StartTestDrive loads the 'test' race in single mode) - Edit page: m_editCarButton/m_editDriverButton/m_licenseButton; m_backButton, m_page/m_nextPage; Show/HideMainButtons, Show/HideEditButtons, DeleteSelectedRecord, RefreshRecordAvailability * Name RaceModeSetupScreen track selection - m_raceCarousel/m_raceSelector/m_raceLabels[4], m_startButton/ m_backButton, m_photoImage/m_infoLabel, m_selectedRaceIndex/ m_previewPending; UpdateRacePreview (theme frame + mascot driver, Veronica Voltage for time race menu 0x1d) - SingleRaceSelectBase::m_circuitEntry (shared base member) * Name MainMenuScreen, MainMenuModelSlot, menu flow flags - MainMenuScreen buttons by target menu (circuit/single/versus/time race, garage, options, exit + confirm pair, notice popup); idle timers (60s attract timeout, 30s idle animation), cheat key mask, driver scene (photo/logo images, scene view, model slot) - MainMenuModelSlot: Create/CreateDriverModel/SetHat/SetFace/SetTorso/ SetLegs/SetCosmetics, driver entity/model, body scene node/part - DriverModelBuilder::m_menuFlowFlags + c_menuFlow* enum (newRacer/ versus/unlockNotice/loadRacer/saveReminder) replacing magic masks - g_menuDriverCosmeticIds: champion cosmetics by unlocked circuit * Name EditDriverScreen (build driver) internals - Cosmetic carousels/selectors (hat/face/torso/legs), random/done/back buttons, confirm pair, driver scene + model slot, info label - Animation flow: PickNextAnimation/PlayNextAnimation/PlayExitAnimation with g_idleAnimTextIds/g_exitAnimTextIds speech-anim string tables, m_pendingAnimTextId per-part reactions - Save flow: LoadCosmetics/SaveCosmetics/HasUnsavedChanges/ RemoveSelectedRecord, m_savePending -> auto-push save screen - MenuModelCarousel::m_viewportIndex (renderer VTable0xec target, proven by RaceSession split-screen usage); m_nextViewportIndex * Name EditCarScreen, SaveRecordCursor, RacerModelSlot - EditCarScreen (chassis/part-set select): build/quickBuild/newCar/ done/back buttons + per-dialog confirm yes buttons; category carousel reuses CarModelScreenBase unlock logic; LoadCarData/ SaveCarData/LoadQuickBuildCar/HasUnsavedChanges/CreateCarGroup/ CreateDriverModel/UpdateButtonStates/SetPlayerOneRecord - RacerUnlockState -> SaveRecordCursor (multi-source save-record iterator: default/session/quickBuild/memory-card lists by mask; Begin/Close/CountRecords/SeekTo/SelectNext/SelectPrevious) - RacerModelSlot: Create/SetEntity/UpdateEntityA/B/UpdateSpin, m_entity/m_spinAxis, CreateParams m_position/m_spinSpeed/m_animate - CarModelScreenBase: CreatePlacementScene/CreateCategoryCarousel/ PopulateCategoryCarousel/SaveCarData * Name RacerModelScreenBase slots + RacerPickScreenBase - Car/driver slot pairs per scene view (m_carSlots/m_driverSlots), OpenRecordCursors seeks each player's bound record, AlignDriverSlots/ AlignCarSlots (crsdow turntable node orients car groups), CreateModelSlots/PickRandomAnimation/Initialize virtuals, g_racerIdleAnimTextIds/g_racerSelectAnimTextIds - RacerPickScreenBase: 3-name carousel per player (prev/current/next record names), Refresh/Rebuild/Activate/Enable/DisableNameSelectors - MenuSceneView::m_drawWorld (+SetDrawWorld): world/blended-world backdrop toggle proven by Draw - MultiplayerPickScreen::m_photoImage * Name PickRacerScreen, MultiplayerPickScreen, garage helpers - PickRacerScreen: start/nextPlayer/controls/back buttons; versus flow alternates via selected-record count - MultiplayerPickScreen: per-player devices resolved from input bindings each frame, prompt images/hint labels/name labels, DimSlotLighting/RestoreSlotLighting on lock-in - MenuSelector::m_acceptUnfocusedInput (nav keys without focus, used for P1 selector during versus pick) - GarageScreen: CreateMainButtons/CreateEditButtons (was misnamed ShowMainButtons)/ShowMainButtons/ApplyPageChange * Name single-race select family + circuit race screen - MenuSceneScreen::m_sceneWidget (cutscene preview widget at 0x368, scene-screen subclasses only) - SingleRaceSelectBase: track carousel/selector/icons, scene overlay triangle, border frame + ApplyThemeColor (per-theme border colors), SetPreviewDriver (replaces guy1 with mascot/champion model) - CircuitRaceScreen: caption/name/desc labels, start/back buttons, preview cycle (2s per race, wipe transition via menu animations, circuit 6 = Rocket Racer Run stays fixed), UpdateRacePreview - RaceModeSetupScreen: best-time panel (lap/race record alternates every 2.5s: holder name + formatted time strings, unlocked badge), m_savedRacerCount restore-on-back * Name W11 screen event parameters; photo image - p_source/p_icon/p_event across menu screen widget-event overrides - MenuScreen::FUN_0046c6f0(p_yesIcon, p_noIcon), FUN_0046c730 (p_icon, p_notifyId); CarModelScreenBase::m_photoImage * Name menu screen family virtuals - CreateWidgets(0x4c)/ShouldLoadResources(0x50)/LoadStylesAndBindings (0x58)/GetActiveStyles(0x60)/GetAspectScale(0x6c)/Update(0x78)/ Draw(0x7c)/SetupLighting(0x80)/Navigate(0x84)/CanNavigate(0x88)/ Initialize(0x8c) across MenuScreen hierarchy (30 screen classes + MenuDialog::DialogScreen), menumanager/menudialog dispatch sites * Name menu screen infra: MenuScreen/MenuGameScreen/MenuDialog - MenuScreen: m_rootIcon/m_dialog/m_useBinaryFiles/m_resourceMenuId (spoofable id whose MENUNAME string picks the .idb/.fdb/.msb/.mib resource files)/m_styleTable/m_bindingTable/m_imageList; CreateRootIcon/LoadImagesAndFonts/ShowConfirmDialog/ShowPopupDialog/ DetachAllWidgets; g_rootIconParams/g_rootIconState - MenuGameScreen: m_sharedStyles/m_buttonBindings/m_light/ m_materialColor/m_selectedIcon/m_clickedWidget/m_nextMenuId/ m_navPending; CreateTextButton/CreatePartCarousel/SetLighting/ LoadPieceResources/LoadPartResources/LoadChampionResources/ LoadCosmeticTable + Destroy/Clear counterparts/ ReinitializeInputBindings/menu music trio - MenuDialog: Initialize/Destroy/OpenDialog/DismissTop/CloseTop/ Update/DrawCursors, m_openCount/m_lastResult; DialogScreen fully named (type 0 toast auto-dismiss 5s/1 popup/2 confirm; state opening/open/closing; 300ms scale anim g_dialogAnimRate; result 1 timeout/2 popup/3 yes/4 no; Attach*Icon/Enable/DisableWidgets/ BeginClose; CreateParams m_type/m_notifyId/m_defaultYes) - MenuWidget::m_animFlags (rect-transition-active bit) + GetAnimFlags - MenuTextLabel: m_style/m_stringTable/m_font/m_string/m_wrapWidth/ m_wrapped + SetFont; CreateParams m_stringTable/m_font/m_stringId - MenuScreenCreateParams::m_dialog/m_useBinaryFiles * Name options screens (base + video page) - OptionsScreenBase pages (0 main, 1 game, 2 audio): buttons by target (game/audio/controls1/controls2/language/credits/back), racer-count 0-5 + lap-count 1-5 carousels, music/sound volume sliders (0-20 steps of 5%), stereo/mono carousel, notice popup before audio page; Create/Show/Hide per page + ApplyPageChange - OptionsScreen adds video page 3: display-driver carousel from GolDrawState (up to 5, uppercased names, GUID match for current), ApplyVideoDriver re-picks HW device + rebuilds draw state - g_inv255 (1/255, shared volume scale) * Name SaveLoadScreen and ControlConfigScreen - SaveLoadScreen: status-driven memory-card flows (loadall/loadcard/ lccreate/saveall/savecard resource-spoofed to savegame), slot 0-3 buttons ensure directories, yes/no/cancel/ok per status code, ExecuteOperation collects per-slot status, m_skipFirstStatus - ControlConfigScreen: device carousel (2 joysticks by subtype icon + 3 keyboard binding sets), per-action assign buttons w/ ellipsis placeholder, key-capture flow (saves/clears device event mappings, g_controlConfigBlockedEvents guard, joystick must match slot), PopulateDeviceCarousel/RefreshEventTexts, player index by menu id * Name license/new-racer/pick-card/language screens - DriverLicenseScreen: license card + clipped photo, 8 trophy images (gold/silver/bronze styles), expression cycle button, name entry doubling as cheat entry (m_nameString; OnChar re-injects chars), Load/SaveLicenseData/HasUnsavedChanges, VTable0x90 -> OnChar family-wide (MenuManager::OnChar dispatch) - NewRacerScreen: allocates record in target list (session or card by DriverModelBuilder::m_saveSlot), load-racer copy flow, full/no record popups - PickMemoryCardScreen: PC stub that auto-picks slot 0 every Update; slot buttons + wizard-cancel confirm - PickLanguageScreen: 9-language carousel bound to game state - DriverModelBuilder::m_saveSlot (Get/SetSaveSlot) * Name AwardCinematicScreen + SceneEntityGroup - Award flow: GrantAwards -> GrantTrophy (menuId-0x15 = trophy tier) / UnlockNextCircuit (menu-name circuit bit + unlock notice flag) / UnlockPartSet (champ award 1 only, circuit string index = part set); Navigate chains win-car (part 6 -> Rocket Racer variant) and credits, pushes save-all with save reminder when anything unlocked - SceneEntityGroup (chassis + car + driver group): Create/Destroy/ AddAnimatedEntity, driver stays at chassis driver-mount offset on move/orient; CreateParams m_buildModel/m_carEntity/m_driverEntity * Name MenuSceneScreen + ButtonBindingTable internals - MenuSceneScreen: m_languageStrings (per-language .srf for cutscene text, 10 languages), m_savedCamera restore, m_firstUpdate forces 17ms first tick - ButtonBindingTable: ParseButtonSection/ParseButtonBinding, entry m_stateFonts/m_stateImages/m_stateColors mirroring MenuTextButton CreateParams layout; m_maxTextWidth/m_hasMaxTextWidth (token 0x33, falls back to style 0xfc) * Name widget Create impls + view-angle float pairs - MenuButton/MenuHotspotButton/MenuFramedSceneView/SceneWidget FUN_00466* -> Create (MenuButton's inner base call qualified MenuIcon::Create to avoid self-recursion rebind) - g_twoPiGame/g_viewStepAngle, g_twoPiCar/g_carViewStepAngle (dead 2pi / pi-over-4 view-slot pairs, datacmp-verified) * Name cutscene player core (W13 slice 1) - BluebellFog0x4 -> CutsceneEventSink (util/cutsceneeventsink.h): 12 trigger slots decoded from definition dispatch sites: On{Event, Camera,Model,Transform,AmbientLight,DirectionalLight}{Started,Ended} - CutscenePlayer (.ceb effects engine): resource sets (animations .emb + material anims, string tables .srf, sound groups, font tables, image lists - Parse*/Load* pairs), event pools (move/sound/ stream/anim/menuAnim + text/image visuals), 12 trigger channels (count/links/names triples), ParseTriggerChannel (0x4e on/0x4f off), Update/Draw/DrawTransparent/DrawOverlay/StopAll/ UpdateListener (SoundNode listener at camera), Find{Model,Jointed, Bsp}Entity via definition - CutsceneEvent base: Start/Stop/StartOnJointed/StartOnModel/ StartOnBsp/StartAt cascade, m_parsedEntity/m_entity/ m_animatedEntity/m_disabled, GetJointPosition/GetJointAxes - CutsceneEventLink: Bind + Fire overloads per payload view - Payload views renamed to definition-event views: CutsceneCamera EventView(m_target->m_entity)/CutsceneModelEventView(m_modelType, m_entity)/CutsceneTransformEventView(m_position/m_direction/m_up) - CutsceneAnimation: emitter table (Runtime -> Emitter), SpawnParticle priority-eviction, ReleaseRef/FinishRef/StopAllParticles, draw pair * Name cutscene event classes (W13 slice 2) - CutsceneSoundEvent: sound group/instance, volume/pan/frequency/ priority/looping/soundIndex, Clear/Update (auto-stop when done) - CutsceneStreamingSoundEvent: spatial stream w/ min/max distance, fixed position or entity/joint tracking flags, CreateInstance - CutsceneMoveEvent -> CutsceneColorEvent (was a misnomer: fields are RGB shift/offset feeding ColorTransform0x20 via entity tint slot; Update integrates per-second color-offset rates) - CutsceneAnimationEvent: emitter name + particle ref, optional fixed position/axes or joint tracking, Spawn/Update - CutsceneMenuAnimationEvent: menu-animation activate in/out, color - CutsceneVisual: normalized layout anim (start/current x/y/w/h + per-second rates, center/position/size flags, ComputeLayout centers in viewport), Draw scales into render target - CutsceneImageVisual: m_image/m_imageName + ResolveImage * Name CutsceneDefinition frame timeline (W13 slice 3) - Frame::Event base: start/end frame numbers, active flag, doubly linked active-list (m_prev/m_next); Update/Draw/DrawTransparent/ Begin/End virtuals (Begin/End also fire the event sink channels) - ModelEvent: model ref (static/jointed/bsp/indexed union), location/ direction/up placement, animation index, material-animation refs (resource/animation/item indices, material table target), m_transparent routes to the transparent draw pass; ResolveEntity - CameraEvent: named camera pushed/popped on frame camera stack, optional tracked-entity animation - Ambient/DirectionalLightEvent: color/direction, blink on/off timing (33.33ms ticks) toggling the frame's material/light stacks - TransformEvent: position/direction/up trigger payload (matches player's CutsceneTransformEventView) - Frame: per-type event arrays, events sorted by start/end with cursors, active-event list, playback (frameRate default 30, playbackRate override, tick accumulator, loop/complete flags), camera stack, ambient material + up to 7 lights, viewport rect; Play/Rewind/Stop/Update/ProcessEvents/Draw/GetActiveCamera - CutsceneDefinition (.cdb): world databases + frames, Find{Camera, Model,Jointed,Bsp}Entity, indexed entity/material-animation accessors, SetWorldScale, m_eventSink * Name CutsceneParticle + emitter fields (W13 slice 4) - CutsceneParticle: particle-system wrapper (basis matrix from direction/up, position, velocity x1000 to per-ms, emit timer vs interval + random chance byte, transformed spawn point from emitter's point set, age vs emitter duration -> Finish), Initialize/SetOrientation/SetPosition/SetVelocity/ActivateEmitter/ Deactivate/Finish/Update/Draw/DrawTransparent - CutsceneAnimation::Emitter: points/origin/emitIntervalMs/emitChance/ priority/radius/particleLifeMs/durationMs/materialAnimationItem/ material; IsOneShot -> IsPersistent (durationMs == -1 means the emitter runs until its ref is released - previous name was inverted) * Name SceneWidget cutscene host (W13 slice 5) - m_definition (.cdb) + m_player (.ceb effects) pair; player is set as the definition's event sink; world scale from viewport aspect x binding aspect scale - m_frame/m_frameIndex/m_autoAdvance (advance to next frame on complete)/m_finished (screens poll to navigate)/m_skippable (any key/mouse/joy press after 1s skips; the flag single/circuit race screens toggle for previews) - SceneRefBinding: m_cutsceneName/m_autoAdvance/m_startFrameIndex/ m_aspectScale - SceneWidget's internal reset named ResetState (naming it Reset would have overridden the virtual MenuWidget::Reset slot - caught by the vtable/byte gate at 0x4b1f60/0x466d60) * Name CarBuildModel mesh builder (W14 slice 1) - Build pipeline: ResetBuildVertexTree/BuildBatches/ ResolvePrimitiveIntersections/FinalizeBuild/EmitPrimitives/ Begin+End ModelWrite/FlushBatch/EmitPieceGeometry/EmitCellGeometry; RebuildModel (variant + flags, drops pieces on overflow) and BuildIntoModel (temporary model swap); ExportModel + final counts (material/texture/group/triangle/vertex) consumed by menu manager slot builder - Placement: ToGridPosition/FromGridPosition (anchor-relative), SelectAnchorQuadrant (10x6 quadrants), ClampToGrid - PieceList::RebuildGrid/RemoveAllEntries; PieceGrid::StampPiece/ UnstampPiece/RemovePiece/FindPlacementHeight/HasCollision/ MarkOverlayCells/ForEachOccupiedCell/RebuildGridWithCallback - PlacePiece (random color for decorative pieces)/TestPlacement (height or error codes)/RemovePiece/RemoveLastPiece/GetPieceInfo - Offsets: ComputePieceBounds min/max, CenterOnPiece, cached offset trio, SetDefaultOffset (-5,-3 grid center); overlay entity/model/ height/visible + DrawOverlay/BuildOverlay/RefreshOverlay/ MarkOverlayCell; ComputeHighPieceCentroid (player setup slots); m_colorTable (ex m_verdantTide placeholder); Deserialize/Serialize * Name LegoEventQueue family (W14 slice 2) - Base queue: AllocateEvent/FreeEvent/PruneActiveList + virtuals AddEvent(0x00)/Initialize(0x08 pool alloc)/Update(0x10) - Event: Initialize/Fire (hit threshold, fire count vs max, flag 1 repeats forever), m_fireCount/m_hitCount - Descriptor: m_type (1 timer, 2 proximity, 3 collision), m_flags (2 threshold mode, 4 one-way pair callback), m_maxFireCount/ m_hitThreshold; CallbackData m_type/m_flags/m_fireCount/m_hitCount - Field0x2c -> ProximityQueue (min-X sorted sweep), Field0x30 -> CollisionQueue (rigid-body pairs + DispatchContact box contact) - Descriptor::Field0x10 -> RigidBody; Field0x0e0 -> RacerView (kept as a view: racestate.h includes legoeventqueue.h so the original could not name Racer here either; fields entity group/flags/ control mode) - RaceRoster overrides renamed with the base slots (regression at vtable 0x4b0aa8 caught un-renamed overrides creating new slots) * Name ParticleSystem, DriverModelBuilder merge, GolMath trig - ParticleSystem: Initialize(materialCapacity, particleCapacity = half the triangle budget), Draw/BeginMaterialGroup/EmitQuad/ FlushBatch (same group-word encoding as CarBuildModel); per-life quad size animation (start size + growth along up/forward axes, c_flagSizeAnimated); Configure params named to match - DriverModelBuilder head/body merge: MergeHeadMaterials/ NeedsNewOutputModel/CreateOutputModel/CopyModelIndices/ CopyBodyIntoOutput/ReplaceMaterialTexture/CopyGroupsUntilFace - GolMath::SinCos / GolMath::RotateAboutAxis (common/, both targets byte-verified: LR 4562 + GP 1355 identical) * Name save-record init, carousel ring base, chassis table load - SaveRecordList::Record::Initialize(source, saveIndex, id, owner); list-level default m_recordSource/m_saveIndex stamped into allocated records (savegame reload path included) - CarPartCarousel::InitializeItemModels; MenuModelCarousel ring m_ringBaseIndex/m_scrollStep - ChassisModelTable::Load/ReleaseInstances * Name SaveSystem slots + PlayerSetupSlot centroid - SaveSystem::LoadSlot (open/load, optional create-if-missing, first-loaded save becomes active game state) / SaveSlot (writes game state when dirty + record blocks) - PlayerSetupSlot: m_slotState (0 empty / 2 champion-filled), m_highPieceCount + m_centroidX/Y/Z from ComputeHighPieceCentroid * Name GolAnimatedEntity part animation (W15 slice 1) - SetModel/SetNode (LOD slot 0) + AddModel/AddNode (distance-sorted LOD insert); PlayPart (LR wrapper) / PlayPartDirect (GOLDP twin, kept distinct: identical signature, per-target impls) / PlayPartScaled / TransitionToPart (queued part + blend timer) / IsPartAnimationDone / SamplePartPosition / SamplePartRotation / ResetPartIndices - Members: current/queued part index + time + msPerFrame + part velocity (from part data), transition progress/rate, advance flags - CmbModelPartData0x28::GetMsPerFrame/GetVelocity - Both targets byte-identical (LR 4562 / GP 1355); the BUILDING_GOL branch calls PlayPartDirect so GOLDP /Ob2 inlining stays intact (GP regressions at 0x10023b10/0x1002f210 caught the initial rebind) * Name GolWorldDatabase entity tables + accessors (W15 slice 2) - Per-type entity arrays/counts/name tables (model/animated/ collidable/bounded + cameras), ambient material + light, Find*/Get*ByName accessors, DrawWorld/Update/ResetEntities/ SetWorldScale; all cross-module callers updated - Both targets byte-identical (LR 4562 / GP 1355), GP vtables 100% * Split racestate.h into per-class headers (W17 slice 1) - racestate.h (1339 lines) broken up: race/racer/racer.h (Racer, ex RaceState::Racer, now top-level), carvisuals.h (CarVisuals), racerrigidbody.h/racerboxbody.h/racercarbody.h/racerphysics.h (physics chain, Racer-prefixed to avoid the event-queue RigidBody), drivecontroller.h, racersoundsource.h, race/raceroster.h, race/racesetup.h, race/racercontext.h (RacerContext promoted - shared context, no single owner) - Entry-style ownership kept nested: SetupParams, StandingsDeltaEntry, DroppableBrick, SpatialSoundResource, RouteCursor(Instance) in RacerCarBody, RaceRoster::Field0x064, RaceState::RacerProgressEntry/ CreateRacersParams/SpbTxtParser - Byte gate caught renamed-ctor traps (RacerRigidBody::RigidBody() compiled as a plain member function, shifting annotations; original out-of-line base-ctor calls preserved once fixed) - all 4562 entries identical again, vtables 100% * Rename placeholder TUs, drop empty TU (W17 slice 2) - drivecontrollerfield0x000.cpp -> racerphysicssteering.cpp (defines RacerPhysics steering/route methods, not DriveController) - racervisuals.cpp -> carvisuals.cpp (symmetric with carvisuals.h) - legoeventqueuefield0x10.cpp -> legoeventqueuerigidbody.cpp, legoeventqueuefield0x30.cpp -> legoeventqueuecollision.cpp - racestatefield0xadc.cpp deleted (single #include, no definitions) - Byte gate + vtables green * Rename DuskwindBananaRelic0x24 -> GolMaterial - The renderer material class (FindMaterialByName result, material tables, color/texture params): class + params + header/TU renamed to golmaterial.{h,cpp} across 69 files - Both targets byte-identical, both vtable sets 100% * Rename UtopianPan0xa4 -> GolImage, AwakeKite0x20 -> GolImageDefinitionList - GolImage: the 2D image class (FindImageByName result, width/height, renderer blit target); files image/golimage.{h,cpp} - GolImageDefinitionList: the .idb/.idf image-definition list (extends the existing GolImageList name table); files material/golimagedefinitionlist.{h,cpp} - Both targets byte-identical, both vtable sets 100% * Split racepowerupmanager.h into per-class headers (W17 slice 3) - 1545-line header broken up: every action class, brick class, projectile, beam mesh, and the explosion pool now has its own header in race/powerups/ matching its existing per-class TU (powerupaction/-base, hazard/weapon bases, 11 action classes, pickup/color/white/droppable bricks, homing/tether projectiles, beamentity/beammesh, powerupexplosion) - Explosion -> PowerupExplosion (top-level name); Racer::DroppableBrick promoted to DroppableBrick (was defined out-of-line inside the manager header, derives PickupBrick); session's nested TargetPointList -> top-level TgbTargetPointList (self-named base collision after de-nesting made the twin explicit); TargetPointList itself promoted to race/targetpointlist.h; ActionTarget/ActionSetup promoted as shared action-API types - racepowerupmanager.h keeps the manager + owned helpers (PwbTxtParser, BrickDebris, SpatialSoundResource, Params, pools) - Byte gate 4562 identical, vtables 100%, decomplint clean * Split racesession.h into per-subsystem headers (W17 slice 4) - 1020-line hub broken up: race/{inputeventsink,playercontrols, raceinputrouter,racesoundsource,triggerlist,racertriggerlist, racetimerlist,surfacetable,loadingscreen,racereset, racercollisionworlds}.h - each matching its existing TU; session's nested TargetPointList promoted earlier as TgbTargetPointList (race/tgbtargetpointlist.h) - racesession.h keeps RaceSession + RabTxtParser + owned records - Folded parser SDD/dtor synthetics (0x41e920/0x498840) deduplicated to the single fold-survivor annotation (TimeRaceManager:: GhbTxtParser) after the split shifted COMDAT emission order - the 34-vtable regression the gate caught is green again * Split cutsceneplayer.h; replace payload views with real event types (W17 slice 5) - 711-line header broken into per-class headers under menu/runtime/: cutsceneevent, cutsceneeventlink, cutsceneparticleref, cutscenesound/color/animation/streamingsound/menuanimation events, cutscenevisual + image/text visuals, cutsceneanimation; cutsceneplayer.h keeps CutscenePlayer + CebTxtParser - Decomp-artifact view structs deleted (CutsceneCameraTargetView/ CutsceneCameraEventView/CutsceneModelEventView/ CutsceneTransformEventView): CutsceneEventLink::Fire overloads now take the real CutsceneDefinition::Frame::{Camera,Model,Transform} Event types (offsets verified: camera 0x20 + trackedEntity 0x28, model type/entity 0x20/0x24, transform vectors 0x20/0x2c/0x38) via new inline getters - byte-identical - Gate green: 4562 identical, vtables 100%, decomplint clean * Split hazardmanager.h into per-hazard headers * Split hazardmanager.cpp into per-hazard TUs; slim hazardmanager.h * Promote RaceEventTable resource classes to race/events/ headers * Split raceeventtable.cpp into per-resource TUs * Split multi-root headers; promote event queues; nest DirectInputDevice::CreateParams * Unify sound-slot unions on SpatialSoundInstance; drop Resource duck-type * Split trigger-list TUs; rename racedecaltrail.cpp * Name material-animation and model-part families (Mab/Cmb/MaterialTable/GolWorldEntityGroup) * Name the surface/texture family (GolSurface/GolTexture/GolD3DTexture/GolTiledTexture) * Name render/display/vertex-array families; nest GolMaterial::NameRecord * Name software/D3D material+texture list, palette, camera, vertex-array gems * Name GolBoundingVolume::HitTriangle and GolSceneNode::TransformComposer * Name Gdb vertex-array type trio (colored/normal/prelit) * Name last nested placeholder types (TriangleCommand, RasterizerPipelineSet, ManagedMaterialTable, TraversalEntry) * Name GolModelEntity texture-scroll accessors and fields * Name last 0x-suffixed nested/record types repo-wide * Name .evb tokens and event-resource InitParams fields * Decode event-resource state machine; name phase tokens and part/track fields * Name binding-table arrays; unify SceneRefBinding; name CreateParams id/color * Name TextLabelBinding fields * Name .mid field tokens * Name GolBoundingShape tree internals; drop redundant leaf view * Name RaceCameraController transition/turbo members * Name TimeRaceManager ghost markers * Name event-resource lifecycle trios (ClearFields/Initialize/Destroy) * Name TimeRaceManager lifecycle methods and ghost car model * Name champion-list, checkpoint-graph, trigger and menu-input methods * Name menu-widget helpers and piece-library Load * Name MenuTextField input handlers * Drop offset suffixes from flags/state members * Finish semantic-0x member cleanup * Decode piece shape blob: part-type trailer, raised bottoms, volume moments * Name driver part-slot section from BODYPART.PCB data * Drop suffixes from remaining single-flags members * Name MenuIcon/MenuImage create-params fields (startEnabled, attachToParent, image) * Name ParticleResource spawn fields (position/direction/up) * Rebase SelectorBinding on typed selector params; name prev/next button params * Name shared .evb bool tokens and resource flag params (looping/noEnd/atEventPosition) * Finish SceneRefBinding unification; name parentId/iconEventHandler/cameraVectors * Name car-part placement animation members * Name GolMaterialColor and diffuse/ambient material colors (D3DMATERIAL evidence) * Name code-puzzle sequence members * Name ghost driver/secondary/car entities and mount offsets * Reshape session name buffers into real char arrays * Name .ceb section and trigger-channel tokens * Name emitter size/growth fields and .emb tokens (ConfigureCommon evidence) * Name .ceb event field tokens * Name shared .msb style field tokens * Type launcher trail members; name trigger fields * Name model-carousel item geometry * Name TriggerWorld members; fix stale include guards * Name text-field charset/mode/rect members * Name node/duration/zone/material event params (e_node token) * Name the GolWorldEntity vtable surface across the hierarchy * Name GolModelEntity model/bounds slots; GolBillboard::Configure * Name GolModelBase parse/lifecycle vtable surface * Name GolMath transform helpers * Name camera matrix block and matrix-multiply helpers * Name WdbModel record fields * Name world database records, members, and parse pipeline WdbBillboardSprite/WdbCamera/WdbLight fields named from parse defaults and consumers (billboard Configure, camera lens setup, light SetColor/ SetDirection). WdbModel per-LOD index triples proven by parser bounds checks (scene nodes, model parts, material tables). GolWorldDatabase resource name/count pairs named by loaded file extension and getter return types; parse methods, entity record arrays, virtual draw/get surface, and SetWorldScale -> SetCameraAspectRatios (sets per-camera aspect ratio, evidence in SetupCamera consumers). * Stop tracking clangd index cache * Fix billboard material naming and MaterialTable entry accessors GolBillboard's GolMaterial* member was misnamed m_position (with m_positionContainer/m_positionIndex); it is the billboard material, resolved through MaterialTable entries. MaterialTable::Get/SetPosition renamed Get/SetEntry to match its m_entries/FindEntryIndexByName vocabulary. Billboard axis-lock surface named (m_axis, SetAxis, EnableAxisLock, c_flagAxisLocked orthogonalizes the facing vector against the fixed axis in FUN_10014e50; c_flagMaterialAssignment set by ConfigureFromMaterialTable, checked by sprite mat-anim binding). * Name image file loader family (GolImgFile/GolBmpFile/GolTgaFile) Virtual surface: ReadHeader/Open/LoadSurfaceFromBuffer/ReadPixels/ LoadTiledTexture/LoadSurface. Row kernels named by source/dest depth (ConvertRowRgbTo*, ConvertRowIndexed4To*/8To*, RemapRow* palette remaps), pipeline methods SetupPixelConversion/BuildPaletteRemap/ FindOrAddPaletteEntry/ConvertRow/ConvertImage/ConvertImageHalfSize/ UpscaleRow/DownsampleRowPair, GolTgaFile::DecodeRleRow. Members: m_paletteRemap[0x100] (merged 0x4a8 gap + 0x5a4 tail, writes span full 256 entries for 8bpp sources), color-key comparands/replacement, m_keepNibbleOrder/m_remapPureBlack flags (mipmap pure-black remap via g_nearBlackColor {8,8,8}), BMP path/palette/RLE scratch buffers and m_compression. * Name entity/transform/frustum/material helper methods in common GolWorldEntity lazy bounds getters GetBoundsCenter/GetBoundsRadius (SetCenter unified to SetBoundsCenter); GolWorldEntityGroup Allocate/Destroy/AddEntity; GolTransformBase::AttachChild with m_parent/m_nextSibling/m_firstChild intrusive tree; GolViewFrustum:: ClassifyBox (0 outside / 1 intersecting / 2 inside from AABB corner tests); GolMath::LerpQuat (hemisphere-corrected linear quat blend); CmbModelPartTrackData::GetRotationFrame; GolModelMaterialTable Load/Parse; GolMaterial::SetParams; GolMaterialLibrary:: CreateMaterials (realizes materials lacking the created flag). Derived SceneEntityGroup::Destroy now explicitly qualifies the base GolWorldEntityGroup::Destroy call. * Decode BSP collision volume (GolBoundingVolume) and name surfaces .bvb = BSP tree over triangles: BspNode (plane normal, triangle range, child indices; plane anchored at first vertex of the node's first triangle), Triangle (3 vertex indices + material entry index into the event-record table), TraversalEntry stack frames. IntersectSegment walks front/back by signed plane distances, computes hit point from the crossing fraction, and tests triangles with GolMath:: PointInTriangle, filling HitTriangle (vertices, normal, plane D) and the mapped RaceEventRecord. MirrorY negates plane/vertex Y and flips winding (mirrored tracks); GolOrientedEntity::MirrorY and GolBoundedEntity::MirrorY named with it (base call qualified to avoid self-recursion). GolBoundedEntity bounding-volume/material-override surface named; GolCameraBase vec statics Dot/Dot2/Cross/Add/Subtract/ Scale (Dot2 is a byte-identical twin kept at its own address). * Name culling BSP (GolBoundingShape), MirrorY family, math and font helpers GolBoundingShape (.bdf) decoded: TreeNode leaves carry PVS list start/ count into m_pvsIndices plus a bounds index; CollectVisibleLeaves descends from the camera position, CollectLeavesFromPvs links the leaf's potentially-visible set filtered by GolViewFrustum::ClassifyBox on leaf AABBs, CollectLeavesAtPoints stamps paths for query points (decal projec…
1 parent 77de36c commit e23e7b7

766 files changed

Lines changed: 73818 additions & 70665 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,5 @@ GolDP.dll
3030

3131
.DS_Store
3232
*.log
33+
34+
.cache/

CMakeLists.txt

Lines changed: 145 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -108,55 +108,55 @@ set(COMMON_SOURCES
108108
common/src/golfontbase.cpp
109109
common/src/goltransformbase.cpp
110110
common/src/golscenenode.cpp
111-
common/src/whitefalcon0x140light.cpp
112-
common/src/silverdune0x30.cpp
113-
common/src/golddune0x38.cpp
114-
common/src/bronzedunebag0xc.cpp
115-
common/src/bronzedune0x4c.cpp
116-
common/src/whitefalcon0x140materialcolor.cpp
117-
common/src/cmbmodelpart0x34.cpp
118-
common/src/cmbmodelpartdata0x18.cpp
119-
common/src/cmbmodelpartdata0x28.cpp
120-
common/src/mabmaterialanimation0x14.cpp
121-
common/src/materialtable0x0c.cpp
122-
common/src/golbillboardfield0x2c.cpp
111+
common/src/golrenderdevicelight.cpp
112+
common/src/golsurface.cpp
113+
common/src/goltexture.cpp
114+
common/src/goltexturepalette.cpp
115+
common/src/golpalettedtexture.cpp
116+
common/src/golrenderdevicematerialcolor.cpp
117+
common/src/cmbmodelpart.cpp
118+
common/src/cmbmodelparttrackdata.cpp
119+
common/src/cmbmodelpartdata.cpp
120+
common/src/mabmaterialanimation.cpp
121+
common/src/materialtable.cpp
122+
common/src/golbillboardmaterialtable.cpp
123123
common/src/golworldentity.cpp
124-
common/src/golworldentitygroup0x38.cpp
124+
common/src/golworldentitygroup.cpp
125125
common/src/golorientedentity.cpp
126126
common/src/golviewfrustum.cpp
127127
common/src/golmodelmaterialtable.cpp
128128
common/src/golmodelbase.cpp
129-
common/src/gdbvertexarray0xc.cpp
130-
common/src/igdbmodelindexarray0x8.cpp
131-
common/src/gdbmodelindexarray0xc.cpp
129+
common/src/gdbvertexarray.cpp
130+
common/src/gdbmodelindexarraybase.cpp
131+
common/src/gdbmodelindexarray.cpp
132132
common/src/golmodelentity.cpp
133133
common/src/golanimatedentity.cpp
134-
common/src/mabmaterialanimationitem0x8.cpp
135-
common/src/mabmaterialanimationitem0x18.cpp
136-
common/src/duskwindbananarelic0x24.cpp
137-
common/src/amethystbreeze0x104.cpp
134+
common/src/mabmaterialframe.cpp
135+
common/src/mabmaterialtrack.cpp
136+
common/src/golmaterial.cpp
137+
common/src/golmodelrenderstate.cpp
138138
common/src/golmateriallibrary.cpp
139139
)
140140

141141
#These GOLDP - only files currently need the same inline expansion behavior as common_goldp.
142142
#This might represent another original static library or project grouping; keep the list
143143
#narrow until more source units show the same codegen fingerprint.
144144
set(GOLDP_INLINE_EXPANSION_SOURCES
145-
GolDP/src/material/duskwindbananarelic0x30.cpp
145+
GolDP/src/material/golsoftwarematerial.cpp
146146
GolDP/src/render/goldrawstate.cpp
147147
GolDP/src/render/golrasterizers1.cpp
148148
GolDP/src/render/golrasterizers2.cpp
149-
GolDP/src/image/utopianpan0xa4.cpp
150-
GolDP/src/image/whitebaffoon0x50.cpp
149+
GolDP/src/image/golimage.cpp
150+
GolDP/src/image/goltiledtexture.cpp
151151
GolDP/src/render/golrenderdevice.cpp
152152
GolDP/src/render/gold3drendersurface.cpp
153-
GolDP/src/surface/falcondunebag0x10.cpp
153+
GolDP/src/surface/gold3dtexturepalette.cpp
154154
GolDP/src/surface/goldepthbuffer.cpp
155155
GolDP/src/font/golfont.cpp
156-
GolDP/src/surface/purpledune0x7c.cpp
157-
GolDP/src/material/purpleribbon0x24.cpp
158-
GolDP/src/material/amberhaze0x20.cpp
159-
GolDP/src/mesh/gdbcommonvertexarray0x1c.cpp
156+
GolDP/src/surface/gold3dtexture.cpp
157+
GolDP/src/material/gold3dtexturelist.cpp
158+
GolDP/src/material/golsoftwaremateriallibrary.cpp
159+
GolDP/src/mesh/gdbcoloredvertexarraybase.cpp
160160
GolDP/src/mesh/golmodel.cpp
161161
GolDP/src/camera/golscenetransformnode.cpp
162162
)
@@ -195,35 +195,35 @@ add_library(goldp SHARED
195195
GolDP/src/world/golworlddatabase.cpp
196196
GolDP/src/scene/golbillboard.cpp
197197
GolDP/src/scene/golbillboardex.cpp
198-
GolDP/src/surface/slatepeak0x58.cpp
199-
GolDP/src/surface/azureridge0x38.cpp
198+
GolDP/src/surface/golrendertarget.cpp
199+
GolDP/src/surface/goldisplaysurface.cpp
200200
GolDP/src/camera/golcamera.cpp
201201
GolDP/src/camera/goltransform.cpp
202202
GolDP/src/device/ddrawutil.cpp
203-
GolDP/src/material/amberhaze0x20.cpp
203+
GolDP/src/material/golsoftwaremateriallibrary.cpp
204204
GolDP/src/font/golfontlibrary.cpp
205205
GolDP/src/material/goltexturelist.cpp
206-
GolDP/src/material/purpleribbon0x24.cpp
207-
GolDP/src/surface/purpledune0x7c.cpp
206+
GolDP/src/material/gold3dtexturelist.cpp
207+
GolDP/src/surface/gold3dtexture.cpp
208208
GolDP/src/render/golrenderdevice.cpp
209209
GolDP/src/render/gold3drenderdevice.cpp
210210
GolDP/src/render/gold3drendersurface.cpp
211-
GolDP/src/material/awakekite0x20.cpp
211+
GolDP/src/material/golimagedefinitionlist.cpp
212212
GolDP/src/material/golimagelist.cpp
213213
GolDP/src/font/golfonttable.cpp
214214
GolDP/src/font/golfont.cpp
215-
GolDP/src/surface/moltenquillphantom0x34.cpp
216-
GolDP/src/image/whitebaffoon0x50.cpp
217-
GolDP/src/image/utopianpan0xa4.cpp
218-
GolDP/src/material/duskwindbananarelic0x30.cpp
215+
GolDP/src/surface/golattachedsurface.cpp
216+
GolDP/src/image/goltiledtexture.cpp
217+
GolDP/src/image/golimage.cpp
218+
GolDP/src/material/golsoftwarematerial.cpp
219219
GolDP/src/surface/goldepthbuffer.cpp
220220
GolDP/src/render/golsoftwarerenderer.cpp
221-
GolDP/src/surface/falcondunebag0x10.cpp
222-
GolDP/src/mesh/gdbcommonvertexarray0x1c.cpp
223-
GolDP/src/mesh/gdbvertexarraytypetwo0x20.cpp
224-
GolDP/src/mesh/gdbvertexarraytypeone0x1c.cpp
225-
GolDP/src/mesh/gdbvertexarraytypethree0x20.cpp
226-
GolDP/src/mesh/gdbvertexarraymistery0x1c.cpp
221+
GolDP/src/surface/gold3dtexturepalette.cpp
222+
GolDP/src/mesh/gdbcoloredvertexarraybase.cpp
223+
GolDP/src/mesh/gdbcoloredvertexarray.cpp
224+
GolDP/src/mesh/gdbnormalvertexarray.cpp
225+
GolDP/src/mesh/gdbprelitvertexarray.cpp
226+
GolDP/src/mesh/gdbuncoloredvertexarray.cpp
227227
GolDP/src/mesh/golmodel.cpp
228228
GolDP/src/camera/golscenetransformnode.cpp
229229
util/decomp.cpp
@@ -283,73 +283,116 @@ add_executable(legoracers WIN32
283283
LEGORacers/src/audio/soundmanager.cpp
284284
LEGORacers/src/audio/soundnode.cpp
285285
LEGORacers/src/audio/streamingsoundinstance.cpp
286-
LEGORacers/src/input/inputmanager.cpp
287286
LEGORacers/src/input/directinputmanager.cpp
288287
LEGORacers/src/input/joystickdevice.cpp
289288
LEGORacers/src/input/keyboarddevice.cpp
290289
LEGORacers/src/input/mousedevice.cpp
291290
LEGORacers/src/input/directinputdevice.cpp
292291
LEGORacers/src/input/inputdevice.cpp
293292
LEGORacers/src/menu/menumanager.cpp
294-
LEGORacers/src/race/racemoderunner.cpp
295293
LEGORacers/src/race/timeracemanager.cpp
296294
LEGORacers/src/util/stackoflegou16.cpp
297295
LEGORacers/src/util/legoeventqueue.cpp
298-
LEGORacers/src/util/legoeventqueuefield0x10.cpp
299-
LEGORacers/src/util/legoeventqueuefield0x30.cpp
296+
LEGORacers/src/util/legoeventqueuerigidbody.cpp
297+
LEGORacers/src/util/legoeventqueuecollision.cpp
300298
LEGORacers/src/util/legoeventqueueevent.cpp
301-
LEGORacers/src/util/marblepath0x114.cpp
302299
LEGORacers/src/menu/menudialogscreen.cpp
303300
LEGORacers/src/menu/menudialog.cpp
304301
LEGORacers/src/race/racesession.cpp
305-
LEGORacers/src/race/racesessionfield0x2080.cpp
306-
LEGORacers/src/race/racesessionfield0x2098.cpp
307-
LEGORacers/src/race/racesessionfield0x2098resource0x24.cpp
308-
LEGORacers/src/race/racesessionfield0x2098resource0x48.cpp
309-
LEGORacers/src/race/racesessionfield0x213c.cpp
310-
LEGORacers/src/race/racesessionfield0x2148.cpp
311-
LEGORacers/src/race/racesessionfield0x23c.cpp
302+
LEGORacers/src/race/racertriggerlist.cpp
303+
LEGORacers/src/race/triggerlist.cpp
304+
LEGORacers/src/race/raceeventtable.cpp
305+
LEGORacers/src/race/events/lapzoneresource.cpp
306+
LEGORacers/src/race/events/externalforceresource.cpp
307+
LEGORacers/src/race/events/looktargetresource.cpp
308+
LEGORacers/src/race/events/materialanimationresource.cpp
309+
LEGORacers/src/race/events/modeldistanceresource.cpp
310+
LEGORacers/src/race/events/nodetransformresource.cpp
311+
LEGORacers/src/race/events/partanimationresource.cpp
312+
LEGORacers/src/race/events/particleresource.cpp
313+
LEGORacers/src/race/events/raceeventresource.cpp
314+
LEGORacers/src/race/events/skystateresource.cpp
315+
LEGORacers/src/race/events/soundresource.cpp
316+
LEGORacers/src/race/events/timerresource.cpp
317+
LEGORacers/src/race/events/colortransformresource.cpp
318+
LEGORacers/src/race/racetimerlist.cpp
319+
LEGORacers/src/race/hazardmanager.cpp
320+
LEGORacers/src/race/hazards/cannonballrainhazard.cpp
321+
LEGORacers/src/race/hazards/codepuzzlehazard.cpp
322+
LEGORacers/src/race/hazards/cursedrophazard.cpp
323+
LEGORacers/src/race/hazards/fallingpillarhazard.cpp
324+
LEGORacers/src/race/hazards/ghosthazard.cpp
325+
LEGORacers/src/race/hazards/grabberhazard.cpp
326+
LEGORacers/src/race/hazards/hammerhazard.cpp
327+
LEGORacers/src/race/hazards/hazard.cpp
328+
LEGORacers/src/race/hazards/launcherhazard.cpp
329+
LEGORacers/src/race/hazards/lavageyserhazard.cpp
330+
LEGORacers/src/race/hazards/movingobstaclehazard.cpp
331+
LEGORacers/src/race/hazards/multilauncherhazard.cpp
332+
LEGORacers/src/race/hazards/oscillatorhazard.cpp
333+
LEGORacers/src/race/hazards/rockethazard.cpp
334+
LEGORacers/src/race/hazards/rollingrockhazard.cpp
335+
LEGORacers/src/race/hazards/smokeventhazard.cpp
336+
LEGORacers/src/race/hazards/snowfallhazard.cpp
337+
LEGORacers/src/race/hazards/sphinxhazard.cpp
338+
LEGORacers/src/race/hazards/sweepcannonhazard.cpp
339+
LEGORacers/src/race/hazards/triggeredanimationhazard.cpp
340+
LEGORacers/src/race/hazards/warppadhazard.cpp
341+
LEGORacers/src/race/raceinputrouter.cpp
312342
LEGORacers/src/race/racetrailmanager.cpp
313-
LEGORacers/src/race/racesessionfield0x27d4.cpp
314-
LEGORacers/src/race/racesessionfield0x27d4field0x004.cpp
315-
LEGORacers/src/race/racestatefield0xc70.cpp
316-
LEGORacers/src/race/racesessionfield0x2ad4.cpp
317-
LEGORacers/src/race/racestatefield0x3e8helpers.cpp
318-
LEGORacers/src/race/racesessionfield0x27e0.cpp
319-
LEGORacers/src/race/racesessionfield0x27f4.cpp
320-
LEGORacers/src/race/racestatefield0x010.cpp
321-
LEGORacers/src/race/racesessionfield0x280c.cpp
322-
LEGORacers/src/race/racesessionfield0x2804.cpp
323-
LEGORacers/src/race/racesessionfield0x2f90.cpp
324-
LEGORacers/src/race/racesessionfield0x30c4.cpp
325-
LEGORacers/src/race/racerouterecord.cpp
326-
LEGORacers/src/race/racesessionfield0x32b4.cpp
327-
LEGORacers/src/race/racesessionfield0x32b4field0x004.cpp
328-
LEGORacers/src/race/racesessionfield0x32c4.cpp
329-
LEGORacers/src/race/racesessionfield0x258.cpp
330-
LEGORacers/src/race/racesessionfield0x3300.cpp
331-
LEGORacers/src/race/racesessionfield0x340.cpp
332-
LEGORacers/src/race/racesessionfield0x6dc.cpp
333-
LEGORacers/src/race/racepowerupmanagerglobals.cpp
334-
LEGORacers/src/race/racesessionfield0x6dcfield0x170.cpp
335-
LEGORacers/src/race/racesessionfield0x6dcfield0x238.cpp
336-
LEGORacers/src/util/racerbillboardrenderstate0x33c.cpp
337-
LEGORacers/src/race/racesessionfield0x6dcfield0xa8.cpp
338-
LEGORacers/src/race/racesessionfield0x6dcfield0xf8.cpp
343+
LEGORacers/src/race/racedecalmanager.cpp
344+
LEGORacers/src/race/racedecaltrail.cpp
345+
LEGORacers/src/race/racer/drivecontroller.cpp
346+
LEGORacers/src/race/racecameracontroller.cpp
347+
LEGORacers/src/race/racer/racercarbody.cpp
348+
LEGORacers/src/race/racer/racerrigidbody.cpp
349+
LEGORacers/src/race/surfacetable.cpp
350+
LEGORacers/src/race/checkpointgraph.cpp
351+
LEGORacers/src/race/checkpointgraphwalk.cpp
352+
LEGORacers/src/race/loadingscreen.cpp
353+
LEGORacers/src/race/targetpointlist.cpp
354+
LEGORacers/src/race/racesky.cpp
355+
LEGORacers/src/race/racereset.cpp
356+
LEGORacers/src/race/racer/racerouterecord.cpp
357+
LEGORacers/src/race/triggerworld.cpp
358+
LEGORacers/src/race/racercollisionworlds.cpp
359+
LEGORacers/src/race/playercontrols.cpp
360+
LEGORacers/src/race/racesoundsource.cpp
361+
LEGORacers/src/race/raceforcefeedback.cpp
362+
LEGORacers/src/race/powerups/racepowerupmanager.cpp
363+
LEGORacers/src/race/powerups/racepowerupmanagerglobals.cpp
364+
LEGORacers/src/race/powerups/beammesh.cpp
365+
LEGORacers/src/race/powerups/tetherprojectile.cpp
366+
LEGORacers/src/util/carshadowrenderstate.cpp
367+
LEGORacers/src/race/powerups/powerupprojectile.cpp
368+
LEGORacers/src/race/powerups/homingprojectile.cpp
339369
LEGORacers/src/race/raceresourcemanager.cpp
340-
LEGORacers/src/race/racesessionfield0x6dcfield0x270.cpp
341-
LEGORacers/src/race/racesessionfield0x6dcresources.cpp
370+
LEGORacers/src/race/powerups/powerupexplosion.cpp
371+
LEGORacers/src/race/powerups/powerupaction.cpp
372+
LEGORacers/src/race/powerups/magnetaction.cpp
373+
LEGORacers/src/race/powerups/oilslickaction.cpp
374+
LEGORacers/src/race/powerups/dynamiteaction.cpp
375+
LEGORacers/src/race/powerups/curseaction.cpp
376+
LEGORacers/src/race/powerups/cannonballaction.cpp
377+
LEGORacers/src/race/powerups/grapplinghookaction.cpp
378+
LEGORacers/src/race/powerups/lightningaction.cpp
379+
LEGORacers/src/race/powerups/homingmissileaction.cpp
380+
LEGORacers/src/race/powerups/shieldaction.cpp
381+
LEGORacers/src/race/powerups/turboaction.cpp
382+
LEGORacers/src/race/powerups/warpaction.cpp
383+
LEGORacers/src/race/powerups/pickupbrick.cpp
384+
LEGORacers/src/race/powerups/colorbrick.cpp
385+
LEGORacers/src/race/powerups/whitebrick.cpp
386+
LEGORacers/src/race/racer/carvisuals.cpp
387+
LEGORacers/src/race/racer/racer.cpp
342388
LEGORacers/src/race/racestate.cpp
343-
LEGORacers/src/race/racestatefield0x00c.cpp
344-
LEGORacers/src/race/racestatefield0x004.cpp
345-
LEGORacers/src/race/racestatefield0x3e8.cpp
346-
LEGORacers/src/race/racestatefield0xadc.cpp
347-
LEGORacers/src/race/racestatefield0x0f0.cpp
348-
LEGORacers/src/race/racestatefield0x2a0.cpp
349-
LEGORacers/src/race/racestatefield0xd5c.cpp
350-
LEGORacers/src/race/racestatefield0xc70field0x000.cpp
351-
LEGORacers/src/race/cobalttrail0x140.cpp
352-
LEGORacers/src/race/slatebridge0x68.cpp
389+
LEGORacers/src/race/racer/racersoundsource.cpp
390+
LEGORacers/src/race/racer/racerphysics.cpp
391+
LEGORacers/src/race/raceroster.cpp
392+
LEGORacers/src/race/racer/routecursor.cpp
393+
LEGORacers/src/race/powerups/droppablebrick.cpp
394+
LEGORacers/src/race/racehud.cpp
395+
LEGORacers/src/race/racedialog.cpp
353396
LEGORacers/src/race/circuitracerunner.cpp
354397
LEGORacers/src/race/circuitstandings.cpp
355398
LEGORacers/src/app/golapp.cpp
@@ -386,7 +429,7 @@ add_executable(legoracers WIN32
386429
LEGORacers/src/menu/screens/menuscenescreen.cpp
387430
LEGORacers/src/menu/screens/scenewidget.cpp
388431
LEGORacers/src/menu/screens/racermodelslot.cpp
389-
LEGORacers/src/menu/screens/racerunlockstate.cpp
432+
LEGORacers/src/menu/screens/saverecordcursor.cpp
390433
LEGORacers/src/menu/screens/racermodelscreenbase.cpp
391434
LEGORacers/src/menu/screens/racerpickscreenbase.cpp
392435
LEGORacers/src/menu/runtime/cutscenedefinition.cpp
@@ -432,6 +475,13 @@ add_executable(legoracers WIN32
432475
LEGORacers/src/model/carpartset.cpp
433476
LEGORacers/src/model/legopiecelibrary.cpp
434477
LEGORacers/src/menu/runtime/cutsceneparticle.cpp
478+
LEGORacers/src/menu/runtime/cutsceneanimation.cpp
479+
LEGORacers/src/menu/runtime/cutsceneanimationevent.cpp
480+
LEGORacers/src/menu/runtime/cutscenecolorevent.cpp
481+
LEGORacers/src/menu/runtime/cutsceneimagevisual.cpp
482+
LEGORacers/src/menu/runtime/cutscenemenuanimationevent.cpp
483+
LEGORacers/src/menu/runtime/cutscenesoundevent.cpp
484+
LEGORacers/src/menu/runtime/cutscenestreamingsoundevent.cpp
435485
LEGORacers/src/menu/runtime/cutsceneplayer.cpp
436486
LEGORacers/src/menu/runtime/cutscenetextvisual.cpp
437487
LEGORacers/src/menu/runtime/cutscenevisual.cpp

0 commit comments

Comments
 (0)