Commit e23e7b7
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
- GolDP
- include
- camera
- core
- device
- font
- image
- material
- mesh
- render
- scene
- surface
- world
- src
- camera
- core
- device
- font
- image
- material
- mesh
- render
- scene
- surface
- world
- LEGORacers
- include
- app
- audio
- input
- model
- racer
- race
- data
- events
- hazards
- powerups
- racer
- save
- util
- src
- app
- audio
- gol
- input
- model
- racer
- race
- data
- events
- hazards
- powerups
- racer
- save
- util
- common
- include
- src
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
108 | 108 | | |
109 | 109 | | |
110 | 110 | | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
123 | 123 | | |
124 | | - | |
| 124 | + | |
125 | 125 | | |
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
129 | | - | |
130 | | - | |
131 | | - | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
132 | 132 | | |
133 | 133 | | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
138 | 138 | | |
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
145 | | - | |
| 145 | + | |
146 | 146 | | |
147 | 147 | | |
148 | 148 | | |
149 | | - | |
150 | | - | |
| 149 | + | |
| 150 | + | |
151 | 151 | | |
152 | 152 | | |
153 | | - | |
| 153 | + | |
154 | 154 | | |
155 | 155 | | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
| |||
195 | 195 | | |
196 | 196 | | |
197 | 197 | | |
198 | | - | |
199 | | - | |
| 198 | + | |
| 199 | + | |
200 | 200 | | |
201 | 201 | | |
202 | 202 | | |
203 | | - | |
| 203 | + | |
204 | 204 | | |
205 | 205 | | |
206 | | - | |
207 | | - | |
| 206 | + | |
| 207 | + | |
208 | 208 | | |
209 | 209 | | |
210 | 210 | | |
211 | | - | |
| 211 | + | |
212 | 212 | | |
213 | 213 | | |
214 | 214 | | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
219 | 219 | | |
220 | 220 | | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
227 | 227 | | |
228 | 228 | | |
229 | 229 | | |
| |||
283 | 283 | | |
284 | 284 | | |
285 | 285 | | |
286 | | - | |
287 | 286 | | |
288 | 287 | | |
289 | 288 | | |
290 | 289 | | |
291 | 290 | | |
292 | 291 | | |
293 | 292 | | |
294 | | - | |
295 | 293 | | |
296 | 294 | | |
297 | 295 | | |
298 | | - | |
299 | | - | |
| 296 | + | |
| 297 | + | |
300 | 298 | | |
301 | | - | |
302 | 299 | | |
303 | 300 | | |
304 | 301 | | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
312 | 342 | | |
313 | | - | |
314 | | - | |
315 | | - | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
328 | | - | |
329 | | - | |
330 | | - | |
331 | | - | |
332 | | - | |
333 | | - | |
334 | | - | |
335 | | - | |
336 | | - | |
337 | | - | |
338 | | - | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
339 | 369 | | |
340 | | - | |
341 | | - | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
342 | 388 | | |
343 | | - | |
344 | | - | |
345 | | - | |
346 | | - | |
347 | | - | |
348 | | - | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
353 | 396 | | |
354 | 397 | | |
355 | 398 | | |
| |||
386 | 429 | | |
387 | 430 | | |
388 | 431 | | |
389 | | - | |
| 432 | + | |
390 | 433 | | |
391 | 434 | | |
392 | 435 | | |
| |||
432 | 475 | | |
433 | 476 | | |
434 | 477 | | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
435 | 485 | | |
436 | 486 | | |
437 | 487 | | |
| |||
0 commit comments