Version = 1, targetUnit = 0
Source file(s) <none>, object file <none> overlay id <none>

// 0 complex types

// 0 typedefs

// 3221 labels
0xA9F88 __SN_GP_BASE
0xA9F88 __data_objend
0xA9F88 __data_orgend
0xA9F88 __sdata_obj
0xA9F88 __sdata_org
0x10000 _text_obj
0x10000 _text_org
0x10000 __rdata_obj
0x10000 __rdata_org
0xAAA0C _text_objend
0xAAA0C _text_orgend
0xAAA0C __sdata_objend
0xAAA0C __sdata_orgend
0xAAA0C __ctors_obj
0xAAA0C __ctors_objend
0xAAA0C __ctors_org
0xAAA0C __ctors_orgend
0xAAA0C __dtors_obj
0xAAA0C __dtors_objend
0xAAA0C __dtors_org
0xAAA0C __dtors_orgend
0x9AA0C _text_size
0xAAA10 _bss_obj
0xAAA10 _bss_org
0xAAA10 __sbss_obj
0xAAA10 __sbss_org
0xAAA10 NumDriver2Curves
0xE6308 _bss_objend
0xE6308 _bss_orgend
0xE6308 __bss_objend
0xE6308 __bss_orgend
0x3B8F8 _bss_size
0x1C0000 _frnt_obj
0x1C0000 _frnt_org
0x1C0000 _frnt_rdata_obj
0x1C0000 _frnt_rdata_org
0x1CC5E0 _frnt_objend
0x1CC5E0 _frnt_orgend
0x1CC5E0 _frnt_bss_objend
0x1CC5E0 _frnt_bss_orgend
0x1CC5E0 _frnt_ctors_obj
0x1CC5E0 _frnt_ctors_objend
0x1CC5E0 _frnt_ctors_org
0x1CC5E0 _frnt_ctors_orgend
0x1CC5E0 _frnt_dtors_obj
0x1CC5E0 _frnt_dtors_objend
0x1CC5E0 _frnt_dtors_org
0x1CC5E0 _frnt_dtors_orgend
0xC5E0 _frnt_size
0xE7000 _lead_obj
0xE7000 _lead_org
0xE7000 _path_obj
0xE7000 _path_org
0xE7000 _lead_rdata_obj
0xE7000 _lead_rdata_org
0xE7000 _path_rdata_obj
0xE7000 _path_rdata_objend
0xE7000 _path_rdata_org
0xE7000 _path_rdata_orgend
0xE7000 _path_text_obj
0xE7000 _path_text_org
0xE7000 popNode
0xECED0 _lead_objend
0xECED0 _lead_orgend
0xECED0 _lead_bss_objend
0xECED0 _lead_bss_orgend
0xECED0 _lead_ctors_obj
0xECED0 _lead_ctors_objend
0xECED0 _lead_ctors_org
0xECED0 _lead_ctors_orgend
0xECED0 _lead_dtors_obj
0xECED0 _lead_dtors_objend
0xECED0 _lead_dtors_org
0xECED0 _lead_dtors_orgend
0x5ED0 _lead_size
0xF27C8 _path_objend
0xF27C8 _path_orgend
0xF27C8 _path_bss_objend
0xF27C8 _path_bss_orgend
0xF27C8 _path_ctors_obj
0xF27C8 _path_ctors_objend
0xF27C8 _path_ctors_org
0xF27C8 _path_ctors_orgend
0xF27C8 _path_dtors_obj
0xF27C8 _path_dtors_objend
0xF27C8 _path_dtors_org
0xF27C8 _path_dtors_orgend
0xB7C8 _path_size
0xF3000 _mcard_obj
0xF3000 _mcard_org
0xF3000 _mcard_rdata_obj
0xF3000 _mcard_rdata_org
0x10F288 _mcard_objend
0x10F288 _mcard_orgend
0x10F288 _mcard_bss_objend
0x10F288 _mcard_bss_orgend
0x10F288 _mcard_ctors_obj
0x10F288 _mcard_ctors_objend
0x10F288 _mcard_ctors_org
0x10F288 _mcard_ctors_orgend
0x10F288 _mcard_dtors_obj
0x10F288 _mcard_dtors_objend
0x10F288 _mcard_dtors_org
0x10F288 _mcard_dtors_orgend
0x1C288 _mcard_size
0x12D18 __rdata_objend
0x12D18 __rdata_orgend
0x12D18 __text_obj
0x12D18 __text_org
0x12D18 sdSelfModifyingCode
0x2D18 __rdata_size
0x9B320 __text_objend
0x9B320 __text_orgend
0x9B320 __data_obj
0x9B320 __data_org
0x9B320 sea
0x88608 __text_size
0xEC68 __data_size
0xA84 __sdata_size
0x0 __ctors_size
0x0 __dtors_size
0x0 _lead_sdata_size
0x0 _lead_sbss_size
0x0 _lead_ctors_size
0x0 _lead_dtors_size
0x0 _path_rdata_size
0x0 _path_sdata_size
0x0 _path_sbss_size
0x0 _path_ctors_size
0x0 _path_dtors_size
0x0 _frnt_sdata_size
0x0 _frnt_sbss_size
0x0 _frnt_ctors_size
0x0 _frnt_dtors_size
0x0 _mcard_sdata_size
0x0 _mcard_sbss_size
0x0 _mcard_ctors_size
0x0 _mcard_dtors_size
0xAB3A0 __sbss_objend
0xAB3A0 __sbss_orgend
0xAB3A0 __bss_obj
0xAB3A0 __bss_org
0xAB3A0 cyclecluts
0x990 __sbss_size
0x3AF68 __bss_size
0xE70A0 _lead_rdata_objend
0xE70A0 _lead_rdata_orgend
0xE70A0 _lead_text_obj
0xE70A0 _lead_text_org
0xE70A0 leadRand
0xA0 _lead_rdata_size
0xECBE8 _lead_text_objend
0xECBE8 _lead_text_orgend
0xECBE8 _lead_data_obj
0xECBE8 _lead_data_org
0xECBE8 pathParams
0x5B48 _lead_text_size
0xECC0C _lead_data_objend
0xECC0C _lead_data_orgend
0xECC0C _lead_sdata_obj
0xECC0C _lead_sdata_objend
0xECC0C _lead_sdata_org
0xECC0C _lead_sdata_orgend
0xECC0C _lead_sbss_obj
0xECC0C _lead_sbss_objend
0xECC0C _lead_sbss_org
0xECC0C _lead_sbss_orgend
0x24 _lead_data_size
0xECC10 _lead_bss_obj
0xECC10 _lead_bss_org
0xECC10 d.21
0x2C0 _lead_bss_size
0xE9108 _path_text_objend
0xE9108 _path_text_orgend
0xE9108 _path_data_obj
0xE9108 _path_data_org
0xE9108 ends
0x2108 _path_text_size
0xE91A4 _path_data_objend
0xE91A4 _path_data_orgend
0xE91A4 _path_sdata_obj
0xE91A4 _path_sdata_objend
0xE91A4 _path_sdata_org
0xE91A4 _path_sdata_orgend
0xE91A4 _path_sbss_obj
0xE91A4 _path_sbss_objend
0xE91A4 _path_sbss_org
0xE91A4 _path_sbss_orgend
0x9C _path_data_size
0xE91A8 _path_bss_obj
0xE91A8 _path_bss_org
0xE91A8 omap
0x9620 _path_bss_size
0x1C0974 _frnt_rdata_objend
0x1C0974 _frnt_rdata_orgend
0x1C0974 _frnt_text_obj
0x1C0974 _frnt_text_org
0x1C0974 SetVariable
0x974 _frnt_rdata_size
0x1C676C _frnt_text_objend
0x1C676C _frnt_text_orgend
0x1C676C _frnt_data_obj
0x1C676C _frnt_data_org
0x1C676C carSelectPlayerText
0x5DF8 _frnt_text_size
0x1C6D0C _frnt_data_objend
0x1C6D0C _frnt_data_orgend
0x1C6D0C _frnt_sdata_obj
0x1C6D0C _frnt_sdata_objend
0x1C6D0C _frnt_sdata_org
0x1C6D0C _frnt_sdata_orgend
0x1C6D0C _frnt_sbss_obj
0x1C6D0C _frnt_sbss_objend
0x1C6D0C _frnt_sbss_org
0x1C6D0C _frnt_sbss_orgend
0x5A0 _frnt_data_size
0x1C6D10 _frnt_bss_obj
0x1C6D10 _frnt_bss_org
0x1C6D10 result.42
0x58D0 _frnt_bss_size
0xF3644 _mcard_rdata_objend
0xF3644 _mcard_rdata_orgend
0xF3644 _mcard_text_obj
0xF3644 _mcard_text_org
0xF3644 card_start__6MCSLOT
0x644 _mcard_rdata_size
0x10EB40 _mcard_text_objend
0x10EB40 _mcard_text_orgend
0x10EB40 _mcard_data_obj
0x10EB40 _mcard_data_org
0x10EB40 _6MCSLOT.s_init
0x1B4FC _mcard_text_size
0x10EE34 _mcard_data_objend
0x10EE34 _mcard_data_orgend
0x10EE34 _mcard_sdata_obj
0x10EE34 _mcard_sdata_objend
0x10EE34 _mcard_sdata_org
0x10EE34 _mcard_sdata_orgend
0x10EE34 _mcard_sbss_obj
0x10EE34 _mcard_sbss_objend
0x10EE34 _mcard_sbss_org
0x10EE34 _mcard_sbss_orgend
0x2F4 _mcard_data_size
0x10EE38 _mcard_bss_obj
0x10EE38 _mcard_bss_org
0x10EE38 _6MCSLOT.s_copyBlockInfo
0x450 _mcard_bss_size
0x12EF4 FindSurfaceD2
0x130D4 sdHeightOnPlane
0x1322C RoadInCell
0x1346C sdGetCell
0x136C0 ProcessStraightsDriver2Lump
0x136F4 ProcessCurvesDriver2Lump
0x13728 ProcessJunctionsDriver2Lump
0x137CC MapHeight
0x1380C GetSurfaceIndex
0x13848 sdGetBSP
0x138F0 FindRoadInBSP
0x13980 ColourCycle
0x13CAC InitAnimatingObjects
0x13DF8 animate_object
0x146A4 animate_garage_door
0x14828 InitSpooledAnimObj
0x148A0 DrawAnimatingObject
0x14950 FindSmashableObjects
0x149A8 int_garage_door
0x149B4 InitCyclingPals
0x14A58 InitOverlays
0x14C3C DisplayOverlays
0x14DA8 DrawPercentageBar
0x152D4 DrawProximityBar
0x157F4 DrawDrivingGameOverlays
0x15E70 SetFullscreenDrawing
0x15F20 InitPercentageBar
0x15F58 EnablePercentageBar
0x15F6C SetColourByValue
0x16098 TransparencyOn
0x16114 UpdateFlashValue
0x16184 PrintScoreTableTime
0x16280 DrawTargetBlip
0x16578 DrawTargetArrow
0x16814 DrawPlayerDot
0x16AE8 ProcessOverlayLump
0x16C0C Long2DDistance
0x16D14 DrawOverheadMap
0x17C30 DrawFullscreenMap
0x183E8 DrawCopIndicators
0x185A0 DrawMultiplayerMap
0x18980 FlashOverheadMap
0x18AA0 LoadMapTile
0x18BF4 draw_box
0x18D54 DrawN
0x18F18 DrawCompass
0x19194 DrawBigCompass
0x193B4 CopIndicator
0x19594 DrawSightCone
0x197BC InitOverheadMap
0x198E0 InitMultiplayerMap
0x19994 WorldToMultiplayerMap
0x19A60 SetMapPos
0x19AF0 WorldToOverheadMapPositions
0x19D0C SetFullscreenMapMatrix
0x19DE8 WorldToFullscreenMap
0x19E7C WorldToFullscreenMap2
0x19F44 ProcessPalletLump
0x1A094 load_civ_palettes
0x1A09C InitPadRecording
0x1A234 SaveReplayToBuffer
0x1A798 LoadReplayFromBuffer
0x1AD50 cjpRecord
0x1AF34 valid_region
0x1AFFC cjpPlay
0x1B090 GetPingInfo
0x1B118 LoadAttractReplay
0x1B17C AllocateReplayStream
0x1B1F0 Get
0x1B280 Put
0x1B364 RecordWaypoint
0x1B434 UnpackRNC
0x1B488 Unpack
0x1BA88 InitTextureNames
0x1BA90 TannerStuckInCar
0x1BBB8 StoreGameFlags
0x1BBE8 TannerCanEnterCar
0x1BCD4 SetCameraVector
0x1BCFC Apply_Inv_CameraMatrix
0x1BD30 FrustrumCheck16
0x1BDEC FrustrumCheck
0x1BEE4 Asm_PlotSprite
0x1C160 PointFaceCheck
0x1C380 CarCarCollision3
0x1C408 collided3d
0x1C51C bcollided2d
0x1C8C0 bFindCollisionPoint
0x1CC30 bFindCollisionTime
0x1CEEC ApplyDamage
0x1D0B0 DamageCar3D
0x1D454 DamageCar
0x1D68C CarBuildingCollision
0x1E3E8 HandleThrownBombs
0x1E810 DrawThrownBombs
0x1EA00 BombThePlayerToHellAndBack
0x1EC58 BombCollisionCheck
0x1ED18 ExplosionCollisionCheck
0x1F4F4 AddFlash
0x1F570 InitThrownBombs
0x1F5F4 InitCamera
0x1FA20 ModifyCamera
0x1FC18 CameraCollisionCheck
0x2003C PlaceCameraFollowCar
0x2050C PlaceCameraInCar
0x20904 PlaceCameraAtLocation
0x20A10 TurnHead
0x20B08 PointAtTarget
0x20BC0 OK_To_Zoom
0x20C70 SetBasePos
0x20C94 plotNewCarModel
0x20EA0 plotCarPolyGT3
0x210B8 DrawCar
0x21AF8 DrawCarWheels
0x22180 DrawWheelObject
0x22458 ComputeCarLightingLevels
0x22860 buildNewCars
0x22960 buildNewCarFromModel
0x230C8 MangleWheelModels
0x23390 GetCarPalIndex
0x233DC DrawCarObject
0x234DC PlayerCarFX
0x235F8 setupLightingMatrices
0x23750 restoreLightingMatrices
0x237B8 plotCarPolyB3
0x238C4 plotCarPolyFT3
0x23A20 plotCarPolyGT3nolight
0x23BAC GetFirstPackedCop
0x23DC0 ClearCopUsage
0x23DE8 InitCar
0x24028 GetNextRoadInfo
0x26964 InitNodeList
0x26CAC GetNodePos
0x26F20 CheckChangeLanes
0x27530 CreateNewNode
0x280D8 InitCivState
0x282E8 PingOutAllSpecialCivCars
0x2840C PingOutAllCivCarsAndCopCars
0x28554 CheckPingOut
0x286E0 CreateCivCarWotDrivesABitThenStops
0x28960 CreateStationaryCivCar
0x28DB4 PingInCivCar
0x2A4C4 AttemptUnPark
0x2A5FC CivAccelTrafficRules
0x2ABA8 SetUpCivCollFlags
0x2B26C CivAccel
0x2B53C CivSteerAngle
0x2B8E4 CivFindStation
0x2BAEC CivFindPointOnPath
0x2BCF4 CreateRoadblock
0x2CDA4 InitCivCars
0x2CE10 CivControl
0x2CF18 TrafficLightCycle
0x2CF80 PingOutCar
0x2D084 CivCarFX
0x2D11C FindClosestCar
0x2D220 SetUpTrafficLightPhase
0x2D24C NotTravellingAlongCurve
0x2D298 decomp_asm
0x2D304 BuildWorldMatrix
0x2D3F8 Calc_Object_MatrixYZX
0x2D470 _RotMatrixX
0x2D49C _RotMatrixY
0x2D4C8 _RotMatrixZ
0x2D4F4 RotMatrixXYZ
0x2D51C _MatrixRotate
0x2D55C InvertMatrix
0x2D5C8 ScaleCamera
0x2D678 Getlong
0x2D6A8 RandomInit
0x2D724 Random2
0x2D78C WibbleDownTheRoad
0x2D99C InitCops
0x2DAD8 ControlCops
0x2DEFC CopControl1
0x2ECD8 ControlCopDetection
0x2F3CC ControlNumberOfCops
0x2F60C CopControl
0x2F680 InitCopState
0x2F6FC PassiveCopTasks
0x2F7F8 InitCopData
0x2F844 UpdateCopSightData
0x2F8DC FindCost
0x2F994 AddReverseLight
0x2FAEC AddIndicatorLight
0x2FDE4 AddBrakeLight
0x30148 AddCopCarLight
0x30544 AddNightLights
0x30D9C AddSmokingEngine
0x30FAC AddFlamingEngine
0x31160 LoadCosmetics
0x311B0 ProcessCosmeticsLump
0x31360 SetupSpecCosmetics
0x31398 DrawInGameCutscene
0x314E8 TriggerChase
0x316EC ReleaseInGameCutscene
0x31A20 TriggerInGameCutsceneSystem
0x31EDC SetNullPlayer
0x31F60 SetNullPlayerDontKill
0x31FE0 DestroyPlayer
0x32118 LoadCutsceneToReplayBuffer
0x3243C LoadCutsceneToBuffer
0x325C0 InitInGameCutsceneVariables
0x3262C HandleInGameCutscene
0x32740 TriggerInGameCutscene
0x3283C CalcInGameCutsceneSize
0x328C8 PreLoadInGameCutscene
0x328E8 CutsceneCameraChange
0x329B4 LoadInGameCutscene
0x32A34 FindNextCutChange
0x32A98 LoadCutsceneInformation
0x32B54 FreeCutsceneBuffer
0x32BC0 IsCutsceneResident
0x32C08 ShowCutsceneError
0x32C10 PlacePoolForCar
0x33574 AddLeaf
0x337AC InitDebrisNames
0x33B9C InitDebris
0x33FA8 AddGroundDebris
0x34138 DrawSmashable_sprites
0x34424 AddSmallStreetLight
0x34858 AddLightEffect
0x34C6C PreLampStreak
0x34D1C damage_lamp
0x34DAC damage_object
0x34F64 AddTrafficLight
0x352CC ShowCarlight
0x3555C ShowLight1
0x35750 ShowLight
0x3642C ShowGroundLight
0x36688 RoundShadow
0x368D8 ShowFlare
0x36B6C DisplayWater
0x36E18 DisplaySpark
0x37158 GetSmokeDrift
0x37250 Setup_Debris
0x37474 Setup_Smoke
0x37950 Setup_Sparks
0x37B14 DisplayDebris
0x38008 HandleDebris
0x3877C DisplaySmoke
0x38CB4 add_haze
0x38E08 DrawRainDrops
0x3919C AddRainDrops
0x39468 DisplaySplashes
0x397C0 DisplayLightReflections
0x39A54 AllocateDebris
0x39A90 AllocateLeaf
0x39ACC AllocateSmoke
0x39B08 find_lamp_streak
0x39B78 DoLightning
0x39C68 FindCarLightFade
0x39C90 InitFXPos
0x39D68 ReleaseDebris
0x39D8C ReleaseLeaf
0x39DB0 ReleaseRainDrop
0x39DD4 ReleaseSmoke
0x39DF8 SetupRain
0x39E54 SwirlLeaves
0x39FA8 GetDebrisColour
0x3A000 DoWeather
0x3A0BC InitThunder
0x3A120 RequestThunder
0x3A144 DoThunder
0x3A234 MoveSmashable_object
0x3A2D4 AllocateRainDrop
0x3A310 DentCar
0x3A6E4 CreateDentableCar
0x3A874 InitHubcap
0x3A8F8 LoseHubcap
0x3AB4C MoveHubcap
0x3AE60 ProcessDentLump
0x3B1C0 InitialiseDenting
0x3B1F0 LoadDenting
0x3B240 SetupSpecDenting
0x3B2E4 EditCamera
0x3B548 RecordCamera
0x3B794 CheckCameraChange
0x3B8C8 IsMovingCamera
0x3BBA8 CameraBar
0x3C1B0 ShowIcons
0x3C5BC ShowReplayMenu
0x3C7A8 ControlReplay
0x3DE60 DoAutoDirect
0x3E328 SelectCameraCar
0x3E53C InvalidCamera
0x3E79C InitDirectorVariables
0x3E808 DeleteCurrentCamera
0x3E89C setCamera
0x3E94C FindNextChange
0x3E9B8 FindFreeCamera
0x3E9F8 deleteCamera
0x3EA40 DeleteAllCameras
0x3EAA4 ShowReplayOptions
0x3EAF0 NoMoreCamerasErrorMessage
0x3EB6C FirstCamera
0x3EB9C dist
0x3EC0C SetPlaybackCamera
0x3ECC4 SetCameraReturnedFromCutscene
0x3ED7C addSubdivSpriteShadow
0x3EF64 DrawSprites
0x3F5F0 GetNextPackedCop
0x3F6B0 DrawMapPSX
0x40218 SetupPlaneColours
0x40408 SetupDrawMapPSX
0x40534 InitFrustrumMatrix
0x40608 ProcessMapLump
0x407D8 DrawAllTheCars
0x40A90 PlotBuildingModelSubdivNxN
0x411F4 DrawAllBuildings
0x4143C RenderModel
0x415E4 normalIndex
0x417A4 SetFrustrumMatrix
0x417DC Set_Inv_CameraMatrix
0x41814 CalcObjectRotationMatrices
0x418BC PlotMDL_less_than_128
0x418E8 UnpackCellObject
0x419A8 Apply_InvCameraMatrixAndSetMatrix
0x41A50 Apply_InvCameraMatrixSetTrans
0x41B10 Tile1x1
0x41D7C DrawTILES
0x420B0 makeMesh
0x42650 drawMesh
0x42AEC SubdivNxM
0x42F34 ProcessSubDivisionLump
0x42F40 TileNxN
0x43090 ProcessLowDetailTable
0x4310C InitDrivingGames
0x4326C HandleDrivingGames
0x438DC DrawDrivingGames
0x439FC CarConeCollision
0x43AE8 SetSmashedCone
0x43CE0 MoveSmashedCones
0x43DEC DrawSmashedCone
0x43F34 GetConePos
0x44034 DrawCone
0x44168 DrawSmashedCones
0x44244 FadeInHiresScreen
0x445F4 FadeOutHiresScreen
0x448CC SetPleaseWait
0x44A40 CheckForCorrectDisc
0x44CE0 ShowHiresScreens
0x44DA0 SetupDefDispEnv
0x44E40 SetupDefDrawEnv
0x44E88 Env_MakeColourAddTable
0x44F08 Init_Reflection_Mapping
0x44F60 AddEnvSounds
0x45AB8 GetVisValue
0x45C68 VisibilityLists
0x460EC InitTrain
0x46258 SetUpEvents
0x47538 SetCamera
0x479DC StepFromToEvent
0x47BD4 StepPathEvent
0x4830C StepHelicopter
0x48A60 StepEvents
0x49364 DrawFerrisWheel
0x49684 DrawRotor
0x49C38 DrawEvents
0x4A688 EventSurface
0x4AA78 TriggerEvent
0x4B29C SpecialCamera
0x4B5FC DetonatorTimer
0x4BAB0 MultiCarEvent
0x4BBD4 InitEvents
0x4BC50 EventCollisions
0x4BD2C OffsetTarget
0x4BD6C MakeEventTrackable
0x4BDA0 OnBoat
0x4BE24 BoatOffset
0x4BE5C SetElTrainRotation
0x4BEB8 InitDoor
0x4BF54 InitEventCamera
0x4C014 ResetEventCamera
0x4C0A4 NextNode
0x4C158 GetBridgeRotation
0x4C208 TriggerDoor
0x4C280 ScreenShake
0x4C330 NoteFelony
0x4C8B4 AdjustFelony
0x4CC28 CheckPlayerMiscFelonies
0x4D280 InitFelonySystem
0x4D2B8 CarHitByPlayer
0x4D364 InitFelonyDelayArray
0x4D3A0 InitFelonyData
0x4D420 GetCarHeading
0x4D430 GetCarDirectionOfTravel
0x4D478 ReInitSystem
0x4D518 PlayFMV
0x4D5D0 PlayRender
0x4D690 ResidentModelsBodge
0x4D784 LoadLevelSFX
0x4DE30 StartGameSounds
0x4E188 GetEngineRevs
0x4E2E8 ControlCarRevs
0x4E560 ControlSpeech
0x4E710 InitDopplerSFX
0x4E790 DoDopplerSFX
0x4F4A0 DoPoliceLoudhailer
0x4F668 CollisionSound
0x4F984 ExplosionSound
0x4FB94 JerichoSpeak
0x4FC90 SoundTasks
0x500E4 InitMusic
0x5027C Tunnels
0x50400 AddTunnels
0x50C08 AddEnvSnd
0x50E08 IdentifyZone
0x514BC CalcEffPos
0x517D0 CalcEffPos2
0x51F0C UpdateEnvSnd
0x52168 SetEnvSndVol
0x52190 CopSay
0x5228C PlaySpeech
0x522EC CarHasSiren
0x52388 InitEnvSnd
0x5243C InitTunnels
0x52460 LoadBankFromLump
0x52510 SpecialVehicleKludge
0x52540 MapCarIndexToBank
0x525F8 DoSpeech
0x52654 InitSpeechQueue
0x52694 BodSay
0x526D0 MissionSay
0x5270C jsqrt
0x527C0 FunkUpDaBGMTunez
0x52848 AddTunnel
0x52904 SetEnvSndPos
0x52948 InitLeadHorn
0x52954 LeadHorn
0x52A28 GameStart
0x52E98 ReInitFrontend
0x52FE8 RunMissionLadder
0x532B8 LaunchGame
0x535D8 GetRandomChase
0x536B0 StartRender
0x536D8 FindPrevMissionFromLadderPos
0x53740 FindMissionLadderPos
0x5381C InitCarPhysics
0x539E8 TempBuildHandlingMatrix
0x53B08 UpdateCarPoints
0x53C00 GlobalTimeStep
0x551EC SetShadowPoints
0x553CC LongQuaternion2Matrix
0x554F0 initOBox
0x556E0 CheckCarToCarCollisions
0x55A9C ProcessCarPad
0x562AC TerminateSkidding
0x56350 CheckCarEffects
0x568D8 jump_debris
0x56A0C StepCarPhysics
0x56A6C InitialiseCarHandling
0x56A74 nose_down
0x56AE4 RebuildCarMatrix
0x56C24 FixCarCos
0x56CB8 InitSkidding
0x56CEC GetPlayerId
0x56D54 AddExplosion
0x56E44 HandleExplosion
0x56FC0 initExplosion
0x572A8 DrawExplosion
0x57B0C InitExObjects
0x57B50 DrawAllExplosions
0x57BF0 SaveConfigData
0x57DF0 LoadConfigData
0x57FD4 CalcReplayDataSize
0x57FF4 SaveReplayData
0x58014 LoadReplayData
0x58034 CalcGameDataSize
0x5803C SaveGameData
0x580CC LoadGameData
0x58164 CalcConfigDataSize
0x5816C ShowLoading
0x582AC FadeGameScreen
0x583F4 ShowLoadingScreen
0x58794 SetupFadePolys
0x58824 DrawFadePoly
0x589B0 SetupScreenFade
0x589D0 CloseShutters
0x58B08 DisplayMissionTitle
0x58C08 ProcessLumps
0x59050 LoadGameLevel
0x59238 InitModelNames
0x59330 GameInit
0x59A44 StepSim
0x5A8DC GameLoop
0x5AB28 StepGame
0x5B384 main
0x5B54C UpdatePlayerInformation
0x5B888 RenderGame2
0x5BCE4 InitGameVariables
0x5BF74 DealWithHorn
0x5C16C Havana3DOcclusion
0x5C458 DrawGame
0x5C574 EndGame
0x5C590 EnablePause
0x5C5D0 CheckForPause
0x5C668 FadeScreen
0x5C6E0 RenderGame
0x5C81C ReplayLog_Fnarr_He_Said_Log
0x5C824 CheckUnpackNewRegions
0x5CC00 ControlMap
0x5CD80 InitMap
0x5CFA8 PVSDecode
0x5D224 GetPVSRegionCell2
0x5D36C InitCellData
0x5D40C FindModelPtrWithName
0x5D4C4 FindModelIdxWithName
0x5D560 PositionVisible
0x5D61C newPositionVisible
0x5D6C4 ProcessRoadsLump
0x5D6CC ProcessJunctionsLump
0x5D6D4 ProcessRoadBoundsLump
0x5D6DC ProcessJuncBoundsLump
0x5D6E4 GetVisSetAtPosition
0x5D7BC NewProcessRoadMapLump
0x5D814 GetMissionSound
0x5D950 DoCutsceneSound
0x5DD10 InitializeMissionSound
0x5E020 DoMissionSound
0x5EE00 SilenceThisCar
0x5F12C RequestXA
0x5F1B4 HandleRequestedXA
0x5F224 InitializeCutsceneSound
0x5F25C SetMSoundVar
0x5F294 AdjustPlayerCarVolume
0x5F2FC DrawMission
0x5F56C DrawWorldTarget
0x5F864 DrawMultiplayerTarget
0x5FA88 DrawTimer
0x5FB7C DisplayPlayerPosition
0x5FBC4 DrawMessage
0x5FC3C DrawWorldTargets
0x5FC8C DrawOverheadTargets
0x5FCDC DrawFullscreenTargets
0x5FD2C DrawMultiplayerTargets
0x5FD7C DrawOverheadTarget
0x5FE94 DrawFullscreenTarget
0x5FFAC StorePlayerPosition
0x60248 RestorePlayerPosition
0x603B0 StoreCarPosition
0x604E4 RestoreCarPosition
0x60740 StoreEndData
0x607E4 RestoreStartData
0x6084C InitialiseMissionDefaults
0x60A74 LoadMission
0x61274 HandleMission
0x614A4 HandleTimer
0x61684 RegisterChaseHit
0x61784 Swap2Cars
0x61C5C HandleMissionThreads
0x61E3C MRCommand
0x62470 MRProcessTarget
0x63728 MRCreateCar
0x639A0 PreProcessTargets
0x63B78 HandleGameOver
0x63F84 SetMissionComplete
0x641A8 ActivateNextFlag
0x64268 PauseMissionTimer
0x642A8 SetMissionMessage
0x64348 SetPlayerMessage
0x643C4 TargetComplete
0x64408 TargetActive
0x6444C SetConfusedCar
0x64498 MROperator
0x645AC MRFunction
0x64614 MRInitialiseThread
0x64630 MRStartThread
0x64690 MRStopThread
0x6469C MRCommitThreadGenocide
0x646E0 MRJump
0x6472C MRPush
0x64744 MRPop
0x64760 MRGetParam
0x647CC MRGetVariable
0x648B0 MRSetVariable
0x649E4 MRRequestCar
0x64A24 MRHandleCarRequests
0x64A50 MRCancelCarRequest
0x64A74 Handle321Go
0x64AD0 CompleteAllActiveTargets
0x64B38 SetMissionFailed
0x64BD8 SetMissionOver
0x64C24 CalcLapTime
0x64C60 SetCarToBeStolen
0x64CD0 MakePhantomCarEqualPlayerCar
0x64CFC ProcessMDSLump
0x64E6C ProcessCarModelLump
0x65134 GetCarModel
0x6520C DrawBodySprite
0x6594C StoreVertexLists
0x65AD8 SetupTannerSkeleton
0x65CD8 newShowTanner
0x66648 newRotateBones
0x66FB8 GetModelVertPtr
0x670CC DrawCiv
0x678D0 DrawTanner
0x67D44 DrawCharacter
0x681EC InitTannerShadow
0x68358 TannerShadow
0x68B2C DoCivHead
0x69438 DrawObject
0x69874 wjmDraw3
0x69A38 ProcessMotionLump
0x69AB8 SetupPedMotionData
0x69AD8 SetSkelModelPointers
0x69B6C SetupPedestrian
0x69BA4 CellEmpty
0x69E1C RaySlabsIntersection
0x69FB4 lineClear
0x6A498 CollisionCopList
0x6A64C CheckScenaryCollisions
0x6ADBC QuickBuildingCollisionCheck
0x6B220 DoScenaryCollisions
0x6B2EC GlobalPositionToCellNumber
0x6B3E4 CellAtPositionEmpty
0x6B430 SetCopListCell
0x6B45C BuildCollisionCopList
0x6B480 InitControllers
0x6B5A8 ReadControllers
0x6B6F0 MapPad
0x6B8E0 HandleDualShock
0x6BBC4 HandlePadVibration
0x6BDF8 CloseControllers
0x6BE38 SetPadVibration
0x6BEB4 StopPadVibration
0x6BEEC StopDualShockMotors
0x6BEF4 SetDuplicatePadData
0x6BF24 ClearPad
0x6BF50 ShowPauseMenu
0x6C2AC InitaliseMenu
0x6C6B8 SetupMenu
0x6C7F4 DrawVisibleMenus
0x6CBE8 ControlMenu
0x6D044 EnterScoreName
0x6D324 CreateScoreNames
0x6D694 DrawHighScoreMenu
0x6D9B0 SaveReplay
0x6D9D4 SaveGame
0x6D9F8 EnterName
0x6DA18 MaxMenuStringLength
0x6DAD0 PauseMap
0x6DB34 SfxVolume
0x6DC04 MusicVolume
0x6DCD4 DrawPauseMenus
0x6DD34 IHaveThePower
0x6DF54 ProcessTannerPad
0x6E408 InitTanner
0x6E5C4 InitPedestrians
0x6E6C4 ActivatePlayerPedestrian
0x6EC88 PlaceRoadBlockCops
0x6F00C CreatePedAtLocation
0x6F16C ControlPedestrians
0x6F2DC PedDoNothing
0x6F5AC PedUserRunner
0x6F80C SetupGetOutCar
0x6FA3C SetupGetInCar
0x6FD08 TannerCameraHandler
0x6FF48 TannerSitDown
0x700D0 AnimatePed
0x7047C PingInPedestrians
0x70878 FindPointOfCollision
0x70A9C TannerCarCollisionCheck
0x71054 SetupCivJump
0x71324 CivPedWalk
0x715FC CorrectPathPosition
0x71608 CalcPedestrianDirection
0x717AC FindTannerASeat
0x718C8 add_seated
0x71A5C set_coll_box
0x71B7C BuildCarCollisionBox
0x71E0C CalculatePedestrianInterest
0x71F54 DestroyPedestrians
0x71FB4 DestroyPedestrian
0x720AC CreatePedestrian
0x7211C HandlePedestrians
0x7216C DeActivatePlayerPedestrian
0x72290 DrawAllPedestrians
0x72430 TannerActionHappening
0x72478 SetTannerPosition
0x72500 SetPedestrianTurn
0x72584 PedSurfaceType
0x725B8 IsPavement
0x72644 FindSeated
0x72738 CheckForCar
0x7283C PedestrianActionInit_WalkToTarget
0x728C8 SetupTannerSitDown
0x72904 SetupPressButton
0x72944 PedUserWalker
0x72A10 PedCarryOutAnimation
0x72B5C PedGetInCar
0x72BEC PedGetOutCar
0x72C90 PedPressButton
0x72CE0 CivPedDoNothing
0x72CE8 CivPedSit
0x72CF0 CivPedJump
0x72DA0 CopStand
0x72DFC CivGetIn
0x72EE4 TannerCollision
0x72FD0 DestroyCivPedestrians
0x73038 SetupDoNowt
0x7307C SetupWalker
0x730B8 SetupRunner
0x730FC SetupBack
0x7313C SetupCivPedRouteData
0x731F8 PingOutPed
0x73270 SetupCivPedWalk
0x732C0 CheckForPlayerCar
0x73328 ProcessChairLump
0x73334 ChangeCarPlayerToPed
0x7350C ChangePedPlayerToCar
0x73898 UpdatePlayers
0x739D8 InitPlayer
0x73C0C RequestSlightPauseBeforeCarSoundStarts
0x73C54 HaveCarSoundStraightAway
0x73C8C MakeTheCarShutUp
0x73CC8 LoadFont
0x73EA0 PrintString
0x74140 PrintDigit
0x74364 PrintStringBoxed
0x745DC PrintScaledString
0x74858 DrawButton
0x74A10 SetTextColour
0x74A24 StringWidth
0x74AB0 OutputString
0x74B8C PrintStringRightAligned
0x74BD8 PrintStringCentred
0x74C28 StoreClut2
0x74C64 SetCLUT16Flags
0x74D34 PrintStringFeature
0x74D54 GetNextWord
0x74D94 SetFontTPage
0x74E54 InitButtonTextures
0x74EB4 ROADS_GetRouteData
0x74EC0 InitialiseScoreTables
0x7503C OnScoreTable
0x751F8 AddScoreToTable
0x7526C CheckGetawayPlacing
0x752BC CheckTrailblazerPlacing
0x75338 CheckCheckpointPlacing
0x75388 CheckSurvivalPlacing
0x753D8 ResetTable
0x75408 GetTyreTrackPositions
0x75540 AddTyreTrack
0x759E0 DrawTyreTracks
0x75F34 InitShadow
0x76108 SubdivShadow
0x766CC PlaceShadowForCar
0x76A40 clipAgainstZ
0x76CD4 clippedPoly
0x77138 sQuad
0x77524 InitTyreTracks
0x77558 SetTyreTrackOldPositions
0x775C8 LoadSky
0x7795C DrawSkyDome
0x77A8C DrawLensFlare
0x780BC DisplaySun
0x78544 DisplayMoon
0x787B0 TunnelSkyFade
0x78964 calc_sky_brightness
0x78B18 PlotSkyPoly
0x78EC4 PlotHorizonMDL
0x790E4 InitSound
0x791D4 ClearChannelFields
0x79250 ResetSound
0x79330 CompleteSoundSetup
0x79504 SetChannelPitch
0x795C4 ComputeDoppler
0x79734 PauseXM
0x79794 PauseSFX
0x79958 UnPauseXM
0x799B0 UnPauseSFX
0x79B38 SoundHandler
0x79BCC LoadSoundBankDynamic
0x79E04 GetFreeChannel
0x79F38 UpdateVolumeAttributesS
0x7A360 CalculateVolume
0x7A534 FESound
0x7A6C0 SetReverbState
0x7A704 SetReverbInGameState
0x7A75C SetReverbChannelState
0x7A7B0 SetMasterVolume
0x7A7F8 StartSound
0x7A894 Start3DSoundVolPitch
0x7A994 Start3DTrackingSound
0x7AA78 SetChannelVolume
0x7AB3C AllocateReverb
0x7ABA8 SetPlayerOwnsChannel
0x7ABCC SetChannelPosition3
0x7ACD8 PauseSound
0x7AD10 UnPauseSound
0x7AD40 StopChannel
0x7ADF4 StopAllChannels
0x7AE34 LockChannel
0x7AE64 UnlockChannel
0x7AE90 LoadSoundBank
0x7AF84 FreeXM
0x7AFD0 StartXM
0x7B050 StopXM
0x7B074 SetXMVolume
0x7B0C4 UpdateVolumeAttributesM
0x7B178 VsyncProc
0x7B1C4 UpdateXMSamples
0x7B228 test_changemode
0x7B3C4 check_regions_present
0x7B6C4 UpdateSpool
0x7B88C SendTPage
0x7BB14 LoadInAreaTSets
0x7BD84 SendSBK
0x7BEBC init_spooled_models
0x7C08C CheckLoadAreaData
0x7C28C LoadRegionData
0x7C464 ProcessSpoolInfoLump
0x7C5C0 unpack_cellpointers
0x7C74C SpecClutsSpooled
0x7C9B8 CleanModelSpooled
0x7CAFC DamagedModelSpooled
0x7CC24 LowModelSpooled
0x7CD64 CleanSpooled
0x7CF0C Tada
0x7D144 SpecialStartNextBlock
0x7D4E0 CheckSpecialSpool
0x7D6D8 InitSpecSpool
0x7D978 Unpack_CellPtrs
0x7D9CC GotRegion
0x7DA60 data_cb_misc
0x7DB38 ready_cb_misc
0x7DBCC data_cb_soundbank
0x7DCA4 ready_cb_soundbank
0x7DDA8 data_cb_regions
0x7DE90 ready_cb_regions
0x7DF64 data_cb_textures
0x7E078 ready_cb_textures
0x7E1A8 changemode
0x7E24C DrawCDicon
0x7E2CC CheckValidSpoolData
0x7E36C RequestSpool
0x7E3E4 ClearRegion
0x7E494 InitSpooling
0x7E528 SpoolSYNC
0x7E540 SetupModels
0x7E580 LoadInAreaModels
0x7E5DC UnpackRegion
0x7E66C WaitCloseLid
0x7E6D8 FoundError
0x7E724 StartSpooling
0x7E7C0 LowSpooled
0x7E84C QuickSpoolSpecial
0x7E8DC PrepareSecretCar
0x7E958 stopgame
0x7E9A0 startgame
0x7E9D0 LoadfileSeg
0x7ECF0 SwapDrawBuffers2
0x7EDDC SetupDrawBuffers
0x7EF0C SetupDrawBufferData
0x7F118 SetCityType
0x7F354 Loadfile
0x7F3E8 ClearMem
0x7F47C setMem8
0x7F524 setMem16
0x7F5B4 ResetCityType
0x7F5C8 FileExists
0x7F640 DiscSwapped
0x7F6FC SwapDrawBuffers
0x7F7C0 InitaliseDrawEnv
0x7F848 Init_FileSystem
0x7F870 DoCDRetry
0x7F8B8 ReportMode
0x7F904 loadsectors
0x7F984 EnableDisplay
0x7F9F0 DisableDisplay
0x7FA10 UpdatePadData
0x7FA44 data_ready
0x7FA74 sector_ready
0x7FB44 Draw3DTarget
0x7FD48 DrawTargetArrowModel
0x800F8 DrawStopZone
0x8047C WorldToCameraPositions
0x80528 IncrementTPageNum
0x805EC Find_TexID
0x80688 LoadPermanentTPages
0x80BB0 GetTextureDetails
0x80DA0 GetTextureInfoName
0x80DDC IncrementClutNum
0x80E14 LoadTPageAndCluts
0x80F3C GetTEXINFName
0x81038 update_slotinfo
0x81080 ProcessTextureInfo
0x81118 ReloadIcons
0x81140 GetTimeStamp
0x81178 StepOneCar
0x8198C GetFrictionScalesDriver1
0x81E20 ConvertTorqueToAngularAcceleration
0x81F50 AddWheelForcesDriver1
0x82BD0 StepCars
0x82C64 PlayXA
0x82D60 GetXAData
0x82DAC PrepareXA
0x82E68 UnprepareXA
0x82EC0 GetMissionXAData
0x82F18 SetXAVolume
0x82F78 StopXA
0x82FC4 ResumeXA
0x83078 PauseXA
0x830F0 XAPrepared
0x830FC cbready
0x831B0 InitXMData
0x8344C XM_Init
0x8392C JPlayNote
0x83B64 JPlayEffects
0x83DA4 SPE
0x841B0 DoEEffects
0x84524 SetPer
0x846D8 DoS3MRetrig
0x848F0 DoVibrato
0x849F0 DoTremolo
0x84B3C UpdatePatternData
0x85034 ApplyEffs
0x85374 DoDolbySS
0x85448 UpdateHardware
0x857A4 ProcessEnvelope
0x85974 ProcessPanEnvelope
0x85B44 XM_Restart
0x85C38 XM_Pause
0x85D18 XM_Exit
0x85D78 XM_Update
0x85DC8 XM_PlayStop
0x85E38 XM_PlayStart
0x85E8C XM_SetSongPos
0x85F7C XM_OnceOffInit
0x85FB4 XM_CloseVAB
0x86008 XM_SetMasterVol
0x8605C XM_FreeVAG
0x8607C UpdateWithTimer
0x86178 XM_DoFullUpdate
0x86234 XM_Quit
0x86278 XM_GetFreeVAB
0x862B8 XM_SetVAGAddress
0x862F0 XM_CloseVAB2
0x86358 XM_SetSongAddress
0x8639C XM_GetSongSize
0x863A4 XM_FreeAllSongIDs
0x863B0 XM_SetFileHeaderAddress
0x863E4 XM_GetFileHeaderSize
0x863EC GetLogPeriod
0x86484 UpdateXMData
0x86538 DoVol
0x86560 DoPan
0x865B4 DoVolSlide
0x86644 DoToneSlide
0x866AC DoXMPanSlide
0x86738 Arpeggio
0x867E4 SetInstr
0x868E0 SetNote
0x869C0 GetLong
0x869EC Interpolate
0x86A6C JPGetPeriod
0x86AA0 GetPeriod
0x86AF0 GetFreq2
0x86B48 CurrentKeyStat
0x86BF4 StpCh
0x86C18 SetFrq
0x86C38 SetVol
0x86C64 PlaySFX
0x86CF8 ClearSPU
0x86D74 InitSPUChannel
0x86DDC SilenceXM
0x86EBC UpdateEffs
0x86F70 IntVols
0x86FA0 GetFreeSongID
0x86FF0 JPClearSPUFlags
0x87024 CalcPlayPos
0x870DC JCalcPat
0x8714C PACKEDCalcPlayPos
0x87228 GetEmpty
0x872F0 CallMemoryCard
0x878D4 libcman_SelectSound
0x87908 libcman_ConfirmSound
0x8793C libcman_CancelSound
0x87970 libcman_ErrorSound
0x879A4 libcman_InitControllerLibrary
0x879F4 libcman_DeInitControllerLibrary
0x87A34 libcman_ReadControllers
0x87A64 DoMemoryCard
0x87CE4 LoadMemCardOverlay
0x87D68 StorePermanentTPage
0x87DDC RestorePermanentTPage
0x87E50 PutCorrectIcon
0x87F50 __main
0x87F58 __SN_ENTRY_POINT
0x87F58 stup2
0x87F7C stup1
0x87FF8 stup0
0x88014 CdInit
0x88164 CdPosToInt
0x881E4 CdSearchFile
0x890B8 CD_sync
0x89338 CD_ready
0x89600 CD_cw
0x89A0C CD_flush
0x89AE0 CD_initvol
0x89BD0 CD_init
0x89DB0 CD_datasync
0x89F18 CD_set_test_parmnum
0x8A000 CdIntToPos
0x8A110 CdReadyCallback
0x8A130 CdControl
0x8A26C CdControlF
0x8A3A0 CdControlB
0x8A4F0 CdGetSector
0x8A510 CD_getsector
0x8A610 CdDataCallback
0x8ABA0 CdRead
0x8AD3C CdReadSync
0x8AE40 CdStatus
0x8AE50 CdMode
0x8AE60 CdLastPos
0x8AE70 CdFlush
0x8AE90 CdReady
0x8AEB0 CdSyncCallback
0x8AED0 CdGetSector2
0x8AEF0 CD_getsector2
0x8AFE0 CdDataSync
0x8B000 CdDiskReady
0x8B140 CdGetDiskType
0x8B2B0 CdReadFile
0x8B430 rsin
0x8B46C sin_1
0x8B500 rcos
0x8B5A8 InitGeom
0x8B630 SquareRoot0
0x8B6C0 MulMatrix0
0x8B7D0 MulRotMatrix
0x8B8C0 ApplyRotMatrixLV
0x8BA00 ApplyMatrixSV
0x8BA60 TransMatrix
0x8BA90 SetRotMatrix
0x8BAC0 SetTransMatrix
0x8BAE0 SetGeomOffset
0x8BB00 SetGeomScreen
0x8BB10 RotTransPers
0x8BB40 RotTrans
0x8BB70 RotMatrix
0x8BE00 RotMatrixYXZ
0x8C090 RotMatrixX
0x8C230 RotMatrixY
0x8C3D0 RotMatrixZ
0x8C570 RotMatrixZYX_gte
0x8C770 ratan2
0x8C8F0 _patch_gte
0x8C9D0 ResetGraph
0x8CB44 SetGraphDebug
0x8CBA0 DrawSyncCallback
0x8CC00 SetDispMask
0x8CC98 DrawSync
0x8CE1C ClearImage
0x8CEAC ClearImage2
0x8CF44 LoadImage
0x8CFA4 StoreImage
0x8D004 MoveImage
0x8D0BC ClearOTag
0x8D184 ClearOTagR
0x8D230 DrawPrim
0x8D28C DrawOTag
0x8D2FC PutDrawEnv
0x8D3BC GetDrawEnv
0x8D3F0 PutDispEnv
0x8D8E8 GetDispEnv
0x8D91C SetDrawArea
0x8D99C SetDrawEnv
0x8F26C LoadImage2
0x8F358 StoreImage2
0x8F444 _GPU_ResetCallback
0x8F494 LoadClut
0x8F504 LoadClut2
0x8F574 SetDefDrawEnv
0x8F634 SetDefDispEnv
0x8F674 GetTPage
0x8F6B4 GetClut
0x8F6D4 SetSemiTrans
0x8F704 SetPolyG3
0x8F724 SetPolyFT4
0x8F744 SetPolyG4
0x8F764 SetTile
0x8F784 SetLineF2
0x8F7A4 SetLineF4
0x8F7C4 SetDrawTPage
0x8F7F4 SetDrawMove
0x8F854 SetDrawLoad
0x8F8C4 Krom2Tim
0x8FDC4 kanjitrans
0x902F4 hankanjitrans
0x90434 InitHeap
0x90444 Exec
0x90454 FlushCache
0x90464 GPU_cw
0x90474 _bu_init
0x90484 DeliverEvent
0x90494 OpenEvent
0x904A4 CloseEvent
0x904B4 TestEvent
0x904C4 EnableEvent
0x904D4 DisableEvent
0x904E4 EnterCriticalSection
0x904F4 ExitCriticalSection
0x90504 SetSp
0x90514 open
0x90524 lseek
0x90534 read
0x90544 write
0x90554 close
0x90564 format
0x90574 nextfile
0x90584 erase
0x90594 Krom2RawAdd
0x905A4 GetSp
0x905B4 firstfile
0x90854 firstfile2
0x90864 VSync
0x90A74 ChangeClearPAD
0x90A84 ChangeClearRCnt
0x90A94 ResetCallback
0x90AC4 InterruptCallback
0x90AF4 DMACallback
0x90B24 VSyncCallback
0x90B58 StopCallback
0x90B88 CheckCallback
0x90B98 SetIntrMask
0x910E4 _96_remove
0x910FC ReturnFromException
0x9110C ResetEntryInt
0x9111C HookEntryInt
0x9112C startIntrVSync
0x9124C startIntrDMA
0x914EC SetVideoMode
0x91500 GetVideoMode
0x9151C bcopy
0x9155C bzero
0x9158C memcmp
0x915CC memcpy
0x9160C memmove
0x9167C memset
0x916AC rand
0x916DC srand
0x916EC strcat
0x9179C strcmp
0x9180C strcpy
0x9185C strlen
0x9189C strncmp
0x9191C printf
0x9195C prnt
0x91FFC memchr
0x9204C _putchar
0x92148 _putchar_flash
0x92184 sprintf
0x92A04 puts
0x92A64 setjmp
0x92AA0 exit
0x92AB0 __fixunssfsi
0x92B0C __builtin_delete
0x92B30 free
0x92B3C SsSetSerialVol
0x92C4C SpuInit
0x92C6C _SpuInit
0x92D54 SpuStart
0x92DCC _spu_init
0x9320C _spu_FiDMA
0x932C8 _spu_t
0x93548 _spu_Fw
0x935CC _spu_FsetRXX
0x93610 _spu_FsetRXXa
0x936B4 _spu_FsetPCR
0x9375C _spu_Fw1ts
0x937C4 _SpuDataCallback
0x937F4 SpuQuit
0x93874 SpuSetMute
0x938D4 SpuInitMalloc
0x93934 SpuMalloc
0x93C04 _spu_gcSPU
0x93F04 SpuFree
0x93F84 SpuFlush
0x94184 SpuSetReverb
0x94274 _SpuIsInAllocateArea_
0x94304 SpuSetReverbModeParam
0x947E4 _spu_setReverbAttr
0x94CB4 SpuReserveReverbWorkArea
0x94D04 SpuSetReverbDepth
0x94D84 SpuSetReverbVoice
0x94DB4 _SpuSetAnyVoice
0x95074 SpuGetReverbVoice
0x950A4 _SpuGetAnyVoice
0x950D4 SpuClearReverbWorkArea
0x95274 WaitEvent
0x95284 SpuSetKey
0x95444 SpuGetKeyStatus
0x954D4 SpuWrite
0x95534 SpuSetTransferStartAddr
0x95594 SpuSetTransferMode
0x955C4 SpuIsTransferCompleted
0x95674 SpuGetAllKeysStatus
0x95700 SpuSetVoiceVolume
0x95780 SpuSetVoicePitch
0x957F0 SpuSetVoiceAR
0x95870 SpuSetVoiceRR
0x958F0 SpuSetVoiceAttr
0x95EF0 _spu_note2pitch
0x95FC0 SpuGetVoiceVolume
0x96020 SpuGetVoicePitch
0x96040 SpuSetCommonAttr
0x963C0 PadSetAct
0x96400 PadSetActAlign
0x96570 PadGetState
0x96640 PadInfoMode
0x96740 PadStartCom
0x9680C PadStopCom
0x96850 SysEnqIntRP
0x96860 SysDeqIntRP
0x96870 PadInitDirect
0x96920 _padInitDirPort
0x97250 _dirFailAuto
0x97360 _padIsVsync
0x973C8 _padIntPad
0x97558 _padInitSioMode
0x9797C _padSioRW
0x97BA0 _padSioRW2
0x97E1C _padClrIntSio0
0x97EAC _padWaitRXready
0x97ED4 _padSetCmd
0x97EE4 _padSendAtLoadInfo
0x97F68 _padRecvAtLoadInfo
0x981D8 _padGetActSize
0x98210 _padLoadActInfo
0x98784 _padCmdParaMode
0x9882C _padSetRC2wait
0x9884C _padChkRC2wait
0x991D0 _card_info
0x991E0 _card_load
0x991F0 _card_read
0x99200 _new_card
0x99210 _card_wait
0x99220 _card_clear
0x99260 _card_write
0x99270 InitCARD
0x99300 StartCARD
0x99348 StopCARD
0x99370 ReadInitPadFlag
0x99380 InitCARD2
0x99390 StartCARD2
0x993A0 StopCARD2
0x993B0 _patch_card_info
0x9948C _patch_card
0x99520 _patch_card2
0x99590 _copy_memcard_patch
0x995D0 _ExitCard
0x99650 MemCardInit
0x99680 __adddf3
0x99A00 _add_mant_d
0x99AB0 __addsf3
0x99C60 _dbl_shift
0x99D20 __divdf3
0x9A000 _comp_mant
0x9A050 _dbl_shift_us
0x9A110 __divsf3
0x9A260 __extendsfdf2
0x9A3C0 __fixsfsi
0x9A470 __floatsidf
0x9A590 __floatsisf
0x9A660 __gesf2
0x9A700 __gtsf2
0x9A7A0 __ltsf2
0x9A850 _mainasu
0x9A8C0 __mulsf3
0x9AA00 __negsf2
0x9AA20 __subsf3
0x9AA80 __truncdfsf2
0x9ABB0 _err_math
0x9AC20 sqrt
0x9AD60 __gtdf2
0x9AE40 __ltdf2
0x9AF20 __muldf3
0x9B234 _mul_mant_d
0x9B32C Lev0
0x9B354 Lev1
0x9B368 Lev2
0x9B458 Lev3
0x9B46C Lev_CycleObjPtrs
0x9B47C Num_LevCycleObjs
0x9B48C Lev0AnimObjects
0x9B51C Lev1AnimObjects
0x9B56C Lev2AnimObjects
0x9B5BC Lev3AnimObjects
0x9B5FC Level_AnimatingObjectPtrs
0x9B60C Level_NumAnimatedObjects
0x9B62C gMissionDoorPosition
0x9B63C smashable
0x9B934 felonyColour
0x9B958 playerDamageColour
0x9B97C damageColour
0x9B994 overlaidmaps
0x9B9F4 MapSegmentPos
0x9BA34 NVertex
0x9BA54 north
0x9BA74 big_north
0x9BA7C player_position
0x9BA8C palletedir
0x9BB5C AnalogueUnpack
0x9BB6C date_date
0x9BB70 date_time
0x9BB74 cd_icon
0x9BDB4 CameraPos
0x9BDC4 camera_position
0x9BDD4 face_camera_work
0x9BDF4 specTpages
0x9BE24 carTpages
0x9BE44 day_vectors
0x9BE64 night_vectors
0x9BE84 day_colours
0x9BEA4 night_colours
0x9BEC4 light_matrix
0x9BEE4 colour_matrix
0x9BF04 roadblockDelayDiff
0x9BF10 speedLimits
0x9BF14 civPingTest
0x9BF3C modelRandomList
0x9BF4C aspect
0x9BF6C gCopData
0x9BF98 speed1
0x9BFA4 speed2
0x9BFB0 sqtbl
0x9BFF4 CosmeticFiles
0x9C00C PoolPrimData
0x9C01C debris_rot_table
0x9C030 debris_colour
0x9C220 debris1_vert
0x9C244 debris2_vert
0x9C268 leaf_vert
0x9C28C litter_vert
0x9C2B0 debris3_vert
0x9C2D4 debris_data
0x9C2E8 grassColour
0x9C2F4 DentingFiles
0x9C304 replay_icons
0x9C474 menu0
0x9C478 menu1
0x9C484 menu2
0x9C48C menu3
0x9C490 menu4
0x9C494 menu5
0x9C49C menu6
0x9C4A4 tunnel_dim
0x9C574 texture_pages
0x9C674 texture_cluts
0x9E674 polycoords
0x9E6BC gPlayerCar0ShinyFaces
0x9E708 ElTrainData
0x9E854 VegasTrainData
0x9E870 VegasParkedTrains
0x9E87C HavanaFerryData
0x9E8AC RioFerryData
0x9E8C4 HavanaMiniData
0x9E8D4 missionTrain
0x9E90C chicagoDoor
0x9E990 havanaFixed
0x9EA14 vegasDoor
0x9EAF0 rioDoor
0x9EBF8 HelicopterData
0x9EC28 LiftingBridges
0x9ED04 ChicagoCameraHack
0x9ED10 HavanaCameraHack
0x9ED34 VegasCameraHack
0x9ED74 RioCameraHack
0x9ED98 initialOccurrenceDelay
0x9EDB0 initialReccurrenceDelay
0x9EDC8 initialFelonyValue
0x9EDF8 UpdateEnvSounds
0x9EF5C geard
0x9EFFC coptrackpos
0x9F01C MissionLadder
0x9F0A4 RecapFrameLength
0x9F0CC feVariableSave
0x9F0DC handlingType
0x9F0F8 src_cosmetics
0xA0368 theBox
0xA03A4 Drift
0xA03B4 SS
0xA03D4 LevelFiles
0xA03E4 LevelPalettes
0xA0404 LoadingScreenNames
0xA0414 missionstarts
0xA0440 id_map
0xA04A4 xa_data
0xA0540 gameNames
0xA0640 cheatText
0xA0654 CutSceneNames
0xA06C4 MissionName
0xA0758 lRoutes
0xA0780 motion_files
0xA07A0 MotionSpeed
0xA07A8 MainPed
0xA08BC Skel
0xA0ED8 boneIdvals
0xA0F14 High_shake_data
0xA0F2C Med_shake_data
0xA0F3C Low_shake_data
0xA0F48 shake_data
0xA0F54 MainPauseItems
0xA1008 MultiplayerPauseItems
0xA1094 CutscenePauseItems
0xA110C MissionCompleteItems
0xA11AC MissionFailedItems
0xA1224 TakeARideFinishedItems
0xA129C DrivingGameFinishedItems
0xA1328 MultiplayerFinishedItems
0xA138C ChaseGameFinishedItems
0xA1404 YesNoRestartItems
0xA1440 YesNoQuitItems
0xA147C NoPadItems
0xA1490 NoMultiPadItems
0xA14B8 InvalidPadItems
0xA14CC InvalidMultiPadItems
0xA14F4 PauseMenuHeader
0xA1508 MultiplayerPauseHeader
0xA151C CutscenePauseMenuHeader
0xA1530 MissionCompleteHeader
0xA1544 MissionFailedHeader
0xA1558 TakeARideFinishedHeader
0xA156C DrivingGameFinishedHeader
0xA1580 MultiplayerFinishedHeader
0xA1594 ChaseGameFinishedHeader
0xA15A8 NoPadHeader
0xA15BC NoMultiPadHeader
0xA15D0 InvalidPadHeader
0xA15E4 InvalidMultiPadHeader
0xA15F8 playerwithcontrol
0xA1604 YesNoRestartHeader
0xA1618 YesNoQuitHeader
0xA162C validchars
0xA1670 fpPedPersonalityFunctions
0xA16A8 tannerLookAngle
0xA16B8 force
0xA16C8 point
0xA16D8 levelstartpos
0xA1758 PolySizes
0xA1838 fontDigit
0xA1850 button_names
0xA187C dummy
0xA188C frustpos
0xA189C tempmatrix
0xA18DC sky_y_offset
0xA18EC HorizonLookup
0xA18FC HorizonTextures
0xA1924 sun_position
0xA1944 moon_position
0xA1964 moon_shadow_position
0xA1984 flare_info
0xA19E4 tunnelDir
0xA19FC tunnelPos
0xA1A5C dummylong
0xA1A68 pvsSize
0xA1A78 SpecialByRegion
0xA1BB8 draw_mode_pal
0xA1BC8 draw_mode_ntsc
0xA1BD8 currentfilename
0xA1C58 targetArrowVerts
0xA1DB0 normalTargetArrowTris
0xA1DBC loseTailTargetArrowTris
0xA1DD4 windowTargetArrowTris
0xA1DF4 maxSpeedTargetArrowTris
0xA1E08 targetArrowModel
0xA1E38 tpagepos
0xA1E88 LevelTab
0xA1F20 XANames
0xA1F30 iVABID
0xA1F40 XMSongIDs
0xA1F70 XMSPU_SFX
0xA1FA0 lintab
0xA25A0 logtab
0xA2670 VibratoTable
0xA2690 fileFormat
0xA27E4 slice
0xA2800 icon_0
0xA28C0 icon_1
0xA2980 icon_2
0xA2A40 CD_cbread
0xA2A44 CD_read_dma_mode
0xA2A68 CD_cbsync
0xA2A6C CD_cbready
0xA2A70 CD_debug
0xA2A74 CD_status
0xA2A78 CD_status1
0xA2A7C CD_nopen
0xA2A80 CD_pos
0xA2A84 CD_mode
0xA2A85 CD_com
0xA2A88 DS_active
0xA2A8C CD_comstr
0xA2B0C CD_intstr
0xA2E70 rsin_tbl
0xA3690 SQRT
0xA3810 rcossin_tbl
0xA7810 ratan_tbl
0xA806C GPU_printf
0xA8070 GEnv
0xA8198 _qin
0xA819C _qout
0xA8340 Hcount
0xA9470 Vcount
0xA94F0 _ctype_
0xA9580 _stacksize
0xA9584 _ramsize
0xA9590 _spu_EVdma
0xA9594 _spu_keystat
0xA9598 _spu_trans_mode
0xA959C _spu_rev_flag
0xA95A0 _spu_rev_reserve_wa
0xA95A4 _spu_rev_offsetaddr
0xA95A8 _spu_rev_attr
0xA95BC _spu_RQvoice
0xA95C0 _spu_RQmask
0xA95C4 _spu_voice_centerNote
0xA95F4 _spu_env
0xA95F8 _spu_isCalled
0xA9608 _spu_RXX
0xA9620 _spu_tsa
0xA9624 _spu_transMode
0xA9628 _spu_addrMode
0xA962C _spu_mem_mode
0xA9630 _spu_mem_mode_plus
0xA9634 _spu_mem_mode_unit
0xA9638 _spu_mem_mode_unitM
0xA963C _spu_inTransfer
0xA9640 _spu_transferCallback
0xA9644 _spu_IRQCallback
0xA9668 _spu_AllocBlockNum
0xA966C _spu_AllocLastNum
0xA9670 _spu_memList
0xA9678 _spu_zerobuf
0xA9B98 _spu_rev_startaddr
0xA9BC8 _spu_rev_param
0xA9EA0 _padFuncNextPort
0xA9EA4 _padFuncClrInfo
0xA9EA8 _padFuncGetTxd
0xA9EAC _padFuncCurrLimit
0xA9EB0 _padFuncPtr2Port
0xA9EB4 _padFuncPort2Info
0xA9EB8 _padFuncSendAuto
0xA9EBC _padFuncChkEng
0xA9EC0 _padFuncRecvAuto
0xA9EC4 _padFuncClrCmdNo
0xA9EC8 _padFuncIntGun
0xA9ECC _padFuncSetGunPort
0xA9ED0 _padFuncGetGunPos
0xA9ED4 _padInfoDir
0xA9ED8 _padIntExec
0xA9EDC _padGunExec
0xA9EE0 _padSioChan
0xA9EE4 _padSioState
0xA9EE8 _padTotalCurr
0xA9EEC _padModeMtap
0xA9EF0 _padChanStart
0xA9EF4 _padChanStop
0xA9EF8 _padFixResult
0xA9F00 _padVsyncParam
0xA9F10 _padCalledIntPad
0xA9F80 math_errno
0xA9F84 math_err_point
0xAA000 GuitarType
0xAA054 gUseRotatedMap
0xAA058 map_x_offset
0xAA05C map_z_offset
0xAA060 x_map
0xAA064 y_map
0xAA068 old_x_mod
0xAA06C old_y_mod
0xAA070 tilehnum
0xAA074 tile_size
0xAA078 flashtimer
0xAA098 map_x_shift
0xAA09C map_z_shift
0xAA0A0 ReplaySize
0xAA0A4 NumReplayStreams
0xAA0A8 RecordingPads
0xAA0AC pad_recorded
0xAA0B0 gOutOfTape
0xAA0BC bodySelect
0xAA0C0 mScale
0xAA0C4 ThrownBombDelay
0xAA0C8 CurrentBomb
0xAA0CC fullStrike
0xAA0D0 halfStrike
0xAA0D4 gWantFlash
0xAA0D8 flashval
0xAA0DC gBombModel
0xAA0E0 gBombTargetVehicle
0xAA0E4 littleBoxRange
0xAA0E8 minBoxSize
0xAA0F0 camera_angle
0xAA0F8 current_camera_angle
0xAA0FC gCameraDistance
0xAA100 gCameraMaxDistance
0xAA104 gCameraAngle
0xAA108 inGameCamera
0xAA10C jtest53
0xAA110 headtarget
0xAA114 headposition
0xAA118 trayoffset
0xAA11C gDoBonnets
0xAA120 civ_smoke_enabled
0xAA124 gCurrentResidentSlot
0xAA128 switch_detail_distance
0xAA12C myPalette
0xAA138 carDisplayOffset
0xAA140 cell_object_index
0xAA144 useStoredPings
0xAA148 testNumPingedOut
0xAA14C checkFrames
0xAA150 maxSteer
0xAA154 newAccel
0xAA158 roadblockDelay
0xAA15C cookieCount
0xAA160 hornchanflag
0xAA164 horncarflag
0xAA16C testCrv
0xAA170 test23
0xAA174 PingOutCivsOnly
0xAA178 CAR_PAUSE_START
0xAA17C testCar
0xAA180 makeNextNodeCtrlNode
0xAA184 closeEncounter
0xAA188 sideMul
0xAA18C corner
0xAA190 sideShift
0xAA194 carAngle
0xAA198 EVENT_CAR_SPEED
0xAA19C horizonadd
0xAA1A0 l1
0xAA1A4 l2
0xAA1A8 gMinimumCops
0xAA1AC gPuppyDogCop
0xAA1B0 gBatterPlayer
0xAA1B4 gCopDesiredSpeedScale
0xAA1B8 gCopMaxPowerScale
0xAA1BC pedestrianFelony
0xAA1C0 gCopRespawnTime
0xAA1C4 toggleCam
0xAA1C8 CutsceneReplayStart
0xAA1CC CutsceneStreamIndex
0xAA1D0 NumCutsceneStreams
0xAA1D4 CutsceneCameraOffset
0xAA1D8 CutNextChange
0xAA1DC CutLastChange
0xAA1E0 PreLoadedCutscene
0xAA1E4 gHaveInGameCutscene
0xAA1E8 gCSDestroyPlayer
0xAA1EC CutsceneLength
0xAA1F0 BlackBorderHeight
0xAA1F4 CutsceneInReplayBuffer
0xAA1F8 CutsceneCamera
0xAA1FC gInGameChaseActive
0xAA200 gInGameCutsceneActive
0xAA204 CutsceneFrameCnt
0xAA208 CutsceneEventTrigger
0xAA20C gThePlayerCar
0xAA210 gInGameCutsceneDelay
0xAA214 gInGameCutsceneID
0xAA218 JustReturnedFromCutscene
0xAA21C gCutsceneAtEnd
0xAA220 gPlayerCarLights
0xAA224 LightningTimer
0xAA228 variable_weather
0xAA22C gFlareScale
0xAA230 SmokeCnt
0xAA234 gDoSmoke
0xAA238 gDoLeaves
0xAA394 gDoShinyCars
0xAA3E4 MIN_TRIPOD_CAMERA_HEIGHT
0xAA3E8 EditMode
0xAA3EC SetFastForward
0xAA3F0 NextChange
0xAA3F4 ThisChange
0xAA3F8 LastChange
0xAA3FC editing_existing_camera
0xAA400 FastForward
0xAA404 ClearCameras
0xAA408 attract_number
0xAA40C FastForwardCameraCnt
0xAA41C farClip2Player
0xAA420 sprite_shadow
0xAA424 TransparentObject
0xAA428 groundDebrisIndex
0xAA42C lightning
0xAA430 alleycount
0xAA434 treecount
0xAA438 setupYet
0xAA43C visiblelist
0xAA440 tcRoof
0xAA444 tcWall
0xAA448 tcRoad
0xAA44C goFaster
0xAA450 current_smashed_cone
0xAA454 gTrailblazerPrevConeDelay
0xAA458 gTrailblazerData
0xAA45C gTrailblazerConeCount
0xAA460 gTrailblazerConeIndex
0xAA464 gUseCopModel
0xAA468 lastrequesteddisc
0xAA4B8 DistanceTriggerCarMoves
0xAA4BC eventHaze
0xAA510 debugRotation
0xAA518 maxrevdrop
0xAA51C maxrevrise
0xAA520 copmusic
0xAA534 gLastChase
0xAA538 gChaseNumber
0xAA53C gRandomChase
0xAA540 gSubGameNumber
0xAA544 bReturnToMain
0xAA548 CurrentGameMode
0xAA549 WantedGameMode
0xAA54C fakeOtherPlayer
0xAA550 gMissionLadderPos
0xAA554 gFurthestMission
0xAA558 gWantNight
0xAA55C gIdleReplay
0xAA560 autobrakeon
0xAA564 gPlayerCarDamage
0xAA568 DebrisTimer
0xAA56C last_track_state
0xAA570 doWheels
0xAA574 playerghost
0xAA578 playerhitcopsanyway
0xAA57C savemapinfo
0xAA580 crateoffset
0xAA584 littleBangTime
0xAA588 screen_fade_value
0xAA58C screen_fade_start
0xAA590 screen_fade_end
0xAA594 screen_fade_speed
0xAA598 FadingScreen
0xAA59C bMissionTitleFade
0xAA5A0 bWantFade
0xAA5A4 fadeVal
0xAA5A8 WantPause
0xAA5AC gDieWithFade
0xAA5B0 tannerDeathTimer
0xAA5B4 LoadedLevel
0xAA5B5 NewLevel
0xAA5B6 IconsLoaded
0xAA5B7 gLeadCarModel
0xAA5B8 gNoSaveAllowed
0xAA5B9 gDoneQuickReplay
0xAA5BA gRightWayUp
0xAA5BB ghost_mode
0xAA5BC paused
0xAA5BD CamerasSaved
0xAA5BE final_replays
0xAA5BF cameraview
0xAA5C0 ReplayMode
0xAA5C1 NoPlayerControl
0xAA5C2 CurrentRoad
0xAA5C4 CurrentJunction
0xAA5C8 gNumCitiesOpen
0xAA5CC GameType
0xAA5CD StoredGameType
0xAA5D0 gCurrentMissionNumber
0xAA5D4 gCurrentChaseNumber
0xAA5D8 CurrentPlayerView
0xAA5DC persuit_mode
0xAA5E0 GameLevel
0xAA5E4 PlayerCarModel
0xAA5E8 AttractMode
0xAA5EC gCopDifficultyLevel
0xAA5F0 pauseflag
0xAA5F4 lead_car
0xAA5F8 PlayerCar
0xAA5FC CameraCar
0xAA600 TargetCar
0xAA604 defaultPlayerModel
0xAA606 defaultPlayerPalette
0xAA608 gameinit
0xAA60C gInFrontend
0xAA610 gLoadedReplay
0xAA614 gShowMap
0xAA618 gVibration
0xAA61C gInvincibleCar
0xAA620 gPlayerImmune
0xAA624 gNight
0xAA628 gStopPadReads
0xAA62C leadAIRequired
0xAA630 leadAILoaded
0xAA634 pathAILoaded
0xAA638 wantedCar
0xAA640 gSubtitles
0xAA644 ObjectDrawnCounter
0xAA67C cells_across
0xAA680 cells_down
0xAA684 es_mobile
0xAA688 gDisplayPosition
0xAA6A0 gHaveStoredData
0xAA6A4 carSelectPlayerText
0xAA6DC MissionLoadAddress
0xAA6E0 cop_adjust
0xAA6E4 NewLeadDelay
0xAA6E8 prevCopsInPursuit
0xAA6EC last_flag
0xAA6F0 lastsay
0xAA6F4 gStartOnFoot
0xAA6F8 gTimeOfDay
0xAA6FC gWeather
0xAA700 gTannerActionNeeded
0xAA704 gPlayerWithTheFlag
0xAA708 gCarWithABerm
0xAA70C gCantDrive
0xAA710 MaxPlayerDamage
0xAA718 TAIL_TOOCLOSE
0xAA71C TAIL_GETTINGCLOSE
0xAA720 TAIL_GETTINGFAR
0xAA724 TAIL_TOOFAR
0xAA728 gNumRaceTrackLaps
0xAA72C gMissionTitle
0xAA730 gMissionCompletionState
0xAA734 gDontPingInCops
0xAA738 g321GoDelay
0xAA73C gGotInStolenCar
0xAA740 gCopCarTheftAttempted
0xAA744 gLockPickingAttempted
0xAA748 gDontResetCarDamage
0xAA74C specModelValid
0xAA750 bAllreadyRotated
0xAA754 bDoingShadow
0xAA758 vStored
0xAA75C zVal
0xAA79C motion_dir
0xAA7A0 bLoadedAllMC
0xAA7A4 bDisplayBones
0xAA7A8 myVal
0xAA7AC bodyShiftValue
0xAA7B0 palnumber
0xAA7B4 testRadius
0xAA7B8 test777
0xAA7BC align
0xAA7C4 dummymotors
0xAA7C8 DuplicatePadData
0xAA7D0 pad_connected
0xAA7D4 gDualShockMax
0xAA7D8 gEnteringScore
0xAA7DC gScorePosition
0xAA7E0 gScoreEntered
0xAA7F4 allownameentry
0xAA7F8 gDrawPauseMenus
0xAA7FC gNoReplaySaveAllowed
0xAA838 num_pedestrians
0xAA83C numTannerPeds
0xAA840 bTannerSitting
0xAA844 pinginPedAngle
0xAA848 iAllowWatch
0xAA84C iFreezeTimer
0xAA850 bFreezeAnimation
0xAA854 bReverseAnimation
0xAA858 max_pedestrians
0xAA85C bKillTanner
0xAA860 bReverseYRotation
0xAA864 bAvoidTanner
0xAA868 bAvoidBomb
0xAA86C iIdleTimer
0xAA870 bKilled
0xAA874 bStopTanner
0xAA878 numCopPeds
0xAA87C tannerTurnStep
0xAA880 tannerTurnMax
0xAA884 tannerTurn
0xAA888 bPower
0xAA88C powerCounter
0xAA8B4 pCivCarToGetIn
0xAA8BC allreadydone
0xAA8C0 lastCarCameraView
0xAA8C4 numPlayersToCreate
0xAA900 idx
0xAA904 rotated
0xAA908 distance
0xAA90C pos
0xAA910 outvertices
0xAA914 outcoords
0xAA918 skyred
0xAA91C skygreen
0xAA920 skyblue
0xAA924 gDrawLowerSky
0xAA930 gTunnelNum
0xAA934 gSoundMode
0xAA938 gSurround
0xAA93C banksize
0xAA944 sound_paused
0xAA948 music_paused
0xAA94C master_volume
0xAA950 stop_sound_handler
0xAA954 Song_ID
0xAA958 VABID
0xAA95C gMusicVolume
0xAA960 gMasterVolume
0xAA964 gAllowMusic
0xAA968 gAllowSfx
0xAA96C LoadingArea
0xAA970 spoolpos_reading
0xAA974 spoolpos_writing
0xAA978 type
0xAA97C music_is_loading
0xAA980 doSpooling
0xAA984 error_bounds
0xAA988 times
0xAA98C specialState
0xAA990 specBlocksToLoad
0xAA99C lasttype
0xAA99D lastcity
0xAA99E NumPlayers
0xAA9A0 DoNotSwap
0xAA9A4 gMultiplayerLevels
0xAA9AC cak
0xAA9B0 gDraw3DArrowBlue
0xAA9B4 texture_is_icon
0xAA9B8 specspooldata
0xAA9CC dbSurfacePtr
0xAA9D0 finished_count
0xAA9D4 gPlaying
0xAA9D8 gChannel
0xAA9DC xa_prepared
0xAA9E0 XM_SCAN
0xAA9E4 JPError
0xAA9E8 MonoMode
0xAA9EC XM_NSA
0xAA9F0 XM_HA
0xAA9F4 tt
0xAA9F8 aa
0xAA9FC dd
0xAAA00 de
0xAAA04 JPPer
0xAAA14 Driver2CurvesPtr
0xAAA18 sdLevel
0xAAA1C region_buffer_xor
0xAAA20 NumDriver2Straights
0xAAA24 NumDriver2Junctions
0xAAA28 Driver2StraightsPtr
0xAAA2C Driver2JunctionsPtr
0xAAA30 cycle_phase
0xAAA34 cycle_timer
0xAAA38 num_anim_objects
0xAAA3C num_cycle_obj
0xAAA40 OverlayFlashValue
0xAAA48 MapBitMaps
0xAAA50 MapRect
0xAAA58 MapTPage
0xAAA5A MapClut
0xAAA5C first_paletised_page
0xAAA60 TestCnt
0xAAA64 ReplayStart
0xAAA68 way_distance
0xAAA6C PingBufferPos
0xAAA70 PlayerWayRecordPtr
0xAAA74 ReplayParameterPtr
0xAAA78 TimeToWay
0xAAA7C replayptr
0xAAA80 PingBuffer
0xAAA88 boxOverlap
0xAAA8C wibblewibblewoo
0xAAA90 mTheta
0xAAA98 baseDir
0xAAA9C maxCameraDist
0xAAAA0 jcam
0xAAAA4 paddCamera
0xAAAA8 savedSP.21
0xAAAAC gUnderIntensity
0xAAAB0 whichCP
0xAAAB4 gForceLowDetailCars
0xAAAB8 baseSpecCP
0xAAABC num_cars_drawn
0xAAAC0 sizeof_cell_object_computed_values
0xAAAC8 tmpNewLane
0xAAAD0 numCopCars
0xAAAD4 numCivCars
0xAAAD8 tmpNewRoad
0xAAAE0 angle
0xAAAE4 distFurthestCivCarSq
0xAAAE8 numInactiveCars
0xAAAEC frameStart
0xAAAF0 test42
0xAAAF4 test123
0xAAAF8 limoId
0xAAAFC test555
0xAAB00 makeLimoPullOver
0xAAB04 numRoadblockCars
0xAAB08 tmpCrv
0xAAB10 carnum
0xAAB14 radius
0xAAB18 tmpStr
0xAAB20 requestRoadblock
0xAAB24 collDat
0xAAB28 laneFit
0xAAB30 roadSeg
0xAAB38 validExitIdx
0xAAB40 dx
0xAAB44 dy
0xAAB48 dz
0xAAB4C newExit
0xAAB50 distObstacle
0xAAB54 currentAngle
0xAAB58 testNum
0xAAB5C tstNode1
0xAAB60 tstNode2
0xAAB64 furthestCivID
0xAAB68 maxParkedCars
0xAAB6C numParkedCars
0xAAB70 currentRoadId
0xAAB74 maxPlayerCars
0xAAB78 numPlayerCars
0xAAB7C requestStationaryCivCar
0xAAB80 distFromCentre
0xAAB84 startNode
0xAAB88 playerNum
0xAAB8C roadblockCount
0xAAB90 junctionLightsPhase
0xAAB94 maxCopCars
0xAAB98 maxCivCars
0xAABA0 randomcounter
0xAABA4 randomindex
0xAABA8 mcgn
0xAABAC srgn
0xAABB0 said_picked_up
0xAABB4 OutOfSightCount
0xAABB8 CopsCanSeePlayer
0xAABBC LastHeading
0xAABC0 CopsAllowed
0xAABC4 copsAreInPursuit
0xAABC8 copSightData
0xAABD0 pathStraight
0xAABD4 player_position_known
0xAABD8 cop_respawn_timer
0xAABDC numActiveCops
0xAABE0 requestCopCar
0xAABE4 targetVehicle
0xAABE8 padid.33
0xAABF0 SavedCameraCarId
0xAABF4 SavedCameraView
0xAABF8 SavedCameraAngle
0xAABFC SavedWorldCentreCarId
0xAAC00 SavedSpoolXZ
0xAAC08 SinX.103
0xAAC0C CosX.104
0xAAC10 rand.142
0xAAC14 ThunderTimer
0xAAC18 ThunderDistance
0xAAC1C plotted
0xAAC20 RightLight
0xAAC21 gRainCount
0xAAC24 next_smoke
0xAAC28 LightSortCorrect
0xAAC2C smoke_table
0xAAC30 leaf_rotvec
0xAAC38 CarLightFadeFront
0xAAC3C next_debris
0xAAC40 StreakCount1
0xAAC44 NextDamagedPmeter
0xAAC48 wetness
0xAAC4C gNextRainDrop
0xAAC50 NoRainIndoors
0xAAC54 gEffectsTimer
0xAAC58 SmashablesHit
0xAAC5C gcar_num
0xAAC60 debris_rotvec
0xAAC68 main_cop_light_pos
0xAAC6C LeftLight
0xAAC6E light_col
0xAAC70 next_leaf
0xAAC74 NextDamagedLamp
0xAAC78 gCarPoolsToDraw
0xAAC7C LightIndex
0xAAC80 CarLightFadeBack
0xAAC88 gHubcapTime
0xAAC90 FlashCnt.42
0xAAC94 cammapht2
0xAAC98 mapstuff
0xAAC9C MenuOffset
0xAACA0 time_taken
0xAACA4 menuactive
0xAACA8 PlayerWaypoints
0xAACAC CursorX
0xAACB0 CursorY
0xAACB4 tracking_car
0xAACB5 CameraChanged
0xAACB8 quick_replay
0xAACBC PlayMode
0xAACC0 PlaybackCamera
0xAACC4 ReplayContinue
0xAACC8 frame_advance_count
0xAACCC AutoDirect
0xAACD0 temp.61
0xAACD4 current_matrix
0xAACD8 numSpritesFound
0xAACDC transparent_buffer
0xAACE0 current_inv_matrix
0xAACE4 buildingsFound
0xAACE8 FrAng
0xAACEC current_offset
0xAACF0 tile_overflow_buffer
0xAACF4 vcount
0xAACF8 SubDivisionArrays
0xAACFC fasterToggle
0xAAD00 ot_slot
0xAAD04 Low2HighDetailTable
0xAAD08 Low2LowerDetailTable
0xAAD10 gTrailblazerConeModel
0xAAD18 ShinyTextureNum
0xAAD1C ShinyTexturePage
0xAAD20 firstX.8
0xAAD28 firstZ.9
0xAAD30 count.10
0xAAD38 offset.39
0xAAD40 speed.49
0xAAD44 rotating.57
0xAAD48 nearestTrain.70
0xAAD4C distanceFromNearestTrain.71
0xAAD50 rememberCameraAngle.105
0xAAD58 count.106
0xAAD60 foam
0xAAD68 event
0xAAD6C cameraEventsActive
0xAAD70 trackingEvent
0xAAD78 carsOnBoat
0xAAD80 boatOffset
0xAAD88 multiCar
0xAAD90 fixedEvent
0xAAD94 firstMissionEvent
0xAAD98 detonator
0xAADA0 doneFirstHavanaCameraHack
0xAADA8 cameraDelay
0xAADB0 xVis
0xAADB4 zVis
0xAADB8 debugSpeed
0xAADBC debugCount
0xAADC0 firstEvent
0xAADC4 debugOffset
0xAADC8 EventCop
0xAADD0 debugNode
0xAADD8 event_models_active
0xAADE0 last_cop_phrase
0xAADE4 FelonyDecreaseTime
0xAADE8 FelonyIncreaseTime
0xAADEC FelonyDecreaseTimer
0xAADF0 FelonyIncreaseTimer
0xAADF4 playerLastRoad
0xAADF8 test3
0xAADFC test4
0xAAE00 test5
0xAAE04 test6
0xAAE08 test7
0xAAE0C test8
0xAAE10 oldsp.12
0xAAE18 j_said.78
0xAAE1C xm_samples.90
0xAAE1D xm_samples.96
0xAAE20 rnd.139
0xAAE24 loudhail_time
0xAAE28 cop_model
0xAAE29 cop_bank
0xAAE2C horn_time
0xAAE30 phrase_top
0xAAE31 first_offence
0xAAE34 TimeSinceLastSpeech
0xAAE38 ScreenDepth
0xAAE40 hSubShad
0xAAE48 delta
0xAAE50 num_active_cars
0xAAE54 gTimeInWater
0xAAE58 continuous_track
0xAAE59 rear_only
0xAAE60 ExBoxDamage
0xAAE64 ExBombTimer
0xAAE68 TriggerBomb
0xAAE6C ExLastCarXVel
0xAAE70 ExLastCarZVel
0xAAE74 ExLastCarX
0xAAE78 ExLastCarZ
0xAAE80 ActiveCheats
0xAAE84 AvailableCheats
0xAAE88 loading_bar_pos
0xAAE8C load_steps
0xAAE90 t0.18
0xAAE94 t1.19
0xAAE95 t2.20
0xAAE98 oldsp.21
0xAAE9C null.27
0xAAEA0 PauseMode
0xAAEA4 gLoadedMotionCapture
0xAAEA8 cells
0xAAEAC scr_z
0xAAEB0 current_object_computed_value
0xAAEB4 car_models_lump
0xAAEB8 xa_timeout
0xAAEBC gPed1HeadModelPtr
0xAAEC0 gPed2HeadModelPtr
0xAAEC4 gPed3HeadModelPtr
0xAAEC8 gPed4HeadModelPtr
0xAAECC ObjectDrawnValue
0xAAED0 controller_bits
0xAAED4 handle
0xAAED8 cell_header
0xAAEDC playerDying
0xAAEE0 gDamWheelModelPtr
0xAAEE4 InWater
0xAAEE8 gBoxModelPtr
0xAAEEC gShowPlayerDamage
0xAAEF0 NightAmbient
0xAAEF4 cell_objects
0xAAEF8 saved_leadcar_pos
0xAAEFC palette_lump
0xAAF00 gFastWheelModelPtr
0xAAF04 lead_pad
0xAAF08 gSinkingTimer
0xAAF0C lead_analogue
0xAAF10 leadCarId
0xAAF14 map_lump
0xAAF18 CameraCnt
0xAAF1C gCleanWheelModelPtr
0xAAF20 gBobIndex
0xAAF24 saved_counter
0xAAF28 gDoCrates
0xAAF2C gLightsOn
0xAAF30 DawnCount
0xAAF34 gLoadedOverlay
0xAAF38 HitLeadCar
0xAAF3C gRotorPtr
0xAAF40 game_over
0xAAF44 cell_ptrs
0xAAF48 mallocptr
0xAAF4C gHubcapModelPtr
0xAAF50 lockAllTheDoors
0xAAF58 PVSEncodeTable
0xAAF5C units_across_halved
0xAAF60 old_region
0xAAF64 pvs_square
0xAAF68 pvs_objects_rejected
0xAAF6C num_regions
0xAAF70 regions_down
0xAAF74 units_down_halved
0xAAF78 camera_cell_x
0xAAF7C camera_cell_z
0xAAF80 current_barrel_region_xcell
0xAAF84 current_barrel_region_zcell
0xAAF88 initarea
0xAAF8C region_x
0xAAF90 region_z
0xAAF94 num_models_in_pack
0xAAF98 pvs_cells_rejected
0xAAF9C pvs_square_sq
0xAAFA0 view_dist
0xAAFA4 current_cell_x
0xAAFA8 current_cell_z
0xAAFAC regions_across
0xAAFB0 current_region
0xAAFB4 num_straddlers
0xAAFB8 cutscene_timer
0xAAFBC holdall
0xAAFC0 bodgevar
0xAAFC4 rio_alarm
0xAAFC8 xa
0xAAFD0 force_idle
0xAAFD8 jericho_in_back
0xAAFE0 force_siren
0xAAFE8 playercollected
0xAAFEC gMusicType
0xAAFF0 NumTempJunctions
0xAAFF4 MissionHeader
0xAAFF8 Driver2TempJunctionsPtr
0xAAFFC MissionScript
0xAB000 gPlayerDamageFactor
0xAB004 MissionTargets
0xAB008 MissionStrings
0xAB010 modelname_buffer
0xAB014 specmallocptr
0xAB018 specLoadBuffer
0xAB020 ThisMotion
0xAB024 pDrawingPed
0xAB028 Tangle
0xAB02C frames
0xAB030 svTemp
0xAB034 joints
0xAB038 rectTannerWindow
0xAB040 iCurrBone
0xAB044 gCurrentZ
0xAB048 initial.24
0xAB050 coplist
0xAB054 pcoplist
0xAB058 gLastModelCollisionCheck
0xAB060 VisibleMenu
0xAB064 ActiveMenu
0xAB068 ActiveMenuItem
0xAB06C PauseReturnValue
0xAB070 SfxVolumeText
0xAB078 MusicVolumeText
0xAB080 storedCam
0xAB084 oldCamView
0xAB088 camAngle
0xAB090 oldDir
0xAB094 pPlayerPed
0xAB098 collision_boxes_set
0xAB09C num_extra_boxes_set
0xAB0A0 oldWeather
0xAB0A4 seated_count
0xAB0A8 seated_pedestrian
0xAB0AC basic_car_interest
0xAB0B0 pFreePeds
0xAB0B4 pUsedPeds
0xAB0B8 maxSeated
0xAB0BC tannerPad
0xAB0C0 pcdTanner
0xAB0C4 carToGetIn
0xAB0C8 ping_in_pedestrians
0xAB0CC pHold
0xAB0D0 my_sly_var
0xAB0D8 combointensity
0xAB0DC gTempCarUVPtr
0xAB0E0 gFontColour
0xAB0E4 fontclutid
0xAB0E8 fontclutpos
0xAB0F0 fonttpage
0xAB0F8 JunctionLightsWE
0xAB0F9 JunctionLightsNS
0xAB100 numcv
0xAB104 lastcv
0xAB108 spolys
0xAB10C gShadowTextureNum
0xAB110 gShadowTexturePage
0xAB114 shadow_header
0xAB118 shadowuv
0xAB120 edgecount
0xAB122 nextindex
0xAB128 last_attempt_failed.9
0xAB12C skycolour
0xAB130 skyFade
0xAB138 old_camera_change
0xAB13C song_address
0xAB140 camera_change
0xAB148 bankaddr
0xAB150 music_address
0xAB158 param
0xAB160 result
0xAB168 target_address
0xAB16C current_sector
0xAB170 sectors_to_read
0xAB174 sectors_this_chunk
0xAB178 switch_spooltype
0xAB17C nTPchunks
0xAB180 nTPchunks_reading
0xAB184 nTPchunks_writing
0xAB188 tpage
0xAB190 ntpages
0xAB194 endchunk
0xAB198 RegionSpoolInfo
0xAB19C SpoolLumpOffset
0xAB1A0 spool_regioncounter
0xAB1A4 quickSpool
0xAB1A8 spuaddress
0xAB1AC n_sample_chunks
0xAB1B0 packed_cell_pointers
0xAB1B4 spoolerror
0xAB1B8 spool_regionpos
0xAB1BC buffer
0xAB1C0 modelMemory
0xAB1C4 num_samples
0xAB1C8 spoolactive
0xAB1CC current_music_id
0xAB1D0 tsetcounter
0xAB1D4 AreaData
0xAB1D8 specSpoolComplete
0xAB1DC models_ready
0xAB1E0 sample_chunk
0xAB1E4 allowSpecSpooling
0xAB1E8 new_area_location
0xAB1EC tsetpos
0xAB1F0 NumAreas
0xAB1F4 firstDamBlock
0xAB1F8 spoolcounter
0xAB1FC spoolinfo_offsets
0xAB200 loadbank_read
0xAB204 firstLowBlock
0xAB208 unpack_roadmap_tbl
0xAB210 nsectors
0xAB214 Music_And_AmbientOffsets
0xAB218 spoolpos
0xAB21C model_spool_buffer
0xAB220 lengthDamBlock
0xAB224 lastCleanBlock
0xAB228 damOffset
0xAB22C done
0xAB230 lengthLowBlock
0xAB234 send_bank
0xAB238 lowOffset
0xAB23C AreaTPages
0xAB240 LoadedArea
0xAB248 loading_region
0xAB250 unpack_roadmap_flag
0xAB254 loadbank_write
0xAB258 startSpecSpool
0xAB25C last_size
0xAB260 newmodels
0xAB264 spoolseek
0xAB268 chunk_complete
0xAB26C unpack_cellptr_flag
0xAB270 param.25
0xAB278 load_complete
0xAB279 endread
0xAB27C current_sector
0xAB280 sectors_left
0xAB284 sectors_read
0xAB288 current_address
0xAB28C paddp
0xAB290 vblcounter
0xAB298 MPlast
0xAB2A0 current
0xAB2A4 primptr
0xAB2A8 FrameCnt
0xAB2AC padd
0xAB2B0 MPcurrent
0xAB2B8 last
0xAB2C0 tpage
0xAB2C8 nspecpages
0xAB2CC NoTextureMemory
0xAB2D0 mapclutpos
0xAB2D8 specialSlot
0xAB2DC nperms
0xAB2E0 MaxSpecCluts
0xAB2E4 environmenttpage
0xAB2E8 tpage_amount
0xAB2F0 clutpos
0xAB2F8 speclist
0xAB2FC permlist
0xAB300 texturename_buffer
0xAB304 texture_lump_start
0xAB308 texamount
0xAB30C slotsused
0xAB310 tpage_position
0xAB318 impulse
0xAB320 CurrentChannel
0xAB322 ID
0xAB324 StartPos
0xAB328 pause_loc
0xAB32C olddatacallback
0xAB330 oldreadycallback
0xAB338 XMTime1
0xAB33C XMTime2
0xAB340 XMTime3
0xAB344 PALType
0xAB348 mh
0xAB34C ms
0xAB350 mu
0xAB354 BPMLimit
0xAB358 DVL
0xAB35C XMC
0xAB360 XM_FrameSpeed
0xAB364 DVR
0xAB368 JP_Do_Nothing
0xAB36C XMCU
0xAB370 mhu
0xAB374 CurrentCh
0xAB378 ret.30
0xAB37C MCbuffer128K
0xAB380 MClanguageBuffer
0xAB384 MCsaveBuffer
0xAB388 MCfilename
0xAB38C MCoptions
0xAB390 MCsp
0xAB394 gMemCardMode
0xAB6D0 CurrentGarage
0xAB6F0 GuitarPos
0xAB700 cycle_tex
0xAB7A8 Player2DamageBar
0xAB7C8 ProxyBar
0xAB7E8 DamageBar
0xAB808 FelonyBar
0xAB828 PlayerDamageBar
0xAB848 MapBuffer
0xABA58 maptile
0xABA68 map_matrix
0xABA88 civ_clut
0xAC688 ReplayStreams
0xAC8A8 Roadblock
0xAC8E0 cd.24
0xAC9B0 collisionResult.25
0xAC9D8 ThrownBombs
0xACA90 basePos
0xACAA0 face_camera
0xACAC0 viewer_position
0xACAD0 inv_camera_matrix
0xACAF0 camera_matrix
0xACB10 FrontWheelRotation.25
0xACB40 BackWheelRotation.26
0xACB68 NewCarModel
0xACC08 save_light_matrix
0xACC28 pbf
0xB87C0 NewLowCarModel
0xB8860 save_colour_matrix
0xB8880 cell_object_computed_values
0xB9080 cell_object_buffer
0xBD080 cd
0xBD150 civrseed
0xBD198 currentCar
0xBD438 currentPos
0xBD448 endPos
0xBD458 brakeLength
0xBD4A8 baseLoc
0xBD4B8 roadblockLoc
0xBD4C8 testVec
0xBD4D8 startPos
0xBD4E8 reservedSlots
0xBD500 randomLoc
0xBD510 rseed
0xBD558 felonyData
0xBD5F0 targetPoint
0xBD600 CarTail
0xBD610 lastKnownPosition
0xBD620 CopWorkMem
0xBD7E0 work_matrix.25
0xBD800 PlayerStartInfo
0xBD820 CutsceneBuffer
0xBF840 joypad_texture
0xBF850 collon_texture
0xBF860 leaf_alloc
0xBF8C8 clock
0xBF8D8 incar
0xBF8E8 litter_texture
0xBF8F8 pause
0xBF908 smoke
0xC0808 debris_mat
0xC0828 norot
0xC0848 movecampos
0xC0858 litter_rot
0xC09D8 addcam
0xC09E8 debris_rot1
0xC0B68 debris_rot2
0xC0CE8 debris_rot3
0xC0E68 delcam
0xC0E78 tannerShadow_texture
0xC0E88 Known_Lamps
0xC1080 debris
0xC19E0 smoke_alloc
0xC1A80 forearm1_texture
0xC1A90 pad_texture
0xC1AA0 sea_texture
0xC1AB0 NewLamp
0xC1B08 cop_texture
0xC1B18 sun_texture
0xC1B28 lightref_texture
0xC1B38 damaged_lamp
0xC1B60 ok
0xC1B70 editcam
0xC1B80 arm1_texture
0xC1B90 playcam
0xC1BA0 movecam
0xC1BB0 debris_alloc
0xC1C28 autocam
0xC1C38 lookcar
0xC1C48 gTyreTexture
0xC1C58 restart
0xC1C68 line_texture
0xC1C78 drop_texture
0xC1C88 moon_texture
0xC1C98 pool_texture
0xC1CA8 lensflare_texture
0xC1CB8 head1_texture
0xC1CC8 leaf_mat
0xC1CE8 chasecar
0xC1CF8 fixedcam
0xC1D08 frameadv
0xC1D18 bird_texture1
0xC1D28 bird_texture2
0xC1D38 lenschan
0xC1D48 leaf_rot
0xC1EC8 save2card
0xC1ED8 flare_texture
0xC1EE8 digit_texture
0xC1EF8 jeans_texture
0xC1F08 watch_texture
0xC1F18 light_texture
0xC1F28 paper_texture
0xC1F38 trail_texture
0xC1F48 leaf
0xC27E0 smoke_texture
0xC27F0 spark_texture
0xC2800 cross_texture
0xC2810 damaged_object
0xC2958 texturePedHead
0xC2968 gPoolPoly
0xC2980 light_pool_texture
0xC2990 choosecar
0xC29A0 chest1_texture
0xC29B0 playpause
0xC29C0 gRainAlloc
0xC2B28 gRain
0xC3938 debris_texture
0xC3948 gHDCarDamageZonePolys
0xC4180 gTempCarVertDump
0xC9400 gHubcap
0xC94B8 gHDCarDamageLevels
0xC99B8 gCarDamageZoneVerts
0xC9F98 ShadowPos
0xC9FA8 gTempHDCarUVDump
0xCB398 gTempLDCarUVDump
0xCBE10 GreyIcons
0xCBE28 car_distance.60
0xCBE78 anim_obj_buffer
0xCBEC8 spriteList
0xCBFF8 frustrum_matrix
0xCC018 matrixtable
0xCC818 planeColours
0xCC838 shadowMatrix
0xCC858 model_object_ptrs
0xCD058 ground_debris
0xCD158 current_camera_position
0xCD168 CompoundMatrix
0xCD968 vtab
0xCD9A8 wrongside
0xCD9D8 smashed_cones
0xCDA50 VeryShinyTable
0xCDB50 Car0_ShinyTable
0xCDC50 xList.6
0xCDD50 zList.7
0xCDE50 stage.90
0xCDE80 rememberCamera.97
0xCDE90 carEvent
0xCDEB0 eventCamera
0xCDEE8 events
0xCDEF8 carriageData
0xCDF20 envsnd
0xCE520 ESdata
0xCE650 EStags
0xCE660 car_noise
0xCE690 siren_noise
0xCE6B0 header_pt
0xCF5D0 song_pt
0xD0180 gSpeechQueue
0xD01A8 tunnels
0xD0550 ScreenNames
0xD0580 pScreenStack
0xD05A8 pButtonStack
0xD05D0 _tp.18
0xD09E0 _d0.19
0xD0DF0 _d1.20
0xD1200 active_car_list
0xD1250 cheats
0xD1268 car_data
0xD4BD0 car_cosmetics
0xD5070 bbox
0xD5250 SmokePos
0xD5260 bangPos
0xD5270 globemesh
0xD5420 explosion
0xD54D8 poly.9
0xD54F8 p.10
0xD5528 fade_gt4
0xD5598 fade_g4
0xD55E0 load_draw
0xD5640 load_disp
0xD5658 stupid_logic.22
0xD5668 buffer.26
0xD56A8 leadcar_pos
0xD56B8 gCarCleanModelPtr
0xD56D0 lightsOnDelay
0xD56E8 modelpointers
0xD6EE8 gCarDamModelPtr
0xD6F00 gCarLowModelPtr
0xD6F18 PVS_Buffers
0xD6F28 cell_objects_add
0xD6F40 gRamSlotPosition
0xD7140 nybblearray
0xD7340 regions_unpacked
0xD7350 cell_slots_add
0xD7368 CurrentPVS
0xD7528 pos
0xD7538 MissionStartData
0xD7620 MissionEndData
0xD7708 MissionStack
0xD7B08 MissionThreads
0xD7C08 Mission
0xD7C50 gLapTimes
0xD7C78 gStopCops
0xD7C88 tileTannerClear
0xD7CA8 cTannerVNumbers
0xD7D08 cJerichoVNumbers
0xD7D28 vTannerList
0xD83B8 pedestrians
0xD8DC8 MotionCaptureData
0xD8E28 vJerichoList
0xD9158 ft4TannerShadow
0xD91A8 cd
0xD9270 padbuffer
0xD92B8 Pads
0xD9348 VisibleMenus
0xD9358 ActiveItem
0xD9368 EnterNameText
0xD9388 ScoreName
0xD93B8 ScoreItems
0xD9408 ScoreTime
0xD9458 DrivingDebugHeader
0xD9470 EnterScoreText
0xD9490 collisionResult.124
0xD94C0 collisionResult.128
0xD94F0 cd
0xD95B8 pmJerichoModels
0xD95D0 tanner_collision_box
0xD95E0 pedestrian_roads
0xD95F0 extra_collision_boxes
0xD9640 collision_car_ptr
0xD9660 collision_box
0xD96E0 pmTannerModels
0xD9728 player
0xD9AC8 button_textures
0xD9B68 fontinfo
0xD9F68 AsciiTable
0xDA068 RoadMapDataRegions
0xDA078 RoadMapRegions
0xDA088 roadMapLumpData
0xDA098 ScoreTables
0xDA908 gPlayerScore
0xDA920 Cont.12
0xDA930 cv
0xDA990 tyre_save_positions
0xDA9D0 num_tyre_tracks
0xDA9E0 shadowPolys
0xDB020 smoke_count
0xDB030 track_buffer
0xDCC30 tyre_track_offset
0xDCC40 edgelist
0xDCC60 ShadowPolygon
0xDCC78 camverts
0xDD078 tyre_new_positions
0xDD0B8 direction
0xDD0C8 buffer.10
0xDD208 skytpage
0xDD248 skyclut
0xDD288 skytexuv
0xDD368 tabs.93
0xDD3B8 banks
0xDD3D8 channel_lookup
0xDD418 sound_attr
0xDD448 pause
0xDD4B8 musps
0xDD520 samples
0xDE470 lis_pos
0xDE480 channels
0xDEC00 cd_sprite
0xDEC30 dummyModel
0xDEC58 cd_palette
0xDEC98 spool_regioninfo
0xDED18 tsetinfo
0xDED98 unpack_cellptr_tbl
0xDEDA8 multiplayerregions
0xDEDB8 spooldata
0xDF0B8 pLodModels
0xE08B8 MPBuff
0xE0AB8 currentfileinfo
0xE0AD0 citystart
0xE0AF0 citylumps
0xE0BF0 tpageslots
0xE0C08 tpageloaded
0xE0C88 tsdname
0xE0D08 slot_clutpos
0xE0D58 tpage_texamts
0xE0F58 slot_tpagepos
0xE0FA8 tpage_ids
0xE11A8 buffer
0xE11C8 XAMissionMessages
0xE11E8 XM_HeaderAddress
0xE1208 xm_g_s_attr
0xE1248 XM_SngAddress
0xE12A8 xm_l_vag_spu_addr
0xE22A8 uxm_g_s_attr
0xE22E8 xm_r_attr
0xE4730 StMode
0xE47B8 _que
0xE6018 _spu_RQ
0xE62B0 _padRestPeriod
0xE62B8 _apiPadPatch
0x1C0C1C LoadFrontendScreens
0x1C0F24 LoadBackgroundFile
0x1C10F4 SetupBackgroundPolys
0x1C132C SetupScreenSprts
0x1C147C DrawScreen
0x1C18E4 DisplayOnScreenText
0x1C1AD0 SetupExtraPoly
0x1C1CF4 ReInitScreens
0x1C1E18 NewSelection
0x1C22A8 HandleKeyPress
0x1C2668 PadChecks
0x1C296C DoFrontEnd
0x1C2C2C SetFEDrawMode
0x1C2D90 FEPrintString
0x1C2FD8 FEPrintStringSized
0x1C31FC CentreScreen
0x1C3430 CarSelectScreen
0x1C3A60 VibroOnOffScreen
0x1C3B1C MissionSelectScreen
0x1C4338 MissionCityScreen
0x1C4600 CutSceneSelectScreen
0x1C4B30 CutSceneCitySelectScreen
0x1C50B0 SetVolumeScreen
0x1C55F8 DisplayScoreTable
0x1C59A0 ScoreScreen
0x1C5B4C CheatScreen
0x1C60A0 GameNameScreen
0x1C61AC FEInitCdIcon
0x1C62F8 FEDrawCDicon
0x1C6378 EndFrame
0x1C6404 CopDiffLevelScreen
0x1C64B0 SubtitlesOnOffScreen
0x1C64FC CityCutOffScreen
0x1C6548 ControllerScreen
0x1C6614 MainScreen
0x1C6654 ImmunityOnOffScreen
0x1C66A0 InvincibleOnOffScreen
0x1C66EC GamePlayScreen
0x1C6724 CheatNumlayerSelect
0x1C6774 gameNames
0x1C6874 cheatText
0x1C6888 CutSceneNames
0x1C68F8 MissionName
0x1C698C screen_limits
0x1C699C bDoingScores
0x1C69A0 cutSelection
0x1C69A4 bDoingCutSelect
0x1C69A8 cutGfxNames
0x1C69B8 CutAmounts
0x1C69CC CutAmountsTotal
0x1C69E0 cutUnlock
0x1C6A0C carSelection
0x1C6A10 gfxNames
0x1C6A20 fpUserFunctions
0x1C6A70 currCity
0x1C6A74 missionSetup
0x1C6A78 loaded
0x1C6A7B lastCity
0x1C6A7C lastCutCity
0x1C6A80 bInCutSelect
0x1C6A84 currPlayer
0x1C6A88 bDoingCarSelect
0x1C6A8C currSelIndex
0x1C6A90 bDrawExtra
0x1C6A94 bScreenSetup
0x1C6A98 storeRect
0x1C6AA0 bRedrawFrontend
0x1C6AA4 bWantCDReset
0x1C6AA8 bRequestedKey
0x1C6AAC bDoneAllready
0x1C6AB0 bMissionSelect
0x1C6AB4 allowVibration
0x1C6AB8 numPadsConnected
0x1C6ABC padsConnected
0x1C6AC4 mainScreenLoaded
0x1C6AC8 bCdIconSetup
0x1C6ACC carNumLookup
0x1C6AF4 CarAvailability
0x1C6B94 oldActionSet
0x1C6B98 minmaxSelections
0x1C6BB8 botch
0x1C6CE8 GameNum
0x1C6CEC CityNames
0x1C6CFC scoreCol
0x1C6D00 otherCol
0x1C6D04 contNames
0x1C6D20 cd_sprite
0x1C6D48 pNewScreen
0x1C6D50 PsxScreens
0x1CBCB8 pNewButton
0x1CBCC0 BackgroundPolys
0x1CBDB0 idle_timer
0x1CBDB8 extraDummy
0x1CBDD8 feFont
0x1CC1E0 ScreenTitle
0x1CC260 oldSfxLevel
0x1CC264 pCurrScreen
0x1CC268 ScreenDummy
0x1CC368 ScreenPolys
0x1CC4A8 ScreenSprts
0x1CC548 pCurrButton
0x1CC54C currMission
0x1CC550 In
0x1CC568 oldActionVal
0x1CC570 Out
0x1CC588 oldMusicLevel
0x1CC590 HighlightSprt
0x1CC5A8 HighlightDummy
0x1CC5C8 extraSprt
0x1CC5DC fePad
0xE7128 InitLead
0xE73E8 LeadUpdateState
0xE7994 LeadPadResponse
0xE7DE8 FakeMotion
0xE834C PosToIndex
0xE86BC BlockToMap
0xE98A4 IsOnMap
0xE9BB8 UpdateRoadPosition
0xEB1FC CheckCurrentRoad
0xEC1C4 SetTarget
0xEC5E4 SelectExit
0xEC99C FreeRoamer
0xECB28 hypot
0xECC14 toGo.22
0xECC18 angle.23
0xECC1C s.24
0xECC20 c.25
0xECC24 carLength.35
0xECC28 carWidth.36
0xECC2C left.39
0xECC30 right.40
0xECC34 ldist.41
0xECC38 rdist.42
0xECC40 newdata.43
0xECC60 nextJunction.55
0xECC70 basePosition.56
0xECC80 d.57
0xECC84 toGo.58
0xECC88 angle.59
0xECC8C s.60
0xECC90 c.61
0xECC94 angle.62
0xECC98 radius.63
0xECC9C dx.64
0xECCA0 dz.65
0xECCA4 fixedThresh.66
0xECCA8 diff.67
0xECCAC dx.68
0xECCB0 dz.69
0xECCB4 dx.70
0xECCB8 dz.71
0xECCBC dist.72
0xECCC0 offx.73
0xECCC4 offz.74
0xECCC8 angle.75
0xECCCC dx.76
0xECCD0 dz.77
0xECCD4 basex.78
0xECCD8 basez.79
0xECCDC dist.80
0xECCE0 offx.81
0xECCE4 offz.82
0xECCE8 dx.86
0xECCEC dz.87
0xECCF0 randState
0xECD34 randIndex
0xECD38 road_c
0xECD3C road_s
0xECD40 localMap
0xECDE8 roadAhead
0xECE90 LeadValues
0xE7194 WunCell
0xE735C InvalidateMap
0xE74B0 BloodyHell
0xE76C4 blocked
0xE7814 iterate
0xE7BD0 InitPathFinding
0xE7CA8 getInterpolatedDistance
0xE822C addCivs
0xE836C UpdateCopMap
0xE8F00 getHeadingToPlayer
0xE90A4 setDistance
0xE9138 cellsPerFrame
0xE913C slowWallTests
0xE9140 dirs
0xE9158 asf
0xE915C na
0xE91A0 OverlayOccupancyGrid
0xE99A8 pathFrames
0xE99AC DoExtraWorkForNFrames
0xE99B0 dunyet
0xE9AB0 distLogIndex
0xE9AB8 searchTarget
0xE9AC8 lastDistanceFound
0xE9ACC playerTargetDistanceSq
0xE9AD0 dbb
0xE9B00 distanceCache
0xF1B00 pathFrame
0xF1B08 heap
0xF2798 cellsThisFrame
0xF279C numHeapEntries
0xF27A0 distanceReturnedLog
0xF27C0 pathIterations
0xF3828 CardRemoved__6MCSLOT
0xF3994 CardInserted__6MCSLOT
0xF3B04 FormatCard__6MCSLOT
0xF3C74 ReadCardDir__6MCSLOT
0xF3DB8 ReadCardInfo__6MCSLOTPc
0xF41A0 ReadSlice__6MCSLOTiiP5SLICEP10FILEFORMAT
0xF43A0 read_block__6MCSLOTiPcR9BLOCKINFO
0xF46B4 write_block__6MCSLOTR9BLOCKINFOPc
0xF49E8 CreateBlock__6MCSLOTP10FILEFORMATP5SLICE
0xF502C DeleteBlock__6MCSLOTi
0xF512C Ascii2ShiftJis__FPsPc
0xF523C __6MCSLOTiiiiiiPc
0xF52F0 _._6MCSLOT
0xF534C card_stop__6MCSLOT
0xF5474 CheckCard__6MCSLOT
0xF555C card_event__6MCSLOTi
0xF5610 clear_event__6MCSLOT
0xF5668 invalidate_info__6MCSLOT
0xF56FC download_icon__6MCSLOTR9BLOCKINFOiiiii
0xF5860 CopyBlock__6MCSLOTi
0xF5918 PasteBlock__6MCSLOT
0xF5968 ReadHeader__6MCSLOTii
0xF5A60 RenameCopyBlock__6MCSLOTP10FILEFORMAT
0xF5B38 WriteSlice__6MCSLOTiiP5SLICEP10FILEFORMATPc
0xF5C70 SetPort__6MCSLOTii
0xF5D30 BlocksShared__6MCSLOTii
0xF5DC8 GetBlockSize__6MCSLOTi
0xF5DFC CardInfoRead__6MCSLOT
0xF5E08 GetBlockIconPtr__6MCSLOTi
0xF5E84 GetNoUsedBlocks__6MCSLOT
0xF5EA0 GetBlockTitlePtr__6MCSLOTi
0xF5EE4 GetBlockFilenamePtr__6MCSLOTi
0xF5F1C FilenameUsed__6MCSLOTPc
0xF5FBC GetNumGremBlocks__6MCSLOTPc
0xF6088 InsertSliceIntoCopyBuffer__6MCSLOTiPccccT2
0xF61F0 ExtractSliceFromCopyBuffer__6MCSLOTiPc
0xF628C GetSliceFilenamePtr__6MCSLOTii
0xF633C SliceUsed__6MCSLOTii
0xF63EC GetNoUsedSlices__6MCSLOTi
0xF6448 GetSliceIconRef__6MCSLOTiii
0xF64F4 GetNoSlices__6MCSLOTi
0xF6550 GremlinBlock__6MCSLOTi
0xF6588 delete_file
0xF65A8 __7DISPMANPlPPlP3PADP10FILEFORMATib
0xF72B8 DrawTitleBar__7DISPMAN
0xF7508 DrawCards__7DISPMAN
0xF7688 DrawMenu__7DISPMAN
0xF79C8 DrawKeyInfo__7DISPMAN
0xF7C4C DrawBlocks__7DISPMAN
0xF819C DrawSlices__7DISPMAN
0xF8B28 write_mess_in_box__7DISPMANG4RECTPciiii
0xF8D24 DrawBlockName__7DISPMAN
0xF8EE4 ActiveAreaLeft__7DISPMAN
0xF902C ActiveAreaRight__7DISPMAN
0xF9270 ActiveAreaUp__7DISPMAN
0xF941C ActiveAreaDown__7DISPMAN
0xF96F0 ActiveAreaSelect__7DISPMANii
0xF9BAC ActiveAreaConfirm__7DISPMAN
0xF9FAC intersect__7DISPMANG4RECTT1
0xFA174 Update__7DISPMAN
0xFA684 PrintKanji__7DISPMANPsiiiiii
0xFA97C darken__7DISPMANG4RECT
0xFACD4 DrawSprite__7DISPMANP9TIMSTRUCTiiiiii
0xFAED0 AddCircleG16__7DISPMANiiiiiiii
0xFB304 MessageBox__7DISPMANiPcbT3
0xFC950 ProgressBox__7DISPMANPci
0xFCC54 message_width__7DISPMANPcii
0xFCE00 justify_mess__7DISPMANPcii
0xFD000 write_mess__7DISPMANPciiiiiiii
0xFD410 font_ref__7DISPMANcb
0xFD658 Tim2VRAM__7DISPMANPlP9TIMSTRUCTibiiii
0xFD86C wipe_screen__7DISPMANii
0xFDAD8 _._7DISPMAN
0xFDBEC DrawEnterName__7DISPMANPc
0xFDC6C SetMenuOption__7DISPMANi
0xFDCBC SetActiveFunction__7DISPMANi
0xFDCC4 MoveActiveAreaTo__7DISPMANi
0xFDD0C SelectNewBlock__7DISPMANi
0xFDDD0 GetArea__7DISPMANii
0xFDE50 ActiveAreaCancel__7DISPMAN
0xFDF58 AddingBlock__7DISPMANi
0xFDF60 DeletingCurrBlock__7DISPMANi
0xFDF68 InvalidateArea__7DISPMANG4RECT
0xFE040 InvalidateArea__7DISPMANi
0xFE098 DrawArea__7DISPMANi
0xFE144 FlashOn__7DISPMAN
0xFE150 FlashOff__7DISPMAN
0xFE160 FindKanji__7DISPMANs
0xFE1B0 CentrePrintKanji__7DISPMANPsiiiiii
0xFE258 KanjiStrLen__FPsi
0xFE2F4 GetCurrBlock__7DISPMAN
0xFE300 GetCurrSlice__7DISPMAN
0xFE30C draw_card__7DISPMANiiPcb
0xFE434 AddIcon__7DISPMANP9TIMSTRUCTiiiiiib
0xFE598 AddMoveImage__7DISPMANP4RECTT1
0xFE61C AddSprite__7DISPMANP9TIMSTRUCTiiiiii
0xFE72C DrawBox__7DISPMANiiiiiii
0xFE834 write_mess_c__7DISPMANPciiiiiiii
0xFE908 download_block_icon__7DISPMANiiii
0xFEA44 move_screen__7DISPMANiii
0xFEB24 GetCyclesPerSecond__7DISPMAN
0xFEB70 __3PADPc
0xFECC0 GetPadData__3PADi
0xFF2CC port_name__3PADi
0xFF3C0 WaitUntilCardRemoved__3PADi
0xFF6E4 WaitUntilAnyCardInserted__3PAD
0xFFA1C check_ports__3PAD
0xFFC98 search_ports__3PADib
0xFFE44 _._3PAD
0xFFEA0 UpdateSlots__3PAD
0xFFEE0 NegConInserted__3PAD
0xFFF10 ControllerInserted__3PAD
0xFFF48 ControllerChanged__3PAD
0xFFF5C SetControllerType__3PAD
0x1000D0 MouseInserted__3PAD
0x100158 GetMouseX__3PAD
0x10016C GetMouseY__3PAD
0x100180 ResetPadData__3PAD
0x1001AC GetPortName__3PADi
0x100214 GetControllerPortName__3PAD
0x100244 CardSelected__3PADi
0x100260 CurrCardInfoRead__3PAD
0x10029C next_port__3PADi
0x1002A4 GetCurrNoUsedBlocks__3PAD
0x1002E0 CurrSlotBlocksShared__3PADii
0x10031C GetCurrSlotPtr__3PAD
0x100340 GetCurrSlot__3PAD
0x100354 GetDestSlotPtr__3PAD
0x10037C CardChanged__3PADi
0x1003B0 CardInserted__3PADi
0x1003E4 CycleSelectedSlot__3PAD
0x10042C CardFormatted__3PADi
0x100460 FormatCard__3PADi
0x1004C8 ParseLanguageFile__FPci
0x1005E0 cardman__FiiPcP10FILEFORMATP5SLICET2T2
0x102364 EnterName__FP3PADP7DISPMANPc
0x102710 card_manager
0x102744 LoadBackground__FPcT0
0x1027E8 g_black
0x1027E8 g_tim_buffer
0x1028F0 g_pointer
0x1029B8 g_memcard
0x102D68 g_arrows
0x103370 g_buttons
0x103FF0 g_abcd
0x1043F8 g_font0
0x1074CC g_font1
0x1095F0 g_font2
0x10EB20 add_prim
0x10EB44 _6MCSLOT.s_ev0
0x10EB48 _6MCSLOT.s_ev1
0x10EB4C _6MCSLOT.s_ev2
0x10EB50 _6MCSLOT.s_ev3
0x10EB54 _6MCSLOT.s_ev10
0x10EB58 _6MCSLOT.s_ev11
0x10EB5C _6MCSLOT.s_ev12
0x10EB60 _6MCSLOT.s_ev13
0x10EB64 _6MCSLOT.s_nullKanjiString
0x10EB68 _6MCSLOT.s_copyBufferSize
0x10EB6C _6MCSLOT.s_copyBufferPtr
0x10EB70 DM_CIRCLE
0x10EC70 _7DISPMAN.dispManPtr
0x10EC74 oTablePtr
0x10EC78 g_strActiveMouseArea
0x10EC80 g_PAD_FRB
0x10EC82 g_PAD_FLB
0x10EC84 g_PAD_FRT
0x10EC86 g_PAD_FLT
0x10EC88 g_PAD_RU
0x10EC8A g_PAD_RD
0x10EC8C g_PAD_RL
0x10EC8E g_PAD_RR
0x10EC90 g_PAD_LU
0x10EC92 g_PAD_LD
0x10EC94 g_PAD_LL
0x10EC96 g_PAD_LR
0x10EC98 g_PAD_SEL
0x10EC9A g_PAD_START
0x10EC9C g_controllerData
0x10ECE0 g_msg
0x10EE04 g_textBuffer
0x10EE08 g_nCManOptions
0x10EE0C validchars

// 0 external declarations

// 0 functions
Source file(s) D:\DRIVER2\GAME\ASM\D2MAPASM.MIP, object file <none> overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) D:\driver2\game\C\DR2ROADS.C+D:\driver2\game\DR2ROADS.C, object file obj\dr2roads.obj overlay id <none>

// 57 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct DRIVER2_STRAIGHT {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  unsigned short length; // size=0, offset=8
  short bing; // size=0, offset=10
  short angle; // size=0, offset=12
  short ConnectIdx[4]; // size=8, offset=14
  char NumLanes; // size=0, offset=22
  char LaneDirs; // size=0, offset=23
  char AILanes; // size=0, offset=24
  char packing; // size=0, offset=25
};
struct OLD_DRIVER2_JUNCTION {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  short length; // size=0, offset=8
  short width; // size=0, offset=10
  short angle; // size=0, offset=12
  short ExitIdx[4]; // size=8, offset=14
  unsigned short flags; // size=0, offset=22
};
struct DRIVER2_JUNCTION {
  short ExitIdx[4]; // size=8, offset=0
  unsigned long flags; // size=0, offset=8
};
struct DRIVER2_CURVE {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  short start; // size=0, offset=8
  short end; // size=0, offset=10
  short ConnectIdx[4]; // size=8, offset=12
  short gradient; // size=0, offset=20
  short height; // size=0, offset=22
  char NumLanes; // size=0, offset=24
  char LaneDirs; // size=0, offset=25
  char inside; // size=0, offset=26
  char AILanes; // size=0, offset=27
};
struct _sdPlane {
  short surface; // size=0, offset=0
  short a; // size=0, offset=2
  short b; // size=0, offset=4
  short c; // size=0, offset=6
  int d; // size=0, offset=8
};
struct _sdNode {
  int angle : 11; // offset=0.0
  int dist : 12; // offset=1.3
  int offset : 8; // offset=2.7
  int node : 1; // offset=3.7
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};

// 81 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct GAP_INFO GAP_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct DRIVER2_STRAIGHT DRIVER2_STRAIGHT;
typedef struct OLD_DRIVER2_JUNCTION OLD_DRIVER2_JUNCTION;
typedef struct DRIVER2_JUNCTION DRIVER2_JUNCTION;
typedef struct DRIVER2_CURVE DRIVER2_CURVE;
typedef struct _sdPlane sdPlane;
typedef struct _sdNode sdNode;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _EVENT EVENT;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 9 external declarations
extern struct _sdPlane sea; // offset 0x0009b320
extern int NumDriver2Straights; // offset 0x000aaa20
extern int NumDriver2Curves; // offset 0x000aaa10
extern int NumDriver2Junctions; // offset 0x000aaa24
extern struct DRIVER2_CURVE *Driver2CurvesPtr; // offset 0x000aaa14
extern struct DRIVER2_STRAIGHT *Driver2StraightsPtr; // offset 0x000aaa28
extern struct DRIVER2_JUNCTION *Driver2JunctionsPtr; // offset 0x000aaa2c
extern int sdLevel; // offset 0x000aaa18
extern int region_buffer_xor; // offset 0x000aaa1c

// 11 functions
/*
 * Offset 0x12EF4, from D:\driver2\game\C\DR2ROADS.C (lines 164..201)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ FindSurfaceD2(struct VECTOR *pos /*$s0*/, struct VECTOR *normal /*$s1*/, struct VECTOR *out /*$s3*/, struct _sdPlane **plane /*$s2*/)
{
}
/*
 * Offset 0x130D4, from D:\driver2\game\C\DR2ROADS.C (lines 205..247)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ sdHeightOnPlane(struct VECTOR *pos /*$t0*/, struct _sdPlane *plane /*$a1*/)
{ // line 1, offset 0x130d4
  { // line 11, offset 0x13134
    int angle; // $v0
    int i; // $v0
    struct DRIVER2_CURVE *curve; // $s0
  } // line 23, offset 0x1319c
  { // line 26, offset 0x1319c
    int val; // $a3
    { // line 35, offset 0x131bc
      int lx; // $v0
      int ly; // $v1
    } // line 39, offset 0x13218
  } // line 42, offset 0x1322c
} // line 43, offset 0x1322c
/*
 * Offset 0x1322C, from D:\driver2\game\C\DR2ROADS.C (lines 295..388)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ RoadInCell(struct VECTOR *pos /*$s5*/)
{ // line 1, offset 0x1322c
  char *buffer; // $s2
  struct XYPAIR cellPos; // stack offset -48
  struct XYPAIR cell; // stack offset -40
  short *surface; // $a0
  struct _sdPlane *plane; // $s0
  { // line 36, offset 0x13318
    int moreLevels; // $s3
    short *check; // $s1
    struct _sdPlane *base; // $s4
  } // line 77, offset 0x133e4
} // line 94, offset 0x1346c
/*
 * Offset 0x1346C, from D:\driver2\game\C\DR2ROADS.C (lines 400..501)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
struct _sdPlane * /*$ra*/ sdGetCell(struct VECTOR *pos /*$s3*/)
{ // line 1, offset 0x1346c
  char *buffer; // $s1
  short *surface; // $s0
  int nextLevel; // $s2
  struct _sdPlane *plane; // $a1
  struct XYPAIR cell; // stack offset -40
  struct XYPAIR cellPos; // stack offset -32
  { // line 41, offset 0x1355c
    int y; // $a0
  } // line 56, offset 0x135b8
  { // line 63, offset 0x135cc
    short *BSPsurface; // $a0
  } // line 81, offset 0x13634
} // line 102, offset 0x136c0
/*
 * Offset 0x136C0, from D:\driver2\game\C\DR2ROADS.C (lines 64..68)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ProcessStraightsDriver2Lump(char *lump_file /*$s0*/, int lump_size /*$a1*/)
{ // line 1, offset 0x136c0
} // line 5, offset 0x136f4
/*
 * Offset 0x136F4, from D:\driver2\game\C\DR2ROADS.C (lines 80..84)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ProcessCurvesDriver2Lump(char *lump_file /*$s0*/, int lump_size /*$a1*/)
{ // line 1, offset 0x136f4
} // line 5, offset 0x13728
/*
 * Offset 0x13728, from D:\driver2\game\C\DR2ROADS.C (lines 94..114)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ProcessJunctionsDriver2Lump(char *lump_file /*$s1*/, int lump_size /*$a1*/, int fix /*$s0*/)
{ // line 1, offset 0x13728
  { // line 8, offset 0x1375c
    int loop; // $v1
    struct OLD_DRIVER2_JUNCTION *old; // $a1
    struct DRIVER2_JUNCTION *p; // $a0
    { // line 13, offset 0x13778
      int i; // $a1
    } // line 19, offset 0x137a4
  } // line 20, offset 0x137b8
} // line 21, offset 0x137cc
/*
 * Offset 0x137CC, from D:\driver2\game\C\DR2ROADS.C (lines 146..161)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ MapHeight(struct VECTOR *pos /*$s0*/)
{ // line 1, offset 0x137cc
  int height; // $v0
  struct _sdPlane *plane; // $v0
} // line 16, offset 0x1380c
/*
 * Offset 0x1380C, from D:\driver2\game\C\DR2ROADS.C (lines 250..259)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ GetSurfaceIndex(struct VECTOR *pos /*$a0*/)
{ // line 2, offset 0x1380c
  struct _sdPlane *plane; // $v0
} // line 10, offset 0x13848
/*
 * Offset 0x13848, from D:\driver2\game\C\DR2ROADS.C (lines 505..523)
 * Stack frame base $sp, size 0
 */
short * /*$ra*/ sdGetBSP(struct _sdNode *node /*$a3*/, struct XYPAIR *pos /*$a1*/)
{ // line 1, offset 0x13848
  { // line 4, offset 0x13870
    int dot; // $a0
  } // line 17, offset 0x138d4
} // line 19, offset 0x138f0
/*
 * Offset 0x138F0, from D:\driver2\game\C\DR2ROADS.C (lines 266..292)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
struct _sdPlane * /*$ra*/ FindRoadInBSP(struct _sdNode *node /*$s0*/, struct _sdPlane *base /*$s1*/)
{ // line 2, offset 0x13908
  struct _sdPlane *plane; // $v0
} // line 27, offset 0x13980
Source file(s) D:\driver2\game\C\OBJANIM.C+D:\driver2\game\OBJANIM.C, object file obj\objanim.OBJ overlay id <none>

// 81 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct DR_LOAD {
  unsigned long tag; // size=0, offset=0
  unsigned long code[3]; // size=12, offset=4
  unsigned long p[13]; // size=52, offset=16
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct ANIMATED_OBJECT {
  int internal_id; // size=0, offset=0
  int model_num; // size=0, offset=4
  char *name; // size=0, offset=8
  char LitPoly; // size=0, offset=12
};
struct SMASHABLE_OBJECT {
  int modelIdx; // size=0, offset=0
  char *name; // size=0, offset=4
  int sound; // size=0, offset=8
  int volume; // size=0, offset=12
  int pitch; // size=0, offset=16
};
struct GARAGE_DOOR {
  struct CELL_OBJECT *cop; // size=16, offset=0
  struct VECTOR_NOPAD old_pos; // size=12, offset=4
  struct VECTOR_NOPAD pos; // size=12, offset=16
  short rotation; // size=0, offset=28
  char yang; // size=0, offset=30
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct CYCLE_OBJECT {
  char *name; // size=0, offset=0
  short vx; // size=0, offset=4
  short vy; // size=0, offset=6
  short start1; // size=0, offset=8
  short stop1; // size=0, offset=10
  short speed1; // size=0, offset=12
  short start2; // size=0, offset=14
  short stop2; // size=0, offset=16
  short speed2; // size=0, offset=18
};

// 114 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct DR_LOAD DR_LOAD;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct ANIMATED_OBJECT ANIMATED_OBJECT;
typedef struct SMASHABLE_OBJECT SMASHABLE_OBJECT;
typedef struct GARAGE_DOOR GARAGE_DOOR;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct _CAR_DATA CAR_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct DB DB;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct CYCLE_OBJECT CYCLE_OBJECT;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct MVERTEX SV5x5[5][5];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 23 external declarations
extern struct SMASHABLE_OBJECT smashable[38]; // offset 0x0009b63c
extern struct CYCLE_OBJECT Lev0[2]; // offset 0x0009b32c
extern struct CYCLE_OBJECT Lev1[1]; // offset 0x0009b354
extern struct CYCLE_OBJECT Lev2[12]; // offset 0x0009b368
extern struct CYCLE_OBJECT Lev3[1]; // offset 0x0009b458
extern struct CYCLE_OBJECT *Lev_CycleObjPtrs[4]; // offset 0x0009b46c
extern int Num_LevCycleObjs[4]; // offset 0x0009b47c
extern struct ANIMATED_OBJECT Lev0AnimObjects[9]; // offset 0x0009b48c
extern struct ANIMATED_OBJECT Lev1AnimObjects[5]; // offset 0x0009b51c
extern struct ANIMATED_OBJECT Lev2AnimObjects[5]; // offset 0x0009b56c
extern struct ANIMATED_OBJECT Lev3AnimObjects[4]; // offset 0x0009b5bc
extern struct ANIMATED_OBJECT *Level_AnimatingObjectPtrs[4]; // offset 0x0009b5fc
extern int Level_NumAnimatedObjects[8]; // offset 0x0009b60c
extern struct VECTOR gMissionDoorPosition; // offset 0x0009b62c
extern int GuitarType; // offset 0x000aa000
extern short cycle_timer; // offset 0x000aaa34
extern int num_cycle_obj; // offset 0x000aaa3c
extern int cycle_phase; // offset 0x000aaa30
extern int num_anim_objects; // offset 0x000aaa38
extern struct TEXTURE_DETAILS cycle_tex[12]; // offset 0x000ab700
extern struct DR_LOAD cyclecluts[12]; // offset 0x000ab3a0
extern struct GARAGE_DOOR CurrentGarage; // offset 0x000ab6d0
extern struct VECTOR GuitarPos; // offset 0x000ab6f0

// 9 functions
/*
 * Offset 0x13980, from D:\driver2\game\C\OBJANIM.C (lines 362..449)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ ColourCycle()
{ // line 3, offset 0x13980
  int i; // $s5
  struct CYCLE_OBJECT *cyc; // $s2
  struct RECT vram; // stack offset -56
  unsigned short *bufaddr; // $s0
  unsigned short length; // $v0
  unsigned short temp; // $s1
  { // line 26, offset 0x13a4c
    int tnum; // $a1
    { // line 39, offset 0x13aa4
    } // line 48, offset 0x13aec
    { // line 53, offset 0x13b18
    } // line 62, offset 0x13b60
  } // line 81, offset 0x13c20
} // line 88, offset 0x13c7c
/*
 * Offset 0x13CAC, from D:\driver2\game\C\OBJANIM.C (lines 481..527)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitAnimatingObjects()
{ // line 2, offset 0x13cac
  struct ANIMATED_OBJECT *aop; // $s1
  int loop; // $s0
  int count1; // $a0
  int count; // $a2
  struct MODEL *modelPtr; // $a0
} // line 47, offset 0x13df8
/*
 * Offset 0x13DF8, from D:\driver2\game\C\OBJANIM.C (lines 613..895)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ animate_object(struct CELL_OBJECT *cop /*$s2*/, int type /*$a1*/)
{ // line 1, offset 0x13df8
  short yang; // $s1
  char phase; // $a0
} // line 283, offset 0x146a4
/*
 * Offset 0x146A4, from D:\driver2\game\C\OBJANIM.C (lines 931..964)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ animate_garage_door()
{ // line 2, offset 0x146a4
  int dx; // $a0
  int dz; // $v1
  int dist; // $a0
} // line 34, offset 0x14820
/*
 * Offset 0x14828, from D:\driver2\game\C\OBJANIM.C (lines 536..550)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitSpooledAnimObj(int model_number /*$a0*/)
{ // line 1, offset 0x14828
  struct ANIMATED_OBJECT *aop; // $a1
  int i; // $a2
} // line 15, offset 0x14898
/*
 * Offset 0x148A0, from D:\driver2\game\C\OBJANIM.C (lines 578..604)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ DrawAnimatingObject(struct MODEL *model /*$a0*/, struct CELL_OBJECT *cop /*$s3*/, struct VECTOR *pos /*$a2*/)
{ // line 1, offset 0x148a0
  struct ANIMATED_OBJECT *aop; // $s1
  int loop; // $s2
  int type; // $s0
} // line 27, offset 0x14950
/*
 * Offset 0x14950, from D:\driver2\game\C\OBJANIM.C (lines 460..467)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ FindSmashableObjects()
{ // line 2, offset 0x14950
  struct SMASHABLE_OBJECT *sip; // $s0
} // line 8, offset 0x149a8
/*
 * Offset 0x149A8, from D:\driver2\game\C\OBJANIM.C (lines 565..566)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ int_garage_door()
{
}
/*
 * Offset 0x149B4, from D:\driver2\game\C\OBJANIM.C (lines 260..277)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitCyclingPals()
{ // line 2, offset 0x149b4
  int i; // $s0
  struct CYCLE_OBJECT *cyc; // $s1
  struct RECT vram; // stack offset -24
} // line 18, offset 0x14a58
Source file(s) D:\driver2\game\C\OVERLAY.C+D:\driver2\game\OVERLAY.C, object file obj\overlay.OBJ overlay id <none>

// 75 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_G4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char r3; // size=0, offset=28
  unsigned char g3; // size=0, offset=29
  unsigned char b3; // size=0, offset=30
  unsigned char pad3; // size=0, offset=31
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
};
struct TILE {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short w; // size=0, offset=12
  short h; // size=0, offset=14
};
struct DR_TPAGE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[1]; // size=4, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct _PERCENTAGE_BAR {
  char *tag; // size=0, offset=0
  short xpos; // size=0, offset=4
  short ypos; // size=0, offset=6
  short width; // size=0, offset=8
  short height; // size=0, offset=10
  unsigned short position; // size=0, offset=12
  unsigned short max; // size=0, offset=14
  struct COLOUR_BAND *pColourBand; // size=12, offset=16
  int flags; // size=0, offset=20
  int active; // size=0, offset=24
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};

// 101 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_G4 POLY_G4;
typedef struct TILE TILE;
typedef struct DR_TPAGE DR_TPAGE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct _PERCENTAGE_BAR PERCENTAGE_BAR;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 9 external declarations
static struct COLOUR_BAND felonyColour[3]; // offset 0x0009b934
static struct COLOUR_BAND playerDamageColour[3]; // offset 0x0009b958
static struct COLOUR_BAND damageColour[2]; // offset 0x0009b97c
extern char OverlayFlashValue; // offset 0x000aaa40
extern struct _PERCENTAGE_BAR FelonyBar; // offset 0x000ab808
extern struct _PERCENTAGE_BAR DamageBar; // offset 0x000ab7e8
extern struct _PERCENTAGE_BAR ProxyBar; // offset 0x000ab7c8
extern struct _PERCENTAGE_BAR PlayerDamageBar; // offset 0x000ab828
extern struct _PERCENTAGE_BAR Player2DamageBar; // offset 0x000ab7a8

// 12 functions
/*
 * Offset 0x14A58, from D:\driver2\game\C\OVERLAY.C (lines 270..320)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ InitOverlays()
{
}
/*
 * Offset 0x14C3C, from D:\driver2\game\C\OVERLAY.C (lines 329..370)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DisplayOverlays()
{
}
/*
 * Offset 0x14DA8, from D:\driver2\game\C\OVERLAY.C (lines 426..529)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawPercentageBar(struct _PERCENTAGE_BAR *bar /*$fp*/)
{ // line 1, offset 0x14da8
  struct POLY_G4 *poly; // $s0
  struct CVECTOR temp; // stack offset -56
  int min_x; // $s1
  int max_x; // $s7
  int min_y; // $s2
  int max_y; // stack offset -48
  char *tag; // $s0
  { // line 94, offset 0x15248
    short tagX; // $s1
    short tagY; // $s2
  } // line 102, offset 0x152a4
} // line 104, offset 0x152d4
/*
 * Offset 0x152D4, from D:\driver2\game\C\OVERLAY.C (lines 532..628)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawProximityBar(struct _PERCENTAGE_BAR *bar /*$t3*/)
{ // line 1, offset 0x152d4
  struct TILE *tile; // $a1
  int min_x; // $s1
  int max_x; // $s7
  int min_y; // $s2
  int max_y; // $fp
  short total; // $v1
  char *tag; // $s0
  { // line 87, offset 0x15760
    short tagX; // $s1
    short tagY; // $s2
  } // line 95, offset 0x157c4
} // line 97, offset 0x157f4
/*
 * Offset 0x157F4, from D:\driver2\game\C\OVERLAY.C (lines 707..843)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DrawDrivingGameOverlays()
{ // line 2, offset 0x157f4
  struct SCORE_ENTRY *table; // $s1
  char string[32]; // stack offset -64
  int i; // $s1
  int x; // $s3
  int y; // $s2
  { // line 11, offset 0x1585c
    { // line 25, offset 0x158d4
    } // line 25, offset 0x158d4
    { // line 50, offset 0x159e4
    } // line 63, offset 0x15aa8
  } // line 136, offset 0x15e4c
} // line 137, offset 0x15e70
/*
 * Offset 0x15E70, from D:\driver2\game\C\OVERLAY.C (lines 378..387)
 * Stack frame base $sp, size 128
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetFullscreenDrawing()
{ // line 2, offset 0x15e70
  struct DRAWENV drawenv; // stack offset -104
  struct DR_ENV *dr_env; // $s0
} // line 10, offset 0x15f20
/*
 * Offset 0x15F20, from D:\driver2\game\C\OVERLAY.C (lines 395..405)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitPercentageBar(struct _PERCENTAGE_BAR *bar /*$a0*/, int size /*$a1*/, struct COLOUR_BAND *pColourBand /*$a2*/, char *tag /*$a3*/)
{
}
/*
 * Offset 0x15F58, from D:\driver2\game\C\OVERLAY.C (lines 414..417)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ EnablePercentageBar(struct _PERCENTAGE_BAR *bar /*$a0*/, int max /*$a1*/)
{
}
/*
 * Offset 0x15F6C, from D:\driver2\game\C\OVERLAY.C (lines 631..660)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetColourByValue(struct COLOUR_BAND *pColourBand /*$a3*/, int value /*$a1*/, struct CVECTOR *pOut /*$t0*/)
{ // line 1, offset 0x15f6c
  struct COLOUR_BAND *pPrevColourBand; // $a2
  int scale; // $a0
  int temp; // $a1
} // line 30, offset 0x16098
/*
 * Offset 0x16098, from D:\driver2\game\C\OVERLAY.C (lines 669..675)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ TransparencyOn(void *potz /*$a0*/, unsigned short tpage /*$a1*/)
{ // line 1, offset 0x16098
  struct DR_TPAGE *null; // $a2
} // line 7, offset 0x16114
/*
 * Offset 0x16114, from D:\driver2\game\C\OVERLAY.C (lines 687..699)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ UpdateFlashValue()
{ // line 2, offset 0x16114
  char size; // $v1
} // line 13, offset 0x16184
/*
 * Offset 0x16184, from D:\driver2\game\C\OVERLAY.C (lines 846..860)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ PrintScoreTableTime(int x /*$s0*/, int y /*$s1*/, int time /*$a0*/)
{ // line 1, offset 0x16184
  char string[32]; // stack offset -48
  int min; // $t0
  int frac; // $v1
} // line 15, offset 0x16280
Source file(s) D:\driver2\game\C\OVERMAP.C+D:\driver2\game\OVERMAP.C, object file obj\overmap.OBJ overlay id <none>

// 86 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct LINE_F2 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
};
struct LINE_G2 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char p1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
};
struct LINE_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
  unsigned long pad; // size=0, offset=24
};
struct TILE {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short w; // size=0, offset=12
  short h; // size=0, offset=14
};
struct TILE_1 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
};
struct DR_AREA {
  unsigned long tag; // size=0, offset=0
  unsigned long code[2]; // size=8, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct COP_SIGHT_DATA {
  short surroundViewDistance; // size=0, offset=0
  short frontViewDistance; // size=0, offset=2
  short frontViewAngle; // size=0, offset=4
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct MAPTEX {
  short u; // size=0, offset=0
  short w; // size=0, offset=2
  short v; // size=0, offset=4
  short h; // size=0, offset=6
};
struct OVERMAP {
  int x_offset; // size=0, offset=0
  int y_offset; // size=0, offset=4
  int width; // size=0, offset=8
  int height; // size=0, offset=12
  char toptile; // size=0, offset=16
  char dummy; // size=0, offset=17
  int scale; // size=0, offset=20
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};

// 112 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F3 POLY_F3;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct LINE_F2 LINE_F2;
typedef struct LINE_G2 LINE_G2;
typedef struct LINE_F4 LINE_F4;
typedef struct TILE TILE;
typedef struct TILE_1 TILE_1;
typedef struct DR_AREA DR_AREA;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct COP_SIGHT_DATA COP_SIGHT_DATA;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct UV UV;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct MAPTEX MAPTEX;
typedef struct OVERMAP OVERMAP;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 28 external declarations
static struct OVERMAP overlaidmaps[4]; // offset 0x0009b994
static struct SXYPAIR MapSegmentPos[16]; // offset 0x0009b9f4
static struct XYPAIR NVertex[4]; // offset 0x0009ba34
static struct XYPAIR north[4]; // offset 0x0009ba54
static short big_north[4]; // offset 0x0009ba74
static struct VECTOR player_position; // offset 0x0009ba7c
static char *palletedir[8]; // offset 0x0009ba8c
extern int map_x_shift; // offset 0x000aa098
extern int map_z_shift; // offset 0x000aa09c
static int gUseRotatedMap; // offset 0x000aa054
static int map_x_offset; // offset 0x000aa058
static int map_z_offset; // offset 0x000aa05c
static int x_map; // offset 0x000aa060
static int y_map; // offset 0x000aa064
static int old_x_mod; // offset 0x000aa068
static int old_y_mod; // offset 0x000aa06c
static int tilehnum; // offset 0x000aa070
static char tile_size; // offset 0x000aa074
static int flashtimer; // offset 0x000aa078
extern int first_paletised_page; // offset 0x000aaa5c
static char *MapBitMaps; // offset 0x000aaa48
static struct RECT MapRect; // offset 0x000aaa50
static unsigned short MapTPage; // offset 0x000aaa58
static unsigned short MapClut; // offset 0x000aaa5a
extern unsigned short civ_clut[8][32][6]; // offset 0x000aba88
static char MapBuffer[520]; // offset 0x000ab848
static char maptile[4][4]; // offset 0x000aba58
static struct MATRIX map_matrix; // offset 0x000aba68

// 27 functions
/*
 * Offset 0x16280, from D:\driver2\game\C\OVERMAP.C (lines 685..758)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ DrawTargetBlip(struct VECTOR *pos /*$t0*/, unsigned char r /*$s2*/, unsigned char g /*$s3*/, unsigned char b /*$s4*/, unsigned long flags /*stack 16*/, unsigned long flags /*$s1*/)
{ // line 1, offset 0x16280
  struct POLY_FT4 *poly; // $t0
  struct VECTOR vec; // stack offset -40
  int ysize; // $a2
} // line 74, offset 0x16558
/*
 * Offset 0x16578, from D:\driver2\game\C\OVERMAP.C (lines 815..874)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawTargetArrow(struct VECTOR *pos /*$a2*/, unsigned long flags /*$s3*/)
{ // line 1, offset 0x16578
  struct VECTOR vec; // stack offset -56
  struct VECTOR vec2; // stack offset -40
  struct POLY_FT3 *null; // $t1
  struct POLY_G3 *poly; // $s2
  int dx; // $s1
  int dy; // $s0
} // line 60, offset 0x16814
/*
 * Offset 0x16814, from D:\driver2\game\C\OVERMAP.C (lines 883..945)
 * Stack frame base $sp, size 192
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DrawPlayerDot(struct VECTOR *pos /*$a1*/, short rot /*$s2*/, unsigned char r /*$s5*/, unsigned char g /*$s4*/, int b /*stack 16*/, unsigned long flags /*stack 20*/, unsigned char b /*$s3*/, unsigned long flags /*$s1*/)
{ // line 1, offset 0x16814
  struct MATRIX matrix; // stack offset -168
  struct VECTOR direction; // stack offset -136
  struct SVECTOR apos[3]; // stack offset -120
  struct VECTOR opos[3]; // stack offset -96
  struct POLY_F3 *poly; // $t0
  struct VECTOR vec; // stack offset -48
} // line 63, offset 0x16ac4
/*
 * Offset 0x16AE8, from D:\driver2\game\C\OVERMAP.C (lines 954..985)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ProcessOverlayLump(char *lump_ptr /*$s1*/, int lump_size /*$s0*/)
{ // line 1, offset 0x16ae8
  struct TEXTURE_DETAILS info; // stack offset -32
  int i; // $a1
  int x; // $v0
  int y; // $a0
} // line 32, offset 0x16c0c
/*
 * Offset 0x16C0C, from D:\driver2\game\C\OVERMAP.C (lines 994..1035)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: ra
 */
unsigned long /*$ra*/ Long2DDistance(struct VECTOR *pPoint1 /*$a0*/, struct VECTOR *pPoint2 /*$a2*/)
{ // line 1, offset 0x16c0c
  struct VECTOR delta; // stack offset -24
  unsigned int result; // $v0
  { // line 7, offset 0x16c50
    int Theta; // $v1
    int tempTheta; // $v0
    { // line 15, offset 0x16c70
      int cos; // $v1
    } // line 23, offset 0x16c9c
    { // line 28, offset 0x16ca4
      int sin; // $v1
    } // line 38, offset 0x16d04
  } // line 39, offset 0x16d04
} // line 42, offset 0x16d14
/*
 * Offset 0x16D14, from D:\driver2\game\C\OVERMAP.C (lines 1077..1366)
 * Stack frame base $sp, size 808
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawOverheadMap()
{ // line 2, offset 0x16d14
  int width; // $t5
  int height; // $t4
  int count; // $s2
  int count1; // $s3
  int tpage; // $t1
  int x_mod; // $s5
  int y_mod; // $fp
  int MeshWidth; // $s6
  int MeshHeight; // $s7
  long flag; // stack offset -104
  struct SVECTOR MapMesh[5][5]; // stack offset -784
  struct VECTOR MapMeshO[5][5]; // stack offset -584
  struct MAPTEX MapTex[4]; // stack offset -184
  struct SVECTOR direction; // stack offset -152
  struct POLY_FT4 *spt; // $a3
  struct POLY_F4 *sptb; // $a0
  struct DR_AREA *draw_area; // $s2
  struct RECT clipped_size; // stack offset -144
  struct VECTOR translate; // stack offset -136
  { // line 35, offset 0x16e24
    static int ptab[16]; // offset 0x118
  } // line 36, offset 0x16e24
  { // line 48, offset 0x16ef8
    static int ptab[12]; // offset 0x158
    int intens; // $a1
  } // line 58, offset 0x16fa8
  { // line 62, offset 0x16fa8
    { // line 62, offset 0x16fa8
      struct VECTOR vec; // stack offset -120
      struct TILE_1 *tile1; // $a0
    } // line 65, offset 0x170f4
  } // line 65, offset 0x170f4
  { // line 69, offset 0x170f4
    struct _CAR_DATA *cp; // $s0
  } // line 84, offset 0x17218
  { // line 91, offset 0x17240
  } // line 93, offset 0x17240
  { // line 108, offset 0x172c0
  } // line 110, offset 0x172c0
  { // line 125, offset 0x1734c
  } // line 127, offset 0x1734c
  { // line 142, offset 0x173e0
  } // line 144, offset 0x173e0
} // line 290, offset 0x17c00
/*
 * Offset 0x17C30, from D:\driver2\game\C\OVERMAP.C (lines 1374..1636)
 * Stack frame base $sp, size 216
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawFullscreenMap()
{ // line 2, offset 0x17c30
  struct TILE *polys; // $v0
  struct POLY_FT4 *back; // $a1
  struct POLY_FT3 *null; // $a2
  struct SVECTOR Mesh[4]; // stack offset -192
  struct VECTOR MeshO[4]; // stack offset -160
  struct VECTOR target; // stack offset -96
  long flag; // stack offset -64
  long count; // $s4
  int width; // stack offset -60
  int height; // stack offset -56
  int x; // $s7
  int y; // $s3
  int min_x; // $a0
  int max_x; // $v0
  int min_y; // $v1
  int max_y; // $v1
  { // line 65, offset 0x17e30
    int px; // $a2
    int pz; // $a1
  } // line 126, offset 0x17f88
  { // line 180, offset 0x17ff4
    int clipped; // $s5
  } // line 232, offset 0x18210
  { // line 246, offset 0x182b0
    { // line 246, offset 0x182b0
      struct VECTOR vec; // stack offset -80
      struct TILE_1 *tile1; // $v1
    } // line 246, offset 0x182b0
  } // line 246, offset 0x182b0
} // line 263, offset 0x183e8
/*
 * Offset 0x183E8, from D:\driver2\game\C\OVERMAP.C (lines 1645..1675)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ DrawCopIndicators()
{ // line 2, offset 0x183e8
  static int ft[16]; // offset 0x188
  struct _CAR_DATA *cp; // $s0
  int fade; // $s1
  int cc; // $s3
  int cs; // $s2
  { // line 17, offset 0x18480
    int dx; // $a3
    int dz; // $a1
    int p; // $a1
    int q; // $a0
    int ap; // $v1
    { // line 25, offset 0x18510
    } // line 28, offset 0x18568
  } // line 29, offset 0x18568
} // line 31, offset 0x185a0
/*
 * Offset 0x185A0, from D:\driver2\game\C\OVERMAP.C (lines 1697..1775)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawMultiplayerMap()
{ // line 2, offset 0x185a0
  struct POLY_FT4 *poly; // $a2
  struct LINE_F2 *line2; // $s1
  struct VECTOR target; // stack offset -64
  int i; // $s3
  int y; // $s7
} // line 79, offset 0x18980
/*
 * Offset 0x18980, from D:\driver2\game\C\OVERMAP.C (lines 2319..2340)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ FlashOverheadMap(int r /*$a0*/, int g /*$a1*/, int b /*$a2*/)
{ // line 2, offset 0x18980
  struct TILE *tile; // $a3
} // line 22, offset 0x18aa0
/*
 * Offset 0x18AA0, from D:\driver2\game\C\OVERMAP.C (lines 2350..2382)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ LoadMapTile(int tpage /*$a0*/, int x /*$a1*/, int y /*$a2*/)
{ // line 1, offset 0x18aa0
  struct RECT MapSegment; // stack offset -16
  int temp; // $a0
  int count; // $a2
  int idx; // $a3
} // line 33, offset 0x18bf4
/*
 * Offset 0x18BF4, from D:\driver2\game\C\OVERMAP.C (lines 2405..2426)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ draw_box()
{ // line 2, offset 0x18bf4
  struct LINE_F4 *line4; // $s0
  struct LINE_F2 *line2; // $s1
} // line 22, offset 0x18d54
/*
 * Offset 0x18D54, from D:\driver2\game\C\OVERMAP.C (lines 2435..2470)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ DrawN(struct VECTOR *pScreenPosition /*$s2*/, int direct /*$s7*/)
{ // line 1, offset 0x18d54
  struct XYPAIR lastPoint; // stack offset -48
  struct XYPAIR *pPoint; // $s0
  char loop; // $s4
  { // line 11, offset 0x18dc4
    struct LINE_F2 *pLine; // $a2
  } // line 34, offset 0x18ec4
} // line 36, offset 0x18f18
/*
 * Offset 0x18F18, from D:\driver2\game\C\OVERMAP.C (lines 2479..2525)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawCompass()
{ // line 2, offset 0x18f18
  struct VECTOR position[5]; // stack offset -88
  struct XYPAIR *pNorth; // $a1
  int scale; // $a0
  { // line 3, offset 0x18f18
    char loop; // $t2
    struct VECTOR *pPosition; // $a3
    void *pot; // $s0
    { // line 32, offset 0x190b8
      struct LINE_G2 *pLine; // $a0
    } // line 32, offset 0x190b8
  } // line 46, offset 0x19194
} // line 47, offset 0x19194
/*
 * Offset 0x19194, from D:\driver2\game\C\OVERMAP.C (lines 2534..2568)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ DrawBigCompass(struct VECTOR *root /*$a0*/, int angle /*$a1*/)
{ // line 1, offset 0x19194
  struct VECTOR position[5]; // stack offset -96
  struct VECTOR *pPosition; // $s0
  char loop; // $s1
  { // line 23, offset 0x19300
    struct LINE_G2 *pLine; // $a1
  } // line 23, offset 0x19300
} // line 35, offset 0x193b4
/*
 * Offset 0x193B4, from D:\driver2\game\C\OVERMAP.C (lines 2577..2606)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CopIndicator(int xpos /*$a3*/, int strength /*$a1*/)
{ // line 1, offset 0x193b4
  struct POLY_F3 *tri; // $a2
  int str2; // $fp
  void *pot; // stack offset -56
} // line 30, offset 0x19594
/*
 * Offset 0x19594, from D:\driver2\game\C\OVERMAP.C (lines 2609..2670)
 * Stack frame base $sp, size 184
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ DrawSightCone(struct COP_SIGHT_DATA *pCopSightData /*$a0*/, struct VECTOR *pPosition /*$a1*/, int direction /*$t6*/)
{ // line 1, offset 0x19594
  struct VECTOR vertex[9]; // stack offset -160
  struct VECTOR *pVertex; // $t0
  int angle; // $a3
  int frontViewAngle; // $t1
  int negFrontViewAngle; // $a2
  int frontViewDistance; // $t4
  int surroundViewDistance; // $t3
  { // line 15, offset 0x195e8
    int len; // $a1
    { // line 27, offset 0x19600
      int temp; // $v0
    } // line 27, offset 0x19600
  } // line 27, offset 0x19600
  { // line 34, offset 0x1966c
    struct VECTOR *pVertex; // $a2
    void *pot; // $a3
    { // line 42, offset 0x196b8
      struct POLY_G3 *poly; // $a1
      struct VECTOR *pNextVertex; // $a0
    } // line 50, offset 0x196dc
  } // line 61, offset 0x197bc
} // line 62, offset 0x197bc
/*
 * Offset 0x197BC, from D:\driver2\game\C\OVERMAP.C (lines 1043..1069)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ InitOverheadMap()
{ // line 2, offset 0x197bc
  int tpage; // $s3
  int c; // $s2
  int d; // $s1
} // line 27, offset 0x198bc
/*
 * Offset 0x198E0, from D:\driver2\game\C\OVERMAP.C (lines 1678..1694)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitMultiplayerMap()
{ // line 2, offset 0x198e0
  struct RECT rect; // stack offset -48
  char filename[32]; // stack offset -40
} // line 17, offset 0x19994
/*
 * Offset 0x19994, from D:\driver2\game\C\OVERMAP.C (lines 1778..1794)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ WorldToMultiplayerMap(struct VECTOR *in /*$a3*/, struct VECTOR *out /*$a2*/)
{ // line 1, offset 0x19994
  int x; // $v1
  int z; // $a0
} // line 17, offset 0x19a60
/*
 * Offset 0x19A60, from D:\driver2\game\C\OVERMAP.C (lines 2392..2394)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetMapPos()
{
}
/*
 * Offset 0x19AF0, from D:\driver2\game\C\OVERMAP.C (lines 2703..2763)
 * Stack frame base $sp, size 96
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ WorldToOverheadMapPositions(struct VECTOR *pGlobalPosition /*$s1*/, struct VECTOR *pOverheadMapPosition /*$s3*/, int count /*$s2*/, char inputRelative /*$s5*/, int outputRelative /*stack 16*/)
{ // line 1, offset 0x19af0
  struct MATRIX TempMatrix; // stack offset -80
  int sin; // $a1
  int cos; // $a2
  int angle; // $v1
  int scale; // $s0
  { // line 42, offset 0x19c20
    struct SVECTOR tempVector; // stack offset -48
    long flag; // stack offset -40
  } // line 57, offset 0x19cc0
} // line 61, offset 0x19d0c
/*
 * Offset 0x19D0C, from D:\driver2\game\C\OVERMAP.C (lines 2771..2786)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetFullscreenMapMatrix()
{ // line 2, offset 0x19d0c
  struct VECTOR translate; // stack offset -32
  struct SVECTOR direction; // stack offset -16
} // line 16, offset 0x19de8
/*
 * Offset 0x19DE8, from D:\driver2\game\C\OVERMAP.C (lines 2794..2797)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ WorldToFullscreenMap(struct VECTOR *in /*$a0*/, struct VECTOR *out /*$a1*/)
{
}
/*
 * Offset 0x19E7C, from D:\driver2\game\C\OVERMAP.C (lines 2806..2818)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: ra
 */
void /*$ra*/ WorldToFullscreenMap2(struct VECTOR *in /*$a0*/, struct VECTOR *out /*$a1*/)
{ // line 1, offset 0x19e7c
  struct SVECTOR pos; // stack offset -24
  long flag; // stack offset -16
} // line 13, offset 0x19f44
/*
 * Offset 0x19F44, from D:\driver2\game\C\OVERMAP.C (lines 1970..2033)
 * Stack frame base $sp, size 696
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ ProcessPalletLump(char *lump_ptr /*$a0*/, int lump_size /*$a1*/)
{ // line 1, offset 0x19f44
  int total_cluts; // $v0
  int clutValue; // $s1
  int tpageindex; // $s2
  int texnum; // $s3
  int palette; // $s4
  int clut_number; // $v1
  unsigned short clutTable[320]; // stack offset -680
  char *buffPtr; // $s0
  { // line 43, offset 0x19fd0
  } // line 43, offset 0x19fd0
} // line 64, offset 0x1a094
/*
 * Offset 0x1A094, from D:\driver2\game\C\OVERMAP.C (lines 2043..2193)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ load_civ_palettes(struct RECT *cluts /*$a0*/)
{
}
Source file(s) D:\driver2\game\C\REPLAYS.C+D:\driver2\game\REPLAYS.C, object file obj\replays.OBJ overlay id <none>

// 69 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
struct REPLAY_PARAMETER_BLOCK {
  int RecordingEnd; // size=0, offset=0
  struct VECTOR_NOPAD lead_car_start; // size=12, offset=4
  short Lead_car_dir; // size=0, offset=16
  unsigned char timeofday; // size=0, offset=18
  unsigned char weather; // size=0, offset=19
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct REPLAY_SAVE_HEADER {
  unsigned long magic; // size=0, offset=0
  unsigned char GameLevel; // size=0, offset=4
  unsigned char GameType; // size=0, offset=5
  unsigned char reserved1; // size=0, offset=6
  unsigned char NumReplayStreams; // size=0, offset=7
  unsigned char NumPlayers; // size=0, offset=8
  unsigned char RandomChase; // size=0, offset=9
  unsigned char CutsceneEvent; // size=0, offset=10
  unsigned char gCopDifficultyLevel; // size=0, offset=11
  struct MISSION_DATA SavedData; // size=228, offset=12
  struct ACTIVE_CHEATS ActiveCheats; // size=4, offset=240
  int wantedCar[2]; // size=8, offset=244
  int MissionNumber; // size=0, offset=252
  int HaveStoredData; // size=0, offset=256
  int reserved2[6]; // size=24, offset=260
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct REPLAY_STREAM_HEADER {
  struct STREAM_SOURCE SourceType; // size=48, offset=0
  int Size; // size=0, offset=48
  int Length; // size=0, offset=52
};
struct REPLAY_STREAM {
  struct STREAM_SOURCE SourceType; // size=48, offset=0
  struct PADRECORD *InitialPadRecordBuffer; // size=3, offset=48
  struct PADRECORD *PadRecordBuffer; // size=3, offset=52
  struct PADRECORD *PadRecordBufferEnd; // size=3, offset=56
  unsigned char playbackrun; // size=0, offset=60
  int length; // size=0, offset=64
};
struct _PING_PACKET {
  unsigned short frame; // size=0, offset=0
  char carId; // size=0, offset=2
  char cookieCount; // size=0, offset=3
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};

// 94 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef struct REPLAY_PARAMETER_BLOCK REPLAY_PARAMETER_BLOCK;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct REPLAY_SAVE_HEADER REPLAY_SAVE_HEADER;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct REPLAY_STREAM_HEADER REPLAY_STREAM_HEADER;
typedef struct REPLAY_STREAM REPLAY_STREAM;
typedef struct _PING_PACKET PING_PACKET;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 16 external declarations
static char AnalogueUnpack[16]; // offset 0x0009bb5c
extern int ReplaySize; // offset 0x000aa0a0
extern char RecordingPads; // offset 0x000aa0a8
extern int pad_recorded; // offset 0x000aa0ac
extern int NumReplayStreams; // offset 0x000aa0a4
extern int gOutOfTape; // offset 0x000aa0b0
extern struct REPLAY_PARAMETER_BLOCK *ReplayParameterPtr; // offset 0x000aaa74
extern char *replayptr; // offset 0x000aaa7c
extern char *ReplayStart; // offset 0x000aaa64
extern struct SXYPAIR *PlayerWayRecordPtr; // offset 0x000aaa70
extern int way_distance; // offset 0x000aaa68
extern int TimeToWay; // offset 0x000aaa78
extern struct _PING_PACKET *PingBuffer; // offset 0x000aaa80
extern unsigned long PingBufferPos; // offset 0x000aaa6c
static int TestCnt; // offset 0x000aaa60
extern struct REPLAY_STREAM ReplayStreams[8]; // offset 0x000ac688

// 12 functions
/*
 * Offset 0x1A09C, from D:\driver2\game\C\REPLAYS.C (lines 498..649)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitPadRecording()
{ // line 2, offset 0x1a09c
  int i; // $s0
  int remain; // $s0
} // line 152, offset 0x1a234
/*
 * Offset 0x1A234, from D:\driver2\game\C\REPLAYS.C (lines 657..732)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ SaveReplayToBuffer(char *buffer /*$s0*/)
{ // line 1, offset 0x1a234
  struct REPLAY_SAVE_HEADER *header; // $s2
  int i; // $a2
  int size; // $s1
  int numstreams; // $s6
} // line 76, offset 0x1a798
/*
 * Offset 0x1A798, from D:\driver2\game\C\REPLAYS.C (lines 740..812)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ LoadReplayFromBuffer(char *buffer /*$s1*/)
{ // line 2, offset 0x1a798
  struct REPLAY_SAVE_HEADER *header; // $s3
  struct REPLAY_STREAM_HEADER *sheader; // $t0
  int i; // $a1
  int size; // $s0
} // line 73, offset 0x1ad50
/*
 * Offset 0x1AD50, from D:\driver2\game\C\REPLAYS.C (lines 1310..1369)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ cjpRecord(int stream /*$s1*/, unsigned long *ppad /*$s4*/, char *psteer /*$s2*/, char *ptype /*$s3*/)
{ // line 1, offset 0x1ad50
  unsigned long t0; // stack offset -32
  int t1; // $s0
} // line 60, offset 0x1af14
/*
 * Offset 0x1AF34, from D:\driver2\game\C\REPLAYS.C (lines 1222..1268)
 * Stack frame base $sp, size 8
 */
int /*$ra*/ valid_region(int x /*$a0*/, int z /*$a1*/)
{ // line 2, offset 0x1af34
  struct XYPAIR region_coords; // stack offset -8
  int region; // $a0
} // line 47, offset 0x1affc
/*
 * Offset 0x1AFFC, from D:\driver2\game\C\REPLAYS.C (lines 1271..1290)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ cjpPlay(int stream /*$a0*/, unsigned long *ppad /*$s2*/, char *psteer /*$s0*/, char *ptype /*$s1*/)
{ // line 1, offset 0x1affc
  int ret; // $a0
  unsigned long t0; // stack offset -24
  int t1; // $v1
} // line 20, offset 0x1b090
/*
 * Offset 0x1B090, from D:\driver2\game\C\REPLAYS.C (lines 1182..1205)
 * Stack frame base $sp, size 0
 */
char /*$ra*/ GetPingInfo(char *cookieCount /*$a2*/)
{ // line 1, offset 0x1b090
  struct _PING_PACKET *pp; // $a1
  char retCarId; // $v0
} // line 24, offset 0x1b118
/*
 * Offset 0x1B118, from D:\driver2\game\C\REPLAYS.C (lines 1059..1070)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: ra
 */
int /*$ra*/ LoadAttractReplay(int mission /*$a2*/)
{ // line 1, offset 0x1b118
  char filename[32]; // stack offset -40
} // line 12, offset 0x1b17c
/*
 * Offset 0x1B17C, from D:\driver2\game\C\REPLAYS.C (lines 1383..1398)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ AllocateReplayStream(struct REPLAY_STREAM *stream /*$a0*/, int maxpad /*$a1*/)
{
}
/*
 * Offset 0x1B1F0, from D:\driver2\game\C\REPLAYS.C (lines 1402..1437)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ Get(int stream /*$a0*/, unsigned long *pt0 /*$a1*/)
{ // line 1, offset 0x1b1f0
  struct REPLAY_STREAM *rstream; // $a2
  unsigned long t0; // $a0
} // line 36, offset 0x1b280
/*
 * Offset 0x1B280, from D:\driver2\game\C\REPLAYS.C (lines 1440..1476)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ Put(int stream /*$a0*/, unsigned long *pt0 /*$a1*/)
{ // line 2, offset 0x1b280
  struct REPLAY_STREAM *rstream; // $a0
  unsigned char **pstream; // $a3
  unsigned long t0; // $a1
} // line 37, offset 0x1b364
/*
 * Offset 0x1B364, from D:\driver2\game\C\REPLAYS.C (lines 1479..1496)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ RecordWaypoint()
{
}
Source file(s) D:\DRIVER2\GAME\ASM\RNC_2.MIP, object file obj\rnc_2.OBJ overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) D:\driver2\game\C\SEARCH.C+D:\driver2\game\SEARCH.C, object file obj\search.OBJ overlay id <none>

// 21 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};

// 39 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct UV UV;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];

// 0 labels

// 0 external declarations

// 1 functions
/*
 * Offset 0x1BA88, from D:\driver2\game\C\SEARCH.C (lines 12..17)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitTextureNames()
{
}
Source file(s) D:\driver2\game\AI.C+D:\driver2\game\C\AI.C, object file obj\ai.OBJ overlay id <none>

// 75 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct ROADBLOCK {
  struct VECTOR position; // size=16, offset=0
  struct ADJACENT_ROAD_INFO adjacentRoadInfo; // size=10, offset=16
  short RoadToBlock; // size=0, offset=26
  short AdjacentRoad; // size=0, offset=28
  short RoadblockTimer; // size=0, offset=30
  int copRespawnTime; // size=0, offset=32
  char NumCarsNeededForRoad; // size=0, offset=36
  char NumCarsNeededForAdjacentRoad; // size=0, offset=37
  char NumCarsSavedForBlock; // size=0, offset=38
  char DirectionToRoadblock; // size=0, offset=39
  char status; // size=0, offset=40
  char AI_Slot[13]; // size=13, offset=41
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};

// 107 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct ROADBLOCK ROADBLOCK;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 1 external declarations
extern struct ROADBLOCK Roadblock; // offset 0x000ac8a8

// 3 functions
/*
 * Offset 0x1BA90, from D:\driver2\game\C\AI.C (lines 324..340)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ TannerStuckInCar(int doSpeedCheck /*$a0*/)
{ // line 1, offset 0x1ba90
  struct _CAR_DATA *cp; // $a2
} // line 17, offset 0x1bbb8
/*
 * Offset 0x1BBB8, from D:\driver2\game\C\AI.C (lines 275..277)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ StoreGameFlags()
{
}
/*
 * Offset 0x1BBE8, from D:\driver2\game\C\AI.C (lines 297..319)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ TannerCanEnterCar(struct _CAR_DATA *cp /*$a0*/, int distToCarSq /*$a1*/)
{ // line 1, offset 0x1bbe8
  { // line 13, offset 0x1bc7c
    struct SVECTOR *carCollBox; // $v0
    int carRange; // $a0
  } // line 20, offset 0x1bccc
} // line 23, offset 0x1bcd4
Source file(s) C:\PS\INCLUDE\GTEREG.H+C:\PS\INCLUDE\INLINE_A.H+D:\DRIVER2\GAME\ASM\ASMTEST.MIP, object file obj\asmtest.OBJ overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) D:\driver2\game\BCOLL3D.C+D:\driver2\game\C\BCOLL3D.C, object file obj\bcoll3d.OBJ overlay id <none>

// 38 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct TestResult {
  int depth; // size=0, offset=0
  struct VECTOR location; // size=16, offset=4
  struct VECTOR normal; // size=16, offset=20
};

// 58 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct TestResult TestResult;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;

// 0 labels

// 0 external declarations

// 3 functions
/*
 * Offset 0x1C160, from D:\driver2\game\C\BCOLL3D.C (lines 83..129)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0
 */
void /*$ra*/ PointFaceCheck(struct _CAR_DATA *cp0 /*$t7*/, struct _CAR_DATA *cp1 /*$t8*/, int i /*$t9*/, struct TestResult *least /*$a3*/, int nSign /*stack 16*/, int nSign /*$s0*/)
{ // line 1, offset 0x1c160
  int k; // $t5
  struct VECTOR normal; // stack offset -56
  struct VECTOR diff; // stack offset -40
  struct VECTOR point; // stack offset -24
  int depth; // $t0
  { // line 23, offset 0x1c250
    int partialDepth; // $v1
  } // line 36, offset 0x1c2ec
} // line 47, offset 0x1c380
/*
 * Offset 0x1C380, from D:\driver2\game\C\BCOLL3D.C (lines 153..164)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ CarCarCollision3(struct _CAR_DATA *c0 /*$a0*/, struct _CAR_DATA *c1 /*$a1*/, int *depth /*$s2*/, struct VECTOR *where /*$s0*/, struct VECTOR *normal /*stack 16*/, struct VECTOR *normal /*$s1*/)
{ // line 1, offset 0x1c380
  struct TestResult tr; // stack offset -56
  int res; // $t1
} // line 12, offset 0x1c408
/*
 * Offset 0x1C408, from D:\driver2\game\C\BCOLL3D.C (lines 133..150)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ collided3d(struct _CAR_DATA *cp0 /*$s3*/, struct _CAR_DATA *cp1 /*$s2*/, struct TestResult *least /*$s1*/)
{ // line 1, offset 0x1c408
  int i; // $s0
} // line 18, offset 0x1c51c
Source file(s) D:\driver2\game\BCOLLIDE.C+D:\driver2\game\C\BCOLLIDE.C, object file obj\bcollide.OBJ overlay id <none>

// 79 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct BUILDING_BOX {
  struct VECTOR pos; // size=16, offset=0
  int xsize; // size=0, offset=16
  int zsize; // size=0, offset=20
  int theta; // size=0, offset=24
  int height; // size=0, offset=28
};
struct CDATA2D {
  struct VECTOR x; // size=16, offset=0
  struct VECTOR axis[2]; // size=32, offset=16
  struct VECTOR vel; // size=16, offset=48
  int theta; // size=0, offset=64
  int length[2]; // size=8, offset=68
  int dist[2]; // size=8, offset=76
  int limit[2]; // size=8, offset=84
  int avel; // size=0, offset=92
  int isCameraOrTanner; // size=0, offset=96
};
struct CRET2D {
  struct VECTOR hit; // size=16, offset=0
  struct VECTOR surfNormal; // size=16, offset=16
  int penetration; // size=0, offset=32
  int neverfree; // size=0, offset=36
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct SMASHABLE_OBJECT {
  int modelIdx; // size=0, offset=0
  char *name; // size=0, offset=4
  int sound; // size=0, offset=8
  int volume; // size=0, offset=12
  int pitch; // size=0, offset=16
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};

// 111 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct BUILDING_BOX BUILDING_BOX;
typedef struct CDATA2D CDATA2D;
typedef struct CRET2D CRET2D;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct SMASHABLE_OBJECT SMASHABLE_OBJECT;
typedef struct UV UV;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 5 external declarations
extern int mScale; // offset 0x000aa0c0
extern int bodySelect; // offset 0x000aa0bc
extern int boxOverlap; // offset 0x000aaa88
extern int wibblewibblewoo; // offset 0x000aaa8c
extern int mTheta; // offset 0x000aaa90

// 7 functions
/*
 * Offset 0x1C51C, from D:\driver2\game\C\BCOLLIDE.C (lines 120..184)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 fp
 */
int /*$ra*/ bcollided2d(struct CDATA2D *body /*$t4*/, int needOverlap /*$fp*/)
{ // line 1, offset 0x1c51c
  struct VECTOR delta; // stack offset -56
  int dtheta; // $v1
  int ac; // $s6
  int as; // $s5
  int i; // $t7
  int j; // $a2
  int k; // $t5
  { // line 40, offset 0x1c738
    int xover; // $t0
    int zover; // $a0
    int tmp2; // $a2
    int FE; // $a3
  } // line 63, offset 0x1c890
} // line 65, offset 0x1c8c0
/*
 * Offset 0x1C8C0, from D:\driver2\game\C\BCOLLIDE.C (lines 195..272)
 * Stack frame base $sp, size 8
 * Saved registers at offset -4: s0 s1
 */
void /*$ra*/ bFindCollisionPoint(struct CDATA2D *body /*$t6*/, struct CRET2D *collisionResult /*$s0*/)
{ // line 1, offset 0x1c8c0
  int carBarrierCollision; // $s1
  int i; // $a3
  int j; // $v1
  int k; // $t0
  int smallest; // $t4
  int besti; // $t5
  int bestk; // $t7
  int sign; // $t3
  int sign0; // $t0
  int sign1; // $a3
  { // line 17, offset 0x1c964
    int upper; // $a1
    int lower; // $v1
  } // line 33, offset 0x1c9bc
  { // line 40, offset 0x1c9f0
    int upper; // $a1
    int lower; // $a0
  } // line 54, offset 0x1ca60
} // line 78, offset 0x1cc30
/*
 * Offset 0x1CC30, from D:\driver2\game\C\BCOLLIDE.C (lines 275..356)
 * Stack frame base $sp, size 264
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ bFindCollisionTime(struct CDATA2D *cd /*$s5*/, struct CRET2D *collisionResult /*stack 4*/)
{ // line 1, offset 0x1cc30
  int i; // $s4
  int q; // $s0
  int hit; // $t2
  int neverfree; // $fp
  int time; // $s1
  int step; // $s3
  struct CDATA2D original[2]; // stack offset -248
} // line 82, offset 0x1ceec
/*
 * Offset 0x1CEEC, from D:\driver2\game\C\BCOLLIDE.C (lines 384..464)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ApplyDamage(struct _CAR_DATA *cp /*$a0*/, char region /*$a1*/, int value /*$a2*/, char fakeDamage /*$a3*/)
{ // line 1, offset 0x1ceec
  short *pRegion; // $t0
} // line 81, offset 0x1d0b0
/*
 * Offset 0x1D0B0, from D:\driver2\game\C\BCOLLIDE.C (lines 470..571)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ DamageCar3D(struct _CAR_DATA *cp /*$s1*/, long *delta[4] /*$t4*/, int strikeVel /*$t6*/, struct _CAR_DATA *pOtherCar /*$s2*/)
{ // line 1, offset 0x1d0b0
  int l; // $v1
  int w; // $v0
  int region; // $a1
  long nose[4]; // stack offset -56
  long door[4]; // stack offset -40
  int impact; // $s3
  int QQQ; // $t7
  { // line 79, offset 0x1d388
    char fakeDamage; // $a3
    char player_id; // $s0
    char kludge; // $a3
  } // line 98, offset 0x1d424
} // line 102, offset 0x1d454
/*
 * Offset 0x1D454, from D:\driver2\game\C\BCOLLIDE.C (lines 587..632)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DamageCar(struct _CAR_DATA *cp /*$s2*/, struct CDATA2D *cd /*$s1*/, struct CRET2D *collisionResult /*$s3*/, int strikeVel /*$s0*/)
{ // line 1, offset 0x1d454
  struct VECTOR delta; // stack offset -48
  int l; // $v1
  int w; // $v0
  int region; // $a1
  int damage; // $a2
  char player_id; // $s5
  int impact; // $s4
  int QQQ; // $t0
} // line 46, offset 0x1d668
/*
 * Offset 0x1D68C, from D:\driver2\game\C\BCOLLIDE.C (lines 839..1194)
 * Stack frame base $sp, size 200
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CarBuildingCollision(struct _CAR_DATA *cp /*$s3*/, struct BUILDING_BOX *building /*$s2*/, struct CELL_OBJECT *cop /*$s6*/, int mightBeABarrier /*$s1*/)
{ // line 1, offset 0x1d68c
  static struct CDATA2D cd[2]; // offset 0x0
  static struct CRET2D collisionResult; // offset 0xd0
  int debris_colour; // stack offset -48
  struct VECTOR tempwhere; // stack offset -168
  struct MODEL *pModel; // $s5
  int player_id; // stack offset -44
  { // line 27, offset 0x1d794
    struct SVECTOR boxDisp; // stack offset -152
    { // line 69, offset 0x1d8f4
      int wbod; // $a1
    } // line 79, offset 0x1d9a4
  } // line 81, offset 0x1d9a4
  { // line 138, offset 0x1da64
    { // line 138, offset 0x1da64
      struct VECTOR velocity; // stack offset -144
      long pointVel[4]; // stack offset -128
      long reaction[4]; // stack offset -112
      long lever[4]; // stack offset -96
      int strikeVel; // $s1
      { // line 175, offset 0x1dc58
        short scale; // $a2
      } // line 195, offset 0x1dca4
      { // line 211, offset 0x1dd04
        { // line 219, offset 0x1dd28
          struct SMASHABLE_OBJECT *sip; // $a1
          struct SMASHABLE_OBJECT *match; // $s0
          int chan; // $s1
          int adjust; // $s2
        } // line 240, offset 0x1de3c
      } // line 254, offset 0x1dec4
      { // line 259, offset 0x1def4
        struct VECTOR LeafPosition; // stack offset -80
      } // line 259, offset 0x1def4
      { // line 277, offset 0x1df50
        { // line 280, offset 0x1df90
          struct VECTOR lamp_velocity; // stack offset -64
        } // line 284, offset 0x1dfc4
      } // line 285, offset 0x1dfc4
      { // line 304, offset 0x1e058
        int twistY; // $a1
        int lever_dot_n; // $a0
        int displacementsquared; // $v1
        int denom; // $v1
      } // line 316, offset 0x1e170
    } // line 345, offset 0x1e37c
  } // line 349, offset 0x1e384
} // line 356, offset 0x1e3e8
Source file(s) D:\driver2\game\BOMBERMAN.C+D:\driver2\game\C\BOMBERMAN.C, object file obj\bomberman.obj overlay id <none>

// 72 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct _ExOBJECT {
  int time; // size=0, offset=0
  int speed; // size=0, offset=4
  int hscale; // size=0, offset=8
  int rscale; // size=0, offset=12
  enum ExplosionType type; // size=2, offset=16
  struct VECTOR pos; // size=16, offset=20
};
struct CDATA2D {
  struct VECTOR x; // size=16, offset=0
  struct VECTOR axis[2]; // size=32, offset=16
  struct VECTOR vel; // size=16, offset=48
  int theta; // size=0, offset=64
  int length[2]; // size=8, offset=68
  int dist[2]; // size=8, offset=76
  int limit[2]; // size=8, offset=84
  int avel; // size=0, offset=92
  int isCameraOrTanner; // size=0, offset=96
};
struct CRET2D {
  struct VECTOR hit; // size=16, offset=0
  struct VECTOR surfNormal; // size=16, offset=16
  int penetration; // size=0, offset=32
  int neverfree; // size=0, offset=36
};
struct BOMB {
  unsigned char flags; // size=0, offset=0
  unsigned char active; // size=0, offset=1
  short rot_speed; // size=0, offset=2
  struct VECTOR position; // size=16, offset=4
  struct VECTOR velocity; // size=16, offset=20
};

// 106 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _ExOBJECT EXOBJECT;
typedef struct CDATA2D CDATA2D;
typedef struct CRET2D CRET2D;
typedef struct BOMB BOMB;
typedef unsigned int size_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 11 external declarations
static int ThrownBombDelay; // offset 0x000aa0c4
static int CurrentBomb; // offset 0x000aa0c8
static int fullStrike; // offset 0x000aa0cc
static int halfStrike; // offset 0x000aa0d0
static int gWantFlash; // offset 0x000aa0d4
static int flashval; // offset 0x000aa0d8
extern struct MODEL *gBombModel; // offset 0x000aa0dc
extern struct _CAR_DATA *gBombTargetVehicle; // offset 0x000aa0e0
extern int littleBoxRange; // offset 0x000aa0e4
extern int minBoxSize; // offset 0x000aa0e8
static struct BOMB ThrownBombs[5]; // offset 0x000ac9d8

// 7 functions
/*
 * Offset 0x1E3E8, from D:\driver2\game\C\BOMBERMAN.C (lines 245..356)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ HandleThrownBombs()
{ // line 2, offset 0x1e3e8
  struct BOMB *bomb; // $s1
  struct VECTOR velocity; // stack offset -48
  struct _CAR_DATA *cp; // $s0
  int i; // $s5
  int y; // $a0
  { // line 13, offset 0x1e42c
  } // line 56, offset 0x1e5c8
  { // line 74, offset 0x1e670
    int len; // $v1
  } // line 85, offset 0x1e6e8
} // line 112, offset 0x1e7e8
/*
 * Offset 0x1E810, from D:\driver2\game\C\BOMBERMAN.C (lines 381..424)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DrawThrownBombs()
{ // line 2, offset 0x1e810
  struct MATRIX object_matrix; // stack offset -80
  struct MATRIX *finalmatrix; // $s2
  struct BOMB *bomb; // $s0
  struct VECTOR pos; // stack offset -48
  int i; // $s3
  { // line 16, offset 0x1e86c
  } // line 33, offset 0x1e998
  { // line 39, offset 0x1e9b4
  } // line 43, offset 0x1e9dc
} // line 44, offset 0x1e9dc
/*
 * Offset 0x1EA00, from D:\driver2\game\C\BOMBERMAN.C (lines 432..485)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ BombThePlayerToHellAndBack(int car /*$s3*/)
{ // line 1, offset 0x1ea00
  struct BOMB *bomb; // $t3
} // line 54, offset 0x1ec3c
/*
 * Offset 0x1EC58, from D:\driver2\game\C\BOMBERMAN.C (lines 496..522)
 * Stack frame base $sp, size 232
 * Saved registers at offset -8: ra
 */
int /*$ra*/ BombCollisionCheck(struct _CAR_DATA *cp /*$a0*/, struct VECTOR *pPos /*$a1*/)
{ // line 1, offset 0x1ec58
  struct CDATA2D cd[2]; // stack offset -216
  int carLength[2]; // stack offset -16
  { // line 1, offset 0x1ec58
  } // line 1, offset 0x1ec58
} // line 27, offset 0x1ed18
/*
 * Offset 0x1ED18, from D:\driver2\game\C\BOMBERMAN.C (lines 534..739)
 * Stack frame base $sp, size 368
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ ExplosionCollisionCheck(struct _CAR_DATA *cp /*$s1*/, struct _ExOBJECT *pE /*$s3*/)
{ // line 1, offset 0x1ed18
  struct CDATA2D cd[2]; // stack offset -352
  int carLength[2]; // stack offset -152
  static int setUsed; // offset 0x28
  int tanner; // $s6
  { // line 12, offset 0x1ed74
    { // line 12, offset 0x1ed74
    } // line 12, offset 0x1ed74
    { // line 19, offset 0x1ee0c
    } // line 24, offset 0x1ee80
    { // line 27, offset 0x1ee80
      int x; // $a1
      int z; // $v1
      struct VECTOR *pos; // $v0
    } // line 66, offset 0x1ef54
    { // line 89, offset 0x1ef94
      struct CRET2D collisionResult; // stack offset -144
      { // line 92, offset 0x1ef94
        struct VECTOR velocity; // stack offset -104
        long pointVel[4]; // stack offset -88
        long reaction[4]; // stack offset -72
        long lever[4]; // stack offset -56
        int strikeVel; // $s0
        { // line 154, offset 0x1f210
        } // line 161, offset 0x1f250
        { // line 164, offset 0x1f250
          int twistY; // $a1
          int lever_dot_n; // $a0
          int displacementsquared; // $v1
          int denom; // $v1
        } // line 176, offset 0x1f360
      } // line 198, offset 0x1f4a8
    } // line 199, offset 0x1f4a8
  } // line 200, offset 0x1f4a8
} // line 206, offset 0x1f4f4
/*
 * Offset 0x1F4F4, from D:\driver2\game\C\BOMBERMAN.C (lines 747..760)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ AddFlash(struct VECTOR *pos /*$a0*/)
{ // line 1, offset 0x1f4f4
  int dist; // $a0
} // line 14, offset 0x1f570
/*
 * Offset 0x1F570, from D:\driver2\game\C\BOMBERMAN.C (lines 222..234)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitThrownBombs()
{ // line 2, offset 0x1f570
  int i; // $v1
} // line 13, offset 0x1f5f4
Source file(s) D:\driver2\game\C\CAMERA.C+D:\driver2\game\CAMERA.C, object file obj\camera.OBJ overlay id <none>

// 74 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct COLLISION_PACKET {
  short type; // size=0, offset=0
  short xpos; // size=0, offset=2
  short ypos; // size=0, offset=4
  short zpos; // size=0, offset=6
  short flags; // size=0, offset=8
  short yang; // size=0, offset=10
  short empty; // size=0, offset=12
  short xsize; // size=0, offset=14
  short ysize; // size=0, offset=16
  short zsize; // size=0, offset=18
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct _PLAYER {
  long pos[4]; // size=16, offset=0
  int dir; // size=0, offset=16
  struct VECTOR *spoolXZ; // size=16, offset=20
  struct VECTOR cameraPos; // size=16, offset=24
  int cameraDist; // size=0, offset=40
  int maxCameraDist; // size=0, offset=44
  int cameraAngle; // size=0, offset=48
  int headPos; // size=0, offset=52
  int headTarget; // size=0, offset=56
  int viewChange; // size=0, offset=60
  char dying; // size=0, offset=64
  char upsideDown; // size=0, offset=65
  char onGrass; // size=0, offset=66
  char targetCarId; // size=0, offset=67
  char cameraView; // size=0, offset=68
  char headTimer; // size=0, offset=69
  char playerType; // size=0, offset=70
  char worldCentreCarId; // size=0, offset=71
  char playerCarId; // size=0, offset=72
  char cameraCarId; // size=0, offset=73
  char padid; // size=0, offset=74
  char car_is_sounding; // size=0, offset=75
  long camera_vel[3]; // size=12, offset=76
  int snd_cam_ang; // size=0, offset=88
  struct __skidinfo skidding; // size=2, offset=92
  struct __skidinfo wheelnoise; // size=2, offset=94
  struct __horninfo horn; // size=3, offset=96
  int car_sound_timer; // size=0, offset=100
  short revsvol; // size=0, offset=104
  short idlevol; // size=0, offset=106
  struct PEDESTRIAN *pPed; // size=92, offset=108
  int crash_timer; // size=0, offset=112
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct CELL_DATA {
  unsigned short num; // size=0, offset=0
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct PAD {
  unsigned char active; // size=0, offset=0
  unsigned char type; // size=0, offset=1
  unsigned char dualshock; // size=0, offset=2
  unsigned char reserved1; // size=0, offset=3
  unsigned short direct; // size=0, offset=4
  unsigned short dirnew; // size=0, offset=6
  char diranalog[4]; // size=4, offset=8
  unsigned short mapped; // size=0, offset=12
  unsigned short mapnew; // size=0, offset=14
  char mapanalog[4]; // size=4, offset=16
  struct MAPPING mappings; // size=36, offset=20
  unsigned char alarmShakeCounter; // size=0, offset=56
  unsigned char asd; // size=0, offset=57
  unsigned char sdf; // size=0, offset=58
  unsigned char dfg; // size=0, offset=59
  unsigned char delay; // size=0, offset=60
  unsigned char port; // size=0, offset=61
  unsigned char state; // size=0, offset=62
  unsigned char dsactive; // size=0, offset=63
  unsigned char *shakeptr; // size=0, offset=64
  unsigned char motors[2]; // size=2, offset=68
  unsigned char shake_type; // size=0, offset=70
  unsigned char vibrate; // size=0, offset=71
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct CELL_ITERATOR {
  struct CELL_DATA *pcd; // size=2, offset=0
  struct PACKED_CELL_OBJECT *ppco; // size=8, offset=4
  struct XZPAIR near; // size=8, offset=8
  int use_computed; // size=0, offset=16
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 102 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct COLLISION_PACKET COLLISION_PACKET;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct _PLAYER PLAYER;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct DB DB;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct CELL_DATA CELL_DATA;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct MAPPING MAPPING;
typedef struct PAD PAD;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct CELL_ITERATOR CELL_ITERATOR;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _EVENT EVENT;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct MVERTEX SV5x5[5][5];

// 0 labels

// 21 external declarations
extern struct VECTOR CameraPos; // offset 0x0009bdb4
extern struct VECTOR camera_position; // offset 0x0009bdc4
extern struct MATRIX face_camera_work; // offset 0x0009bdd4
extern int gCameraDistance; // offset 0x000aa0fc
extern int gCameraMaxDistance; // offset 0x000aa100
extern int gCameraAngle; // offset 0x000aa104
extern struct SVECTOR camera_angle; // offset 0x000aa0f0
extern int current_camera_angle; // offset 0x000aa0f8
extern char inGameCamera[4]; // offset 0x000aa108
extern int jtest53; // offset 0x000aa10c
extern int headtarget; // offset 0x000aa110
extern int headposition; // offset 0x000aa114
extern int maxCameraDist; // offset 0x000aaa9c
extern unsigned short paddCamera; // offset 0x000aaaa4
static long baseDir; // offset 0x000aaa98
extern struct _CAR_DATA *jcam; // offset 0x000aaaa0
extern struct MATRIX camera_matrix; // offset 0x000acaf0
extern struct MATRIX inv_camera_matrix; // offset 0x000acad0
extern struct MATRIX face_camera; // offset 0x000acaa0
static long basePos[3]; // offset 0x000aca90
extern struct VECTOR viewer_position; // offset 0x000acac0

// 10 functions
/*
 * Offset 0x1F5F4, from D:\driver2\game\C\CAMERA.C (lines 422..543)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitCamera(struct _PLAYER *lp /*$s0*/)
{ // line 1, offset 0x1f5f4
  struct SVECTOR boxDisp; // stack offset -16
  { // line 6, offset 0x1f61c
  } // line 6, offset 0x1f61c
  { // line 19, offset 0x1f6ac
    struct _CAR_DATA *lcp; // $a0
  } // line 19, offset 0x1f6ac
  { // line 32, offset 0x1f794
    struct _EVENT *event; // $a1
  } // line 33, offset 0x1f794
} // line 122, offset 0x1fa20
/*
 * Offset 0x1FA20, from D:\driver2\game\C\CAMERA.C (lines 553..595)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ModifyCamera()
{ // line 2, offset 0x1fa20
  struct PAD *locPad; // $a3
  struct _PLAYER *lp; // $a2
  { // line 15, offset 0x1fafc
    char *pNextCameraview; // $a0
  } // line 25, offset 0x1fb48
  { // line 32, offset 0x1fb64
    int cam_ang; // $a0
    int length; // $a1
  } // line 40, offset 0x1fc04
} // line 43, offset 0x1fc10
/*
 * Offset 0x1FC18, from D:\driver2\game\C\CAMERA.C (lines 609..701)
 * Stack frame base $sp, size 184
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ CameraCollisionCheck()
{ // line 2, offset 0x1fc18
  struct MODEL *model; // $v1
  struct COLLISION_PACKET *collide; // $t2
  struct CELL_OBJECT *cop; // $t3
  struct CELL_ITERATOR ci; // stack offset -168
  struct VECTOR nearpoint; // stack offset -144
  struct VECTOR surfacenormal; // stack offset -128
  struct VECTOR surfacepoint; // stack offset -112
  int cell_x; // $a0
  int cell_z; // $a1
  int xd; // $v1
  int zd; // $a0
  int num_cb; // $t5
  int box_loop; // $t4
  int sphere_sq; // $a2
  int camera_size; // $s0
  int count; // $s1
  struct VECTOR temp_cam; // stack offset -96
  { // line 50, offset 0x1fdf4
    struct MATRIX *mat; // $a2
    struct VECTOR offset; // stack offset -80
    struct VECTOR cam_vec; // stack offset -64
    struct VECTOR normal; // stack offset -48
    int xmin; // $a0
    int xmax; // $a3
    int ymin; // $t0
    int ymax; // $v1
    int zmin; // $a1
    int zmax; // $a2
    int tx; // $a3
    int tz; // $a1
  } // line 85, offset 0x1ffd0
} // line 93, offset 0x2003c
/*
 * Offset 0x2003C, from D:\driver2\game\C\CAMERA.C (lines 777..892)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ PlaceCameraFollowCar(struct _PLAYER *lp /*$s2*/)
{ // line 1, offset 0x2003c
  int carheight; // $a0
  int minimum_height; // $s1
  int cammapht; // $s0
  int new_angle; // $a0
  int camPosVy; // $s1
  struct VECTOR locCameraPos; // stack offset -48
  int lbody; // $a0
  int hbody; // $a3
  int camExpandSpeed; // $s6
  { // line 23, offset 0x20088
    struct _CAR_DATA *camCar; // $v1
  } // line 33, offset 0x2011c
} // line 116, offset 0x2050c
/*
 * Offset 0x2050C, from D:\driver2\game\C\CAMERA.C (lines 987..1076)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ PlaceCameraInCar(struct _PLAYER *lp /*$s3*/, int BumperCam /*$a1*/)
{ // line 1, offset 0x2050c
  struct _CAR_DATA *cp; // $s2
  { // line 57, offset 0x207bc
  } // line 58, offset 0x207cc
  { // line 62, offset 0x207e0
  } // line 65, offset 0x20800
} // line 90, offset 0x20904
/*
 * Offset 0x20904, from D:\driver2\game\C\CAMERA.C (lines 904..949)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ PlaceCameraAtLocation(struct _PLAYER *lp /*$s1*/, int zoom /*$s2*/)
{ // line 1, offset 0x20904
  int d; // $s0
  { // line 7, offset 0x20930
    struct VECTOR temp; // stack offset -32
  } // line 9, offset 0x20930
} // line 46, offset 0x209f8
/*
 * Offset 0x20A10, from D:\driver2\game\C\CAMERA.C (lines 716..756)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ TurnHead(struct _PLAYER *lp /*$a0*/)
{ // line 1, offset 0x20a10
} // line 41, offset 0x20b08
/*
 * Offset 0x20B08, from D:\driver2\game\C\CAMERA.C (lines 960..975)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ PointAtTarget(struct VECTOR *pPosition /*$a0*/, struct VECTOR *pTarget /*$a1*/, struct SVECTOR *pAngleVec /*$s0*/)
{ // line 1, offset 0x20b08
  struct VECTOR delta; // stack offset -32
  int d; // $s1
} // line 16, offset 0x20bc0
/*
 * Offset 0x20BC0, from D:\driver2\game\C\CAMERA.C (lines 1083..1113)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ OK_To_Zoom()
{ // line 2, offset 0x20bc0
  int old_z; // $s0
  struct VECTOR temp; // stack offset -24
} // line 31, offset 0x20c70
/*
 * Offset 0x20C70, from D:\driver2\game\C\CAMERA.C (lines 1119..1122)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetBasePos(struct VECTOR *pVec /*$a0*/)
{
}
Source file(s) D:\driver2\game\C\CARS.C+D:\driver2\game\CARS.C, object file obj\cars.OBJ overlay id <none>

// 83 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_GT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  unsigned char r1; // size=0, offset=16
  unsigned char g1; // size=0, offset=17
  unsigned char b1; // size=0, offset=18
  unsigned char p1; // size=0, offset=19
  short x1; // size=0, offset=20
  short y1; // size=0, offset=22
  unsigned char u1; // size=0, offset=24
  unsigned char v1; // size=0, offset=25
  unsigned short tpage; // size=0, offset=26
  unsigned char r2; // size=0, offset=28
  unsigned char g2; // size=0, offset=29
  unsigned char b2; // size=0, offset=30
  unsigned char p2; // size=0, offset=31
  short x2; // size=0, offset=32
  short y2; // size=0, offset=34
  unsigned char u2; // size=0, offset=36
  unsigned char v2; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct POLYFT4LIT {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char spare; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO uv3; // size=2, offset=14
  struct RGB color; // size=4, offset=16
};
struct _PLAYER {
  long pos[4]; // size=16, offset=0
  int dir; // size=0, offset=16
  struct VECTOR *spoolXZ; // size=16, offset=20
  struct VECTOR cameraPos; // size=16, offset=24
  int cameraDist; // size=0, offset=40
  int maxCameraDist; // size=0, offset=44
  int cameraAngle; // size=0, offset=48
  int headPos; // size=0, offset=52
  int headTarget; // size=0, offset=56
  int viewChange; // size=0, offset=60
  char dying; // size=0, offset=64
  char upsideDown; // size=0, offset=65
  char onGrass; // size=0, offset=66
  char targetCarId; // size=0, offset=67
  char cameraView; // size=0, offset=68
  char headTimer; // size=0, offset=69
  char playerType; // size=0, offset=70
  char worldCentreCarId; // size=0, offset=71
  char playerCarId; // size=0, offset=72
  char cameraCarId; // size=0, offset=73
  char padid; // size=0, offset=74
  char car_is_sounding; // size=0, offset=75
  long camera_vel[3]; // size=12, offset=76
  int snd_cam_ang; // size=0, offset=88
  struct __skidinfo skidding; // size=2, offset=92
  struct __skidinfo wheelnoise; // size=2, offset=94
  struct __horninfo horn; // size=3, offset=96
  int car_sound_timer; // size=0, offset=100
  short revsvol; // size=0, offset=104
  short idlevol; // size=0, offset=106
  struct PEDESTRIAN *pPed; // size=92, offset=108
  int crash_timer; // size=0, offset=112
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct CAR_MODEL {
  int numFT3; // size=0, offset=0
  struct CAR_POLY *pFT3; // size=24, offset=4
  int numGT3; // size=0, offset=8
  struct CAR_POLY *pGT3; // size=24, offset=12
  int numB3; // size=0, offset=16
  struct CAR_POLY *pB3; // size=24, offset=20
  struct SVECTOR *vlist; // size=8, offset=24
  struct SVECTOR *nlist; // size=8, offset=28
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct plotCarGlobals {
  unsigned char *primptr; // size=0, offset=0
  long *ot; // size=0, offset=4
  unsigned long intensity; // size=0, offset=8
  unsigned short *pciv_clut; // size=0, offset=12
  unsigned long ShineyTPageASL16; // size=0, offset=16
  unsigned long ShineyClutASL16; // size=0, offset=20
  unsigned char *damageLevel; // size=0, offset=24
  unsigned char *shineyTable; // size=0, offset=28
  int ghost; // size=0, offset=32
};

// 113 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F3 POLY_F3;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_GT3 POLY_GT3;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct POLYFT4LIT POLYFT4LIT;
typedef struct _PLAYER PLAYER;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct TEX_INFO TEX_INFO;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct UV UV;
typedef struct DB DB;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct CAR_POLY CAR_POLY;
typedef struct CAR_MODEL CAR_MODEL;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct plotCarGlobals plotCarGlobals;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef struct MVERTEX SV5x5[5][5];
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;

// 0 labels

// 25 external declarations
extern char carTpages[4][8]; // offset 0x0009be24
extern char specTpages[4][12]; // offset 0x0009bdf4
extern struct SVECTOR day_vectors[4]; // offset 0x0009be44
extern struct SVECTOR night_vectors[4]; // offset 0x0009be64
extern struct SVECTOR day_colours[4]; // offset 0x0009be84
extern struct SVECTOR night_colours[4]; // offset 0x0009bea4
extern struct MATRIX light_matrix; // offset 0x0009bec4
extern struct MATRIX colour_matrix; // offset 0x0009bee4
extern int trayoffset; // offset 0x000aa118
extern int gDoBonnets; // offset 0x000aa11c
extern int civ_smoke_enabled; // offset 0x000aa120
extern int gCurrentResidentSlot; // offset 0x000aa124
extern int switch_detail_distance; // offset 0x000aa128
extern int myPalette; // offset 0x000aa12c
extern struct SVECTOR carDisplayOffset; // offset 0x000aa138
extern int gForceLowDetailCars; // offset 0x000aaab4
extern int whichCP; // offset 0x000aaab0
extern int baseSpecCP; // offset 0x000aaab8
extern int num_cars_drawn; // offset 0x000aaabc
extern unsigned long gUnderIntensity; // offset 0x000aaaac
extern struct CAR_MODEL NewCarModel[5]; // offset 0x000acb68
extern struct CAR_MODEL NewLowCarModel[5]; // offset 0x000b87c0
extern struct MATRIX save_light_matrix; // offset 0x000acc08
extern struct MATRIX save_colour_matrix; // offset 0x000b8860
extern struct CAR_POLY pbf[2001]; // offset 0x000acc28

// 17 functions
/*
 * Offset 0x20C94, from D:\driver2\game\C\CARS.C (lines 834..907)
 * Stack frame base $sp, size 96
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ plotNewCarModel(struct CAR_MODEL *car /*$s0*/, int palette /*$s2*/)
{ // line 1, offset 0x20c94
  struct plotCarGlobals _pg; // stack offset -72
  struct SVECTOR v0; // stack offset -32
  unsigned long lightlevel; // stack offset -24
} // line 74, offset 0x20e88
/*
 * Offset 0x20EA0, from D:\driver2\game\C\CARS.C (lines 1125..1250)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 s1
 */
void /*$ra*/ plotCarPolyGT3(int numTris /*$a0*/, struct CAR_POLY *src /*$t1*/, struct SVECTOR *vlist /*$s0*/, struct SVECTOR *nlist /*$a3*/, struct plotCarGlobals *pg /*stack 16*/, int palette /*stack 20*/, struct plotCarGlobals *pg /*$t8*/, int palette /*$v0*/)
{ // line 1, offset 0x20ea0
  struct POLY_GT3 *prim; // $t0
  long *ot; // $s1
  long GT3rgb; // stack offset -24
  int i; // $t7
  int v0; // $t3
  int v1; // $t4
  int v2; // $t2
  int n0; // $t3
  int n1; // $a2
  int n2; // $a0
  int r0; // stack offset -20
  int r1; // stack offset -16
  int r2; // $v0
  int reg; // $a0
  int clut_uv0; // $a1
  int tpage_uv1; // $t6
  int uv3_uv2; // $t5
  unsigned short *clut_base; // $t9
  { // line 1, offset 0x20ea0
    int ofse; // $v1
  } // line 1, offset 0x20ea0
  { // line 106, offset 0x21040
    int ofse; // $v1
  } // line 106, offset 0x21040
} // line 126, offset 0x210b8
/*
 * Offset 0x210B8, from D:\driver2\game\C\CARS.C (lines 1442..1788)
 * Stack frame base $sp, size 344
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawCar(struct _CAR_DATA *cp /*$s3*/, int view /*$a1*/)
{ // line 1, offset 0x210b8
  int WheelSpeed; // $s0
  int model; // $fp
  struct _PLAYER *lp; // $a2
  { // line 12, offset 0x21174
    struct CVECTOR col; // stack offset -312
  } // line 50, offset 0x21244
  { // line 54, offset 0x21244
    struct MATRIX temp_mat1; // stack offset -304
    struct MATRIX temp_mat2; // stack offset -272
    struct MATRIX final_mat; // stack offset -240
    struct VECTOR pos; // stack offset -208
    struct VECTOR pos1; // stack offset -192
    struct SVECTOR temp_vec; // stack offset -176
    int result; // $s4
    { // line 77, offset 0x21290
      struct VECTOR corners[4]; // stack offset -168
    } // line 96, offset 0x21384
    { // line 100, offset 0x21384
      struct VECTOR d; // stack offset -104
      struct VECTOR dist; // stack offset -88
    } // line 117, offset 0x214d8
    { // line 168, offset 0x2154c
      int i; // $a0
    } // line 173, offset 0x21570
    { // line 185, offset 0x215a4
      struct MATRIX workmatrix; // stack offset -104
      struct CAR_MODEL *CarModelPtr; // $s1
      { // line 193, offset 0x21604
      } // line 195, offset 0x21620
    } // line 197, offset 0x21620
    { // line 208, offset 0x21674
      int damage; // $v1
      { // line 264, offset 0x217bc
        struct CAR_MODEL *CarModelPtr; // $s0
        { // line 264, offset 0x217bc
          struct MATRIX workmatrix; // stack offset -72
        } // line 293, offset 0x218bc
      } // line 294, offset 0x218bc
    } // line 295, offset 0x218bc
    { // line 314, offset 0x2191c
    } // line 322, offset 0x21984
  } // line 346, offset 0x21ac8
} // line 347, offset 0x21ac8
/*
 * Offset 0x21AF8, from D:\driver2\game\C\CARS.C (lines 1850..2045)
 * Stack frame base $sp, size 160
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawCarWheels(struct _CAR_DATA *cp /*$fp*/, struct MATRIX *RearMatrix /*stack 4*/, struct VECTOR *pos /*stack 8*/, int zclip /*$a3*/)
{ // line 1, offset 0x21af8
  struct CAR_COSMETICS *car_cos; // $s0
  struct MATRIX FrontMatrix; // stack offset -144
  struct MODEL *WheelModel; // $s0
  struct MODEL *WheelModelBack; // stack offset -56
  struct MODEL *WheelModelFront; // stack offset -52
  int i; // $s4
  static short FrontWheelRotation[20]; // offset 0x0
  static short BackWheelRotation[20]; // offset 0x30
  short model; // $a0
  short wheelSize; // $s2
  { // line 16, offset 0x21ba8
    int FrontWheelIncrement; // $a3
    int BackWheelIncrement; // $t0
  } // line 69, offset 0x21cd0
  { // line 72, offset 0x21cd0
    int c; // $t2
    int s; // $t3
    int FW1z; // $v0
    int FW2z; // $a0
    int BW1z; // $v0
    int BW2z; // $a3
    struct SVECTOR *VertPtr; // $t6
  } // line 76, offset 0x21cd0
  { // line 76, offset 0x21cd0
    struct MATRIX SteerMatrix; // stack offset -112
  } // line 76, offset 0x21cd0
  { // line 138, offset 0x21fa4
    struct SVECTOR *verts; // $s5
    { // line 157, offset 0x21ff8
      struct VECTOR WheelPos; // stack offset -80
      struct SVECTOR sWheelPos; // stack offset -64
    } // line 162, offset 0x22028
  } // line 194, offset 0x22118
} // line 196, offset 0x22180
/*
 * Offset 0x22180, from D:\driver2\game\C\CARS.C (lines 2058..2142)
 * Stack frame base $sp, size 8
 */
void /*$ra*/ DrawWheelObject(struct MODEL *model /*$t2*/, struct SVECTOR *verts /*$t4*/, int transparent /*$a2*/, int wheelnum /*$a3*/)
{ // line 1, offset 0x22180
  struct POLY_FT4 *prims; // $t0
  struct POLYFT4LIT *src; // $t1
  int i; // $t2
  int Z; // stack offset -4
  int clut; // $t8
  int tpage; // $t7
  unsigned long bright; // $t6
  unsigned long dim; // $t5
  { // line 35, offset 0x22298
    int flag1; // stack offset -8
    long vl; // $a0
    { // line 53, offset 0x22348
      int r2; // $v1
    } // line 53, offset 0x22348
  } // line 83, offset 0x22430
} // line 85, offset 0x22458
/*
 * Offset 0x22458, from D:\driver2\game\C\CARS.C (lines 2198..2315)
 * Stack frame base $sp, size 112
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ ComputeCarLightingLevels(struct _CAR_DATA *cp /*$s1*/, char detail /*$s3*/)
{ // line 1, offset 0x22458
  int light; // $s2
  struct SVECTOR lightsourcevector; // stack offset -96
  struct SVECTOR colour; // stack offset -88
  struct VECTOR lightValues; // stack offset -80
  struct VECTOR *orient; // $s0
  { // line 72, offset 0x2270c
    struct MODEL *model; // $v1
    struct SVECTOR *norms; // $a3
    struct SVECTOR *ppads; // $a2
    int num_norms; // $a1
    int count; // $a1
    struct CVECTOR c0; // stack offset -64
    struct CVECTOR c1; // stack offset -56
    struct CVECTOR c2; // stack offset -48
    { // line 78, offset 0x2270c
      long GT3rgb; // stack offset -40
    } // line 78, offset 0x2270c
  } // line 114, offset 0x22834
} // line 118, offset 0x22860
/*
 * Offset 0x22860, from D:\driver2\game\C\CARS.C (lines 2321..2347)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ buildNewCars()
{
}
/*
 * Offset 0x22960, from D:\driver2\game\C\CARS.C (lines 2357..2592)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ buildNewCarFromModel(struct CAR_MODEL *car /*$s5*/, struct MODEL *model /*$s7*/, int first /*$a2*/)
{ // line 1, offset 0x22960
  char *polylist; // $s0
  int i; // $s2
  int j; // $s3
  int pass; // $s4
  { // line 37, offset 0x22a9c
    struct CAR_POLY *p; // $s1
    char ptype; // $s6
    { // line 46, offset 0x22ae4
    } // line 48, offset 0x22ae4
    { // line 51, offset 0x22ae4
    } // line 53, offset 0x22ae4
    { // line 57, offset 0x22ae4
    } // line 59, offset 0x22ae4
    { // line 62, offset 0x22ae4
    } // line 64, offset 0x22ae4
    { // line 69, offset 0x22ae4
    } // line 77, offset 0x22ae4
    { // line 80, offset 0x22ae4
    } // line 92, offset 0x22ae4
    { // line 96, offset 0x22ae4
    } // line 104, offset 0x22b1c
    { // line 107, offset 0x22b1c
    } // line 119, offset 0x22b7c
    { // line 123, offset 0x22b7c
    } // line 125, offset 0x22b7c
    { // line 129, offset 0x22b7c
    } // line 131, offset 0x22b7c
    { // line 135, offset 0x22b7c
    } // line 147, offset 0x22c10
    { // line 150, offset 0x22c10
    } // line 169, offset 0x22d24
    { // line 173, offset 0x22d24
    } // line 191, offset 0x22e2c
    { // line 194, offset 0x22e2c
    } // line 222, offset 0x22fdc
  } // line 225, offset 0x22fdc
} // line 236, offset 0x23098
/*
 * Offset 0x230C8, from D:\driver2\game\C\CARS.C (lines 2595..2648)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MangleWheelModels()
{ // line 2, offset 0x230c8
  int i; // $v1
  struct MODEL *m; // $t0
  struct POLYFT4LIT *src; // $a0
  { // line 15, offset 0x23110
    int j; // $t1
  } // line 46, offset 0x23354
} // line 54, offset 0x23390
/*
 * Offset 0x23390, from D:\driver2\game\C\CARS.C (lines 2697..2712)
 * Stack frame base $sp, size 0
 */
char /*$ra*/ GetCarPalIndex(int tpage /*$a0*/)
{ // line 1, offset 0x23390
  int i; // $a1
} // line 16, offset 0x233d4
/*
 * Offset 0x233DC, from D:\driver2\game\C\CARS.C (lines 1793..1835)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ DrawCarObject(struct CAR_MODEL *car /*$s0*/, struct MATRIX *matrix /*$a1*/, struct VECTOR *pos /*$a2*/, struct VECTOR *pos1 /*$a3*/, int palette /*stack 16*/, struct _CAR_DATA *cp /*stack 20*/, int detail /*stack 24*/, int palette /*$s1*/, struct _CAR_DATA *cp /*$v1*/)
{ // line 1, offset 0x233dc
  { // line 1, offset 0x233dc
    struct SVECTOR cog; // stack offset -40
    struct VECTOR modelLocation; // stack offset -32
  } // line 1, offset 0x233dc
  { // line 1, offset 0x233dc
    static unsigned long savedSP; // offset 0x0
  } // line 40, offset 0x234dc
} // line 43, offset 0x234dc
/*
 * Offset 0x234DC, from D:\driver2\game\C\CARS.C (lines 2152..2190)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ PlayerCarFX(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x234dc
  int WheelSpeed; // $s1
} // line 39, offset 0x235f8
/*
 * Offset 0x235F8, from D:\driver2\game\C\CARS.C (lines 2656..2676)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ setupLightingMatrices()
{
}
/*
 * Offset 0x23750, from D:\driver2\game\C\CARS.C (lines 2685..2687)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ restoreLightingMatrices()
{
}
/*
 * Offset 0x237B8, from D:\driver2\game\C\CARS.C (lines 917..969)
 * Stack frame base $sp, size 8
 */
void /*$ra*/ plotCarPolyB3(int numTris /*$a0*/, struct CAR_POLY *src /*$a1*/, struct SVECTOR *vlist /*$a2*/, struct plotCarGlobals *pg /*$a3*/)
{ // line 1, offset 0x237b8
  struct POLY_F3 *prim; // $t0
  int i; // $t1
  long *ot; // $t3
  long F3rgb; // $t4
  { // line 10, offset 0x237e0
    int reg; // stack offset -8
  } // line 50, offset 0x238ac
} // line 53, offset 0x238c4
/*
 * Offset 0x238C4, from D:\driver2\game\C\CARS.C (lines 976..1054)
 * Stack frame base $sp, size 8
 */
void /*$ra*/ plotCarPolyFT3(int numTris /*$a0*/, struct CAR_POLY *src /*$t1*/, struct SVECTOR *vlist /*$t4*/, struct plotCarGlobals *pg /*$t5*/)
{ // line 1, offset 0x238c4
  struct POLY_FT3 *prim; // $t0
  long *ot; // $t6
  long FT3rgb; // stack offset -8
  int i; // $t2
  { // line 16, offset 0x23904
    int reg; // stack offset -4
    int clut_uv0; // $a2
    int tpage_uv1; // $a3
    int uv3_uv2; // $a1
    { // line 22, offset 0x23904
      int ofse; // $v1
    } // line 22, offset 0x23904
  } // line 76, offset 0x23a08
} // line 79, offset 0x23a20
/*
 * Offset 0x23A20, from D:\driver2\game\C\CARS.C (lines 1349..1427)
 * Stack frame base $sp, size 8
 */
void /*$ra*/ plotCarPolyGT3nolight(int numTris /*$a0*/, struct CAR_POLY *src /*$t3*/, struct SVECTOR *vlist /*$t6*/, struct plotCarGlobals *pg /*$a3*/, int palette /*stack 16*/, int palette /*$v0*/)
{ // line 1, offset 0x23a20
  struct POLY_FT3 *prim; // $t0
  long *ot; // $t7
  long GT3rgb; // stack offset -8
  int i; // $t4
  unsigned short *clut_base; // $t8
  { // line 17, offset 0x23a68
    int reg; // stack offset -4
    int clut_uv0; // $a0
    int tpage_uv1; // $t1
    int uv3_uv2; // $t2
    { // line 22, offset 0x23a68
      int ofse; // $v1
    } // line 22, offset 0x23a68
  } // line 76, offset 0x23b94
} // line 79, offset 0x23bac
Source file(s) D:\driver2\game\C\CELL.C+D:\driver2\game\CELL.C, object file obj\cell.obj overlay id <none>

// 60 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct CELL_DATA {
  unsigned short num; // size=0, offset=0
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CELL_ITERATOR {
  struct CELL_DATA *pcd; // size=2, offset=0
  struct PACKED_CELL_OBJECT *ppco; // size=8, offset=4
  struct XZPAIR near; // size=8, offset=8
  int use_computed; // size=0, offset=16
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};

// 85 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct CELL_DATA CELL_DATA;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct UV UV;
typedef struct _CAR_DATA CAR_DATA;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct MAPPING MAPPING;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CELL_ITERATOR CELL_ITERATOR;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _EVENT EVENT;
typedef struct GAP_INFO GAP_INFO;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 4 external declarations
extern int cell_object_index; // offset 0x000aa140
extern int sizeof_cell_object_computed_values; // offset 0x000aaac0
extern unsigned char cell_object_computed_values[2048]; // offset 0x000b8880
extern struct CELL_OBJECT cell_object_buffer[1024]; // offset 0x000b9080

// 2 functions
/*
 * Offset 0x23BAC, from D:\driver2\game\C\CELL.C (lines 67..141)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
struct PACKED_CELL_OBJECT * /*$ra*/ GetFirstPackedCop(int cellx /*$t3*/, int cellz /*$a1*/, struct CELL_ITERATOR *pci /*$a2*/, int use_computed /*$a3*/)
{ // line 1, offset 0x23bac
  struct PACKED_CELL_OBJECT *ppco; // $a1
  unsigned short index; // $a0
  unsigned short num; // $t0
  int cbrx; // $t0
  int cbrz; // $t1
  int xoff; // $a0
  int yoff; // $v0
  int cbr; // $t2
  { // line 34, offset 0x23c84
    int event; // $t0
  } // line 43, offset 0x23cc8
} // line 75, offset 0x23dc0
/*
 * Offset 0x23DC0, from D:\driver2\game\C\CELL.C (lines 57..59)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ ClearCopUsage()
{
}
Source file(s) D:\driver2\game\C\CIV_AI.C+D:\driver2\game\CIV_AI.C, object file obj\civ_ai.OBJ overlay id <none>

// 75 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct _EXTRA_CIV_DATA {
  int surfInd; // size=0, offset=0
  int distAlongSegment; // size=0, offset=4
  short angle; // size=0, offset=8
  unsigned short ctrlState; // size=0, offset=10
  int thrustState; // size=0, offset=12
  unsigned char palette; // size=0, offset=16
  unsigned char controlFlags; // size=0, offset=17
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct DRIVER2_STRAIGHT {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  unsigned short length; // size=0, offset=8
  short bing; // size=0, offset=10
  short angle; // size=0, offset=12
  short ConnectIdx[4]; // size=8, offset=14
  char NumLanes; // size=0, offset=22
  char LaneDirs; // size=0, offset=23
  char AILanes; // size=0, offset=24
  char packing; // size=0, offset=25
};
struct DRIVER2_JUNCTION {
  short ExitIdx[4]; // size=8, offset=0
  unsigned long flags; // size=0, offset=8
};
struct DRIVER2_CURVE {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  short start; // size=0, offset=8
  short end; // size=0, offset=10
  short ConnectIdx[4]; // size=8, offset=12
  short gradient; // size=0, offset=20
  short height; // size=0, offset=22
  char NumLanes; // size=0, offset=24
  char LaneDirs; // size=0, offset=25
  char inside; // size=0, offset=26
  char AILanes; // size=0, offset=27
};
struct CDATA2D {
  struct VECTOR x; // size=16, offset=0
  struct VECTOR axis[2]; // size=32, offset=16
  struct VECTOR vel; // size=16, offset=48
  int theta; // size=0, offset=64
  int length[2]; // size=8, offset=68
  int dist[2]; // size=8, offset=76
  int limit[2]; // size=8, offset=84
  int avel; // size=0, offset=92
  int isCameraOrTanner; // size=0, offset=96
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 112 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F3 POLY_F3;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct _EXTRA_CIV_DATA EXTRA_CIV_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct TEX_INFO TEX_INFO;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct CAR_POLY CAR_POLY;
typedef struct DRIVER2_STRAIGHT DRIVER2_STRAIGHT;
typedef struct DRIVER2_JUNCTION DRIVER2_JUNCTION;
typedef struct DRIVER2_CURVE DRIVER2_CURVE;
typedef struct CDATA2D CDATA2D;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 83 external declarations
extern int roadblockDelayDiff[3]; // offset 0x0009bf04
extern char speedLimits[3]; // offset 0x0009bf10
extern struct {
  int NumPingedIn; // size=0, offset=0
  int OffRoad; // size=0, offset=4
  int NotDrivable; // size=0, offset=8
  int TooShortStr; // size=0, offset=12
  int NearEndStr; // size=0, offset=16
  int TooShortCrv; // size=0, offset=20
  int NearEndCrv; // size=0, offset=24
  int TooCloseNuddaCar; // size=0, offset=28
  int TooClosePlayer; // size=0, offset=32
  int InvalidRegion; // size=0, offset=36
} civPingTest; // offset 0x0009bf14
extern char modelRandomList[16]; // offset 0x0009bf3c
extern int useStoredPings; // offset 0x000aa144
extern int testNumPingedOut; // offset 0x000aa148
extern int checkFrames; // offset 0x000aa14c
extern int maxSteer; // offset 0x000aa150
extern int newAccel; // offset 0x000aa154
extern int roadblockDelay; // offset 0x000aa158
extern char cookieCount; // offset 0x000aa15c
extern int testCar; // offset 0x000aa17c
static unsigned char hornchanflag[2]; // offset 0x000aa160
static struct _CAR_DATA *horncarflag[2]; // offset 0x000aa164
extern struct DRIVER2_CURVE *testCrv; // offset 0x000aa16c
extern int test23; // offset 0x000aa170
extern char PingOutCivsOnly; // offset 0x000aa174
extern int CAR_PAUSE_START; // offset 0x000aa178
extern int makeNextNodeCtrlNode; // offset 0x000aa180
extern int closeEncounter; // offset 0x000aa184
extern int sideMul; // offset 0x000aa188
extern int corner; // offset 0x000aa18c
extern int sideShift; // offset 0x000aa190
extern int carAngle; // offset 0x000aa194
extern int EVENT_CAR_SPEED; // offset 0x000aa198
extern int testNum; // offset 0x000aab58
extern int distFurthestCivCarSq; // offset 0x000aaae4
extern int requestStationaryCivCar; // offset 0x000aab7c
extern char furthestCivID; // offset 0x000aab64
extern int test555; // offset 0x000aaafc
extern int test123; // offset 0x000aaaf4
extern int maxCivCars; // offset 0x000aab98
extern int maxCopCars; // offset 0x000aab94
extern int maxPlayerCars; // offset 0x000aab74
extern int numCivCars; // offset 0x000aaad4
extern int numCopCars; // offset 0x000aaad0
extern int numPlayerCars; // offset 0x000aab78
extern int numInactiveCars; // offset 0x000aaae8
extern int numRoadblockCars; // offset 0x000aab04
extern int requestRoadblock; // offset 0x000aab20
extern int roadblockCount; // offset 0x000aab8c
extern int numParkedCars; // offset 0x000aab6c
extern int maxParkedCars; // offset 0x000aab68
extern int frameStart; // offset 0x000aaaec
extern int test42; // offset 0x000aaaf0
extern char junctionLightsPhase[2]; // offset 0x000aab90
extern char makeLimoPullOver; // offset 0x000aab00
extern char limoId; // offset 0x000aaaf8
extern struct CIV_ROUTE_ENTRY *tstNode1; // offset 0x000aab5c
extern struct CIV_ROUTE_ENTRY *tstNode2; // offset 0x000aab60
extern int tmpNewRoad[2]; // offset 0x000aaad8
extern int tmpNewLane[2]; // offset 0x000aaac8
extern int laneFit[2]; // offset 0x000aab28
extern struct DRIVER2_STRAIGHT *tmpStr[2]; // offset 0x000aab18
extern struct DRIVER2_CURVE *tmpCrv[2]; // offset 0x000aab08
extern int currentRoadId; // offset 0x000aab70
extern short validExitIdx[4]; // offset 0x000aab38
extern int newExit; // offset 0x000aab4c
extern int angle; // offset 0x000aaae0
extern int distFromCentre; // offset 0x000aab80
extern int radius; // offset 0x000aab14
extern int roadSeg; // offset 0x000aab30
extern int currentAngle; // offset 0x000aab54
extern char playerNum; // offset 0x000aab88
extern int dx; // offset 0x000aab40
extern int dy; // offset 0x000aab44
extern int dz; // offset 0x000aab48
extern unsigned int collDat; // offset 0x000aab24
extern int distObstacle; // offset 0x000aab50
extern int carnum; // offset 0x000aab10
extern struct CIV_ROUTE_ENTRY *startNode; // offset 0x000aab84
extern struct VECTOR roadblockLoc; // offset 0x000bd4b8
extern unsigned char reservedSlots[20]; // offset 0x000bd4e8
static struct CDATA2D cd[2]; // offset 0x000bd080
static long civrseed[17]; // offset 0x000bd150
extern unsigned int brakeLength[20]; // offset 0x000bd458
extern struct VECTOR randomLoc; // offset 0x000bd500
extern struct VECTOR baseLoc; // offset 0x000bd4a8
extern struct VECTOR testVec; // offset 0x000bd4c8
extern struct _CAR_DATA currentCar; // offset 0x000bd198
extern struct VECTOR startPos; // offset 0x000bd4d8
extern struct VECTOR endPos; // offset 0x000bd448
extern struct VECTOR currentPos; // offset 0x000bd438

// 29 functions
/*
 * Offset 0x23DE8, from D:\driver2\game\C\CIV_AI.C (lines 717..785)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ InitCar(struct _CAR_DATA *cp /*$s0*/, int direction /*$s6*/, long *startPos[4] /*$s2*/, unsigned char control /*$s4*/, int model /*stack 16*/, int palette /*stack 20*/, char *extraData /*stack 24*/, unsigned char palette /*$s5*/, char *extraData /*$s1*/)
{ // line 1, offset 0x23de8
  struct VECTOR tmpStart; // stack offset -48
} // line 69, offset 0x24028
/*
 * Offset 0x24028, from D:\driver2\game\C\CIV_AI.C (lines 981..1349)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ GetNextRoadInfo(struct _CAR_DATA *cp /*$s7*/, int randomExit /*$a1*/, int *turnAngle /*stack 8*/, int *startDist /*stack 12*/, struct CIV_ROUTE_ENTRY *oldNode /*stack 16*/, struct CIV_ROUTE_ENTRY *oldNode /*$t7*/)
{ // line 1, offset 0x24028
  int oldOppDir; // $s4
  int i; // $a1
  int j; // $s6
  int newRoad; // $s3
  int numExits; // stack offset -88
  int currentRoadExit; // $t6
  int newNumLanes; // $a3
  int newDir; // stack offset -84
  int oppDir; // $s0
  struct DRIVER2_JUNCTION *jn; // $t5
  struct DRIVER2_CURVE *cv; // $s1
  struct DRIVER2_STRAIGHT *st; // $s5
  struct DRIVER2_STRAIGHT *tmpSt; // $a2
  struct DRIVER2_CURVE *tmpCv; // $s1
  short *jnExit; // $a2
  int newLane; // $s2
  char leftLane; // stack offset -80
  char rightLane; // stack offset -76
  { // line 61, offset 0x24734
    char relExitId; // $fp
    static char validExitRelIdx[4][3][2]; // offset 0x0
    int addRoad; // $t9
    { // line 1, offset 0x24804
      int currentRoadExit; // $t6
      int newRoadExit; // $fp
      { // line 1, offset 0x24804
        int exitMod; // $a0
        int ret; // $a1
      } // line 1, offset 0x24870
    } // line 1, offset 0x24870
    { // line 110, offset 0x24c18
      int x; // $v1
      int z; // $v0
      int dir; // stack offset -84
      struct DRIVER2_CURVE *cv; // $s1
      { // line 110, offset 0x24c18
      } // line 110, offset 0x24c18
    } // line 110, offset 0x24c18
    { // line 131, offset 0x25048
      int exitId; // $a1
      { // line 135, offset 0x2506c
        char lane; // $v0
      } // line 151, offset 0x250c4
      { // line 1, offset 0x25180
        int currentRoadExit; // $t6
        { // line 1, offset 0x25180
          int exitMod; // $a1
          int ret; // $a2
        } // line 1, offset 0x251e0
      } // line 1, offset 0x251e0
    } // line 166, offset 0x251ec
    { // line 1, offset 0x251ec
      struct DRIVER2_JUNCTION *jn; // $t5
      int currentExit; // $a2
      int turnAngle; // $t1
      struct _CAR_DATA *cp; // $s7
      struct CIV_ROUTE_ENTRY *oldNode; // $t7
      { // line 1, offset 0x251ec
        unsigned short jnFlags; // $a0
        int i; // $a1
        int exitId; // $a3
      } // line 1, offset 0x252bc
    } // line 1, offset 0x252bc
    { // line 171, offset 0x252bc
      { // line 192, offset 0x25774
        int x; // $v1
        int z; // $v0
        int dir; // stack offset -84
        struct DRIVER2_CURVE *cv; // $s1
        { // line 192, offset 0x25774
        } // line 192, offset 0x25774
      } // line 192, offset 0x25774
    } // line 203, offset 0x25bc8
  } // line 203, offset 0x25bc8
  { // line 211, offset 0x25bd0
    int i; // $a1
    int dx; // $v1
    int dz; // $a0
    int numLanes; // $fp
    int *pNewLane; // $s3
    int laneFromLeft; // $a3
    int laneFromRight; // $v1
    { // line 274, offset 0x25fe4
      int preferredNewLane; // $t1
    } // line 302, offset 0x26314
    { // line 305, offset 0x26348
      int preferredNewLane; // $s4
      { // line 305, offset 0x26348
        int x; // $v1
        int z; // $v0
        struct DRIVER2_CURVE *cv; // $s1
        { // line 305, offset 0x26348
        } // line 305, offset 0x26348
      } // line 305, offset 0x26348
    } // line 332, offset 0x2669c
  } // line 345, offset 0x267a4
} // line 369, offset 0x26964
/*
 * Offset 0x26964, from D:\driver2\game\C\CIV_AI.C (lines 1365..1424)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ InitNodeList(struct _CAR_DATA *cp /*$s6*/, char *extraData /*$s7*/)
{ // line 1, offset 0x26964
  int i; // $v1
  struct CIV_ROUTE_ENTRY *cr; // $s5
  int dx; // $s1
  int dz; // $s2
  int surfInd; // $s4
  { // line 32, offset 0x26a04
    int theta; // $s0
    int laneDist; // $s1
    struct DRIVER2_STRAIGHT *str; // $s3
  } // line 41, offset 0x26b60
  { // line 46, offset 0x26b9c
    struct DRIVER2_CURVE *crv; // $s0
  } // line 50, offset 0x26c4c
} // line 60, offset 0x26cac
/*
 * Offset 0x26CAC, from D:\driver2\game\C\CIV_AI.C (lines 1441..1503)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetNodePos(struct DRIVER2_STRAIGHT *straight /*$t1*/, struct DRIVER2_JUNCTION *junction /*$a1*/, struct DRIVER2_CURVE *curve /*$t0*/, int distAlongPath /*$a3*/, struct _CAR_DATA *cp /*stack 16*/, int *x /*stack 20*/, int *z /*stack 24*/, int laneNo /*stack 28*/, struct _CAR_DATA *cp /*$t2*/, int *x /*$t5*/, int *z /*$t6*/, int laneNo /*$a2*/)
{ // line 1, offset 0x26cac
  unsigned char oldLane; // $a0
  unsigned char changeLaneCount; // $t3
} // line 63, offset 0x26f20
/*
 * Offset 0x26F20, from D:\driver2\game\C\CIV_AI.C (lines 1507..1622)
 * Stack frame base $sp, size 136
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CheckChangeLanes(struct DRIVER2_STRAIGHT *straight /*$s4*/, struct DRIVER2_CURVE *curve /*$s6*/, int distAlongSegment /*$a2*/, struct _CAR_DATA *cp /*$s3*/, int tryToPark /*stack 16*/)
{ // line 1, offset 0x26f20
  unsigned char currentLane; // $s7
  unsigned char newLane; // $s2
  unsigned char trials; // $t3
  unsigned char canProceed; // stack offset -88
  unsigned char travelAlongRoad; // $s5
  unsigned char turnRight; // stack offset -84
  struct _CAR_DATA *cp1; // $s0
  struct CIV_ROUTE_ENTRY tmpNode; // stack offset -120
  { // line 65, offset 0x27290
    struct VECTOR pos; // stack offset -104
    int theta; // $a0
    int length; // $a1
    { // line 81, offset 0x27394
    } // line 89, offset 0x27494
  } // line 91, offset 0x274a4
} // line 116, offset 0x27530
/*
 * Offset 0x27530, from D:\driver2\game\C\CIV_AI.C (lines 1637..1827)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CreateNewNode(struct _CAR_DATA *cp /*$s4*/)
{ // line 1, offset 0x27530
  int oldRoad; // $s1
  int cr; // $a3
  struct CIV_ROUTE_ENTRY *newNode; // $s6
  struct CIV_ROUTE_ENTRY *oldNode; // $s3
  struct DRIVER2_CURVE *curve; // $s0
  struct DRIVER2_STRAIGHT *straight; // $s5
  int turnAngle; // stack offset -56
  { // line 1, offset 0x27530
    struct _CAR_DATA *cp; // $s4
    struct CIV_ROUTE_ENTRY *currentNode; // $v1
    { // line 1, offset 0x27530
      struct CIV_ROUTE_ENTRY *retNode; // $a0
    } // line 1, offset 0x2757c
  } // line 1, offset 0x2757c
  { // line 1, offset 0x2758c
    struct _CAR_DATA *cp; // $s4
    { // line 1, offset 0x2758c
      struct CIV_ROUTE_ENTRY *retNode; // $a0
    } // line 1, offset 0x2759c
  } // line 1, offset 0x2759c
  { // line 1, offset 0x275a8
    struct _CAR_DATA *cp; // $s4
    { // line 1, offset 0x275a8
      struct CIV_ROUTE_ENTRY *retNode; // $a0
    } // line 1, offset 0x275b8
  } // line 1, offset 0x275b8
  { // line 1, offset 0x275c4
    struct _CAR_DATA *cp; // $s4
    { // line 1, offset 0x275c4
      struct CIV_ROUTE_ENTRY *retNode; // $a0
    } // line 1, offset 0x275d4
  } // line 1, offset 0x275d4
  { // line 16, offset 0x275f0
    struct _CAR_DATA *cp; // $s4
    struct CIV_ROUTE_ENTRY *currentNode; // $s3
    { // line 16, offset 0x275f0
      struct CIV_ROUTE_ENTRY *retNode; // $v1
    } // line 16, offset 0x275f0
  } // line 16, offset 0x275f0
  { // line 18, offset 0x275f0
    { // line 1, offset 0x275f0
      struct _CAR_DATA *cp; // $s4
      { // line 1, offset 0x275f0
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x27600
    } // line 1, offset 0x27600
  } // line 21, offset 0x27610
  { // line 22, offset 0x27634
    struct _CAR_DATA *cp; // $s4
    struct CIV_ROUTE_ENTRY *currentNode; // $s3
    { // line 22, offset 0x27634
      struct CIV_ROUTE_ENTRY *retNode; // $s2
    } // line 22, offset 0x2764c
  } // line 22, offset 0x2764c
  { // line 44, offset 0x276e8
    int travelDir; // $a1
    int segmentEnd; // $a0
    { // line 51, offset 0x277b0
      int startDist; // stack offset -52
    } // line 51, offset 0x27808
  } // line 51, offset 0x27818
  { // line 55, offset 0x2784c
    int travelDir; // $a2
    int segmentEnd; // $t0
    { // line 62, offset 0x27954
      int startDist; // stack offset -48
    } // line 62, offset 0x27990
  } // line 63, offset 0x279a4
  { // line 80, offset 0x27a18
    struct CIV_ROUTE_ENTRY tmpNode; // stack offset -72
    { // line 84, offset 0x27a58
      int travelDir; // $a0
    } // line 95, offset 0x27b18
    { // line 102, offset 0x27b90
      struct _CAR_DATA *playerCar; // $v0
      int dx; // $v1
      int dz; // $a0
    } // line 107, offset 0x27c00
    { // line 114, offset 0x27c38
      int tryToPark; // $s1
    } // line 136, offset 0x27da0
    { // line 142, offset 0x27e04
      int radOfCrv; // $s5
      int cornerAngle; // $a3
      int segLength; // $s0
      int tmp; // $a1
      int dx; // $s1
      int dz; // $s0
      { // line 152, offset 0x27ebc
        struct _CAR_DATA *cp; // $s4
        { // line 152, offset 0x27ebc
          struct CIV_ROUTE_ENTRY *retNode; // $a0
        } // line 155, offset 0x27f44
      } // line 155, offset 0x27f44
      { // line 163, offset 0x27f78
        struct _CAR_DATA *cp; // $s4
        { // line 163, offset 0x27f78
          struct CIV_ROUTE_ENTRY *retNode; // $a0
        } // line 166, offset 0x2800c
      } // line 166, offset 0x2800c
    } // line 169, offset 0x2800c
    { // line 173, offset 0x2800c
      { // line 1, offset 0x2800c
        struct _CAR_DATA *cp; // $s4
        struct CIV_ROUTE_ENTRY *currentNode; // $s6
        { // line 1, offset 0x2800c
          struct CIV_ROUTE_ENTRY *retNode; // $v0
        } // line 1, offset 0x2800c
      } // line 1, offset 0x2800c
    } // line 177, offset 0x2801c
  } // line 177, offset 0x2801c
} // line 191, offset 0x280d8
/*
 * Offset 0x280D8, from D:\driver2\game\C\CIV_AI.C (lines 1843..1886)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ InitCivState(struct _CAR_DATA *cp /*$s1*/, char *extraData /*$s2*/)
{ // line 1, offset 0x280d8
  struct CIV_STATE *cs; // $s0
} // line 44, offset 0x282e8
/*
 * Offset 0x282E8, from D:\driver2\game\C\CIV_AI.C (lines 2016..2024)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ PingOutAllSpecialCivCars()
{ // line 2, offset 0x282e8
  struct _CAR_DATA *lcp; // $s0
  { // line 1, offset 0x28348
    struct _CAR_DATA *cp; // $s0
  } // line 1, offset 0x283e4
} // line 9, offset 0x2840c
/*
 * Offset 0x2840C, from D:\driver2\game\C\CIV_AI.C (lines 2028..2036)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ PingOutAllCivCarsAndCopCars()
{ // line 2, offset 0x2840c
  struct _CAR_DATA *lcp; // $s0
  { // line 1, offset 0x2844c
    struct _CAR_DATA *cp; // $s0
  } // line 1, offset 0x2852c
} // line 9, offset 0x28554
/*
 * Offset 0x28554, from D:\driver2\game\C\CIV_AI.C (lines 2050..2080)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ CheckPingOut(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x28554
  int dx; // $a0
  int dz; // $v1
  int dist; // $s1
  { // line 1, offset 0x285b8
    struct _CAR_DATA *cp; // $s0
  } // line 1, offset 0x28694
} // line 31, offset 0x286e0
/*
 * Offset 0x286E0, from D:\driver2\game\C\CIV_AI.C (lines 2176..2228)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ CreateCivCarWotDrivesABitThenStops(int direction /*$s5*/, long *startPos[4] /*$s2*/, long *stopPos[4] /*$a2*/, unsigned char internalModel /*$s4*/, int palette /*stack 16*/, unsigned char palette /*$s3*/)
{ // line 1, offset 0x286e0
  struct _EXTRA_CIV_DATA civDat; // stack offset -56
  struct _CAR_DATA *newCar; // $s1
  struct CIV_ROUTE_ENTRY *stopNode; // $a0
  struct CIV_ROUTE_ENTRY *spareNode; // $a1
  { // line 1, offset 0x286e0
    { // line 1, offset 0x286e0
      char *slot; // $v1
      struct _CAR_DATA *carCnt; // $a0
    } // line 8, offset 0x28774
  } // line 8, offset 0x28774
} // line 53, offset 0x28960
/*
 * Offset 0x28960, from D:\driver2\game\C\CIV_AI.C (lines 2248..2288)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ CreateStationaryCivCar(int direction /*$t4*/, long orientX /*$s2*/, long orientZ /*$s1*/, long *startPos[4] /*$a2*/, int externalModel /*stack 16*/, int palette /*stack 20*/, int controlFlags /*stack 24*/, unsigned char externalModel /*$t0*/, unsigned char palette /*$t3*/, unsigned char controlFlags /*$t2*/)
{ // line 1, offset 0x28960
  struct _EXTRA_CIV_DATA civDat; // stack offset -72
  struct _CAR_DATA *newCar; // $s0
  long tmpRes[4]; // stack offset -48
  long tmpQ[4]; // stack offset -32
  { // line 1, offset 0x28a1c
    { // line 1, offset 0x28a1c
      char *slot; // $v1
      struct _CAR_DATA *carCnt; // $a0
    } // line 1, offset 0x28a68
  } // line 1, offset 0x28a68
} // line 41, offset 0x28db4
/*
 * Offset 0x28DB4, from D:\driver2\game\C\CIV_AI.C (lines 2323..2655)
 * Stack frame base $sp, size 160
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ PingInCivCar(int minPingInDist /*stack 0*/)
{ // line 1, offset 0x28db4
  struct _EXTRA_CIV_DATA civDat; // stack offset -128
  int dir; // stack offset -52
  int distAlongSegment; // $fp
  int lane; // $s7
  struct _CAR_DATA *newCar; // $s1
  struct DRIVER2_STRAIGHT *str; // $s6
  struct DRIVER2_CURVE *crv; // $s5
  unsigned char cookieCountStart; // $s4
  int curveLength; // stack offset -48
  unsigned char model; // $s4
  unsigned char possibleLanes[12]; // stack offset -104
  unsigned char carDistLanes[15]; // stack offset -88
  char numPossibleLanes; // $s0
  int lbody; // $s3
  { // line 1, offset 0x28eec
    { // line 1, offset 0x28eec
      char *slot; // $a1
      struct _CAR_DATA *carCnt; // $a0
    } // line 1, offset 0x28f40
  } // line 1, offset 0x28f40
  { // line 70, offset 0x29000
    char newCarId; // $v1
    { // line 1, offset 0x29058
      struct _CAR_DATA *cp; // $s1
    } // line 1, offset 0x29140
  } // line 79, offset 0x292a4
  { // line 139, offset 0x29620
    char frog; // $a0
    char numLanes; // $a1
  } // line 139, offset 0x29760
  { // line 148, offset 0x29860
    char frog; // $a0
    char numLanes; // $a1
  } // line 148, offset 0x29964
  { // line 205, offset 0x29c48
    int externalModel; // $v0
    { // line 212, offset 0x29cc4
      unsigned char palette; // $v0
    } // line 216, offset 0x29d20
  } // line 221, offset 0x29d5c
  { // line 227, offset 0x29db8
    int theta; // $s0
    int minDistAlong; // $s2
  } // line 240, offset 0x29f10
  { // line 244, offset 0x29f58
    int minAngle; // $a1
  } // line 255, offset 0x2a090
  { // line 270, offset 0x2a0e8
    long pos[4]; // stack offset -72
    unsigned int distSq; // stack offset -56
    { // line 270, offset 0x2a0e8
      int *distToCarSq; // $t2
      { // line 270, offset 0x2a0e8
        int dz; // $v1
        int dx; // $a0
        int distSq; // $v0
        unsigned int retDistSq; // $a2
        struct _CAR_DATA *lcp; // $a1
      } // line 278, offset 0x2a228
    } // line 278, offset 0x2a228
    { // line 288, offset 0x2a240
      int x; // $t2
      int y; // $a2
      int z; // $t1
      unsigned int distSq; // $a3
      { // line 288, offset 0x2a240
        int dz; // $v1
        int dx; // $a0
        int ret; // $t0
        struct _CAR_DATA *lcp; // $a1
      } // line 288, offset 0x2a340
    } // line 288, offset 0x2a340
  } // line 299, offset 0x2a37c
} // line 333, offset 0x2a4c4
/*
 * Offset 0x2A4C4, from D:\driver2\game\C\CIV_AI.C (lines 2659..2689)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ AttemptUnPark(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0x2a4c4
  struct DRIVER2_STRAIGHT *str; // $s2
  struct DRIVER2_CURVE *crv; // $s3
} // line 31, offset 0x2a5fc
/*
 * Offset 0x2A5FC, from D:\driver2\game\C\CIV_AI.C (lines 2798..2948)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CivAccelTrafficRules(struct _CAR_DATA *cp /*$t3*/, int *distToNode /*$a1*/)
{ // line 1, offset 0x2a5fc
  int lbody; // $t1
  int wbody; // $t2
  struct CIV_STATE *cs; // $a2
  { // line 46, offset 0x2a71c
    int stopDist; // $t0
    { // line 50, offset 0x2a794
      int endSpeed; // $v0
    } // line 55, offset 0x2a800
  } // line 56, offset 0x2a800
  { // line 65, offset 0x2a844
    int ret; // $a1
    int properVel; // $v1
    int brakeDist; // $a3
    { // line 103, offset 0x2a918
      int endSpeed; // $v0
      int currentDist; // $v1
    } // line 103, offset 0x2a918
  } // line 117, offset 0x2a9ec
  { // line 125, offset 0x2a9ec
    int roadClear; // $t8
    int checkObstDist; // $t7
    int numLanes; // $v0
    { // line 134, offset 0x2aa0c
      struct _CAR_DATA *cp; // $t3
      { // line 134, offset 0x2aa0c
        struct _CAR_DATA *lcp; // $a3
        int normal; // $v0
        int tangent; // $a0
        int distToObstacle; // $t0
        int ccarAng; // $t1
        int scarAng; // $t2
      } // line 134, offset 0x2ab2c
    } // line 134, offset 0x2ab2c
    { // line 1, offset 0x2ab44
      struct _CAR_DATA *cp; // $t3
      { // line 1, offset 0x2ab44
        struct CIV_STATE *cs; // $v1
      } // line 1, offset 0x2ab44
    } // line 1, offset 0x2ab44
    { // line 145, offset 0x2ab58
      int ret; // $v1
    } // line 148, offset 0x2aba8
  } // line 149, offset 0x2aba8
} // line 151, offset 0x2aba8
/*
 * Offset 0x2ABA8, from D:\driver2\game\C\CIV_AI.C (lines 2950..3065)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ SetUpCivCollFlags()
{ // line 2, offset 0x2aba8
  struct SVECTOR boxDisp; // stack offset -72
  int carLength[2]; // stack offset -64
  struct _CAR_DATA *cp0; // $s5
  struct _CAR_DATA *cp1; // $s2
  unsigned int dNewLBODY[2]; // stack offset -56
  int dx; // $s0
  int dz; // stack offset -48
  { // line 35, offset 0x2ac14
    int extraLength; // $a2
  } // line 35, offset 0x2ac44
  { // line 40, offset 0x2ad74
    { // line 53, offset 0x2adc4
    } // line 53, offset 0x2ae18
    { // line 66, offset 0x2af60
      int civCD; // $s7
      int brake; // $a0
      { // line 74, offset 0x2af90
        unsigned int *blth; // $v1
      } // line 74, offset 0x2afc0
      { // line 83, offset 0x2b020
        int i; // $a1
        int h; // $a3
        int rnd; // $a2
        struct _CAR_DATA *cp; // $s0
        { // line 90, offset 0x2b0c0
        } // line 98, offset 0x2b190
      } // line 100, offset 0x2b1a4
    } // line 101, offset 0x2b1a4
  } // line 102, offset 0x2b1a4
  { // line 106, offset 0x2b1c8
    unsigned char i; // $s0
  } // line 115, offset 0x2b26c
} // line 116, offset 0x2b26c
/*
 * Offset 0x2B26C, from D:\driver2\game\C\CIV_AI.C (lines 3074..3148)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ CivAccel(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x2b26c
  int ret; // $t1
  int distToNode; // stack offset -16
  int dx; // $v1
  int dz; // $a0
  { // line 32, offset 0x2b35c
    int tmpRet; // $a0
    int lbody; // $a0
    { // line 37, offset 0x2b388
      int sf; // $v1
      int c1; // $t0
      int c2; // $a3
      int c3; // $a1
      { // line 52, offset 0x2b44c
        int tmp; // $v1
      } // line 55, offset 0x2b4b8
    } // line 58, offset 0x2b4c8
  } // line 72, offset 0x2b528
} // line 75, offset 0x2b53c
/*
 * Offset 0x2B53C, from D:\driver2\game\C\CIV_AI.C (lines 3166..3245)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ CivSteerAngle(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x2b53c
  int station; // $a3
  int step; // $s2
  int ret; // $a0
  struct VECTOR locPath; // stack offset -56
  struct VECTOR pathPoint; // stack offset -40
  int lbody; // $s3
  { // line 1, offset 0x2b53c
    { // line 1, offset 0x2b53c
      struct _CAR_DATA *cp; // $s0
      { // line 1, offset 0x2b53c
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 9, offset 0x2b590
    } // line 9, offset 0x2b590
    { // line 1, offset 0x2b5a0
      struct _CAR_DATA *cp; // $s0
      { // line 1, offset 0x2b5a0
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x2b5b0
    } // line 1, offset 0x2b5b0
    { // line 1, offset 0x2b5c0
      struct _CAR_DATA *cp; // $s0
      { // line 1, offset 0x2b5c0
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x2b5d0
    } // line 1, offset 0x2b5d0
    { // line 1, offset 0x2b5e0
      struct _CAR_DATA *cp; // $s0
      { // line 1, offset 0x2b5e0
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x2b5f0
    } // line 1, offset 0x2b5f0
  } // line 26, offset 0x2b610
  { // line 1, offset 0x2b67c
    struct _CAR_DATA *cp; // $s0
    { // line 1, offset 0x2b67c
      struct CIV_ROUTE_ENTRY *retNode; // $a0
    } // line 1, offset 0x2b690
  } // line 1, offset 0x2b690
  { // line 35, offset 0x2b6a0
    struct CIV_ROUTE_ENTRY *crLoc; // $a1
    struct CIV_ROUTE_ENTRY *cr; // $a0
  } // line 46, offset 0x2b700
  { // line 1, offset 0x2b748
    struct _CAR_DATA *cp; // $s0
    { // line 1, offset 0x2b748
      struct CIV_ROUTE_ENTRY *retNode; // $v1
    } // line 1, offset 0x2b758
  } // line 1, offset 0x2b758
  { // line 70, offset 0x2b870
    struct CIV_ROUTE_ENTRY *cr; // $a0
    { // line 1, offset 0x2b8a0
      struct _CAR_DATA *cp; // $s0
      { // line 1, offset 0x2b8a0
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x2b8b0
    } // line 1, offset 0x2b8b0
  } // line 77, offset 0x2b8c0
} // line 80, offset 0x2b8e4
/*
 * Offset 0x2B8E4, from D:\driver2\game\C\CIV_AI.C (lines 3265..3319)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CivFindStation(struct _CAR_DATA *cp /*$s6*/)
{ // line 1, offset 0x2b8e4
  struct CIV_ROUTE_ENTRY *rep; // $s3
  int cx; // stack offset -48
  int cz; // $fp
  { // line 1, offset 0x2b8e4
    int loop; // $a0
    { // line 1, offset 0x2b93c
      struct _CAR_DATA *cp; // $s6
      { // line 1, offset 0x2b93c
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x2b950
    } // line 1, offset 0x2b950
  } // line 12, offset 0x2b95c
  { // line 15, offset 0x2b964
    struct _CAR_DATA *cp; // $s6
    struct CIV_ROUTE_ENTRY *currentNode; // $s3
    { // line 15, offset 0x2b964
      struct CIV_ROUTE_ENTRY *retNode; // $s0
    } // line 15, offset 0x2b964
  } // line 15, offset 0x2b964
  { // line 17, offset 0x2b964
    int sx; // $s5
    int sz; // $s4
    int dx; // $s2
    int dz; // $s1
    int stepsize; // $a1
    int square; // $a0
    { // line 44, offset 0x2ba28
      struct _CAR_DATA *cp; // $s6
      struct CIV_ROUTE_ENTRY *currentNode; // $s3
      { // line 44, offset 0x2ba28
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 44, offset 0x2ba38
    } // line 44, offset 0x2ba38
    { // line 1, offset 0x2ba48
      struct _CAR_DATA *cp; // $s6
      struct CIV_ROUTE_ENTRY *currentNode; // $s3
      { // line 1, offset 0x2ba48
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x2ba58
    } // line 1, offset 0x2ba58
    { // line 1, offset 0x2ba68
      struct _CAR_DATA *cp; // $s6
      struct CIV_ROUTE_ENTRY *currentNode; // $s3
      { // line 1, offset 0x2ba68
        struct CIV_ROUTE_ENTRY *retNode; // $v1
      } // line 1, offset 0x2ba78
    } // line 1, offset 0x2ba78
  } // line 52, offset 0x2ba90
} // line 55, offset 0x2baec
/*
 * Offset 0x2BAEC, from D:\driver2\game\C\CIV_AI.C (lines 3337..3384)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CivFindPointOnPath(struct _CAR_DATA *cp /*$s7*/, int station /*$s2*/, struct VECTOR *ppoint /*$fp*/)
{ // line 1, offset 0x2baec
  struct CIV_ROUTE_ENTRY *cprep; // $a0
  struct CIV_ROUTE_ENTRY *start; // stack offset -48
  { // line 9, offset 0x2bb50
    struct _CAR_DATA *cp; // $s7
    struct CIV_ROUTE_ENTRY *currentNode; // $a0
    { // line 9, offset 0x2bb50
      struct CIV_ROUTE_ENTRY *retNode; // $s0
    } // line 9, offset 0x2bb50
  } // line 9, offset 0x2bb50
  { // line 11, offset 0x2bb50
    int sx; // $s4
    int sz; // $s5
    int dx; // $s1
    int dz; // $s3
    int stepsize; // $a2
  } // line 44, offset 0x2bc90
} // line 48, offset 0x2bcf4
/*
 * Offset 0x2BCF4, from D:\driver2\game\C\CIV_AI.C (lines 3398..3563)
 * Stack frame base $sp, size 120
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CreateRoadblock()
{ // line 2, offset 0x2bcf4
  struct _CAR_DATA *cp; // $v1
  struct _CAR_DATA *lcp; // $s0
  struct _CAR_DATA *newCar; // $s0
  struct DRIVER2_STRAIGHT *str; // stack offset -72
  struct DRIVER2_CURVE *crv; // $s7
  int distAlongSegment; // $s2
  int lbody; // $s4
  int dir; // $s6
  int numLanes; // stack offset -68
  unsigned char externalCopModel; // stack offset -64
  int delta; // $s4
  int noMoreCars; // stack offset -60
  int newCarId; // $v1
  { // line 2, offset 0x2bcf4
    int dir; // $s0
  } // line 39, offset 0x2c078
  { // line 44, offset 0x2c09c
    int theta; // $s0
  } // line 53, offset 0x2c198
  { // line 57, offset 0x2c1e0
    int minAngle; // $a3
    int curveLength; // $v1
  } // line 93, offset 0x2c334
  { // line 80, offset 0x2c3f8
    { // line 85, offset 0x2c4c8
    } // line 87, offset 0x2c4e4
    { // line 1, offset 0x2c590
      struct _CAR_DATA *cp; // $s0
    } // line 1, offset 0x2c674
    { // line 1, offset 0x2c708
      struct _CAR_DATA *cp; // $s0
    } // line 1, offset 0x2c7e4
  } // line 112, offset 0x2c7f4
  { // line 117, offset 0x2c830
    struct VECTOR startPos2; // stack offset -88
    int deltaAngle; // $a0
    int dir2NextRow; // $a1
    int faceDir; // $s1
    int numSpareCars; // $a0
    int count; // $s2
    int numSpots; // $fp
    { // line 129, offset 0x2c948
      int numCarsToAdd; // $s5
      { // line 133, offset 0x2c97c
        { // line 1, offset 0x2cac4
          struct _CAR_DATA *cp; // $s0
        } // line 1, offset 0x2cba8
        { // line 1, offset 0x2cc3c
          struct _CAR_DATA *cp; // $s0
        } // line 1, offset 0x2cd18
      } // line 157, offset 0x2cd28
    } // line 158, offset 0x2cd34
  } // line 159, offset 0x2cd34
} // line 166, offset 0x2cd74
/*
 * Offset 0x2CDA4, from D:\driver2\game\C\CIV_AI.C (lines 2144..2156)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitCivCars()
{ // line 2, offset 0x2cda4
} // line 13, offset 0x2ce10
/*
 * Offset 0x2CE10, from D:\driver2\game\C\CIV_AI.C (lines 2699..2739)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ CivControl(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x2ce10
  { // line 1, offset 0x2ce10
  } // line 1, offset 0x2ce10
  { // line 30, offset 0x2ce8c
  } // line 32, offset 0x2cec0
} // line 41, offset 0x2cf18
/*
 * Offset 0x2CF18, from D:\driver2\game\C\CIV_AI.C (lines 2116..2140)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ TrafficLightCycle(int exit /*$a0*/)
{ // line 1, offset 0x2cf18
  int timeCnt; // $v1
} // line 25, offset 0x2cf80
/*
 * Offset 0x2CF80, from D:\driver2\game\C\CIV_AI.C (lines 1977..2012)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ PingOutCar(struct _CAR_DATA *cp /*$s0*/)
{
}
/*
 * Offset 0x2D084, from D:\driver2\game\C\CIV_AI.C (lines 930..942)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ CivCarFX(struct _CAR_DATA *cp /*$s0*/)
{
}
/*
 * Offset 0x2D11C, from D:\driver2\game\C\CIV_AI.C (lines 891..914)
 * Stack frame base $sp, size 0
 */
struct _CAR_DATA * /*$ra*/ FindClosestCar(int x /*$t4*/, int y /*$a1*/, int z /*$a2*/, int *distToCarSq /*$a3*/)
{ // line 1, offset 0x2d11c
  struct _CAR_DATA *retCar; // $t2
  struct _CAR_DATA *lcp; // $t0
  unsigned int retDistSq; // $t1
  int distSq; // $v0
  int dx; // $a0
  int dz; // $v1
} // line 24, offset 0x2d220
/*
 * Offset 0x2D220, from D:\driver2\game\C\CIV_AI.C (lines 2084..2086)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetUpTrafficLightPhase()
{
}
/*
 * Offset 0x2D24C, from D:\driver2\game\C\CIV_AI.C (lines 918..926)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ NotTravellingAlongCurve(int x /*$a0*/, int z /*$a1*/, int dir /*$s0*/, struct DRIVER2_CURVE *cv /*$a3*/)
{ // line 1, offset 0x2d24c
} // line 9, offset 0x2d298
Source file(s) D:\DRIVER2\GAME\ASM\COMPRES.MIP, object file obj\compres.OBJ overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) D:\driver2\game\C\CONVERT.C+D:\driver2\game\CONVERT.C, object file obj\convert.OBJ overlay id <none>

// 56 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};

// 89 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 7 external declarations
extern struct MATRIX aspect; // offset 0x0009bf4c
extern int horizonadd; // offset 0x000aa19c
extern unsigned long mcgn; // offset 0x000aaba8
extern unsigned long srgn; // offset 0x000aabac
static int randomcounter; // offset 0x000aaba0
static int randomindex; // offset 0x000aaba4
static long rseed[17]; // offset 0x000bd510

// 12 functions
/*
 * Offset 0x2D304, from D:\driver2\game\C\CONVERT.C (lines 272..288)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ BuildWorldMatrix()
{ // line 2, offset 0x2d304
  struct MATRIX newmatrix; // stack offset -48
} // line 17, offset 0x2d3f8
/*
 * Offset 0x2D3F8, from D:\driver2\game\C\CONVERT.C (lines 149..161)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ Calc_Object_MatrixYZX(struct MATRIX *mat /*$s0*/, struct SVECTOR *angles /*$s1*/)
{
}
/*
 * Offset 0x2D470, from D:\driver2\game\C\CONVERT.C (lines 182..183)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ _RotMatrixX(struct MATRIX *m /*$v0*/, short ang /*$a1*/)
{
}
/*
 * Offset 0x2D49C, from D:\driver2\game\C\CONVERT.C (lines 187..188)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ _RotMatrixY(struct MATRIX *m /*$v0*/, short ang /*$a1*/)
{
}
/*
 * Offset 0x2D4C8, from D:\driver2\game\C\CONVERT.C (lines 192..193)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ _RotMatrixZ(struct MATRIX *m /*$v0*/, short ang /*$a1*/)
{
}
/*
 * Offset 0x2D4F4, from D:\driver2\game\C\CONVERT.C (lines 199..200)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ RotMatrixXYZ(struct MATRIX *m /*$v0*/, struct SVECTOR *r /*$a1*/)
{
}
/*
 * Offset 0x2D51C, from D:\driver2\game\C\CONVERT.C (lines 205..213)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ _MatrixRotate(struct VECTOR *pos /*$s0*/)
{ // line 1, offset 0x2d51c
  struct VECTOR temp; // stack offset -24
} // line 9, offset 0x2d55c
/*
 * Offset 0x2D55C, from D:\driver2\game\C\CONVERT.C (lines 240..252)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InvertMatrix(struct MATRIX *a /*$a0*/, struct MATRIX *b /*$a1*/)
{
}
/*
 * Offset 0x2D5C8, from D:\driver2\game\C\CONVERT.C (lines 334..360)
 * Stack frame base $sp, size 176
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ScaleCamera()
{ // line 2, offset 0x2d5c8
  struct MATRIX temp; // stack offset -160
  struct MATRIX temp2; // stack offset -128
  struct MATRIX scale; // stack offset -96
  struct MATRIX scaledcammat; // stack offset -64
  struct VECTOR pos; // stack offset -32
  struct SVECTOR tempang; // stack offset -16
} // line 27, offset 0x2d678
/*
 * Offset 0x2D678, from D:\driver2\game\C\CONVERT.C (lines 365..370)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ Getlong(char *dest /*$a0*/, char *source /*$a1*/)
{
}
/*
 * Offset 0x2D6A8, from D:\driver2\game\C\CONVERT.C (lines 387..401)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ RandomInit(long i1 /*$a0*/, long i2 /*$a1*/)
{ // line 2, offset 0x2d6a8
  int count; // $s0
} // line 15, offset 0x2d724
/*
 * Offset 0x2D724, from D:\driver2\game\C\CONVERT.C (lines 414..419)
 * Stack frame base $sp, size 0
 */
long /*$ra*/ Random2(int step /*$a0*/)
{ // line 2, offset 0x2d724
  unsigned int seed; // $a0
} // line 6, offset 0x2d78c
Source file(s) D:\driver2\game\C\COP_AI.C+D:\driver2\game\COP_AI.C, object file obj\cop_ai.OBJ overlay id <none>

// 73 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct COP_SIGHT_DATA {
  short surroundViewDistance; // size=0, offset=0
  short frontViewDistance; // size=0, offset=2
  short frontViewAngle; // size=0, offset=4
};
struct COP_DATA {
  int autoMaxPowerScaleLimit; // size=0, offset=0
  int autoDesiredSpeedScaleLimit; // size=0, offset=4
  int autoRespawnScaleLimit; // size=0, offset=8
  int autoBatterPlayerTrigger; // size=0, offset=12
  int immortal; // size=0, offset=16
  int roadblockTrigger; // size=0, offset=20
  int cutOffPowerScale; // size=0, offset=24
  int cutOffDistance; // size=0, offset=28
  short trigger[5]; // size=10, offset=32
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct FELONY_DATA {
  struct FELONY_DELAY occurrenceDelay[12]; // size=48, offset=0
  struct FELONY_DELAY reoccurrenceDelay[12]; // size=48, offset=48
  struct FELONY_VALUE value[12]; // size=48, offset=96
  int pursuitFelonyScale; // size=0, offset=144
};
enum AIZone : char {
  zoneFrnt = 0,
  zoneBack = 1,
  zoneLeft = 2,
  zoneRght = 3,
};
struct iVectNT {
  int n; // size=0, offset=0
  int t; // size=0, offset=4
};

// 108 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct COP_SIGHT_DATA COP_SIGHT_DATA;
typedef struct COP_DATA COP_DATA;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct FELONY_DATA FELONY_DATA;
typedef enum AIZone AIZone;
typedef struct iVectNT iVectNT;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 32 external declarations
extern struct COP_DATA gCopData; // offset 0x0009bf6c
extern int speed1[3]; // offset 0x0009bf98
extern int speed2[3]; // offset 0x0009bfa4
static char sqtbl[65]; // offset 0x0009bfb0
extern int l1; // offset 0x000aa1a0
extern int l2; // offset 0x000aa1a4
extern int gMinimumCops; // offset 0x000aa1a8
extern int gPuppyDogCop; // offset 0x000aa1ac
extern int gBatterPlayer; // offset 0x000aa1b0
extern int gCopDesiredSpeedScale; // offset 0x000aa1b4
extern int gCopMaxPowerScale; // offset 0x000aa1b8
extern short pedestrianFelony; // offset 0x000aa1bc
extern int gCopRespawnTime; // offset 0x000aa1c0
extern int toggleCam; // offset 0x000aa1c4
extern int numActiveCops; // offset 0x000aabdc
extern int CopsCanSeePlayer; // offset 0x000aabb8
extern int CopsAllowed; // offset 0x000aabc0
extern int copsAreInPursuit; // offset 0x000aabc4
extern int player_position_known; // offset 0x000aabd4
extern struct COP_SIGHT_DATA copSightData; // offset 0x000aabc8
extern int cop_respawn_timer; // offset 0x000aabd8
extern int requestCopCar; // offset 0x000aabe0
extern int LastHeading; // offset 0x000aabbc
extern int pathStraight; // offset 0x000aabd0
extern int OutOfSightCount; // offset 0x000aabb4
extern struct _CAR_DATA *targetVehicle; // offset 0x000aabe4
static int said_picked_up; // offset 0x000aabb0
extern struct VECTOR lastKnownPosition; // offset 0x000bd610
extern struct FELONY_DATA felonyData; // offset 0x000bd558
extern struct VECTOR CarTail; // offset 0x000bd600
extern struct VECTOR targetPoint; // offset 0x000bd5f0
extern char CopWorkMem[444]; // offset 0x000bd620

// 12 functions
/*
 * Offset 0x2D78C, from D:\driver2\game\C\COP_AI.C (lines 593..638)
 * Stack frame base $sp, size 152
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ WibbleDownTheRoad(struct VECTOR *from /*$a0*/, int distance /*$s1*/, struct VECTOR *to /*$s5*/)
{ // line 1, offset 0x2d78c
  int th; // $s0
  int j; // $s3
  int thl[4]; // stack offset -136
  struct VECTOR pos; // stack offset -120
  struct VECTOR dir; // stack offset -104
  { // line 11, offset 0x2d810
    struct VECTOR p2; // stack offset -88
    struct VECTOR d2; // stack offset -72
    int colour[3]; // stack offset -56
  } // line 21, offset 0x2d89c
} // line 46, offset 0x2d99c
/*
 * Offset 0x2D99C, from D:\driver2\game\C\COP_AI.C (lines 643..704)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitCops()
{
}
/*
 * Offset 0x2DAD8, from D:\driver2\game\C\COP_AI.C (lines 708..808)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ ControlCops()
{ // line 2, offset 0x2dad8
  { // line 18, offset 0x2db34
    int playerID; // $v1
  } // line 21, offset 0x2db74
  { // line 41, offset 0x2dc6c
    int heading; // $s1
    int rnd; // $s0
  } // line 66, offset 0x2dd9c
  { // line 76, offset 0x2ddfc
    int copsWereInPursuit; // $a1
  } // line 90, offset 0x2de9c
  { // line 93, offset 0x2deac
  } // line 99, offset 0x2dee0
} // line 101, offset 0x2dee0
/*
 * Offset 0x2DEFC, from D:\driver2\game\C\COP_AI.C (lines 845..1202)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ CopControl1(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0x2defc
  int currentSpeed; // $s7
  int desiredSteerAngle; // $s4
  { // line 48, offset 0x2dfc4
    int dx; // $a1
    int dz; // $a0
    { // line 52, offset 0x2e018
    } // line 60, offset 0x2e058
  } // line 61, offset 0x2e058
  { // line 67, offset 0x2e070
    struct VECTOR pos; // stack offset -88
  } // line 77, offset 0x2e23c
  { // line 90, offset 0x2e23c
    enum AIZone targetZone; // $a0
    struct VECTOR doordir; // stack offset -72
    int targetFound; // $a1
    int cx; // $s5
    int cz; // $s6
    int dvx; // $s0
    int dvz; // $s3
    int dist; // $s2
    int framesToImpact; // $a1
    { // line 139, offset 0x2e360
      int dz; // $a1
      int idvx; // $v1
      int idvz; // $v0
    } // line 139, offset 0x2e360
    { // line 204, offset 0x2e5e4
      struct iVectNT path[2]; // stack offset -56
      int slidevel; // $a3
      { // line 260, offset 0x2e8e8
        int plcrspd; // $a1
      } // line 263, offset 0x2e954
    } // line 279, offset 0x2ea28
    { // line 295, offset 0x2ea78
      int b; // $a0
    } // line 300, offset 0x2eac0
    { // line 304, offset 0x2eac0
      int steerdif; // $v1
      int speeddif; // $a2
      int maxPower; // $a1
      { // line 330, offset 0x2ebb8
        int sf; // $v1
      } // line 332, offset 0x2ebd0
    } // line 343, offset 0x2ec64
  } // line 343, offset 0x2ec64
  { // line 352, offset 0x2ec84
  } // line 356, offset 0x2ecac
} // line 358, offset 0x2ecac
/*
 * Offset 0x2ECD8, from D:\driver2\game\C\COP_AI.C (lines 1368..1541)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ ControlCopDetection()
{ // line 14, offset 0x2ecd8
  int dx; // $v1
  int dz; // $a0
  struct VECTOR vec; // stack offset -64
  int ccx; // stack offset -32
  int ccz; // stack offset -28
  char *scratch; // $s4
  struct _CAR_DATA *lcp; // $s1
  { // line 17, offset 0x2ecd8
    { // line 17, offset 0x2ecd8
      int angry; // $v1
    } // line 23, offset 0x2eda8
  } // line 23, offset 0x2eda8
  { // line 48, offset 0x2edfc
    int dx; // $v1
    int dz; // $v0
  } // line 58, offset 0x2ee7c
  { // line 66, offset 0x2eed0
    int distanceToPlayer; // $s0
    int active; // $s2
    { // line 1, offset 0x2ef70
      struct _CAR_DATA *cp; // $s1
      int distanceToPlayer; // $s0
      { // line 1, offset 0x2ef70
        int farDist; // $v1
        int nearDist; // $v0
        char result; // $s2
        { // line 1, offset 0x2ef90
          int theta; // $v1
          struct VECTOR delta; // stack offset -48
          { // line 1, offset 0x2f030
          } // line 1, offset 0x2f034
        } // line 1, offset 0x2f034
      } // line 1, offset 0x2f034
    } // line 1, offset 0x2f034
  } // line 84, offset 0x2f050
  { // line 110, offset 0x2f164
  } // line 110, offset 0x2f164
  { // line 123, offset 0x2f190
    { // line 130, offset 0x2f1b8
    } // line 150, offset 0x2f228
  } // line 152, offset 0x2f238
  { // line 157, offset 0x2f25c
    int rnd; // $s0
    int dir; // $s1
  } // line 161, offset 0x2f2c8
  { // line 166, offset 0x2f2fc
    int rnd; // $s0
    int dir; // $s1
  } // line 168, offset 0x2f394
} // line 174, offset 0x2f3cc
/*
 * Offset 0x2F3CC, from D:\driver2\game\C\COP_AI.C (lines 1583..1670)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ControlNumberOfCops()
{ // line 2, offset 0x2f3cc
  int numWantedCops; // $t2
  { // line 5, offset 0x2f3cc
    short *pTrigger; // $a2
  } // line 13, offset 0x2f454
  { // line 26, offset 0x2f4a0
    int temp; // $a1
  } // line 41, offset 0x2f54c
  { // line 50, offset 0x2f570
    int num_closer; // $a2
    int cutOffDistance; // $a1
    { // line 55, offset 0x2f580
      struct _CAR_DATA *lcp; // $a0
      int tempDist; // $a3
      { // line 64, offset 0x2f5ac
        int copDist; // $v1
      } // line 75, offset 0x2f5cc
    } // line 78, offset 0x2f5dc
  } // line 81, offset 0x2f5e8
} // line 88, offset 0x2f60c
/*
 * Offset 0x2F60C, from D:\driver2\game\C\COP_AI.C (lines 824..841)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ CopControl(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0x2f60c
} // line 18, offset 0x2f680
/*
 * Offset 0x2F680, from D:\driver2\game\C\COP_AI.C (lines 577..587)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitCopState(struct _CAR_DATA *cp /*$s0*/, char *extraData /*$a1*/)
{
}
/*
 * Offset 0x2F6FC, from D:\driver2\game\C\COP_AI.C (lines 1562..1575)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PassiveCopTasks(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x2f6fc
  { // line 1, offset 0x2f76c
    struct _CAR_DATA *cp; // $s0
  } // line 1, offset 0x2f7c4
} // line 14, offset 0x2f7f8
/*
 * Offset 0x2F7F8, from D:\driver2\game\C\COP_AI.C (lines 1267..1280)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitCopData(struct COP_DATA *pCopData /*$a0*/)
{ // line 1, offset 0x2f7f8
  short *pTrigger; // $v1
  short trigger; // $a2
} // line 14, offset 0x2f844
/*
 * Offset 0x2F844, from D:\driver2\game\C\COP_AI.C (lines 1308..1313)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ UpdateCopSightData()
{ // line 2, offset 0x2f844
  int angry; // $v1
} // line 6, offset 0x2f8dc
/*
 * Offset 0x2F8DC, from D:\driver2\game\C\COP_AI.C (lines 1231..1243)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ FindCost(int x /*$a0*/, int z /*$a1*/, int dvx /*$a2*/, int dvz /*$a3*/)
{ // line 1, offset 0x2f8dc
  int tx; // $v0
  int tz; // $v0
  int dx; // $a2
  int dz; // $v1
  int d; // $v0
} // line 13, offset 0x2f994
Source file(s) D:\driver2\game\C\COSMETIC.C+D:\driver2\game\COSMETIC.C, object file obj\cosmetic.OBJ overlay id <none>

// 62 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 84 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 1 external declarations
extern char *CosmeticFiles[4]; // offset 0x0009bff4

// 10 functions
/*
 * Offset 0x2F994, from D:\driver2\game\C\COSMETIC.C (lines 252..282)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ AddReverseLight(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0x2f994
  struct CAR_COSMETICS *car_cos; // $a1
  struct SVECTOR v1; // stack offset -32
  struct CVECTOR col; // stack offset -24
  short cogOffset; // $s2
} // line 31, offset 0x2faec
/*
 * Offset 0x2FAEC, from D:\driver2\game\C\COSMETIC.C (lines 325..396)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ AddIndicatorLight(struct _CAR_DATA *cp /*$s0*/, int Type /*$s6*/)
{ // line 1, offset 0x2faec
  struct CAR_COSMETICS *car_cos; // $a1
  struct CVECTOR col; // stack offset -56
  struct SVECTOR vfrnt; // stack offset -48
  struct SVECTOR vback; // stack offset -40
  char tempcol; // $s1
  char *life; // $a0
  char *life2; // $s3
  short cogOffset; // $s2
} // line 72, offset 0x2fdbc
/*
 * Offset 0x2FDE4, from D:\driver2\game\C\COSMETIC.C (lines 407..503)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ AddBrakeLight(struct _CAR_DATA *cp /*$s5*/)
{ // line 1, offset 0x2fde4
  struct CAR_COSMETICS *car_cos; // $a1
  struct SVECTOR v1; // stack offset -88
  struct SVECTOR v2; // stack offset -80
  struct SVECTOR vec; // stack offset -72
  struct CVECTOR col; // stack offset -64
  char *life2; // $s2
  short doubleFlag; // stack offset -56
  short verticalFlag; // stack offset -52
  short offset; // $s1
  short loop; // $fp
  short damIndex; // $v0
  short cogOffset; // $a3
} // line 97, offset 0x30118
/*
 * Offset 0x30148, from D:\driver2\game\C\COSMETIC.C (lines 514..643)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ AddCopCarLight(struct _CAR_DATA *cp /*$t0*/)
{ // line 1, offset 0x30148
  int size; // $a3
  int light; // $s1
  int pos; // $s3
  int side; // $s4
  int num_lights; // $t5
  int count_speed; // $t4
  char col1; // $a2
  char col2; // $a1
  static char xpos1[8]; // offset 0x10
  int sign; // $t1
  char *coplife; // $s2
  struct SVECTOR v1; // stack offset -88
  struct CVECTOR col; // stack offset -80
  struct CAR_COSMETICS *car_cos; // $s0
  short cogOffset; // $fp
} // line 130, offset 0x30514
/*
 * Offset 0x30544, from D:\driver2\game\C\COSMETIC.C (lines 653..918)
 * Stack frame base $sp, size 128
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ AddNightLights(struct _CAR_DATA *cp /*$s6*/)
{ // line 1, offset 0x30544
  static struct MATRIX work_matrix; // offset 0x0
  struct CAR_COSMETICS *car_cos; // $fp
  struct SVECTOR Position1; // stack offset -104
  struct SVECTOR Position2; // stack offset -96
  struct SVECTOR vec; // stack offset -88
  struct CVECTOR col; // stack offset -80
  int lit; // stack offset -72
  int lightFlag; // $t0
  char *life2; // stack offset -68
  short damIndex; // $s5
  short loop; // stack offset -64
  short offset; // $s2
  short doubleFlag; // stack offset -60
  short verticalFlag; // stack offset -56
  short cogOffset; // stack offset -52
} // line 266, offset 0x30d9c
/*
 * Offset 0x30D9C, from D:\driver2\game\C\COSMETIC.C (lines 989..1037)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ AddSmokingEngine(struct _CAR_DATA *cp /*$s0*/, int black_smoke /*$s2*/, int WheelSpeed /*$s3*/)
{ // line 1, offset 0x30d9c
  struct VECTOR SmokePos; // stack offset -64
  struct CAR_COSMETICS *car_cos; // $a0
  struct VECTOR Drift; // stack offset -48
  struct SVECTOR svec; // stack offset -32
} // line 49, offset 0x30f90
/*
 * Offset 0x30FAC, from D:\driver2\game\C\COSMETIC.C (lines 1048..1083)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ AddFlamingEngine(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0x30fac
  struct VECTOR SmokePos; // stack offset -56
  struct SVECTOR svec; // stack offset -40
  struct CAR_COSMETICS *car_cos; // $a0
  struct VECTOR Drift; // stack offset -32
} // line 36, offset 0x3114c
/*
 * Offset 0x31160, from D:\driver2\game\C\COSMETIC.C (lines 188..202)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ LoadCosmetics(int level /*$a0*/)
{ // line 2, offset 0x31160
} // line 15, offset 0x311b0
/*
 * Offset 0x311B0, from D:\driver2\game\C\COSMETIC.C (lines 213..242)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ ProcessCosmeticsLump(char *lump_ptr /*$s2*/, int lump_size /*$a1*/)
{ // line 1, offset 0x311b0
  int i; // $t0
  int model; // $a1
  int offset; // $a0
  { // line 23, offset 0x31238
  } // line 27, offset 0x31338
} // line 30, offset 0x31360
/*
 * Offset 0x31360, from D:\driver2\game\C\COSMETIC.C (lines 293..310)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupSpecCosmetics(char *loadbuffer /*$a0*/)
{ // line 5, offset 0x31360
  int *to; // $a1
  int *from; // $a0
  int *end; // $v1
} // line 18, offset 0x31398
Source file(s) D:\driver2\game\C\CUTSCENE.C+D:\driver2\game\CUTSCENE.C, object file obj\cutscene.obj overlay id <none>

// 74 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct TILE {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short w; // size=0, offset=12
  short h; // size=0, offset=14
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct PLAYBACKCAMERA {
  struct VECTOR_NOPAD position; // size=12, offset=0
  struct SVECTOR angle; // size=8, offset=12
  int FrameCnt; // size=0, offset=20
  short CameraPosvy; // size=0, offset=24
  short gCameraDistance; // size=0, offset=26
  short gCameraMaxDistance; // size=0, offset=28
  short gCameraAngle; // size=0, offset=30
  char cameraview; // size=0, offset=32
  char next; // size=0, offset=33
  char prev; // size=0, offset=34
  char idx; // size=0, offset=35
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct REPLAY_SAVE_HEADER {
  unsigned long magic; // size=0, offset=0
  unsigned char GameLevel; // size=0, offset=4
  unsigned char GameType; // size=0, offset=5
  unsigned char reserved1; // size=0, offset=6
  unsigned char NumReplayStreams; // size=0, offset=7
  unsigned char NumPlayers; // size=0, offset=8
  unsigned char RandomChase; // size=0, offset=9
  unsigned char CutsceneEvent; // size=0, offset=10
  unsigned char gCopDifficultyLevel; // size=0, offset=11
  struct MISSION_DATA SavedData; // size=228, offset=12
  struct ACTIVE_CHEATS ActiveCheats; // size=4, offset=240
  int wantedCar[2]; // size=8, offset=244
  int MissionNumber; // size=0, offset=252
  int HaveStoredData; // size=0, offset=256
  int reserved2[6]; // size=24, offset=260
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct REPLAY_STREAM_HEADER {
  struct STREAM_SOURCE SourceType; // size=48, offset=0
  int Size; // size=0, offset=48
  int Length; // size=0, offset=52
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct CUTSCENE_BUFFER {
  int numResident; // size=0, offset=0
  unsigned char residentCutscenes[4]; // size=4, offset=4
  char *residentPointers[4]; // size=16, offset=8
  char *currentPointer; // size=0, offset=24
  int bytesFree; // size=0, offset=28
  char buffer[8192]; // size=8192, offset=32
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct CUTSCENE_INFO {
  unsigned short offset; // size=0, offset=0
  unsigned short size; // size=0, offset=2
};
struct CUTSCENE_HEADER {
  int maxsize; // size=0, offset=0
  struct CUTSCENE_INFO data[15]; // size=60, offset=4
};

// 99 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct TILE TILE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct PLAYBACKCAMERA PLAYBACKCAMERA;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct REPLAY_SAVE_HEADER REPLAY_SAVE_HEADER;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct REPLAY_STREAM_HEADER REPLAY_STREAM_HEADER;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct CUTSCENE_BUFFER CUTSCENE_BUFFER;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct CUTSCENE_INFO CUTSCENE_INFO;
typedef struct CUTSCENE_HEADER CUTSCENE_HEADER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 29 external declarations
extern struct PLAYBACKCAMERA *CutsceneCamera; // offset 0x000aa1f8
extern int gInGameChaseActive; // offset 0x000aa1fc
extern int gInGameCutsceneActive; // offset 0x000aa200
extern int CutsceneFrameCnt; // offset 0x000aa204
extern int CutsceneEventTrigger; // offset 0x000aa208
extern int gThePlayerCar; // offset 0x000aa20c
extern int gInGameCutsceneDelay; // offset 0x000aa210
extern int gInGameCutsceneID; // offset 0x000aa214
extern int JustReturnedFromCutscene; // offset 0x000aa218
extern int gCutsceneAtEnd; // offset 0x000aa21c
static char *CutsceneReplayStart; // offset 0x000aa1c8
static int CutsceneStreamIndex; // offset 0x000aa1cc
static int NumCutsceneStreams; // offset 0x000aa1d0
static int CutsceneCameraOffset; // offset 0x000aa1d4
static struct PLAYBACKCAMERA *CutNextChange; // offset 0x000aa1d8
static struct PLAYBACKCAMERA *CutLastChange; // offset 0x000aa1dc
static int PreLoadedCutscene; // offset 0x000aa1e0
static int gHaveInGameCutscene; // offset 0x000aa1e4
static int gCSDestroyPlayer; // offset 0x000aa1e8
static int CutsceneLength; // offset 0x000aa1ec
static int BlackBorderHeight; // offset 0x000aa1f0
static int CutsceneInReplayBuffer; // offset 0x000aa1f4
static int SavedCameraCarId; // offset 0x000aabf0
static int SavedCameraView; // offset 0x000aabf4
static int SavedCameraAngle; // offset 0x000aabf8
static int SavedWorldCentreCarId; // offset 0x000aabfc
static struct VECTOR *SavedSpoolXZ; // offset 0x000aac00
extern struct CUTSCENE_BUFFER CutsceneBuffer; // offset 0x000bd820
extern struct STREAM_SOURCE *PlayerStartInfo[8]; // offset 0x000bd800

// 21 functions
/*
 * Offset 0x31398, from D:\driver2\game\C\CUTSCENE.C (lines 646..675)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawInGameCutscene()
{ // line 2, offset 0x31398
  struct TILE *tile; // $s0
} // line 30, offset 0x314e8
/*
 * Offset 0x314E8, from D:\driver2\game\C\CUTSCENE.C (lines 683..724)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ TriggerChase(int *car /*$s2*/, int cutscene /*$a1*/)
{ // line 1, offset 0x314e8
  void *inform; // $s3
  int i; // $a0
  int length; // $s1
  { // line 12, offset 0x31558
  } // line 38, offset 0x316a4
} // line 42, offset 0x316ec
/*
 * Offset 0x316EC, from D:\driver2\game\C\CUTSCENE.C (lines 838..942)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ ReleaseInGameCutscene()
{ // line 2, offset 0x316ec
  { // line 7, offset 0x31748
    struct STREAM_SOURCE *pinfo; // $a0
    int i; // $s0
  } // line 79, offset 0x31978
} // line 105, offset 0x31a20
/*
 * Offset 0x31A20, from D:\driver2\game\C\CUTSCENE.C (lines 1040..1190)
 * Stack frame base $sp, size 96
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ TriggerInGameCutsceneSystem(int cutscene /*$a0*/)
{ // line 1, offset 0x31a20
  static char padid[8]; // offset 0x0
  int bDamageOverride; // stack offset -64
  int i; // $s2
  int id; // $v1
  { // line 18, offset 0x31a64
    { // line 54, offset 0x31bc4
      int car; // $v1
      int model; // $v1
      int palette; // $a1
    } // line 65, offset 0x31c1c
    { // line 85, offset 0x31cac
      { // line 90, offset 0x31d0c
        int car; // $v1
      } // line 104, offset 0x31d90
    } // line 112, offset 0x31d90
  } // line 146, offset 0x31ea0
} // line 151, offset 0x31edc
/*
 * Offset 0x31EDC, from D:\driver2\game\C\CUTSCENE.C (lines 1199..1212)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetNullPlayer(int plr /*$a0*/)
{ // line 1, offset 0x31edc
} // line 14, offset 0x31f60
/*
 * Offset 0x31F60, from D:\driver2\game\C\CUTSCENE.C (lines 1221..1234)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetNullPlayerDontKill(int plr /*$a0*/)
{ // line 1, offset 0x31f60
} // line 14, offset 0x31fe0
/*
 * Offset 0x31FE0, from D:\driver2\game\C\CUTSCENE.C (lines 1244..1266)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ DestroyPlayer(int plr /*$s0*/, int fully /*$a1*/)
{
}
/*
 * Offset 0x32118, from D:\driver2\game\C\CUTSCENE.C (lines 1299..1354)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ LoadCutsceneToReplayBuffer(int residentCutscene /*$a0*/)
{ // line 2, offset 0x32118
  struct REPLAY_SAVE_HEADER *rheader; // $a1
  struct REPLAY_STREAM_HEADER *sheader; // $t1
  char filename[64]; // stack offset -88
  char *pt; // $s1
  int i; // $a0
  int size; // $s0
} // line 56, offset 0x3243c
/*
 * Offset 0x3243C, from D:\driver2\game\C\CUTSCENE.C (lines 1362..1439)
 * Stack frame base $sp, size 456
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ LoadCutsceneToBuffer(int subindex /*$s3*/)
{ // line 1, offset 0x3243c
  struct CUTSCENE_HEADER header; // stack offset -440
  struct REPLAY_SAVE_HEADER rheader; // stack offset -376
  char filename[64]; // stack offset -88
  int offset; // $a2
  int size; // $s0
} // line 78, offset 0x325c0
/*
 * Offset 0x325C0, from D:\driver2\game\C\CUTSCENE.C (lines 566..585)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitInGameCutsceneVariables()
{
}
/*
 * Offset 0x3262C, from D:\driver2\game\C\CUTSCENE.C (lines 594..643)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ HandleInGameCutscene()
{ // line 2, offset 0x3262c
  { // line 37, offset 0x3270c
  } // line 48, offset 0x32730
} // line 50, offset 0x32740
/*
 * Offset 0x32740, from D:\driver2\game\C\CUTSCENE.C (lines 732..769)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ TriggerInGameCutscene(int cutscene /*$s0*/)
{ // line 1, offset 0x32740
  { // line 30, offset 0x327f0
  } // line 37, offset 0x3282c
} // line 38, offset 0x3282c
/*
 * Offset 0x3283C, from D:\driver2\game\C\CUTSCENE.C (lines 778..829)
 * Stack frame base $sp, size 152
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ CalcInGameCutsceneSize()
{ // line 39, offset 0x3283c
  struct CUTSCENE_HEADER header; // stack offset -136
  char filename[64]; // stack offset -72
} // line 52, offset 0x328c8
/*
 * Offset 0x328C8, from D:\driver2\game\C\CUTSCENE.C (lines 951..952)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ PreLoadInGameCutscene(int chase /*$a0*/)
{
}
/*
 * Offset 0x328E8, from D:\driver2\game\C\CUTSCENE.C (lines 965..997)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ CutsceneCameraChange(int cameracnt /*$s0*/)
{
}
/*
 * Offset 0x329B4, from D:\driver2\game\C\CUTSCENE.C (lines 1010..1032)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ LoadInGameCutscene(int subindex /*$s1*/)
{ // line 1, offset 0x329b4
  int ret; // $s0
} // line 23, offset 0x32a34
/*
 * Offset 0x32A34, from D:\driver2\game\C\CUTSCENE.C (lines 1274..1290)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ FindNextCutChange(int cameracnt /*$a0*/)
{ // line 1, offset 0x32a34
  int found; // $t0
  int count; // $a3
  int nextframe; // $a2
} // line 17, offset 0x32a98
/*
 * Offset 0x32A98, from D:\driver2\game\C\CUTSCENE.C (lines 1471..1497)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ LoadCutsceneInformation(int cutscene /*$s2*/)
{ // line 1, offset 0x32a98
  int i; // $s1
} // line 27, offset 0x32b54
/*
 * Offset 0x32B54, from D:\driver2\game\C\CUTSCENE.C (lines 1505..1517)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ FreeCutsceneBuffer()
{ // line 2, offset 0x32b54
  int i; // $v1
} // line 13, offset 0x32bc0
/*
 * Offset 0x32BC0, from D:\driver2\game\C\CUTSCENE.C (lines 1520..1532)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ IsCutsceneResident(int cutscene /*$a0*/)
{ // line 1, offset 0x32bc0
  int i; // $a1
} // line 13, offset 0x32c08
/*
 * Offset 0x32C08, from D:\driver2\game\C\CUTSCENE.C (lines 1442..1463)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ShowCutsceneError()
{
}
Source file(s) D:\driver2\game\C\DEBRIS.C+D:\driver2\game\DEBRIS.C, object file obj\debris.OBJ overlay id <none>

// 96 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct POLY_G4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char r3; // size=0, offset=28
  unsigned char g3; // size=0, offset=29
  unsigned char b3; // size=0, offset=30
  unsigned char pad3; // size=0, offset=31
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
};
struct POLY_GT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  unsigned char r1; // size=0, offset=16
  unsigned char g1; // size=0, offset=17
  unsigned char b1; // size=0, offset=18
  unsigned char p1; // size=0, offset=19
  short x1; // size=0, offset=20
  short y1; // size=0, offset=22
  unsigned char u1; // size=0, offset=24
  unsigned char v1; // size=0, offset=25
  unsigned short tpage; // size=0, offset=26
  unsigned char r2; // size=0, offset=28
  unsigned char g2; // size=0, offset=29
  unsigned char b2; // size=0, offset=30
  unsigned char p2; // size=0, offset=31
  short x2; // size=0, offset=32
  short y2; // size=0, offset=34
  unsigned char u2; // size=0, offset=36
  unsigned char v2; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_GT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  unsigned char r1; // size=0, offset=16
  unsigned char g1; // size=0, offset=17
  unsigned char b1; // size=0, offset=18
  unsigned char p1; // size=0, offset=19
  short x1; // size=0, offset=20
  short y1; // size=0, offset=22
  unsigned char u1; // size=0, offset=24
  unsigned char v1; // size=0, offset=25
  unsigned short tpage; // size=0, offset=26
  unsigned char r2; // size=0, offset=28
  unsigned char g2; // size=0, offset=29
  unsigned char b2; // size=0, offset=30
  unsigned char p2; // size=0, offset=31
  short x2; // size=0, offset=32
  short y2; // size=0, offset=34
  unsigned char u2; // size=0, offset=36
  unsigned char v2; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
  unsigned char r3; // size=0, offset=40
  unsigned char g3; // size=0, offset=41
  unsigned char b3; // size=0, offset=42
  unsigned char p3; // size=0, offset=43
  short x3; // size=0, offset=44
  short y3; // size=0, offset=46
  unsigned char u3; // size=0, offset=48
  unsigned char v3; // size=0, offset=49
  unsigned short pad3; // size=0, offset=50
};
struct TILE {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short w; // size=0, offset=12
  short h; // size=0, offset=14
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct POLYFT4 {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char spare; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO uv3; // size=2, offset=14
  struct RGB color; // size=4, offset=16
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TPAN {
  unsigned char texture_page; // size=0, offset=0
  unsigned char texture_number; // size=0, offset=1
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct SMOKE {
  struct UnpaddedHackVector position; // size=12, offset=0
  struct UnpaddedCharVector drift; // size=3, offset=12
  struct UnpaddedCharVector drift_change; // size=3, offset=15
  struct UnpaddedHackVector final_tail_pos; // size=12, offset=20
  unsigned char step; // size=0, offset=32
  unsigned char pos; // size=0, offset=33
  short start_w; // size=0, offset=34
  short final_w; // size=0, offset=36
  char life; // size=0, offset=38
  char halflife; // size=0, offset=39
  unsigned short flags; // size=0, offset=40
  unsigned char num; // size=0, offset=42
  unsigned char t_step; // size=0, offset=43
  short transparency; // size=0, offset=44
};
struct DEBRIS {
  struct VECTOR position; // size=16, offset=0
  struct SVECTOR direction; // size=8, offset=16
  unsigned short life; // size=0, offset=24
  unsigned short flags; // size=0, offset=26
  unsigned short num; // size=0, offset=28
  unsigned short pos; // size=0, offset=30
  struct RGB rgb; // size=4, offset=32
  char step; // size=0, offset=36
  char type; // size=0, offset=37
};
struct LEAF {
  struct VECTOR position; // size=16, offset=0
  struct SVECTOR direction; // size=8, offset=16
  unsigned short life; // size=0, offset=24
  unsigned short flags; // size=0, offset=26
  unsigned short num; // size=0, offset=28
  unsigned short pos; // size=0, offset=30
  struct RGB rgb; // size=4, offset=32
  char step; // size=0, offset=36
  char type; // size=0, offset=37
  short sin_index1; // size=0, offset=38
  short sin_index2; // size=0, offset=40
  char sin_addition1; // size=0, offset=42
  char sin_addition2; // size=0, offset=43
};
struct DAMAGED_LAMP {
  struct CELL_OBJECT *cop; // size=16, offset=0
  char damage; // size=0, offset=4
};
struct DAMAGED_OBJECT {
  struct CELL_OBJECT cop; // size=16, offset=0
  char active; // size=0, offset=16
  char damage; // size=0, offset=17
  int rot_speed; // size=0, offset=20
  struct SVECTOR velocity; // size=8, offset=24
  int vx; // size=0, offset=32
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct TRI_POINT {
  struct BVECTOR v0; // size=4, offset=0
  struct BVECTOR v1; // size=4, offset=4
  struct BVECTOR v2; // size=4, offset=8
};
struct TRI_POINT_LONG {
  struct VECTOR_NOPAD v0; // size=12, offset=0
  struct VECTOR_NOPAD v1; // size=12, offset=12
  struct VECTOR_NOPAD v2; // size=12, offset=24
};
struct RAIN_TYPE {
  struct VECTOR_NOPAD position; // size=12, offset=0
  struct SVECTOR oldposition; // size=8, offset=12
};
struct LAMP_STREAK {
  struct SXYPAIR light_trails[4]; // size=16, offset=0
  int id; // size=0, offset=16
  short clock; // size=0, offset=20
  char set; // size=0, offset=22
};
struct ROUTE_DATA {
  short type; // size=0, offset=0
  short height; // size=0, offset=2
  short objectAngle; // size=0, offset=4
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};

// 129 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct POLY_G4 POLY_G4;
typedef struct POLY_GT3 POLY_GT3;
typedef struct POLY_GT4 POLY_GT4;
typedef struct TILE TILE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct POLYFT4 POLYFT4;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct TPAN TPAN;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct DB DB;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct RGB16 RGB16;
typedef struct SMOKE SMOKE;
typedef struct DEBRIS DEBRIS;
typedef struct LEAF LEAF;
typedef struct DAMAGED_LAMP DAMAGED_LAMP;
typedef struct DAMAGED_OBJECT DAMAGED_OBJECT;
typedef struct BVECTOR BVECTOR;
typedef struct TRI_POINT TRI_POINT;
typedef struct TRI_POINT_LONG TRI_POINT_LONG;
typedef struct RAIN_TYPE RAIN_TYPE;
typedef struct LAMP_STREAK LAMP_STREAK;
typedef struct ROUTE_DATA ROUTE_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _EVENT EVENT;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef struct MVERTEX SV5x5[5][5];

// 0 labels

// 120 external declarations
extern char PoolPrimData[16]; // offset 0x0009c00c
extern struct TRI_POINT *debris_rot_table[5]; // offset 0x0009c01c
extern struct CVECTOR debris_colour[4][31]; // offset 0x0009c030
extern struct TRI_POINT_LONG debris1_vert; // offset 0x0009c220
extern struct TRI_POINT_LONG debris2_vert; // offset 0x0009c244
extern struct TRI_POINT_LONG leaf_vert; // offset 0x0009c268
extern struct TRI_POINT_LONG litter_vert; // offset 0x0009c28c
extern struct TRI_POINT_LONG debris3_vert; // offset 0x0009c2b0
extern struct TRI_POINT_LONG *debris_data[5]; // offset 0x0009c2d4
extern unsigned char grassColour[4][3]; // offset 0x0009c2e8
extern int LightningTimer; // offset 0x000aa224
extern int variable_weather; // offset 0x000aa228
extern int gDoSmoke; // offset 0x000aa234
extern int gDoLeaves; // offset 0x000aa238
extern int gPlayerCarLights; // offset 0x000aa220
extern int gFlareScale; // offset 0x000aa22c
extern int SmokeCnt; // offset 0x000aa230
extern char LeftLight; // offset 0x000aac6c
extern char RightLight; // offset 0x000aac20
extern char gRainCount; // offset 0x000aac21
extern int gEffectsTimer; // offset 0x000aac54
extern int wetness; // offset 0x000aac48
extern int gNextRainDrop; // offset 0x000aac4c
extern int next_debris; // offset 0x000aac3c
extern int next_leaf; // offset 0x000aac70
extern int next_smoke; // offset 0x000aac24
extern int main_cop_light_pos; // offset 0x000aac68
extern short light_col; // offset 0x000aac6e
extern int LightSortCorrect; // offset 0x000aac28
extern int gcar_num; // offset 0x000aac5c
extern int NextDamagedLamp; // offset 0x000aac74
extern int NextDamagedPmeter; // offset 0x000aac44
extern struct SVECTOR debris_rotvec; // offset 0x000aac60
extern struct SVECTOR leaf_rotvec; // offset 0x000aac30
extern struct SMOKE *smoke_table; // offset 0x000aac2c
static int ThunderTimer; // offset 0x000aac14
static int ThunderDistance; // offset 0x000aac18
extern int gCarPoolsToDraw; // offset 0x000aac78
extern int StreakCount1; // offset 0x000aac40
extern int LightIndex; // offset 0x000aac7c
extern int NoRainIndoors; // offset 0x000aac50
extern int CarLightFadeFront; // offset 0x000aac38
extern int CarLightFadeBack; // offset 0x000aac80
extern int SmashablesHit; // offset 0x000aac58
static int plotted; // offset 0x000aac1c
extern struct DEBRIS debris[60]; // offset 0x000c1080
extern struct MATRIX norot; // offset 0x000c0828
extern struct TEXTURE_DETAILS addcam; // offset 0x000c09d8
extern struct TEXTURE_DETAILS frameadv; // offset 0x000c1d08
extern struct TEXTURE_DETAILS autocam; // offset 0x000c1c28
extern struct TEXTURE_DETAILS chasecar; // offset 0x000c1ce8
extern struct TEXTURE_DETAILS choosecar; // offset 0x000c2990
extern struct TEXTURE_DETAILS clock; // offset 0x000bf8c8
extern struct TEXTURE_DETAILS delcam; // offset 0x000c0e68
extern struct TEXTURE_DETAILS editcam; // offset 0x000c1b70
extern struct TEXTURE_DETAILS fixedcam; // offset 0x000c1cf8
extern struct TEXTURE_DETAILS incar; // offset 0x000bf8d8
extern struct TEXTURE_DETAILS lenschan; // offset 0x000c1d38
extern struct TEXTURE_DETAILS lookcar; // offset 0x000c1c38
extern struct TEXTURE_DETAILS movecam; // offset 0x000c1ba0
extern struct TEXTURE_DETAILS movecampos; // offset 0x000c0848
extern struct TEXTURE_DETAILS ok; // offset 0x000c1b60
extern struct TEXTURE_DETAILS pause; // offset 0x000bf8f8
extern struct TEXTURE_DETAILS playcam; // offset 0x000c1b90
extern struct TEXTURE_DETAILS playpause; // offset 0x000c29b0
extern struct TEXTURE_DETAILS save2card; // offset 0x000c1ec8
extern struct TEXTURE_DETAILS restart; // offset 0x000c1c58
extern struct TEXTURE_DETAILS line_texture; // offset 0x000c1c68
extern struct TEXTURE_DETAILS bird_texture1; // offset 0x000c1d18
extern struct TEXTURE_DETAILS bird_texture2; // offset 0x000c1d28
extern struct TEXTURE_DETAILS light_pool_texture; // offset 0x000c2980
extern struct TEXTURE_DETAILS gTyreTexture; // offset 0x000c1c48
extern struct TEXTURE_DETAILS smoke_texture; // offset 0x000c27e0
extern struct TEXTURE_DETAILS litter_texture; // offset 0x000bf8e8
extern struct TEXTURE_DETAILS debris_texture; // offset 0x000c3938
extern struct TEXTURE_DETAILS pool_texture; // offset 0x000c1c98
extern struct TEXTURE_DETAILS spark_texture; // offset 0x000c27f0
extern struct TEXTURE_DETAILS cop_texture; // offset 0x000c1b08
extern struct TEXTURE_DETAILS light_texture; // offset 0x000c1f18
extern struct TEXTURE_DETAILS flare_texture; // offset 0x000c1ed8
extern struct TEXTURE_DETAILS sea_texture; // offset 0x000c1aa0
extern struct TEXTURE_DETAILS lensflare_texture; // offset 0x000c1ca8
extern struct TEXTURE_DETAILS trail_texture; // offset 0x000c1f38
extern struct TEXTURE_DETAILS cross_texture; // offset 0x000c2800
extern struct TEXTURE_DETAILS joypad_texture; // offset 0x000bf840
extern struct TEXTURE_DETAILS pad_texture; // offset 0x000c1a90
extern struct TEXTURE_DETAILS watch_texture; // offset 0x000c1f08
extern struct TEXTURE_DETAILS sun_texture; // offset 0x000c1b18
extern struct TEXTURE_DETAILS drop_texture; // offset 0x000c1c78
extern struct TEXTURE_DETAILS lightref_texture; // offset 0x000c1b28
extern struct TEXTURE_DETAILS digit_texture; // offset 0x000c1ee8
extern struct TEXTURE_DETAILS collon_texture; // offset 0x000bf850
extern struct TEXTURE_DETAILS jeans_texture; // offset 0x000c1ef8
extern struct TEXTURE_DETAILS arm1_texture; // offset 0x000c1b80
extern struct TEXTURE_DETAILS forearm1_texture; // offset 0x000c1a80
extern struct TEXTURE_DETAILS chest1_texture; // offset 0x000c29a0
extern struct TEXTURE_DETAILS head1_texture; // offset 0x000c1cb8
extern struct TEXTURE_DETAILS paper_texture; // offset 0x000c1f28
extern struct TEXTURE_DETAILS tannerShadow_texture; // offset 0x000c0e78
extern struct TEXTURE_DETAILS texturePedHead; // offset 0x000c2958
extern struct DAMAGED_LAMP damaged_lamp[5]; // offset 0x000c1b38
extern struct DAMAGED_OBJECT damaged_object[9]; // offset 0x000c2810
extern struct MATRIX debris_mat; // offset 0x000c0808
extern struct MATRIX leaf_mat; // offset 0x000c1cc8
extern struct TRI_POINT debris_rot1[32]; // offset 0x000c09e8
extern struct TRI_POINT debris_rot2[32]; // offset 0x000c0b68
extern struct TRI_POINT debris_rot3[32]; // offset 0x000c0ce8
extern struct TRI_POINT leaf_rot[32]; // offset 0x000c1d48
extern struct TRI_POINT litter_rot[32]; // offset 0x000c0858
extern struct LEAF leaf[50]; // offset 0x000c1f48
extern struct SMOKE smoke[80]; // offset 0x000bf908
extern struct RAIN_TYPE gRain[180]; // offset 0x000c2b28
extern struct TEXTURE_DETAILS moon_texture; // offset 0x000c1c88
extern short gRainAlloc[180]; // offset 0x000c29c0
extern short debris_alloc[60]; // offset 0x000c1bb0
extern short smoke_alloc[80]; // offset 0x000c19e0
extern short leaf_alloc[50]; // offset 0x000bf860
extern struct POLYFT4 gPoolPoly; // offset 0x000c2968
extern int NewLamp[21]; // offset 0x000c1ab0
extern struct LAMP_STREAK Known_Lamps[21]; // offset 0x000c0e88

// 52 functions
/*
 * Offset 0x32C10, from D:\driver2\game\C\DEBRIS.C (lines 790..1028)
 * Stack frame base $sp, size 848
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ PlacePoolForCar(struct _CAR_DATA *cp /*$s4*/, struct CVECTOR *col /*stack 4*/, int front /*$a2*/)
{ // line 1, offset 0x32c10
  int car_road_height; // $s2
  struct SVECTOR s[27]; // stack offset -832
  struct SVECTOR *ptr; // $s1
  struct SVECTOR sout[27]; // stack offset -616
  struct VECTOR s1[12]; // stack offset -400
  struct VECTOR *ptr1; // $s0
  struct POLY_FT4 *poly; // $t0
  struct MATRIX final_matrix; // stack offset -208
  struct VECTOR averagepos; // stack offset -176
  int in_car; // $t0
  int z; // stack offset -48
  int sub_level; // $fp
  int count; // $s3
  struct VECTOR mid_position; // stack offset -160
  { // line 23, offset 0x32cec
    short farz; // $a2
    short nearz; // $a0
  } // line 108, offset 0x32ec0
  { // line 114, offset 0x32ed0
  } // line 130, offset 0x32f38
  { // line 147, offset 0x32fb4
    struct VECTOR toss; // stack offset -144
    int temp_y; // $a1
  } // line 161, offset 0x3306c
  { // line 164, offset 0x330a4
    long n[4]; // stack offset -128
  } // line 170, offset 0x3316c
  { // line 177, offset 0x331f0
    int count; // $s2
    { // line 206, offset 0x333c4
      long z[15]; // stack offset -112
      { // line 216, offset 0x3341c
        char *VertIdx; // $s0
        { // line 228, offset 0x3349c
        } // line 233, offset 0x3352c
      } // line 234, offset 0x3352c
    } // line 235, offset 0x3353c
  } // line 237, offset 0x3353c
} // line 239, offset 0x33544
/*
 * Offset 0x33574, from D:\driver2\game\C\DEBRIS.C (lines 1327..1427)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ AddLeaf(struct VECTOR *Position /*$s1*/, int num_leaves /*$s5*/, int Type /*$s3*/)
{ // line 1, offset 0x33574
  struct LEAF *myleaf; // $a1
  int num; // $v1
  int loop; // $s2
  int temprand; // $s0
  { // line 16, offset 0x335d8
    { // line 74, offset 0x336e4
    } // line 79, offset 0x336f8
    { // line 83, offset 0x3370c
      int temp; // $v0
    } // line 83, offset 0x3370c
    { // line 89, offset 0x33738
      int temp; // $v0
    } // line 92, offset 0x3374c
  } // line 93, offset 0x3374c
} // line 101, offset 0x33784
/*
 * Offset 0x337AC, from D:\driver2\game\C\DEBRIS.C (lines 1493..1554)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitDebrisNames()
{ // line 2, offset 0x337ac
} // line 62, offset 0x33b9c
/*
 * Offset 0x33B9C, from D:\driver2\game\C\DEBRIS.C (lines 1564..1673)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ InitDebris()
{ // line 2, offset 0x33b9c
  int loop; // $v1
  int count; // $s0
  struct TPAN texnum; // stack offset -88
  struct TRI_POINT_LONG temptri; // stack offset -80
  struct BVECTOR *debrisPTR; // $a0
  { // line 37, offset 0x33cf4
    { // line 41, offset 0x33d10
    } // line 46, offset 0x33d80
  } // line 63, offset 0x33e2c
} // line 110, offset 0x33fa8
/*
 * Offset 0x33FA8, from D:\driver2\game\C\DEBRIS.C (lines 1753..1806)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ AddGroundDebris()
{ // line 2, offset 0x33fa8
  struct VECTOR Position; // stack offset -48
  int seed; // $s0
  int number; // $v0
  int count; // $s3
  int xbound; // $a1
  int zbound; // $a0
  int type; // $a2
  struct CELL_OBJECT *cop; // $s1
  struct MODEL *model; // $s2
  { // line 30, offset 0x3407c
  } // line 51, offset 0x34100
} // line 54, offset 0x34110
/*
 * Offset 0x34138, from D:\driver2\game\C\DEBRIS.C (lines 1815..1876)
 * Stack frame base $sp, size 144
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawSmashable_sprites()
{ // line 2, offset 0x34138
  int count; // $s6
  struct VECTOR pos; // stack offset -128
  struct DAMAGED_OBJECT *dam; // $s2
  { // line 11, offset 0x341a4
    struct MATRIX object_matrix; // stack offset -112
    struct MATRIX spritematrix; // stack offset -80
    struct MATRIX *finalmatrix; // $s0
    struct MODEL *model; // $s3
    { // line 46, offset 0x3435c
      unsigned long colours; // $a0
    } // line 55, offset 0x343b4
  } // line 60, offset 0x343e8
} // line 62, offset 0x34424
/*
 * Offset 0x34424, from D:\driver2\game\C\DEBRIS.C (lines 1925..2038)
 * Stack frame base $sp, size 128
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ AddSmallStreetLight(struct CELL_OBJECT *cop /*$s1*/, int x /*$s3*/, int y /*$s6*/, int z /*$s4*/, int type /*stack 16*/, int type /*$v1*/)
{ // line 1, offset 0x34424
  struct VECTOR v1; // stack offset -112
  struct VECTOR v2; // stack offset -96
  struct VECTOR v3; // stack offset -80
  struct SVECTOR pos; // stack offset -64
  struct CVECTOR col; // stack offset -56
  struct CVECTOR col1; // stack offset -48
  int count; // $v1
  short angle; // $s2
  int halo_size; // $fp
  int size; // $s5
  int LampId; // $s7
  struct DAMAGED_LAMP *dam; // $s0
  { // line 36, offset 0x344ec
  } // line 42, offset 0x34540
} // line 114, offset 0x34828
/*
 * Offset 0x34858, from D:\driver2\game\C\DEBRIS.C (lines 2049..2174)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ AddLightEffect(struct CELL_OBJECT *cop /*$t0*/, int x /*$t2*/, int y /*$a2*/, int z /*$a3*/, int type /*stack 16*/, int colour /*stack 20*/, char type /*$t3*/, char colour /*$t1*/)
{ // line 1, offset 0x34858
  struct VECTOR v1; // stack offset -88
  struct VECTOR v2; // stack offset -72
  struct VECTOR v3; // stack offset -56
  struct SVECTOR pos; // stack offset -40
  struct CVECTOR col; // stack offset -32
  struct CVECTOR col1; // stack offset -24
  short angle; // $v1
  int size; // $s1
} // line 126, offset 0x34c6c
/*
 * Offset 0x34C6C, from D:\driver2\game\C\DEBRIS.C (lines 2178..2197)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ PreLampStreak()
{ // line 2, offset 0x34c6c
  int count; // $a3
} // line 20, offset 0x34d1c
/*
 * Offset 0x34D1C, from D:\driver2\game\C\DEBRIS.C (lines 2230..2244)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ damage_lamp(struct CELL_OBJECT *cop /*$a2*/)
{ // line 1, offset 0x34d1c
  int count; // $v1
  int old_damage; // $v0
} // line 15, offset 0x34dac
/*
 * Offset 0x34DAC, from D:\driver2\game\C\DEBRIS.C (lines 2255..2317)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ damage_object(struct CELL_OBJECT *cop /*$s1*/, struct VECTOR *velocity /*$a1*/)
{ // line 1, offset 0x34dac
  struct DAMAGED_OBJECT *dam; // $s0
  { // line 1, offset 0x34dac
    struct PACKED_CELL_OBJECT *pcop; // $a0
  } // line 1, offset 0x34dac
} // line 63, offset 0x34f64
/*
 * Offset 0x34F64, from D:\driver2\game\C\DEBRIS.C (lines 2326..2415)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ AddTrafficLight(struct CELL_OBJECT *cop /*$t4*/, int x /*$t6*/, int y /*$t7*/, int z /*$a3*/, int flag /*stack 16*/, int yang /*stack 20*/, short flag /*$a0*/, short yang /*$t5*/)
{ // line 1, offset 0x34f64
  struct CVECTOR a; // stack offset -80
  struct CVECTOR b; // stack offset -72
  struct CVECTOR c; // stack offset -64
  struct VECTOR v1; // stack offset -56
  struct VECTOR v2; // stack offset -40
  int lDiffAnglesX; // $s2
  int lDiffAnglesY; // $s1
  int AbsX; // $a2
  int AbsY; // $a1
  int tempfade; // $v0
  { // line 1, offset 0x34f64
    int c; // $t1
    int s; // $t2
  } // line 1, offset 0x34f64
} // line 90, offset 0x352b0
/*
 * Offset 0x352CC, from D:\driver2\game\C\DEBRIS.C (lines 2462..2513)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ ShowCarlight(struct SVECTOR *v1 /*$s6*/, struct _CAR_DATA *cp /*$s3*/, struct CVECTOR *col /*$s1*/, short size /*$s5*/, struct TEXTURE_DETAILS *texture /*stack 16*/, int flag /*stack 20*/, char flag /*$s4*/)
{ // line 1, offset 0x352cc
  int CarLightFade; // $a1
  struct VECTOR v1t; // stack offset -72
  struct VECTOR v1l; // stack offset -56
  struct CVECTOR flareCol; // stack offset -40
  int front; // $a0
} // line 52, offset 0x35534
/*
 * Offset 0x3555C, from D:\driver2\game\C\DEBRIS.C (lines 2523..2574)
 * Stack frame base $sp, size 40
 */
void /*$ra*/ ShowLight1(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$a1*/, short size /*$a2*/, struct TEXTURE_DETAILS *texture /*$a3*/)
{ // line 1, offset 0x3555c
  struct SVECTOR vert[4]; // stack offset -40
  struct POLY_FT4 *poly; // $t0
  int z; // stack offset -8
} // line 52, offset 0x35748
/*
 * Offset 0x35750, from D:\driver2\game\C\DEBRIS.C (lines 2579..2793)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ ShowLight(struct VECTOR *v1 /*$s0*/, struct CVECTOR *col /*$s3*/, short size /*$s4*/, struct TEXTURE_DETAILS *texture /*$s2*/)
{ // line 1, offset 0x35750
  struct SVECTOR vert[4]; // stack offset -88
  struct POLY_FT4 *poly; // $s1
  int z; // stack offset -40
  int index; // $a1
  int tail_width; // $s5
  { // line 65, offset 0x35a54
    int loop; // $a1
  } // line 71, offset 0x35aac
  { // line 75, offset 0x35ad4
    struct POLY_G4 *poly1; // $s0
    int dx; // $a0
    int dy; // $v0
    int angle; // $v0
    int width; // $s2
    int c; // $a0
    int s; // $a2
    int length; // $v0
    struct SVECTOR tail; // stack offset -56
    struct SVECTOR head; // stack offset -48
  } // line 130, offset 0x35eb8
  { // line 148, offset 0x35f68
    int loop; // $a3
  } // line 154, offset 0x35fe8
  { // line 158, offset 0x36024
    struct POLY_G4 *poly1; // $s0
    int dx; // $a2
    int dy; // $a1
    int angle; // $v0
    int width; // $s1
    int c; // $a2
    int s; // $a1
    int length; // $v0
    struct SVECTOR tail; // stack offset -56
    struct SVECTOR head; // stack offset -48
  } // line 213, offset 0x36408
} // line 215, offset 0x36408
/*
 * Offset 0x3642C, from D:\driver2\game\C\DEBRIS.C (lines 2804..2857)
 * Stack frame base $sp, size 40
 */
void /*$ra*/ ShowGroundLight(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$a1*/, short size /*$a2*/)
{ // line 1, offset 0x3642c
  struct SVECTOR vert[4]; // stack offset -40
  struct POLY_FT4 *poly; // $t0
  int z; // stack offset -8
} // line 54, offset 0x36680
/*
 * Offset 0x36688, from D:\driver2\game\C\DEBRIS.C (lines 2869..2932)
 * Stack frame base $sp, size 40
 */
void /*$ra*/ RoundShadow(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$a1*/, short size /*$a2*/)
{ // line 1, offset 0x36688
  struct SVECTOR vert[4]; // stack offset -40
  struct POLY_FT4 *poly; // $t0
  int z; // stack offset -8
} // line 64, offset 0x368d0
/*
 * Offset 0x368D8, from D:\driver2\game\C\DEBRIS.C (lines 2945..3015)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ ShowFlare(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$s2*/, short size /*$a2*/, int rotation /*$a3*/)
{ // line 1, offset 0x368d8
  struct SVECTOR vert[4]; // stack offset -96
  struct POLY_FT4 *poly; // $t0
  struct SVECTOR direction; // stack offset -64
  struct MATRIX temp_matrix; // stack offset -56
  int z; // stack offset -24
} // line 71, offset 0x36b54
/*
 * Offset 0x36B6C, from D:\driver2\game\C\DEBRIS.C (lines 3029..3086)
 * Stack frame base $sp, size 64
 */
void /*$ra*/ DisplayWater(struct SMOKE *smoke /*$a0*/)
{ // line 1, offset 0x36b6c
  struct POLY_FT4 *poly; // $t1
  struct VECTOR v; // stack offset -64
  struct SVECTOR vert[4]; // stack offset -48
  int size; // $t1
  int z; // $v0
  int z1; // stack offset -16
  int z2; // stack offset -12
  int z3; // stack offset -8
  int z4; // stack offset -4
} // line 58, offset 0x36e18
/*
 * Offset 0x36E18, from D:\driver2\game\C\DEBRIS.C (lines 3102..3169)
 * Stack frame base $sp, size 40
 */
void /*$ra*/ DisplaySpark(struct SMOKE *spark /*$t1*/)
{ // line 1, offset 0x36e18
  int z; // stack offset -8
  struct SVECTOR v[3]; // stack offset -40
  struct SVECTOR TrailPos; // stack offset -16
  struct POLY_G3 *poly; // $t0
  { // line 33, offset 0x36f30
    unsigned char *col; // $a0
  } // line 48, offset 0x36fe0
} // line 68, offset 0x37150
/*
 * Offset 0x37158, from D:\driver2\game\C\DEBRIS.C (lines 3182..3214)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ GetSmokeDrift(struct VECTOR *Wind /*$t2*/)
{ // line 1, offset 0x37158
  static int SinTabIndex1; // offset 0x158
  static int SinTabIndex2; // offset 0x15c
  static int SinTabIndex3; // offset 0x160
  static int WindMagnitude; // offset 0x164
  static int SinX; // offset 0x0
  static int CosX; // offset 0x4
} // line 33, offset 0x37250
/*
 * Offset 0x37250, from D:\driver2\game\C\DEBRIS.C (lines 3227..3284)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ Setup_Debris(struct VECTOR *ipos /*$fp*/, struct VECTOR *ispeed /*$s6*/, int num_debris /*$s7*/, int type /*$s5*/)
{ // line 1, offset 0x37250
  struct DEBRIS *mydebris; // $s1
  int num; // $v1
  int loop; // $s4
  int vx; // $s2
  int vy; // $s3
  int vz; // $a2
  int seed; // $s0
  int col; // $a3
  { // line 18, offset 0x372f4
  } // line 32, offset 0x373b4
} // line 58, offset 0x37444
/*
 * Offset 0x37474, from D:\driver2\game\C\DEBRIS.C (lines 3296..3462)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ Setup_Smoke(struct VECTOR *ipos /*$s1*/, int start_w /*$s3*/, int end_w /*$s4*/, int SmokeType /*$s7*/, int WheelSpeed /*stack 16*/, struct VECTOR *Drift /*stack 20*/, int Exhaust /*stack 24*/, int WheelSpeed /*$s6*/, struct VECTOR *Drift /*$fp*/)
{ // line 1, offset 0x37474
  struct SMOKE *mysmoke; // $s0
  int num; // $v1
  { // line 39, offset 0x37594
  } // line 39, offset 0x37594
  { // line 76, offset 0x376a0
  } // line 76, offset 0x376a0
  { // line 86, offset 0x376ec
  } // line 91, offset 0x37728
  { // line 127, offset 0x3780c
  } // line 138, offset 0x37884
} // line 167, offset 0x37920
/*
 * Offset 0x37950, from D:\driver2\game\C\DEBRIS.C (lines 3475..3549)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ Setup_Sparks(struct VECTOR *ipos /*$fp*/, struct VECTOR *ispeed /*$s7*/, int num_sparks /*stack 8*/, char SparkType /*$s5*/)
{ // line 1, offset 0x37950
  struct SMOKE *mysmoke; // $s2
  int num; // $s0
  int loop; // $s4
  int vx; // $s1
  int vy; // $s0
  int vz; // $v1
  int randtemp; // $v0
  { // line 12, offset 0x379a0
  } // line 74, offset 0x37ad0
} // line 75, offset 0x37ae4
/*
 * Offset 0x37B14, from D:\driver2\game\C\DEBRIS.C (lines 3564..3647)
 * Stack frame base $sp, size 56
 */
void /*$ra*/ DisplayDebris(struct DEBRIS *debris /*$t2*/, char type /*$t3*/)
{ // line 1, offset 0x37b14
  int pos; // $a1
  int z; // stack offset -8
  struct SVECTOR v[4]; // stack offset -56
  struct TRI_POINT *tv; // $t1
  struct VECTOR debrisvec; // stack offset -24
  struct POLY_FT3 *poly; // $t0
  struct POLY_GT4 *poly1; // $t0
  { // line 43, offset 0x37d94
    unsigned long cbgr; // $v1
  } // line 54, offset 0x37e10
} // line 84, offset 0x38000
/*
 * Offset 0x38008, from D:\driver2\game\C\DEBRIS.C (lines 3659..3966)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ HandleDebris()
{ // line 2, offset 0x38008
  int count; // $s0
  int i; // $s3
  struct DEBRIS *lpDebris; // $s1
  struct SMOKE *smokeptr; // $s0
  struct VECTOR dummy; // stack offset -80
  struct LEAF *lpLeaf; // $s1
  int Height; // $v0
  int SinX; // $s2
  int CosX; // $v1
  struct VECTOR Drift; // stack offset -64
  { // line 193, offset 0x3841c
    int offshore; // $s1
    struct ROUTE_DATA routeData; // stack offset -48
  } // line 205, offset 0x384b4
  { // line 294, offset 0x386f0
    static int weather_level; // offset 0x168
  } // line 307, offset 0x38750
} // line 308, offset 0x3877c
/*
 * Offset 0x3877C, from D:\driver2\game\C\DEBRIS.C (lines 3983..4114)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DisplaySmoke(struct SMOKE *smoke /*$s0*/)
{ // line 1, offset 0x3877c
  struct POLY_FT4 *poly; // $t0
  struct VECTOR v; // stack offset -80
  struct SVECTOR smokemesh[4]; // stack offset -64
  int x; // $s2
  int negx; // $s1
  int z; // stack offset -32
  int smoke_z_offset; // $s3
  int tmode; // $a3
  int size; // $v0
  int centrex; // $a1
  int centrey; // $v1
  { // line 58, offset 0x38970
    char red; // $a0
    char green; // $a1
    char blue; // $v1
  } // line 63, offset 0x3899c
} // line 132, offset 0x38c98
/*
 * Offset 0x38CB4, from D:\driver2\game\C\DEBRIS.C (lines 4118..4140)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ add_haze(int top_col /*$a0*/, int bot_col /*$a1*/, short ot_pos /*$a2*/)
{ // line 1, offset 0x38cb4
  struct TILE *polys; // $a1
} // line 23, offset 0x38e00
/*
 * Offset 0x38E08, from D:\driver2\game\C\DEBRIS.C (lines 4208..4299)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawRainDrops()
{ // line 2, offset 0x38e08
  struct RAIN_TYPE *RainPtr; // $s0
  struct POLY_GT3 *poly; // $a3
  int Count; // $s2
  int z; // stack offset -48
  struct SVECTOR v[3]; // stack offset -88
  struct VECTOR drift; // stack offset -64
  int tpage; // $fp
  int clut; // $s7
  int col; // $s1
  { // line 51, offset 0x38fa4
    int notfirst; // $a1
  } // line 88, offset 0x39158
} // line 92, offset 0x3919c
/*
 * Offset 0x3919C, from D:\driver2\game\C\DEBRIS.C (lines 4413..4476)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ AddRainDrops()
{ // line 2, offset 0x3919c
  struct SVECTOR v; // stack offset -48
  struct RAIN_TYPE *RainPtr; // $a2
  int RainIndex; // $s0
  int RainNo; // $s1
  int first; // $s3
  static unsigned long rand; // offset 0x8
  { // line 40, offset 0x39388
    int depth; // $v0
  } // line 43, offset 0x393b0
  { // line 53, offset 0x393e4
    struct ROUTE_DATA routeData; // stack offset -40
  } // line 61, offset 0x39434
} // line 64, offset 0x39444
/*
 * Offset 0x39468, from D:\driver2\game\C\DEBRIS.C (lines 4489..4546)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ DisplaySplashes()
{ // line 2, offset 0x39468
  int SplashNo; // $s4
  int SplashFrac; // $v0
  struct VECTOR CamGnd; // stack offset -96
  struct VECTOR Gnd1; // stack offset -80
  struct VECTOR Gnd2; // stack offset -64
  struct VECTOR Position; // stack offset -48
  struct CVECTOR col; // stack offset -32
  static unsigned long rand; // offset 0x170
  int d1; // $a0
  int d2; // $a2
} // line 58, offset 0x397a0
/*
 * Offset 0x397C0, from D:\driver2\game\C\DEBRIS.C (lines 4550..4601)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DisplayLightReflections(struct VECTOR *v1 /*$s1*/, struct CVECTOR *col /*$s3*/, short size /*$a2*/, struct TEXTURE_DETAILS *texture /*$s2*/)
{ // line 1, offset 0x397c0
  struct SVECTOR vert[4]; // stack offset -80
  struct POLY_FT4 *poly; // $a1
  struct CVECTOR thiscol; // stack offset -48
  int z; // stack offset -40
  int tpage; // $s5
  int clut; // $s4
} // line 52, offset 0x39a30
/*
 * Offset 0x39A54, from D:\driver2\game\C\DEBRIS.C (lines 1686..1691)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AllocateDebris()
{
}
/*
 * Offset 0x39A90, from D:\driver2\game\C\DEBRIS.C (lines 1297..1301)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AllocateLeaf()
{
}
/*
 * Offset 0x39ACC, from D:\driver2\game\C\DEBRIS.C (lines 1719..1724)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AllocateSmoke()
{
}
/*
 * Offset 0x39B08, from D:\driver2\game\C\DEBRIS.C (lines 2200..2216)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ find_lamp_streak(int LampId /*$a0*/)
{ // line 1, offset 0x39b08
  int count; // $a1
} // line 17, offset 0x39b78
/*
 * Offset 0x39B78, from D:\driver2\game\C\DEBRIS.C (lines 4607..4630)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DoLightning()
{ // line 2, offset 0x39b78
} // line 24, offset 0x39c58
/*
 * Offset 0x39C68, from D:\driver2\game\C\DEBRIS.C (lines 2447..2451)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ FindCarLightFade(struct MATRIX *carToCamera /*$a0*/)
{ // line 2, offset 0x39c68
  int zz; // $v0
} // line 5, offset 0x39c90
/*
 * Offset 0x39C90, from D:\driver2\game\C\DEBRIS.C (lines 2428..2436)
 * Stack frame base $sp, size 8
 */
void /*$ra*/ InitFXPos(struct VECTOR *vec /*$a0*/, struct SVECTOR *svec /*$a1*/, struct _CAR_DATA *cp /*$a2*/)
{ // line 1, offset 0x39c90
  struct SVECTOR svectmp; // stack offset -8
} // line 9, offset 0x39d68
/*
 * Offset 0x39D68, from D:\driver2\game\C\DEBRIS.C (lines 1704..1705)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ReleaseDebris(short num /*$a0*/)
{
}
/*
 * Offset 0x39D8C, from D:\driver2\game\C\DEBRIS.C (lines 1313..1314)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ReleaseLeaf(short num /*$a0*/)
{
}
/*
 * Offset 0x39DB0, from D:\driver2\game\C\DEBRIS.C (lines 4190..4191)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ReleaseRainDrop(int RainIndex /*$a0*/)
{
}
/*
 * Offset 0x39DD4, from D:\driver2\game\C\DEBRIS.C (lines 1737..1738)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ReleaseSmoke(short num /*$a0*/)
{
}
/*
 * Offset 0x39DF8, from D:\driver2\game\C\DEBRIS.C (lines 4152..4162)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupRain()
{ // line 2, offset 0x39df8
} // line 11, offset 0x39e54
/*
 * Offset 0x39E54, from D:\driver2\game\C\DEBRIS.C (lines 1437..1480)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ SwirlLeaves(struct _CAR_DATA *cp /*$a0*/)
{ // line 1, offset 0x39e54
  int count; // $s2
  struct LEAF *lpLeaf; // $s0
  int XDiff; // $v0
  int ZDiff; // $a1
  struct VECTOR *CarPos; // $s1
  int WheelSpeed; // $a1
  { // line 38, offset 0x39f60
  } // line 40, offset 0x39f84
} // line 44, offset 0x39f90
/*
 * Offset 0x39FA8, from D:\driver2\game\C\DEBRIS.C (lines 4725..4741)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetDebrisColour(struct _CAR_DATA *cp /*$a0*/)
{ // line 1, offset 0x39fa8
  int car_model; // $v1
  int palette; // $a0
} // line 17, offset 0x3a000
/*
 * Offset 0x3A000, from D:\driver2\game\C\DEBRIS.C (lines 4651..4670)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DoWeather(int weather /*$a0*/)
{
}
/*
 * Offset 0x3A0BC, from D:\driver2\game\C\DEBRIS.C (lines 4635..4635)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitThunder()
{ // line 1, offset 0x3a0bc
} // line 1, offset 0x3a120
/*
 * Offset 0x3A120, from D:\driver2\game\C\DEBRIS.C (lines 4636..4636)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ RequestThunder()
{
}
/*
 * Offset 0x3A144, from D:\driver2\game\C\DEBRIS.C (lines 4638..4646)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DoThunder()
{ // line 2, offset 0x3a144
} // line 9, offset 0x3a224
/*
 * Offset 0x3A234, from D:\driver2\game\C\DEBRIS.C (lines 1886..1913)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ MoveSmashable_object()
{ // line 2, offset 0x3a234
  int count; // $a3
  struct DAMAGED_OBJECT *dam; // $a1
  { // line 10, offset 0x3a258
    int groundlevel; // $v0
  } // line 25, offset 0x3a2c0
} // line 28, offset 0x3a2d4
/*
 * Offset 0x3A2D4, from D:\driver2\game\C\DEBRIS.C (lines 4173..4177)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AllocateRainDrop()
{
}
Source file(s) D:\driver2\game\C\DENTING.C+D:\driver2\game\DENTING.C, object file obj\denting.OBJ overlay id <none>

// 64 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct DENTUVS {
  char u3; // size=0, offset=0
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct HUBCAP {
  int Present[4]; // size=16, offset=0
  struct VECTOR Offset[4]; // size=64, offset=16
  struct MATRIX Orientation; // size=32, offset=80
  struct MATRIX LocalOrientation; // size=32, offset=112
  struct VECTOR Position; // size=16, offset=144
  struct VECTOR Direction; // size=16, offset=160
  float Height; // size=0, offset=176
  int Duration; // size=0, offset=180
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 94 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct TEX_INFO TEX_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct DENTUVS DENTUVS;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct HUBCAP HUBCAP;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct UV UV;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct DB DB;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct MVERTEX SV5x5[5][5];

// 0 labels

// 11 external declarations
extern char *DentingFiles[4]; // offset 0x0009c2f4
extern int gDoShinyCars; // offset 0x000aa394
extern long gHubcapTime; // offset 0x000aac88
extern struct HUBCAP gHubcap; // offset 0x000c9400
extern struct DENTUVS gTempHDCarUVDump[20][255]; // offset 0x000c9fa8
extern struct DENTUVS gTempLDCarUVDump[20][134]; // offset 0x000cb398
extern struct SVECTOR gTempCarVertDump[20][132]; // offset 0x000c4180
extern unsigned char gCarDamageZoneVerts[5][6][50]; // offset 0x000c99b8
extern unsigned char gHDCarDamageZonePolys[5][6][70]; // offset 0x000c3948
extern unsigned char gHDCarDamageLevels[5][255]; // offset 0x000c94b8
extern struct VECTOR ShadowPos; // offset 0x000c9f98

// 9 functions
/*
 * Offset 0x3A310, from D:\driver2\game\C\DENTING.C (lines 288..427)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: s0 s1 s2 s3 s4
 */
void /*$ra*/ DentCar(struct _CAR_DATA *cp /*$t7*/)
{ // line 1, offset 0x3a310
  struct SVECTOR *VertPtr; // $t0
  int MaxDamage; // $s0
  unsigned char VertIndex; // $v0
  unsigned char PolyIndex; // $v0
  struct DENTUVS *dentptr; // $t1
  unsigned char *DamPtr; // $a2
  int model; // $t5
  int Poly; // $a1
  int Damage; // $v1
  int Zone; // $a3
  int VertNo; // $a2
  short *tempDamage; // $t1
  struct SVECTOR *DamVertPtr; // $a3
  struct SVECTOR *CleanVertPtr; // $a1
  struct MODEL *pCleanModel; // $t3
  { // line 133, offset 0x3a690
  } // line 135, offset 0x3a690
} // line 140, offset 0x3a6e4
/*
 * Offset 0x3A6E4, from D:\driver2\game\C\DENTING.C (lines 458..533)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ CreateDentableCar(struct _CAR_DATA *cp /*$t2*/)
{ // line 1, offset 0x3a6e4
  struct DENTUVS *dentptr; // $a3
  int Zone; // $v1
  int count; // $a2
  int model; // $t3
  { // line 20, offset 0x3a710
    struct SVECTOR *dst; // $a2
    struct SVECTOR *src; // $a3
    int count; // $t0
    { // line 26, offset 0x3a748
      int x; // $v0
      int y; // $v1
      int z; // $a0
    } // line 26, offset 0x3a748
  } // line 35, offset 0x3a770
} // line 76, offset 0x3a874
/*
 * Offset 0x3A874, from D:\driver2\game\C\DENTING.C (lines 549..572)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitHubcap()
{ // line 3, offset 0x3a874
} // line 24, offset 0x3a8f8
/*
 * Offset 0x3A8F8, from D:\driver2\game\C\DENTING.C (lines 600..693)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ LoseHubcap(int Hubcap /*$s3*/, int Velocity /*$a1*/)
{ // line 1, offset 0x3a8f8
  struct _CAR_DATA *car_data_pt; // $s1
  struct SVECTOR InitialLocalAngle; // stack offset -64
  { // line 71, offset 0x3aa84
    struct VECTOR R; // stack offset -56
    struct VECTOR VW; // stack offset -40
    long AY; // $t0
  } // line 81, offset 0x3aae0
} // line 94, offset 0x3ab2c
/*
 * Offset 0x3AB4C, from D:\driver2\game\C\DENTING.C (lines 706..804)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ MoveHubcap()
{ // line 2, offset 0x3ab4c
  struct _CAR_DATA *car_data_pt; // $a1
  struct VECTOR Position; // stack offset -80
  struct MATRIX Orientation; // stack offset -64
  struct CVECTOR col; // stack offset -32
  int VelocityMagnitude; // $s0
  int CurrentMapHeight; // $a0
  int savecombo; // $s0
  { // line 25, offset 0x3abf8
  } // line 28, offset 0x3ac18
  { // line 32, offset 0x3ac28
  } // line 35, offset 0x3ac58
  { // line 56, offset 0x3aca4
  } // line 74, offset 0x3ad24
} // line 99, offset 0x3ae44
/*
 * Offset 0x3AE60, from D:\driver2\game\C\DENTING.C (lines 838..867)
 * Stack frame base $sp, size 16
 * Saved registers at offset -4: s0 s1 s2 s3
 */
void /*$ra*/ ProcessDentLump(char *lump_ptr /*$t2*/, int lump_size /*$a1*/)
{ // line 1, offset 0x3ae60
  int i; // $a3
  int model; // $a0
  int offset; // $a0
} // line 30, offset 0x3b1c0
/*
 * Offset 0x3B1C0, from D:\driver2\game\C\DENTING.C (lines 267..271)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitialiseDenting()
{
}
/*
 * Offset 0x3B1F0, from D:\driver2\game\C\DENTING.C (lines 815..829)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ LoadDenting(int level /*$a0*/)
{ // line 2, offset 0x3b1f0
} // line 15, offset 0x3b240
/*
 * Offset 0x3B240, from D:\driver2\game\C\DENTING.C (lines 877..910)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupSpecDenting(char *loadbuffer /*$a0*/)
{ // line 1, offset 0x3b240
  char *from; // $a0
  char *to; // $v1
  char *limit; // $a1
} // line 34, offset 0x3b2e4
Source file(s) D:\driver2\game\C\DIRECTOR.C+D:\driver2\game\DIRECTOR.C, object file obj\director.obj overlay id <none>

// 76 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_G4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char r3; // size=0, offset=28
  unsigned char g3; // size=0, offset=29
  unsigned char b3; // size=0, offset=30
  unsigned char pad3; // size=0, offset=31
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
};
struct LINE_F2 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct PLAYBACKCAMERA {
  struct VECTOR_NOPAD position; // size=12, offset=0
  struct SVECTOR angle; // size=8, offset=12
  int FrameCnt; // size=0, offset=20
  short CameraPosvy; // size=0, offset=24
  short gCameraDistance; // size=0, offset=26
  short gCameraMaxDistance; // size=0, offset=28
  short gCameraAngle; // size=0, offset=30
  char cameraview; // size=0, offset=32
  char next; // size=0, offset=33
  char prev; // size=0, offset=34
  char idx; // size=0, offset=35
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct ROUTE_DATA {
  short type; // size=0, offset=0
  short height; // size=0, offset=2
  short objectAngle; // size=0, offset=4
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
struct REPLAY_ICON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  struct TEXTURE_DETAILS *texture; // size=14, offset=4
  char *TextPtr; // size=0, offset=8
  short tx; // size=0, offset=12
  short ty; // size=0, offset=14
};

// 101 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_G4 POLY_G4;
typedef struct LINE_F2 LINE_F2;
typedef struct SPRT SPRT;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct PLAYBACKCAMERA PLAYBACKCAMERA;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct ROUTE_DATA ROUTE_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct _EVENT EVENT;
typedef struct REPLAY_ICON REPLAY_ICON;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 36 external declarations
static struct REPLAY_ICON replay_icons[23]; // offset 0x0009c304
static char menu0[2]; // offset 0x0009c474
static char menu1[10]; // offset 0x0009c478
static char menu2[5]; // offset 0x0009c484
static char menu3[2]; // offset 0x0009c48c
static char menu4[2]; // offset 0x0009c490
static char menu5[5]; // offset 0x0009c494
static char menu6[7]; // offset 0x0009c49c
extern int MIN_TRIPOD_CAMERA_HEIGHT; // offset 0x000aa3e4
extern int EditMode; // offset 0x000aa3e8
extern int SetFastForward; // offset 0x000aa3ec
extern struct PLAYBACKCAMERA *NextChange; // offset 0x000aa3f0
extern struct PLAYBACKCAMERA *ThisChange; // offset 0x000aa3f4
extern struct PLAYBACKCAMERA *LastChange; // offset 0x000aa3f8
extern int editing_existing_camera; // offset 0x000aa3fc
extern int FastForward; // offset 0x000aa400
extern int ClearCameras; // offset 0x000aa404
extern int attract_number; // offset 0x000aa408
extern int FastForwardCameraCnt; // offset 0x000aa40c
extern int time_taken; // offset 0x000aaca0
extern int quick_replay; // offset 0x000aacb8
extern int AutoDirect; // offset 0x000aaccc
extern int ReplayContinue; // offset 0x000aacc4
extern struct PLAYBACKCAMERA *PlaybackCamera; // offset 0x000aacc0
extern int frame_advance_count; // offset 0x000aacc8
extern int menuactive; // offset 0x000aaca4
extern int MenuOffset; // offset 0x000aac9c
extern char tracking_car; // offset 0x000aacb4
extern short PlayerWaypoints; // offset 0x000aaca8
extern int PlayMode; // offset 0x000aacbc
extern int CursorX; // offset 0x000aacac
extern int CursorY; // offset 0x000aacb0
extern char CameraChanged; // offset 0x000aacb5
static int cammapht2; // offset 0x000aac94
static int mapstuff; // offset 0x000aac98
static char GreyIcons[24]; // offset 0x000cbe10

// 24 functions
/*
 * Offset 0x3B2E4, from D:\driver2\game\C\DIRECTOR.C (lines 513..571)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ EditCamera(int CameraCnt /*$a0*/)
{ // line 2, offset 0x3b2e4
  int count; // $t0
  { // line 30, offset 0x3b414
    int prev; // $a2
    int next; // $v1
  } // line 57, offset 0x3b51c
} // line 59, offset 0x3b548
/*
 * Offset 0x3B548, from D:\driver2\game\C\DIRECTOR.C (lines 574..631)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ RecordCamera(int CameraCnt /*$s0*/)
{ // line 1, offset 0x3b548
  struct PLAYBACKCAMERA *TempChange; // $a1
} // line 58, offset 0x3b794
/*
 * Offset 0x3B794, from D:\driver2\game\C\DIRECTOR.C (lines 658..706)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ CheckCameraChange(int CameraCnt /*$s0*/)
{
}
/*
 * Offset 0x3B8C8, from D:\driver2\game\C\DIRECTOR.C (lines 731..791)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ IsMovingCamera(struct PLAYBACKCAMERA *lastcam /*$t3*/, struct PLAYBACKCAMERA *nextcam /*$t0*/, int cameracnt /*$a2*/)
{ // line 1, offset 0x3b8c8
  struct PLAYBACKCAMERA cam; // stack offset -56
  long xdist; // $t5
  long ydist; // $t6
  long zdist; // $t4
  long xangle; // $a3
  long yangle; // $t1
  long zangle; // $t2
  int s; // $a0
  int e; // $v1
  int f; // $t8
  int t; // $a2
  int nextcview; // $a0
} // line 61, offset 0x3bba8
/*
 * Offset 0x3BBA8, from D:\driver2\game\C\DIRECTOR.C (lines 794..926)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 fp
 */
void /*$ra*/ CameraBar(int CameraCnt /*stack 0*/)
{ // line 1, offset 0x3bba8
  struct POLY_G4 *camera; // $a2
  struct LINE_F2 *bar; // $t2
  int x; // $a2
  int min_x; // $t1
  int max_x; // $t0
  int min_y; // $s3
  char red; // $s0
  char green; // $s4
  char blue; // $fp
  int bar_x; // $s1
  int first; // stack offset -48
  int last; // $s7
  unsigned long idx; // $t9
} // line 133, offset 0x3c184
/*
 * Offset 0x3C1B0, from D:\driver2\game\C\DIRECTOR.C (lines 966..1095)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ ShowIcons(char *menu /*$s3*/, int selected /*stack 4*/, int x_offset /*$s7*/)
{ // line 1, offset 0x3c1b0
  static int FlashCnt; // offset 0x0
  struct REPLAY_ICON *IconPtr; // $s0
  struct SPRT *icon; // $a2
  int count; // $s6
  { // line 61, offset 0x3c340
    struct TEXTURE_DETAILS *Icon_texture; // $s1
    int min_x; // $v1
    int min_y; // $a0
    { // line 69, offset 0x3c364
    } // line 71, offset 0x3c384
    { // line 82, offset 0x3c3e4
      int ramp; // $a0
    } // line 93, offset 0x3c448
  } // line 100, offset 0x3c470
} // line 130, offset 0x3c5bc
/*
 * Offset 0x3C5BC, from D:\driver2\game\C\DIRECTOR.C (lines 1135..1183)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ ShowReplayMenu()
{ // line 2, offset 0x3c5bc
  { // line 4, offset 0x3c5e4
  } // line 8, offset 0x3c608
  { // line 12, offset 0x3c620
  } // line 16, offset 0x3c63c
  { // line 43, offset 0x3c750
    int strobe; // $v0
  } // line 47, offset 0x3c798
} // line 49, offset 0x3c7a8
/*
 * Offset 0x3C7A8, from D:\driver2\game\C\DIRECTOR.C (lines 1186..1987)
 * Stack frame base $sp, size 120
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ ControlReplay()
{ // line 2, offset 0x3c7a8
  static int debounce; // offset 0x70
  static int first_time; // offset 0x74
  int move; // $s0
  { // line 85, offset 0x3ca00
    int speed; // $s2
    { // line 95, offset 0x3ca68
    } // line 99, offset 0x3ca8c
    { // line 102, offset 0x3caa4
      int prev; // $v1
    } // line 105, offset 0x3cadc
    { // line 141, offset 0x3cc34
      struct ROUTE_DATA routeData; // stack offset -96
      int road_height; // $s1
    } // line 152, offset 0x3ccb0
    { // line 161, offset 0x3ccbc
      struct VECTOR old_camera; // stack offset -88
      int x; // $s5
      int z; // $s4
      int d; // $s3
      int angle; // $s1
      char cameraCar; // $a0
      int dx; // $s1
      int dz; // $s0
      struct VECTOR basePos; // stack offset -72
      struct VECTOR tmpPos; // stack offset -56
      { // line 186, offset 0x3cd38
        struct _EVENT *event; // $a1
      } // line 190, offset 0x3cd68
      { // line 224, offset 0x3ce64
        int temp; // $v0
      } // line 228, offset 0x3ce70
      { // line 245, offset 0x3cf28
      } // line 264, offset 0x3cf74
      { // line 268, offset 0x3cf74
        struct ROUTE_DATA routeData; // stack offset -40
        int road_height; // $s1
      } // line 289, offset 0x3d064
    } // line 291, offset 0x3d088
  } // line 320, offset 0x3d1c8
  { // line 374, offset 0x3d50c
    { // line 496, offset 0x3d808
    } // line 496, offset 0x3d808
    { // line 605, offset 0x3da6c
      int prev1; // $a1
    } // line 615, offset 0x3daac
  } // line 789, offset 0x3de0c
} // line 802, offset 0x3de38
/*
 * Offset 0x3DE60, from D:\driver2\game\C\DIRECTOR.C (lines 1990..2105)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DoAutoDirect()
{ // line 2, offset 0x3de60
  struct VECTOR pos; // stack offset -40
  { // line 8, offset 0x3defc
    int new_view; // $v1
    { // line 25, offset 0x3df94
    } // line 35, offset 0x3df9c
    { // line 58, offset 0x3e058
      int tmp; // $v0
    } // line 67, offset 0x3e0d0
    { // line 69, offset 0x3e0d0
      int tmp; // $v0
    } // line 75, offset 0x3e0f4
  } // line 105, offset 0x3e2c4
} // line 116, offset 0x3e328
/*
 * Offset 0x3E328, from D:\driver2\game\C\DIRECTOR.C (lines 2108..2183)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ SelectCameraCar(int current /*$t1*/)
{ // line 1, offset 0x3e328
  int count; // $a2
  { // line 15, offset 0x3e3a0
    struct _EVENT *event; // $a0
    struct _CAR_DATA *car; // $a3
    struct XZPAIR pos; // stack offset -16
    { // line 60, offset 0x3e484
      int dist; // $v0
      int dx; // $a1
      int dz; // $a0
    } // line 72, offset 0x3e50c
  } // line 73, offset 0x3e50c
} // line 76, offset 0x3e53c
/*
 * Offset 0x3E53C, from D:\driver2\game\C\DIRECTOR.C (lines 2186..2259)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ InvalidCamera(int car_num /*$a2*/)
{ // line 1, offset 0x3e53c
  { // line 7, offset 0x3e568
    char invalidCamera; // $a3
    { // line 14, offset 0x3e5d0
      char numEventModels; // $a0
      struct _EVENT *event; // $v1
      struct XZPAIR pos; // stack offset -24
      { // line 22, offset 0x3e628
        int dist; // $v0
        int dx; // $v1
        int dz; // $a0
      } // line 38, offset 0x3e6c0
    } // line 39, offset 0x3e6c0
  } // line 50, offset 0x3e6f8
} // line 74, offset 0x3e79c
/*
 * Offset 0x3E79C, from D:\driver2\game\C\DIRECTOR.C (lines 445..466)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitDirectorVariables()
{ // line 2, offset 0x3e79c
  int count; // $a0
} // line 22, offset 0x3e808
/*
 * Offset 0x3E808, from D:\driver2\game\C\DIRECTOR.C (lines 476..490)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DeleteCurrentCamera(int CameraCnt /*$a0*/)
{ // line 2, offset 0x3e808
  int prev; // $a1
  int next; // $a0
} // line 15, offset 0x3e88c
/*
 * Offset 0x3E89C, from D:\driver2\game\C\DIRECTOR.C (lines 493..507)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ setCamera(struct PLAYBACKCAMERA *Change /*$a0*/)
{
}
/*
 * Offset 0x3E94C, from D:\driver2\game\C\DIRECTOR.C (lines 634..654)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ FindNextChange(int CameraCnt /*$a0*/)
{ // line 1, offset 0x3e94c
  int count; // $a3
  int nextframe; // $a2
  int found; // $t0
  struct PLAYBACKCAMERA *RestoreChange; // $t1
} // line 21, offset 0x3e9b8
/*
 * Offset 0x3E9B8, from D:\driver2\game\C\DIRECTOR.C (lines 929..940)
 * Stack frame base $sp, size 0
 */
struct PLAYBACKCAMERA * /*$ra*/ FindFreeCamera()
{ // line 2, offset 0x3e9b8
  int count; // $a1
} // line 12, offset 0x3e9f8
/*
 * Offset 0x3E9F8, from D:\driver2\game\C\DIRECTOR.C (lines 943..947)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ deleteCamera(int count /*$a0*/)
{
}
/*
 * Offset 0x3EA40, from D:\driver2\game\C\DIRECTOR.C (lines 951..963)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DeleteAllCameras()
{ // line 2, offset 0x3ea40
  struct PLAYBACKCAMERA nextcamera; // stack offset -48
  int count; // $s0
} // line 13, offset 0x3eaa4
/*
 * Offset 0x3EAA4, from D:\driver2\game\C\DIRECTOR.C (lines 1098..1132)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ ShowReplayOptions()
{ // line 2, offset 0x3eaa4
  static int toggle_icons; // offset 0x6c
} // line 35, offset 0x3eae0
/*
 * Offset 0x3EAF0, from D:\driver2\game\C\DIRECTOR.C (lines 2263..2274)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ NoMoreCamerasErrorMessage()
{ // line 2, offset 0x3eaf0
  { // line 4, offset 0x3eb08
    int strobe; // $v0
  } // line 9, offset 0x3eb5c
} // line 12, offset 0x3eb6c
/*
 * Offset 0x3EB6C, from D:\driver2\game\C\DIRECTOR.C (lines 2279..2286)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ FirstCamera()
{ // line 2, offset 0x3eb6c
} // line 8, offset 0x3eb9c
/*
 * Offset 0x3EB9C, from D:\driver2\game\C\DIRECTOR.C (lines 2289..2295)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ dist(struct VECTOR *pos1 /*$a0*/, struct VECTOR *pos2 /*$a1*/)
{ // line 1, offset 0x3eb9c
  int dx; // $v0
  int dz; // $a0
} // line 7, offset 0x3ec0c
/*
 * Offset 0x3EC0C, from D:\driver2\game\C\DIRECTOR.C (lines 710..724)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetPlaybackCamera(struct PLAYBACKCAMERA *camera /*$a0*/)
{
}
/*
 * Offset 0x3ECC4, from D:\driver2\game\C\DIRECTOR.C (lines 2303..2330)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetCameraReturnedFromCutscene(int CameraCnt /*$s0*/)
{ // line 1, offset 0x3ecc4
  struct PLAYBACKCAMERA *next; // $a1
  int count; // $a2
} // line 28, offset 0x3ed7c
Source file(s) D:\driver2\game\C\DRAW.C+D:\driver2\game\DRAW.C, object file obj\draw.OBJ overlay id <none>

// 79 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct TILE {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short w; // size=0, offset=12
  short h; // size=0, offset=14
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct POLYFT4LIT {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char spare; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO uv3; // size=2, offset=14
  struct RGB color; // size=4, offset=16
};
struct _pct {
  struct DB *current; // size=128, offset=0
  unsigned short *ptexture_pages[128]; // size=4, offset=4
  unsigned short *ptexture_cluts[128][32]; // size=4, offset=8
  long f4colourTable[32]; // size=128, offset=12
  int *polySizes; // size=0, offset=140
  char *primptr; // size=0, offset=144
  unsigned long *ot; // size=0, offset=148
  unsigned long clut; // size=0, offset=152
  unsigned long tpage; // size=0, offset=156
  unsigned long colour; // size=0, offset=160
  int flags; // size=0, offset=164
  struct SVECTOR *verts; // size=8, offset=168
  unsigned long lastTexInfo; // size=0, offset=172
  int scribble[8]; // size=32, offset=176
  int model; // size=0, offset=208
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct MATRIX2 {
  short m[3][3]; // size=18, offset=0
  short computed; // size=0, offset=18
  char null[12]; // size=12, offset=20
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct CELL_DATA {
  unsigned short num; // size=0, offset=0
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct Spool {
  unsigned short offset; // size=0, offset=0
  unsigned char connected_areas[2]; // size=2, offset=2
  unsigned char pvs_size; // size=0, offset=4
  unsigned char cell_data_size[3]; // size=3, offset=5
  unsigned char super_region; // size=0, offset=8
  unsigned char num_connected_areas; // size=0, offset=9
  unsigned char roadm_size; // size=0, offset=10
  unsigned char roadh_size; // size=0, offset=11
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct CELL_ITERATOR {
  struct CELL_DATA *pcd; // size=2, offset=0
  struct PACKED_CELL_OBJECT *ppco; // size=8, offset=4
  struct XZPAIR near; // size=8, offset=8
  int use_computed; // size=0, offset=16
};
struct PL_POLYFT4 {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char th; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO uv3; // size=2, offset=14
};

// 106 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT4 POLY_FT4;
typedef struct TILE TILE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct POLYFT4LIT POLYFT4LIT;
typedef struct _pct plotContext;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct MATRIX2 MATRIX2;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct CELL_DATA CELL_DATA;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct TEX_INFO TEX_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct DB DB;
typedef struct UV UV;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct Spool Spool;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct CELL_ITERATOR CELL_ITERATOR;
typedef struct PL_POLYFT4 PL_POLYFT4;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef struct MVERTEX SV5x5[5][5];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef unsigned int u32;

// 0 labels

// 30 external declarations
extern struct VECTOR tunnel_dim[12]; // offset 0x0009c4a4
extern unsigned int farClip2Player; // offset 0x000aa41c
extern int sprite_shadow; // offset 0x000aa420
extern char TransparentObject; // offset 0x000aa424
extern int lightning; // offset 0x000aa42c
extern int groundDebrisIndex; // offset 0x000aa428
static int alleycount; // offset 0x000aa430
static int treecount; // offset 0x000aa434
extern int setupYet; // offset 0x000aa438
extern char *visiblelist; // offset 0x000aa43c
extern int tcRoof; // offset 0x000aa440
extern int tcWall; // offset 0x000aa444
extern int tcRoad; // offset 0x000aa448
extern unsigned long *transparent_buffer; // offset 0x000aacdc
extern int FrAng; // offset 0x000aace8
extern int numSpritesFound; // offset 0x000aacd8
extern int buildingsFound; // offset 0x000aace4
extern struct MATRIX *current_matrix; // offset 0x000aacd4
extern struct MATRIX *current_inv_matrix; // offset 0x000aace0
extern struct VECTOR *current_offset; // offset 0x000aacec
extern struct MATRIX2 matrixtable[64]; // offset 0x000cc018
extern struct MATRIX2 CompoundMatrix[64]; // offset 0x000cd168
extern struct CELL_OBJECT ground_debris[16]; // offset 0x000cd058
extern struct VECTOR current_camera_position; // offset 0x000cd158
extern unsigned long anim_obj_buffer[20]; // offset 0x000cbe78
extern unsigned long planeColours[8]; // offset 0x000cc818
extern struct MATRIX frustrum_matrix; // offset 0x000cbff8
extern unsigned long model_object_ptrs[512]; // offset 0x000cc858
extern struct PACKED_CELL_OBJECT *spriteList[75]; // offset 0x000cbec8
extern struct MATRIX shadowMatrix; // offset 0x000cc838

// 18 functions
/*
 * Offset 0x3ED7C, from D:\driver2\game\C\DRAW.C (lines 651..669)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ addSubdivSpriteShadow(struct POLYFT4LIT *src /*$t3*/, struct SVECTOR *verts /*$t2*/, int z /*$a2*/)
{ // line 1, offset 0x3ed7c
  unsigned long word0; // $a0
  unsigned long vidx; // $t1
  struct _pct *pc; // $t0
  int w; // $s0
} // line 19, offset 0x3ef64
/*
 * Offset 0x3EF64, from D:\driver2\game\C\DRAW.C (lines 675..808)
 * Stack frame base $sp, size 96
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawSprites(int numFound /*$a2*/)
{ // line 1, offset 0x3ef64
  struct XZPAIR near; // stack offset -80
  struct PACKED_CELL_OBJECT **list; // stack offset -64
  unsigned long spriteColour; // stack offset -60
  int numShadows; // stack offset -56
  { // line 1, offset 0x3ef64
    struct SVECTOR result; // stack offset -72
    unsigned char lightLevel; // $a1
  } // line 41, offset 0x3f0fc
  { // line 41, offset 0x3f0fc
    int i; // $t0
  } // line 54, offset 0x3f174
  { // line 68, offset 0x3f1f0
    struct PACKED_CELL_OBJECT *ppco; // $fp
    struct MODEL *model; // $s4
    int z; // stack offset -52
    int yang; // $a0
    { // line 95, offset 0x3f2a8
    } // line 95, offset 0x3f2a8
    { // line 101, offset 0x3f2f0
      struct POLYFT4LIT *src; // $s0
      struct SVECTOR *verts; // $s3
      int i; // $s1
      { // line 106, offset 0x3f338
        unsigned long vidx; // $a3
      } // line 107, offset 0x3f338
    } // line 119, offset 0x3f49c
  } // line 132, offset 0x3f59c
} // line 134, offset 0x3f5f0
/*
 * Offset 0x3F5F0, from D:\driver2\game\C\DRAW.C (lines 813..852)
 * Stack frame base $sp, size 0
 */
struct PACKED_CELL_OBJECT * /*$ra*/ GetNextPackedCop(struct CELL_ITERATOR *pci /*$a0*/)
{ // line 1, offset 0x3f5f0
  struct PACKED_CELL_OBJECT *ppco; // $a3
  unsigned short num; // $a1
} // line 40, offset 0x3f6b0
/*
 * Offset 0x3F6B0, from D:\driver2\game\C\DRAW.C (lines 883..1122)
 * Stack frame base $sp, size 200
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawMapPSX(int *comp_val /*$t1*/)
{ // line 1, offset 0x3f6b0
  struct CELL_ITERATOR ci; // stack offset -184
  struct PACKED_CELL_OBJECT *ppco; // $s0
  int i; // $s1
  int dir; // $s7
  int cellxpos; // $a0
  int cellzpos; // $a1
  int hloop; // $s4
  int vloop; // $s5
  int camx; // stack offset -112
  int camz; // stack offset -108
  char *PVS_ptr; // stack offset -104
  int tiles_found; // stack offset -100
  int other_models_found; // stack offset -96
  int anim_objs; // $s6
  struct MATRIX mRotStore; // stack offset -160
  int rightcos; // stack offset -92
  int rightsin; // stack offset -88
  int leftcos; // stack offset -84
  int leftsin; // stack offset -80
  int backcos; // stack offset -76
  int backsin; // stack offset -72
  int rightPlane; // stack offset -68
  int leftPlane; // stack offset -64
  int backPlane; // $fp
  unsigned int farClipLimit; // stack offset -60
  { // line 84, offset 0x3f964
    struct MODEL *model; // $s2
    { // line 92, offset 0x3f9b4
      int model_shape_flags; // $s1
      { // line 103, offset 0x3fa10
        struct CELL_OBJECT *cop; // $a2
        { // line 1, offset 0x3fa10
          struct PACKED_CELL_OBJECT *ppco; // $s0
          { // line 1, offset 0x3fa10
            struct CELL_OBJECT *pco; // $a1
          } // line 1, offset 0x3fab8
        } // line 1, offset 0x3fab8
      } // line 105, offset 0x3fac4
      { // line 110, offset 0x3faf4
        struct CELL_OBJECT *cop; // $a2
        { // line 1, offset 0x3faf4
          struct PACKED_CELL_OBJECT *ppco; // $s0
          { // line 1, offset 0x3faf4
            struct CELL_OBJECT *pco; // $a1
          } // line 1, offset 0x3fb9c
        } // line 1, offset 0x3fb9c
      } // line 111, offset 0x3fb9c
      { // line 119, offset 0x3fbe8
        int yang; // $a1
      } // line 127, offset 0x3fcd0
      { // line 135, offset 0x3fd0c
        struct CELL_OBJECT *cop; // $a2
        { // line 1, offset 0x3fd0c
          struct PACKED_CELL_OBJECT *ppco; // $s0
          { // line 1, offset 0x3fd0c
            struct CELL_OBJECT *pco; // $a1
          } // line 1, offset 0x3fdb4
        } // line 1, offset 0x3fdb4
      } // line 138, offset 0x3fe00
      { // line 149, offset 0x3fe34
        struct CELL_OBJECT *cop; // $a2
        { // line 1, offset 0x3fe34
          struct PACKED_CELL_OBJECT *ppco; // $s0
          { // line 1, offset 0x3fe34
            struct CELL_OBJECT *pco; // $a1
          } // line 1, offset 0x3fedc
        } // line 1, offset 0x3fedc
      } // line 159, offset 0x3ff34
    } // line 162, offset 0x3ff34
  } // line 163, offset 0x3ff34
  { // line 188, offset 0x400cc
  } // line 189, offset 0x400d4
  { // line 198, offset 0x400e4
  } // line 200, offset 0x4010c
  { // line 206, offset 0x40138
    struct VECTOR newpos; // stack offset -128
    struct CELL_OBJECT *cop; // $s0
  } // line 207, offset 0x40138
} // line 240, offset 0x40218
/*
 * Offset 0x40218, from D:\driver2\game\C\DRAW.C (lines 1125..1158)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupPlaneColours(unsigned long ambient /*$a3*/)
{ // line 1, offset 0x40218
  { // line 15, offset 0x402b4
    unsigned long r; // $t4
    unsigned long g; // $t2
    unsigned long b; // $a0
  } // line 15, offset 0x402b4
} // line 34, offset 0x40408
/*
 * Offset 0x40408, from D:\driver2\game\C\DRAW.C (lines 1162..1199)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ SetupDrawMapPSX()
{ // line 3, offset 0x40408
  { // line 4, offset 0x40468
    int region_x1; // $t0
    int region_z1; // $a0
    int current_barrel_region_x1; // $v0
    int current_barrel_region_z1; // $a0
  } // line 16, offset 0x4048c
  { // line 16, offset 0x4048c
    int theta; // $s2
  } // line 34, offset 0x40500
} // line 38, offset 0x40534
/*
 * Offset 0x40534, from D:\driver2\game\C\DRAW.C (lines 1209..1214)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ InitFrustrumMatrix()
{
}
/*
 * Offset 0x40608, from D:\driver2\game\C\DRAW.C (lines 1425..1477)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ProcessMapLump(char *lump_ptr /*$v0*/, int lump_size /*$a1*/)
{ // line 1, offset 0x40608
  char *cellptr; // $s0
  int cell_size; // $a3
  int region_size; // $t0
} // line 53, offset 0x407d8
/*
 * Offset 0x407D8, from D:\driver2\game\C\DRAW.C (lines 1711..1823)
 * Stack frame base $sp, size 128
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ DrawAllTheCars(int view /*$s6*/)
{ // line 1, offset 0x407d8
  int loop; // $s0
  int x; // $s2
  int z; // $s1
  int xd; // $a0
  int zd; // $v1
  struct _CAR_DATA *cars_to_draw[20]; // stack offset -112
  int num_cars_to_draw; // $s4
  static int car_distance[20]; // offset 0x0
  static int temp; // offset 0x0
  { // line 1, offset 0x407d8
    struct _CAR_DATA *lcp; // $s0
    { // line 27, offset 0x40860
      int dist; // $v0
    } // line 37, offset 0x408e0
  } // line 40, offset 0x408f0
  { // line 46, offset 0x408f8
    int i; // $a0
    { // line 51, offset 0x40920
      struct _CAR_DATA *car; // $t4
      int dist; // $t0
      int j; // $a3
    } // line 60, offset 0x409a0
  } // line 63, offset 0x409c0
  { // line 79, offset 0x409e4
    int spacefree; // $a1
  } // line 87, offset 0x40a2c
} // line 113, offset 0x40a68
/*
 * Offset 0x40A90, from D:\driver2\game\C\DRAW.C (lines 1857..2039)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ PlotBuildingModelSubdivNxN(struct MODEL *model /*$t0*/, int rot /*stack 4*/, struct _pct *pc /*$s2*/, int n /*stack 12*/)
{ // line 1, offset 0x40a90
  struct SVECTOR *verts; // $s4
  struct PL_POLYFT4 *polys; // $s1
  int i; // $s7
  int asdf; // $fp
  { // line 19, offset 0x40b40
    unsigned long word0; // $s0
    { // line 29, offset 0x40b9c
      int Z; // stack offset -48
      unsigned int vidx; // $s3
      { // line 39, offset 0x40bd0
        unsigned long th; // $v1
      } // line 45, offset 0x40c10
      { // line 83, offset 0x40e30
        int diff; // $a1
        int min; // $a2
        { // line 88, offset 0x40e30
          int max; // $v1
        } // line 92, offset 0x40ea4
        { // line 113, offset 0x40f10
          int w; // $s0
        } // line 116, offset 0x40f3c
        { // line 126, offset 0x41060
          struct POLY_FT4 *prims; // $t2
          int uv0; // $v1
          int uv1; // $a2
          int uv2; // $t3
          int uv3; // $t1
          { // line 137, offset 0x410a8
            unsigned int r; // $a2
          } // line 137, offset 0x410a8
          { // line 137, offset 0x410a8
            int r2; // $v1
          } // line 137, offset 0x410a8
        } // line 162, offset 0x41140
      } // line 164, offset 0x41140
    } // line 169, offset 0x41158
  } // line 176, offset 0x41178
} // line 183, offset 0x411f4
/*
 * Offset 0x411F4, from D:\driver2\game\C\DRAW.C (lines 2053..2178)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ DrawAllBuildings(unsigned long *objects /*$t3*/, int num_buildings /*$s5*/, struct DB *disp /*$a2*/)
{ // line 1, offset 0x411f4
  int i; // $s3
  int model_number; // $v0
  int prev_mat; // $s4
  struct MODEL *model; // $a0
  struct CELL_OBJECT *building; // $s0
  { // line 38, offset 0x4132c
    int spacefree; // $a0
    { // line 81, offset 0x4135c
    } // line 82, offset 0x41364
    { // line 85, offset 0x41364
      int zBias; // $v0
      unsigned long *savedOT; // $s1
    } // line 97, offset 0x41398
  } // line 97, offset 0x41398
} // line 126, offset 0x4143c
/*
 * Offset 0x4143C, from D:\driver2\game\C\DRAW.C (lines 2181..2223)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ RenderModel(struct MODEL *model /*$s2*/, struct MATRIX *matrix /*$a1*/, struct VECTOR *pos /*$a2*/, int zBias /*$s0*/, int flags /*stack 16*/, int flags /*$v1*/)
{ // line 1, offset 0x4143c
  int i; // $t0
  unsigned long *savedOT; // $s1
  { // line 10, offset 0x41468
    struct MATRIX comb; // stack offset -48
  } // line 15, offset 0x41498
  { // line 29, offset 0x41538
    int spacefree; // $a0
  } // line 41, offset 0x415c0
} // line 43, offset 0x415e4
/*
 * Offset 0x415E4, from D:\driver2\game\C\DRAW.C (lines 2267..2285)
 * Stack frame base $sp, size 16
 */
unsigned long /*$ra*/ normalIndex(struct SVECTOR *verts /*$a0*/, unsigned int vidx /*$a1*/)
{ // line 1, offset 0x415e4
  int th23; // $a0
  int nx; // $t4
  int ny; // $v1
  int nz; // $a2
  struct SVECTOR p; // stack offset -16
  struct SVECTOR q; // stack offset -8
  { // line 1, offset 0x415e4
    int x; // $a1
    int y; // $a0
  } // line 8, offset 0x41724
} // line 19, offset 0x417a4
/*
 * Offset 0x417A4, from D:\driver2\game\C\DRAW.C (lines 1219..1220)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetFrustrumMatrix()
{
}
/*
 * Offset 0x417DC, from D:\driver2\game\C\DRAW.C (lines 1224..1225)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ Set_Inv_CameraMatrix()
{
}
/*
 * Offset 0x41814, from D:\driver2\game\C\DRAW.C (lines 1324..1340)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ CalcObjectRotationMatrices()
{ // line 2, offset 0x41814
  int i; // $s1
  int j; // $a0
  struct SVECTOR ang; // stack offset -56
  struct MATRIX mat; // stack offset -48
} // line 17, offset 0x418bc
/*
 * Offset 0x418BC, from D:\driver2\game\C\DRAW.C (lines 1344..1345)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PlotMDL_less_than_128(struct MODEL *model /*$a0*/)
{
}
/*
 * Offset 0x418E8, from D:\driver2\game\C\DRAW.C (lines 854..869)
 * Stack frame base $sp, size 0
 */
struct CELL_OBJECT * /*$ra*/ UnpackCellObject(struct PACKED_CELL_OBJECT *ppco /*$a3*/, struct XZPAIR *near /*$t0*/)
{ // line 1, offset 0x418e8
  struct CELL_OBJECT *pco; // $a2
} // line 16, offset 0x419a8
Source file(s) D:\DRIVER2\GAME\ASM\RNDRASM.MIP, object file obj\rndrasm.OBJ overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) D:\driver2\game\C\TILE.C+D:\driver2\game\TILE.C, object file obj\tile.OBJ overlay id <none>

// 67 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct _pct {
  struct DB *current; // size=0, offset=0
  unsigned short *ptexture_pages[128]; // size=4, offset=4
  unsigned short *ptexture_cluts[128][32]; // size=4, offset=8
  long f4colourTable[32]; // size=128, offset=12
  int *polySizes; // size=0, offset=140
  char *primptr; // size=0, offset=144
  unsigned long *ot; // size=0, offset=148
  unsigned long clut; // size=0, offset=152
  unsigned long tpage; // size=0, offset=156
  unsigned long colour; // size=0, offset=160
  int flags; // size=0, offset=164
  struct SVECTOR *verts; // size=8, offset=168
  unsigned long lastTexInfo; // size=0, offset=172
  int scribble[8]; // size=32, offset=176
  int model; // size=0, offset=208
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct MVERTEX {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  unsigned short uv; // size=0, offset=6
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct VERTEX {
  struct DVECTOR coord; // size=4, offset=0
  struct UV_INFO uv_coord; // size=2, offset=4
  unsigned char pad[2]; // size=2, offset=6
};

// 97 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT4 POLY_FT4;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct _pct plotContext;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct TEX_INFO TEX_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct DB DB;
typedef struct MVERTEX MVERTEX;
typedef struct UV UV;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct VERTEX VERTEX;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef struct MVERTEX SV5x5[5][5];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 9 external declarations
extern int goFaster; // offset 0x000aa44c
extern unsigned long *tile_overflow_buffer; // offset 0x000aacf0
extern unsigned short *Low2HighDetailTable; // offset 0x000aad04
extern unsigned short *Low2LowerDetailTable; // offset 0x000aad08
extern int fasterToggle; // offset 0x000aacfc
extern char *SubDivisionArrays; // offset 0x000aacf8
extern int vcount; // offset 0x000aacf4
extern unsigned long *ot_slot; // offset 0x000aad00
extern struct VERTEX vtab[8]; // offset 0x000cd968

// 8 functions
/*
 * Offset 0x41B10, from D:\driver2\game\C\TILE.C (lines 79..165)
 * Stack frame base $sp, size 16
 * Saved registers at offset -8: s0
 */
void /*$ra*/ Tile1x1(struct MODEL *model /*$a0*/)
{ // line 1, offset 0x41b10
  int i; // $t3
  unsigned char *polys; // $t0
  struct SVECTOR *verts; // $t1
  struct POLY_FT4 *prims; // $a2
  unsigned long clut; // $t6
  unsigned long tpage; // $a1
  { // line 14, offset 0x41b4c
    unsigned long indices; // $a3
    unsigned long texInfo; // $t2
    { // line 14, offset 0x41b4c
      long *ot; // $t8
      { // line 14, offset 0x41b4c
        int Z; // stack offset -16
        unsigned long uv_01; // $t4
        unsigned long uv_23; // $t5
        0x1B4 otherhalf
        { // line 65, offset 0x41cc4
          int r2; // $a0
        } // line 65, offset 0x41cc4
      } // line 82, offset 0x41d48
    } // line 83, offset 0x41d48
  } // line 84, offset 0x41d48
} // line 87, offset 0x41d7c
/*
 * Offset 0x41D7C, from D:\driver2\game\C\TILE.C (lines 180..286)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ DrawTILES(int tile_amount /*$s2*/)
{ // line 1, offset 0x41d7c
  { // line 21, offset 0x41e84
  } // line 24, offset 0x41ebc
  { // line 28, offset 0x41ebc
    struct PACKED_CELL_OBJECT **tilePointers; // $s3
    int previous_matrix; // $s4
    { // line 40, offset 0x41f34
      int model_number; // $s0
      int z; // $a1
      { // line 43, offset 0x41f34
        int yang; // $a1
        struct PACKED_CELL_OBJECT *ppco; // $a0
      } // line 61, offset 0x41fb8
      { // line 90, offset 0x4202c
        struct MODEL *model; // $a0
      } // line 99, offset 0x42060
    } // line 102, offset 0x42060
  } // line 105, offset 0x420b0
} // line 107, offset 0x420b0
/*
 * Offset 0x420B0, from D:\driver2\game\C\TILE.C (lines 292..352)
 * Stack frame base $sp, size 8
 * Saved registers at offset -8: s0
 */
void /*$ra*/ makeMesh(struct MVERTEX *VSP[5][5] /*$t4*/, int m /*$t2*/, int n /*$a2*/)
{ // line 1, offset 0x420b0
  { // line 21, offset 0x420c8
    int a; // $t0
    int b; // $t1
  } // line 21, offset 0x420c8
  { // line 21, offset 0x420c8
    int a; // $a3
  } // line 21, offset 0x420c8
  { // line 21, offset 0x420c8
    int a; // $a0
    int b; // $a1
  } // line 21, offset 0x420c8
  { // line 28, offset 0x421b4
    int a; // $t0
    int b; // $t1
  } // line 28, offset 0x421b4
  { // line 28, offset 0x421b4
    int a; // $a3
  } // line 28, offset 0x421b4
  { // line 28, offset 0x421b4
    int a; // $a0
    int b; // $a1
  } // line 28, offset 0x421b4
  { // line 34, offset 0x4228c
    int k; // $s0
    { // line 35, offset 0x4228c
      int a; // $t0
      int b; // $t1
    } // line 35, offset 0x4228c
    { // line 35, offset 0x4228c
      int a; // $a3
    } // line 35, offset 0x4228c
    { // line 35, offset 0x4228c
      int a; // $a0
      int b; // $a1
    } // line 35, offset 0x4228c
    { // line 40, offset 0x42378
      int a; // $t0
      int b; // $t1
    } // line 40, offset 0x42378
    { // line 40, offset 0x42378
      int a; // $a3
    } // line 40, offset 0x42378
    { // line 40, offset 0x42378
      int a; // $a0
      int b; // $a1
    } // line 40, offset 0x42378
  } // line 44, offset 0x42458
  { // line 48, offset 0x42460
    int a; // $t1
    int b; // $t5
  } // line 48, offset 0x42460
  { // line 51, offset 0x424d0
    int a; // $v0
    int b; // $a1
  } // line 51, offset 0x424d0
  { // line 55, offset 0x4252c
    int a; // $t0
    int b; // $t2
  } // line 55, offset 0x4252c
  { // line 55, offset 0x4252c
    int a; // $t3
    int b; // $v0
  } // line 55, offset 0x4252c
  { // line 55, offset 0x4252c
    int a; // $a2
  } // line 55, offset 0x4252c
  { // line 55, offset 0x4252c
    int a; // $t8
    int b; // $a1
  } // line 58, offset 0x42644
} // line 61, offset 0x42650
/*
 * Offset 0x42650, from D:\driver2\game\C\TILE.C (lines 359..485)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 s1 s2 s3
 */
void /*$ra*/ drawMesh(struct MVERTEX *VSP[5][5] /*$s2*/, int m /*$s3*/, int n /*$s1*/, struct _pct *pc /*$a3*/)
{ // line 1, offset 0x42650
  int j; // $t6
  int k; // $t9
  struct POLY_FT4 *prims; // $t1
  { // line 11, offset 0x426b8
    int Z1; // stack offset -24
    int Z2; // stack offset -20
    struct MVERTEX *VST[5][5]; // $t2
    long *ot; // $t7
    { // line 23, offset 0x42714
      int r2; // $v0
    } // line 23, offset 0x42714
    { // line 103, offset 0x42a30
      int r2; // $v0
    } // line 121, offset 0x42ab4
  } // line 124, offset 0x42ab4
} // line 127, offset 0x42aec
/*
 * Offset 0x42AEC, from D:\driver2\game\C\TILE.C (lines 489..576)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ SubdivNxM(char *polys /*$t4*/, unsigned long n /*$s1*/, unsigned long m /*$s0*/, int ofse /*$s2*/)
{ // line 1, offset 0x42aec
  struct MVERTEX *VSP[5][5]; // $t3
  struct _pct *pc; // $t2
  { // line 1, offset 0x42aec
    unsigned long indices; // $a0
    struct SVECTOR *v0; // $t1
    struct SVECTOR *v1; // $a1
    struct SVECTOR *v2; // $t0
  } // line 1, offset 0x42aec
  { // line 1, offset 0x42aec
    unsigned long uv_01; // $v1
    unsigned long uv_23; // $a2
  } // line 1, offset 0x42aec
  { // line 58, offset 0x42dec
    int Z; // stack offset -24
    { // line 73, offset 0x42e60
      unsigned long texInfo; // $a0
    } // line 80, offset 0x42ed4
  } // line 86, offset 0x42f04
} // line 88, offset 0x42f34
/*
 * Offset 0x42F34, from D:\driver2\game\C\TILE.C (lines 641..642)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessSubDivisionLump(char *lump_ptr /*$a0*/, int lump_size /*$a1*/)
{
}
/*
 * Offset 0x42F40, from D:\driver2\game\C\TILE.C (lines 581..630)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ TileNxN(struct MODEL *model /*$s4*/, int levels /*$s2*/, int Dofse /*$s6*/)
{ // line 1, offset 0x42f40
  int i; // $s3
  char *polys; // $s0
  char ttype; // $a3
  unsigned long tiletypes; // $s1
  int baseOffset; // $s5
} // line 50, offset 0x43090
/*
 * Offset 0x43090, from D:\driver2\game\C\TILE.C (lines 651..673)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessLowDetailTable(char *lump_ptr /*$a0*/, int lump_size /*$a1*/)
{ // line 1, offset 0x43090
  int i; // $a1
} // line 23, offset 0x4310c
Source file(s) D:\driver2\game\C\DRIVINGGAMES.C+D:\driver2\game\DRIVINGGAMES.C, object file obj\drivinggames.obj overlay id <none>

// 75 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct CDATA2D {
  struct VECTOR x; // size=16, offset=0
  struct VECTOR axis[2]; // size=32, offset=16
  struct VECTOR vel; // size=16, offset=48
  int theta; // size=0, offset=64
  int length[2]; // size=8, offset=68
  int dist[2]; // size=8, offset=76
  int limit[2]; // size=8, offset=84
  int avel; // size=0, offset=92
  int isCameraOrTanner; // size=0, offset=96
};
struct TRAILBLAZER_DATA {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
  short y; // size=0, offset=8
  short rot; // size=0, offset=10
};
struct SMASHED_CONE {
  char cone; // size=0, offset=0
  unsigned char active : 7; // offset=1.0
  unsigned char side : 1; // offset=1.7
  short rot_speed; // size=0, offset=2
  struct VECTOR velocity; // size=16, offset=4
};

// 108 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct DB DB;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct CDATA2D CDATA2D;
typedef struct TRAILBLAZER_DATA TRAILBLAZER_DATA;
typedef struct SMASHED_CONE SMASHED_CONE;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct MVERTEX SV5x5[5][5];

// 0 labels

// 8 external declarations
extern int gTrailblazerConeCount; // offset 0x000aa45c
static int current_smashed_cone; // offset 0x000aa450
static int gTrailblazerPrevConeDelay; // offset 0x000aa454
extern struct TRAILBLAZER_DATA *gTrailblazerData; // offset 0x000aa458
extern int gTrailblazerConeIndex; // offset 0x000aa460
extern struct MODEL *gTrailblazerConeModel; // offset 0x000aad10
static int wrongside[2][6]; // offset 0x000cd9a8
static struct SMASHED_CONE smashed_cones[6]; // offset 0x000cd9d8

// 10 functions
/*
 * Offset 0x4310C, from D:\driver2\game\C\DRIVINGGAMES.C (lines 231..287)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitDrivingGames()
{ // line 2, offset 0x4310c
  char filename[64]; // stack offset -72
  int i; // $a0
  int j; // $v1
} // line 57, offset 0x4326c
/*
 * Offset 0x4326C, from D:\driver2\game\C\DRIVINGGAMES.C (lines 290..474)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ HandleDrivingGames()
{ // line 2, offset 0x4326c
  struct _CAR_DATA *cp; // $a2
  struct VECTOR vel; // stack offset -96
  int i; // $s3
  int j; // $v1
  int k; // $a0
  int id; // $s2
  int dist; // $a1
  { // line 61, offset 0x43354
    struct VECTOR pos1; // stack offset -80
    struct VECTOR pos2; // stack offset -64
    int x; // $t0
    int z; // $a1
    int r; // $v0
    int side; // $s1
    int radius; // $a0
  } // line 123, offset 0x43658
  { // line 145, offset 0x43700
    struct VECTOR pos; // stack offset -80
  } // line 166, offset 0x43800
} // line 185, offset 0x438dc
/*
 * Offset 0x438DC, from D:\driver2\game\C\DRIVINGGAMES.C (lines 477..525)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawDrivingGames()
{ // line 2, offset 0x438dc
  struct VECTOR wpos; // stack offset -24
  int i; // $s0
} // line 49, offset 0x439fc
/*
 * Offset 0x439FC, from D:\driver2\game\C\DRIVINGGAMES.C (lines 545..565)
 * Stack frame base $sp, size 232
 * Saved registers at offset -8: ra
 */
int /*$ra*/ CarConeCollision(struct VECTOR *pPos /*$a0*/, int car /*$a1*/)
{ // line 1, offset 0x439fc
  struct CDATA2D cd[2]; // stack offset -216
  struct _CAR_DATA *cp1; // $t0
  int carLength[2]; // stack offset -16
  { // line 20, offset 0x43ad4
  } // line 20, offset 0x43ad4
} // line 21, offset 0x43ae8
/*
 * Offset 0x43AE8, from D:\driver2\game\C\DRIVINGGAMES.C (lines 578..620)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ SetSmashedCone(int cone /*$s1*/, struct VECTOR *velocity /*$a1*/, int player /*$s2*/, int side /*$a3*/)
{ // line 1, offset 0x43ae8
  struct SMASHED_CONE *sc; // $s0
  int chan; // $s0
} // line 43, offset 0x43ce0
/*
 * Offset 0x43CE0, from D:\driver2\game\C\DRIVINGGAMES.C (lines 628..654)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MoveSmashedCones()
{ // line 2, offset 0x43ce0
  int i; // $t0
} // line 27, offset 0x43de4
/*
 * Offset 0x43DEC, from D:\driver2\game\C\DRIVINGGAMES.C (lines 730..749)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ DrawSmashedCone(struct SMASHED_CONE *sc /*$s0*/, struct VECTOR *wpos /*$s1*/)
{ // line 1, offset 0x43dec
  struct MATRIX object_matrix; // stack offset -64
  struct MATRIX *finalmatrix; // $s2
  struct VECTOR pos; // stack offset -32
} // line 20, offset 0x43f34
/*
 * Offset 0x43F34, from D:\driver2\game\C\DRIVINGGAMES.C (lines 757..791)
 * Stack frame base $sp, size 16
 */
void /*$ra*/ GetConePos(int cone /*$a0*/, struct VECTOR *pos /*$t2*/, int side /*$a2*/)
{ // line 1, offset 0x43f34
  struct VECTOR offset; // stack offset -16
  int x; // $t3
  int z; // $t4
  int r; // $v1
  int radius; // $a1
} // line 35, offset 0x44034
/*
 * Offset 0x44034, from D:\driver2\game\C\DRIVINGGAMES.C (lines 703..722)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ DrawCone(struct VECTOR *position /*$s0*/, int cone /*$s1*/)
{ // line 1, offset 0x44034
  struct MATRIX matrix; // stack offset -64
  struct VECTOR pos; // stack offset -32
  { // line 10, offset 0x44064
    { // line 12, offset 0x44084
    } // line 18, offset 0x44154
  } // line 19, offset 0x44154
} // line 20, offset 0x44154
/*
 * Offset 0x44168, from D:\driver2\game\C\DRIVINGGAMES.C (lines 662..695)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawSmashedCones()
{ // line 2, offset 0x44168
  struct SMASHED_CONE *sc; // $s0
  struct VECTOR wpos; // stack offset -40
  int i; // $s1
} // line 34, offset 0x44228
Source file(s) D:\driver2\game\C\E3STUFF.C, object file obj\e3stuff.obj overlay id <none>

// 59 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct POLYCOORD {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short u; // size=0, offset=4
  short v; // size=0, offset=6
  short w; // size=0, offset=8
  short h; // size=0, offset=10
};

// 92 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT3 POLY_FT3;
typedef struct SPRT SPRT;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct POLYCOORD POLYCOORD;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 3 external declarations
static struct POLYCOORD polycoords[6]; // offset 0x0009e674
extern int gUseCopModel; // offset 0x000aa464
static int lastrequesteddisc; // offset 0x000aa468

// 7 functions
/*
 * Offset 0x44244, from D:\driver2\game\C\E3STUFF.C (lines 171..250)
 * Stack frame base $sp, size 512
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ FadeInHiresScreen(char *filename /*stack 0*/)
{ // line 1, offset 0x44244
  struct DISPENV disp; // stack offset -488
  struct DRAWENV draw; // stack offset -464
  struct SPRT prims[6]; // stack offset -368
  struct POLY_FT3 nulls[6]; // stack offset -248
  struct RECT rect; // stack offset -56
  unsigned long ot; // stack offset -48
  int i; // $t5
  int col; // $s1
} // line 80, offset 0x445f4
/*
 * Offset 0x445F4, from D:\driver2\game\C\E3STUFF.C (lines 258..317)
 * Stack frame base $sp, size 520
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ FadeOutHiresScreen()
{ // line 2, offset 0x445f4
  struct DISPENV disp; // stack offset -496
  struct DRAWENV draw; // stack offset -472
  struct SPRT prims[6]; // stack offset -376
  struct POLY_FT3 nulls[6]; // stack offset -256
  struct RECT rect; // stack offset -64
  unsigned long ot; // stack offset -56
  int i; // $t5
  int col; // $s1
} // line 60, offset 0x448cc
/*
 * Offset 0x448CC, from D:\driver2\game\C\E3STUFF.C (lines 391..434)
 * Stack frame base $sp, size 168
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ SetPleaseWait(char *buffer /*$s2*/)
{ // line 1, offset 0x448cc
  struct DISPENV disp; // stack offset -144
  struct DRAWENV draw; // stack offset -120
  struct RECT rect; // stack offset -24
  char *exe; // $a0
} // line 44, offset 0x44a40
/*
 * Offset 0x44A40, from D:\driver2\game\C\E3STUFF.C (lines 443..537)
 * Stack frame base $sp, size 184
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ CheckForCorrectDisc(int disc /*$s0*/)
{ // line 1, offset 0x44a40
  struct DISPENV disp; // stack offset -160
  struct DRAWENV draw; // stack offset -136
  struct RECT rect; // stack offset -40
  char *mess1; // $s6
  char *mess2; // $s3
  char *exe; // $s4
  int ret; // $s0
  int discerror; // $s5
  { // line 49, offset 0x44b70
  } // line 79, offset 0x44bf4
} // line 95, offset 0x44cb8
/*
 * Offset 0x44CE0, from D:\driver2\game\C\E3STUFF.C (lines 139..163)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ ShowHiresScreens(char **names /*$s1*/, int delay /*$s4*/, int wait /*$s3*/)
{ // line 1, offset 0x44ce0
  char *filename; // $a0
  int timedelay; // $s0
} // line 25, offset 0x44da0
/*
 * Offset 0x44DA0, from D:\driver2\game\C\E3STUFF.C (lines 350..381)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupDefDispEnv(struct DISPENV *env /*$s0*/, int x /*$a1*/, int y /*$a2*/, int w /*$a3*/, int h /*stack 16*/, int h /*$v0*/)
{
}
/*
 * Offset 0x44E40, from D:\driver2\game\C\E3STUFF.C (lines 325..341)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetupDefDrawEnv(struct DRAWENV *env /*$a0*/, int x /*$a1*/, int y /*$a2*/, int w /*$a3*/, int h /*stack 16*/, int h /*$v0*/)
{
}
Source file(s) D:\driver2\game\C\ENVIRO.C+D:\driver2\game\ENVIRO.C, object file obj\enviro.OBJ overlay id <none>

// 44 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TPAN {
  unsigned char texture_page; // size=0, offset=0
  unsigned char texture_number; // size=0, offset=1
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};

// 73 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct TPAN TPAN;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();

// 0 labels

// 5 external declarations
extern short gPlayerCar0ShinyFaces[38]; // offset 0x0009e6bc
extern int ShinyTexturePage; // offset 0x000aad1c
extern int ShinyTextureNum; // offset 0x000aad18
extern char Car0_ShinyTable[256]; // offset 0x000cdb50
extern char VeryShinyTable[256]; // offset 0x000cda50

// 2 functions
/*
 * Offset 0x44E88, from D:\driver2\game\C\ENVIRO.C (lines 46..66)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ Env_MakeColourAddTable(short *shinysrc /*$s0*/, char *polytable /*$s1*/, int length /*$a2*/)
{ // line 1, offset 0x44e88
  short addval; // $a0
  short polynum; // $v1
} // line 21, offset 0x44f08
/*
 * Offset 0x44F08, from D:\driver2\game\C\ENVIRO.C (lines 72..88)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ Init_Reflection_Mapping()
{ // line 2, offset 0x44f08
  struct TPAN pos; // stack offset -16
  int count; // $v1
} // line 17, offset 0x44f60
Source file(s) D:\driver2\game\C\ENVSOUND.C+D:\driver2\game\ENVSOUND.C, object file obj\envsound.obj overlay id <none>

// 27 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};

// 52 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();

// 0 labels

// 0 external declarations

// 1 functions
/*
 * Offset 0x44F60, from D:\driver2\game\C\ENVSOUND.C (lines 41..161)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ AddEnvSounds(int level /*$a0*/, int time /*$a1*/)
{
}
Source file(s) D:\driver2\game\C\EVENT.C+D:\driver2\game\EVENT.C, object file obj\event.OBJ overlay id <none>

// 92 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _sdPlane {
  short surface; // size=0, offset=0
  short a; // size=0, offset=2
  short b; // size=0, offset=4
  short c; // size=0, offset=6
  int d; // size=0, offset=8
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
struct FixedEvent {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short active; // size=0, offset=18
  unsigned short initialRotation; // size=0, offset=20
  unsigned short finalRotation; // size=0, offset=22
  unsigned short minSpeed; // size=0, offset=24
  unsigned short maxSpeed; // size=0, offset=26
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
  char *modelName; // size=0, offset=40
};
struct EventGlobal {
  int camera; // size=0, offset=0
  int draw; // size=0, offset=4
  struct _EVENT **track; // size=40, offset=8
  struct _EVENT *cameraEvent; // size=40, offset=12
};
enum SpecialCamera : char {
  SPECIAL_CAMERA_SET = 0,
  SPECIAL_CAMERA_SET2 = 1,
  SPECIAL_CAMERA_RESET = 2,
  SPECIAL_CAMERA_WAIT = 3,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct MissionTrain {
  struct _EVENT *engine; // size=40, offset=0
  int *node; // size=0, offset=4
  int cornerSpeed; // size=0, offset=8
  int initialStraightSpeed; // size=0, offset=12
  int finalStraightSpeed; // size=0, offset=16
  int start; // size=0, offset=20
  int startDir; // size=0, offset=24
};
struct Foam {
  struct MODEL *model; // size=36, offset=0
  int rotate; // size=0, offset=4
};
struct EventCarriage {
  short rotation; // size=0, offset=0
  short vel; // size=0, offset=2
};
struct MultiCar {
  struct _EVENT *event; // size=40, offset=0
  int count; // size=0, offset=4
};
struct Helicopter {
  int speed; // size=0, offset=0
  short pitch; // size=0, offset=4
  short dp; // size=0, offset=6
  short roll; // size=0, offset=8
  short dr; // size=0, offset=10
  int lastX; // size=0, offset=12
  int lastZ; // size=0, offset=16
  struct TEXTURE_DETAILS rotorTexture; // size=14, offset=20
  short rotorrot; // size=0, offset=34
  short rotorvel; // size=0, offset=36
  int cleanModel; // size=0, offset=40
  int deadModel; // size=0, offset=44
};
struct Detonator {
  int timer; // size=0, offset=0
  int count; // size=0, offset=4
};
struct CameraDelay {
  int delay; // size=0, offset=0
  int type; // size=0, offset=4
};
enum VisType : char {
  VIS_INIT = 0,
  VIS_SORT = 1,
  VIS_ADD = 2,
  VIS_NEXT = 3,
};
struct EventCamera {
  struct VECTOR position; // size=16, offset=0
  short yAng; // size=0, offset=16
  struct MATRIX matrix; // size=32, offset=20
  int rotate; // size=0, offset=52
};
enum Station : char {
  EVENT_NO_STATION = 0,
  EVENT_APPROACHING = 1,
  EVENT_LEAVING = 2,
};
struct MULTICAR_DATA {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
  unsigned char palette; // size=0, offset=8
  unsigned char model; // size=0, offset=9
  short rot; // size=0, offset=10
};

// 111 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT4 POLY_FT4;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct DB DB;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _sdPlane sdPlane;
typedef struct _EVENT EVENT;
typedef struct UV UV;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct MULTICAR_DATA MULTICAR_DATA;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef struct MVERTEX SV5x5[5][5];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 45 external declarations
extern int ElTrainData[83]; // offset 0x0009e708
extern int VegasTrainData[7]; // offset 0x0009e854
extern int VegasParkedTrains[3]; // offset 0x0009e870
extern int HavanaFerryData[12]; // offset 0x0009e87c
extern int RioFerryData[6]; // offset 0x0009e8ac
extern int HavanaMiniData[4]; // offset 0x0009e8c4
static struct MissionTrain missionTrain[2]; // offset 0x0009e8d4
static struct FixedEvent chicagoDoor[3]; // offset 0x0009e90c
static struct FixedEvent havanaFixed[3]; // offset 0x0009e990
static struct FixedEvent vegasDoor[5]; // offset 0x0009ea14
static struct FixedEvent rioDoor[6]; // offset 0x0009eaf0
static struct Helicopter HelicopterData; // offset 0x0009ebf8
extern int LiftingBridges[55]; // offset 0x0009ec28
static int ChicagoCameraHack[3]; // offset 0x0009ed04
static int HavanaCameraHack[9]; // offset 0x0009ed10
static int VegasCameraHack[16]; // offset 0x0009ed34
static int RioCameraHack[6]; // offset 0x0009ed74
extern int DistanceTriggerCarMoves; // offset 0x000aa4b8
static int eventHaze; // offset 0x000aa4bc
extern int debugRotation; // offset 0x000aa510
extern struct CELL_OBJECT *EventCop; // offset 0x000aadc8
extern int event_models_active; // offset 0x000aadd8
static struct Foam foam; // offset 0x000aad60
static struct _EVENT *event; // offset 0x000aad68
extern struct _EVENT *firstEvent; // offset 0x000aadc0
static int cameraEventsActive; // offset 0x000aad6c
static struct _EVENT *trackingEvent[2]; // offset 0x000aad70
static int carsOnBoat; // offset 0x000aad78
static struct SVECTOR boatOffset; // offset 0x000aad80
static struct MultiCar multiCar; // offset 0x000aad88
static struct FixedEvent *fixedEvent; // offset 0x000aad90
static struct _EVENT *firstMissionEvent; // offset 0x000aad94
static struct Detonator detonator; // offset 0x000aad98
static int doneFirstHavanaCameraHack; // offset 0x000aada0
static struct CameraDelay cameraDelay; // offset 0x000aada8
static unsigned short *xVis; // offset 0x000aadb0
static unsigned short *zVis; // offset 0x000aadb4
extern int *debugCount; // offset 0x000aadbc
extern int debugNode[2]; // offset 0x000aadd0
extern int debugSpeed; // offset 0x000aadb8
extern int debugOffset; // offset 0x000aadc4
extern struct EventGlobal events; // offset 0x000cdee8
static struct _TARGET *carEvent[8]; // offset 0x000cde90
extern struct EventCarriage carriageData[10]; // offset 0x000cdef8
static struct EventCamera eventCamera; // offset 0x000cdeb0

// 31 functions
/*
 * Offset 0x45AB8, from D:\driver2\game\C\EVENT.C (lines 249..293)
 * Stack frame base $sp, size 16
 */
int /*$ra*/ GetVisValue(int index /*$t1*/, int zDir /*$a1*/)
{ // line 1, offset 0x45ab8
  int value; // $v1
  int radius; // $a0
  { // line 7, offset 0x45ac8
    int camera; // $a0
  } // line 10, offset 0x45b28
  { // line 14, offset 0x45b30
    struct _EVENT *ev; // $a0
    int multiple; // $a2
    { // line 25, offset 0x45bbc
      struct VECTOR pos; // stack offset -16
    } // line 32, offset 0x45c3c
  } // line 34, offset 0x45c40
} // line 45, offset 0x45c68
/*
 * Offset 0x45C68, from D:\driver2\game\C\EVENT.C (lines 297..399)
 * Stack frame base $sp, size 568
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ VisibilityLists(enum VisType type /*$a0*/, int i /*$s2*/)
{ // line 1, offset 0x45c68
  static unsigned short xList[128]; // offset 0x0
  static unsigned short zList[128]; // offset 0x100
  static unsigned short *firstX[2]; // offset 0x0
  static unsigned short *firstZ[2]; // offset 0x8
  static int count; // offset 0x10
  { // line 34, offset 0x45d98
    static unsigned short *list[2]; // offset 0x50
    int table[128]; // stack offset -552
    int j; // $s0
    { // line 42, offset 0x45e10
      int tempList; // $t7
      int k; // $t0
    } // line 53, offset 0x45eb8
  } // line 55, offset 0x45ecc
  { // line 58, offset 0x45f14
    int camera; // $a1
  } // line 64, offset 0x45f78
  { // line 68, offset 0x45f90
    struct _EVENT *ev; // $a0
  } // line 87, offset 0x46068
  { // line 90, offset 0x46068
    struct _EVENT *ev; // $v1
  } // line 101, offset 0x460bc
} // line 103, offset 0x460ec
/*
 * Offset 0x460EC, from D:\driver2\game\C\EVENT.C (lines 422..468)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ InitTrain(struct _EVENT *ev /*$s0*/, int count /*$s3*/, int type /*$a2*/)
{ // line 1, offset 0x460ec
  int height; // $s2
  int length; // $s1
  int *to; // $a0
} // line 47, offset 0x46258
/*
 * Offset 0x46258, from D:\driver2\game\C\EVENT.C (lines 515..963)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ SetUpEvents(int full /*stack 0*/)
{ // line 1, offset 0x46258
  int count; // $s5
  int *p; // $s2
  int cEvents; // stack offset -52
  struct _EVENT **e; // stack offset -56
  { // line 25, offset 0x46310
    int ElTrackModel; // stack offset -48
    int carModel; // stack offset -44
    int direction; // $fp
    int i; // $s3
    { // line 36, offset 0x46334
      int cBridges; // $s1
      int timeOffset; // $a2
      int loop; // $a3
    } // line 91, offset 0x46548
    { // line 110, offset 0x46628
      int cCarriages; // $s0
      int first; // $s1
      { // line 119, offset 0x46630
      } // line 120, offset 0x46644
    } // line 149, offset 0x4675c
  } // line 188, offset 0x468c8
  { // line 243, offset 0x46aa4
    int trainModel; // $s5
    int loop; // $s1
    int carriages; // $s2
    { // line 296, offset 0x46c34
      int loop; // $t1
      { // line 309, offset 0x46dd8
        int detonatorModel; // $v0
      } // line 314, offset 0x46e30
    } // line 315, offset 0x46e30
  } // line 319, offset 0x46e38
  { // line 323, offset 0x46e38
    int detonatorModel; // $s3
    int loop; // $s1
    { // line 367, offset 0x46f84
      int loop; // $s1
      { // line 373, offset 0x47094
        struct XYPAIR offset; // stack offset -64
      } // line 381, offset 0x471a0
    } // line 389, offset 0x47218
    { // line 394, offset 0x4724c
    } // line 431, offset 0x474bc
  } // line 433, offset 0x474bc
} // line 449, offset 0x47538
/*
 * Offset 0x47538, from D:\driver2\game\C\EVENT.C (lines 991..1103)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ SetCamera(struct _EVENT *ev /*$s5*/)
{ // line 1, offset 0x47538
  int rotation; // $s4
  int axis; // $a3
  struct VECTOR pivot; // stack offset -96
  int iPivot; // $a2
  int height; // $a1
  struct SVECTOR offset; // stack offset -80
  { // line 46, offset 0x47688
    struct MATRIX matrix; // stack offset -72
    struct SVECTOR temp; // stack offset -40
    { // line 54, offset 0x4770c
    } // line 64, offset 0x4775c
  } // line 66, offset 0x4775c
} // line 113, offset 0x479dc
/*
 * Offset 0x479DC, from D:\driver2\game\C\EVENT.C (lines 1152..1208)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ StepFromToEvent(struct _EVENT *ev /*$a3*/)
{ // line 1, offset 0x479dc
  { // line 8, offset 0x47a08
    int *from; // $a1
    int *to; // $t4
    long *current; // $t0
    int d; // $a0
    int d2; // $t2
  } // line 56, offset 0x47bc4
} // line 57, offset 0x47bd4
/*
 * Offset 0x47BD4, from D:\driver2\game\C\EVENT.C (lines 1214..1448)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ StepPathEvent(struct _EVENT *ev /*$s0*/)
{ // line 1, offset 0x47bd4
  int *from; // $a1
  int *to; // $t1
  long *current; // $t3
  static int speed; // offset 0x20
  { // line 11, offset 0x47c08
    int flags; // $v0
  } // line 19, offset 0x47c34
  { // line 28, offset 0x47c7c
    enum Station station; // $t2
    { // line 62, offset 0x47d2c
      int direction; // $t2
      int loop; // $a2
      int *i; // $a0
      int turn[4]; // stack offset -48
      struct XZPAIR centre; // stack offset -32
      struct XZPAIR offset; // stack offset -24
    } // line 134, offset 0x47f98
    { // line 141, offset 0x47fb0
      int d; // $a0
      int d1; // $v1
      int dir; // $t4
    } // line 233, offset 0x482f8
  } // line 234, offset 0x482f8
} // line 235, offset 0x4830c
/*
 * Offset 0x4830C, from D:\driver2\game\C\EVENT.C (lines 1478..1632)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ StepHelicopter(struct _EVENT *ev /*$s0*/)
{ // line 1, offset 0x4830c
  static int rotacc; // offset 0xa4
  { // line 7, offset 0x48334
    int b; // $a0
    int c; // $t2
    int d; // $v1
    int t; // $a1
    int t2; // $a3
    int t3; // $v1
    int dx1; // $a2
    int dx2; // $t1
    int dx3; // $t0
    int dz1; // $v0
    int dz2; // $a3
    int dz3; // $a0
    { // line 44, offset 0x484a0
      struct XZPAIR vel; // stack offset -56
      int direction; // $t1
      int temp; // $t1
      int dt; // $a0
      int d2p; // $v1
      int d2r; // $v1
      int pitch; // $a1
      int roll; // $a2
      static int rotating; // offset 0x24
    } // line 99, offset 0x487f4
    { // line 112, offset 0x48854
      struct VECTOR pos; // stack offset -48
    } // line 113, offset 0x48854
  } // line 131, offset 0x48930
  { // line 135, offset 0x48948
    struct VECTOR pos; // stack offset -56
    struct VECTOR drift; // stack offset -32
  } // line 135, offset 0x48948
} // line 155, offset 0x48a60
/*
 * Offset 0x48A60, from D:\driver2\game\C\EVENT.C (lines 1642..1950)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ StepEvents()
{ // line 3, offset 0x48a60
  struct _EVENT *ev; // $s0
  { // line 29, offset 0x48ac4
    struct VECTOR old; // stack offset -72
    int onBoatLastFrame; // $s7
    { // line 34, offset 0x48acc
      int dist; // stack offset -48
      int loop; // $s2
      struct _CAR_DATA *cp; // $s1
    } // line 57, offset 0x48b98
    { // line 72, offset 0x48c40
      int d2; // $a2
    } // line 75, offset 0x48cb4
    { // line 82, offset 0x48cd8
    } // line 83, offset 0x48cfc
    { // line 87, offset 0x48d10
      struct XZPAIR speed; // stack offset -56
      { // line 91, offset 0x48d28
        int loop; // $s2
        int mask; // $s1
        { // line 98, offset 0x48d60
          struct VECTOR *pos; // $a0
          struct VECTOR *vel; // $a1
        } // line 133, offset 0x48e4c
      } // line 134, offset 0x48e64
    } // line 135, offset 0x48e64
  } // line 136, offset 0x48e64
  { // line 155, offset 0x48f44
    { // line 160, offset 0x48f54
      int sign; // $t0
      unsigned short *target; // $a3
    } // line 178, offset 0x49070
  } // line 183, offset 0x49080
  { // line 220, offset 0x4914c
    int thisCamera; // $s1
    int otherCamera; // $s2
    int loop; // $s0
    unsigned short *x; // $t0
    unsigned short *z; // $a3
    { // line 247, offset 0x49240
      struct CELL_OBJECT *cop; // $a2
    } // line 294, offset 0x492c4
  } // line 299, offset 0x4930c
} // line 309, offset 0x49364
/*
 * Offset 0x49364, from D:\driver2\game\C\EVENT.C (lines 2110..2156)
 * Stack frame base $sp, size 128
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ DrawFerrisWheel(struct MATRIX *matrix /*$s0*/, struct VECTOR *pos /*$s1*/)
{ // line 1, offset 0x49364
  { // line 16, offset 0x49460
    int loop; // $s3
    struct MODEL *model; // $s2
    struct VECTOR spoke[2]; // stack offset -104
    { // line 28, offset 0x494e4
      struct VECTOR offset; // stack offset -72
      struct VECTOR carPos; // stack offset -56
      int rotation; // $v0
    } // line 32, offset 0x494e4
  } // line 45, offset 0x49658
} // line 47, offset 0x49684
/*
 * Offset 0x49684, from D:\driver2\game\C\EVENT.C (lines 2159..2237)
 * Stack frame base $sp, size 136
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawRotor(struct VECTOR pos /*stack 0*/, struct MATRIX *matrix /*stack 16*/, struct MATRIX *matrix /*$s4*/)
{ // line 1, offset 0x49684
  struct SVECTOR v[5]; // stack offset -120
  struct MATRIX local; // stack offset -80
  struct POLY_FT4 *poly; // $t0
  struct TEXTURE_DETAILS *tex; // $t3
  int z; // stack offset -48
  char *firstPoly; // $a1
} // line 79, offset 0x49c38
/*
 * Offset 0x49C38, from D:\driver2\game\C\EVENT.C (lines 2240..2515)
 * Stack frame base $sp, size 232
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawEvents(int camera /*stack 0*/)
{ // line 1, offset 0x49c38
  unsigned short *x; // $a1
  unsigned short *z; // $a0
  int thisCamera; // stack offset -56
  int otherCamera; // stack offset -52
  static struct _EVENT *nearestTrain; // offset 0x28
  static int distanceFromNearestTrain; // offset 0x2c
  { // line 36, offset 0x49d14
    struct _EVENT *ev; // $s1
    { // line 49, offset 0x49e0c
      unsigned int dist; // $v1
    } // line 58, offset 0x49e74
    { // line 74, offset 0x49ea4
      { // line 76, offset 0x49ed4
        struct MATRIX matrix; // stack offset -208
        struct MATRIX ext; // stack offset -176
        struct VECTOR pos; // stack offset -144
        int reflection; // $s5
        int temp; // stack offset -48
        { // line 89, offset 0x49f48
        } // line 89, offset 0x49f48
        { // line 95, offset 0x49fb4
          { // line 106, offset 0x4a038
            struct VECTOR shadow[4]; // stack offset -128
            int loop; // $t0
            { // line 111, offset 0x4a05c
              struct XZPAIR offset; // stack offset -64
              int rotate; // $a1
            } // line 118, offset 0x4a0e8
          } // line 121, offset 0x4a118
          { // line 133, offset 0x4a17c
          } // line 142, offset 0x4a1b8
        } // line 143, offset 0x4a1b8
        { // line 153, offset 0x4a218
        } // line 153, offset 0x4a218
        { // line 172, offset 0x4a304
          int i; // $a0
        } // line 179, offset 0x4a354
        { // line 184, offset 0x4a368
        } // line 201, offset 0x4a3e0
      } // line 245, offset 0x4a540
    } // line 245, offset 0x4a540
  } // line 255, offset 0x4a588
  { // line 270, offset 0x4a628
  } // line 270, offset 0x4a628
} // line 276, offset 0x4a658
/*
 * Offset 0x4A688, from D:\driver2\game\C\EVENT.C (lines 2560..2680)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
struct _sdPlane * /*$ra*/ EventSurface(struct VECTOR *pos /*$a0*/, struct _sdPlane *plane /*$s1*/)
{ // line 1, offset 0x4a688
  struct _EVENT *ev; // $s0
  int i; // $a2
  { // line 12, offset 0x4a700
    int dist; // $a3
    int end; // $a1
    int cos; // $a2
  } // line 63, offset 0x4a880
  { // line 68, offset 0x4a894
    int dist; // stack offset -24
    { // line 72, offset 0x4a8a4
      int sin; // $a3
      int cos; // $a2
      int height; // $t0
      int offset; // $a0
    } // line 104, offset 0x4aa20
  } // line 105, offset 0x4aa20
} // line 121, offset 0x4aa78
/*
 * Offset 0x4AA78, from D:\driver2\game\C\EVENT.C (lines 2718..2991)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
struct VECTOR * /*$ra*/ TriggerEvent(int i /*$s4*/)
{ // line 1, offset 0x4aa78
  static int stage[10]; // offset 0x200
  struct VECTOR *pos; // $s7
  { // line 8, offset 0x4aab0
    int loop; // $v1
  } // line 13, offset 0x4aad0
  { // line 21, offset 0x4ab20
    struct _EVENT *ev; // $a2
  } // line 22, offset 0x4ab20
  { // line 36, offset 0x4ac08
    { // line 39, offset 0x4ac08
      struct MissionTrain *train; // $s1
      { // line 45, offset 0x4ac38
      } // line 51, offset 0x4ac50
      { // line 56, offset 0x4ac5c
        struct _EVENT *ev; // $s0
        int count; // $s2
        int offset; // $s6
        { // line 67, offset 0x4acac
          int pos; // $a1
        } // line 67, offset 0x4acac
      } // line 99, offset 0x4ad88
    } // line 101, offset 0x4ad88
    { // line 113, offset 0x4adb8
      struct _EVENT *ev; // $v1
      int count; // $a0
    } // line 130, offset 0x4ae04
  } // line 142, offset 0x4ae28
  { // line 149, offset 0x4ae90
  } // line 179, offset 0x4af60
  { // line 187, offset 0x4afa8
    { // line 189, offset 0x4afa8
      int loop; // $s0
    } // line 205, offset 0x4b044
  } // line 223, offset 0x4b0d0
} // line 274, offset 0x4b29c
/*
 * Offset 0x4B29C, from D:\driver2\game\C\EVENT.C (lines 2999..3141)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SpecialCamera(enum SpecialCamera type /*$t2*/, int change /*$a1*/)
{ // line 1, offset 0x4b29c
  static int rememberCamera[3]; // offset 0x230
  static short boatCamera[6]; // offset 0x684
  { // line 14, offset 0x4b2e4
    int *hackCamera; // $a2
    short *boat; // $t3
  } // line 115, offset 0x4b540
} // line 143, offset 0x4b5fc
/*
 * Offset 0x4B5FC, from D:\driver2\game\C\EVENT.C (lines 3152..3277)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ DetonatorTimer()
{ // line 2, offset 0x4b5fc
  static struct SVECTOR rememberCameraAngle; // offset 0x30
  { // line 16, offset 0x4b698
    { // line 23, offset 0x4b6b0
      static int count; // offset 0x38
      { // line 27, offset 0x4b6cc
        struct VECTOR pos; // stack offset -32
      } // line 32, offset 0x4b700
      { // line 36, offset 0x4b720
        struct VECTOR pos; // stack offset -32
      } // line 37, offset 0x4b720
    } // line 52, offset 0x4b7c8
  } // line 58, offset 0x4b7dc
  { // line 66, offset 0x4b864
    struct _EVENT *ev; // $s0
    struct VECTOR pos; // stack offset -32
    { // line 95, offset 0x4b9b0
      struct VECTOR *epicentre; // $v1
    } // line 108, offset 0x4ba08
  } // line 123, offset 0x4ba8c
} // line 126, offset 0x4bab0
/*
 * Offset 0x4BAB0, from D:\driver2\game\C\EVENT.C (lines 3288..3312)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ MultiCarEvent(struct _TARGET *target /*$a0*/)
{ // line 1, offset 0x4bab0
  struct MULTICAR_DATA *data; // $s0
  int i; // $s1
  struct _EVENT *ev; // $s2
  { // line 13, offset 0x4baf8
    int n; // $a1
  } // line 15, offset 0x4baf8
} // line 25, offset 0x4bbd4
/*
 * Offset 0x4BBD4, from D:\driver2\game\C\EVENT.C (lines 483..511)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitEvents()
{
}
/*
 * Offset 0x4BC50, from D:\driver2\game\C\EVENT.C (lines 1107..1124)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ EventCollisions(struct _CAR_DATA *cp /*$a2*/, int type /*$a1*/)
{ // line 1, offset 0x4bc50
  static struct SVECTOR offset; // offset 0x18
} // line 18, offset 0x4bd2c
/*
 * Offset 0x4BD2C, from D:\driver2\game\C\EVENT.C (lines 2994..2995)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ OffsetTarget(struct VECTOR *target /*$a0*/)
{
}
/*
 * Offset 0x4BD6C, from D:\driver2\game\C\EVENT.C (lines 2684..2693)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MakeEventTrackable(struct _EVENT *ev /*$a0*/)
{ // line 1, offset 0x4bd6c
  struct _EVENT **p; // $v1
} // line 10, offset 0x4bda0
/*
 * Offset 0x4BDA0, from D:\driver2\game\C\EVENT.C (lines 2527..2557)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ OnBoat(struct VECTOR *pos /*$t1*/, struct _EVENT *ev /*$a1*/, int *dist /*$a2*/)
{ // line 1, offset 0x4bda0
  int halfBoatWidth; // $t0
  int halfBoatLength; // $a0
} // line 31, offset 0x4be24
/*
 * Offset 0x4BE24, from D:\driver2\game\C\EVENT.C (lines 2520..2523)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ BoatOffset(struct SVECTOR *offset /*$a0*/, struct _EVENT *ev /*$a1*/)
{
}
/*
 * Offset 0x4BE5C, from D:\driver2\game\C\EVENT.C (lines 402..414)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetElTrainRotation(struct _EVENT *ev /*$a1*/)
{
}
/*
 * Offset 0x4BEB8, from D:\driver2\game\C\EVENT.C (lines 471..478)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitDoor(struct FixedEvent *ev /*$a0*/, struct _EVENT ***e /*$a1*/, int *cEvents /*$a2*/)
{
}
/*
 * Offset 0x4BF54, from D:\driver2\game\C\EVENT.C (lines 974..979)
 * Stack frame base $sp, size 16
 * Saved registers at offset -4: s0 s1 s2 s3
 */
void /*$ra*/ InitEventCamera()
{
}
/*
 * Offset 0x4C014, from D:\driver2\game\C\EVENT.C (lines 983..987)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ResetEventCamera()
{
}
/*
 * Offset 0x4C0A4, from D:\driver2\game\C\EVENT.C (lines 1127..1149)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ NextNode(struct _EVENT *ev /*$a0*/)
{
}
/*
 * Offset 0x4C158, from D:\driver2\game\C\EVENT.C (lines 1452..1475)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetBridgeRotation(int timer /*$a0*/)
{ // line 1, offset 0x4c158
  int angle; // $v1
} // line 24, offset 0x4c208
/*
 * Offset 0x4C208, from D:\driver2\game\C\EVENT.C (lines 2696..2714)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ TriggerDoor(struct FixedEvent *door /*$a3*/, int *stage /*$a1*/, int sound /*$a2*/)
{
}
/*
 * Offset 0x4C280, from D:\driver2\game\C\EVENT.C (lines 3144..3149)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ScreenShake(int count /*$a0*/, struct SVECTOR *ang /*$s0*/)
{ // line 1, offset 0x4c280
} // line 6, offset 0x4c330
Source file(s) D:\driver2\game\C\FELONY.C+D:\driver2\game\FELONY.C, object file obj\felony.obj overlay id <none>

// 70 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct FELONY_DATA {
  struct FELONY_DELAY occurrenceDelay[12]; // size=48, offset=0
  struct FELONY_DELAY reoccurrenceDelay[12]; // size=48, offset=48
  struct FELONY_VALUE value[12]; // size=48, offset=96
  int pursuitFelonyScale; // size=0, offset=144
};
struct DRIVER2_STRAIGHT {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  unsigned short length; // size=0, offset=8
  short bing; // size=0, offset=10
  short angle; // size=0, offset=12
  short ConnectIdx[4]; // size=8, offset=14
  char NumLanes; // size=0, offset=22
  char LaneDirs; // size=0, offset=23
  char AILanes; // size=0, offset=24
  char packing; // size=0, offset=25
};
struct DRIVER2_JUNCTION {
  short ExitIdx[4]; // size=8, offset=0
  unsigned long flags; // size=0, offset=8
};
struct DRIVER2_CURVE {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  short start; // size=0, offset=8
  short end; // size=0, offset=10
  short ConnectIdx[4]; // size=8, offset=12
  short gradient; // size=0, offset=20
  short height; // size=0, offset=22
  char NumLanes; // size=0, offset=24
  char LaneDirs; // size=0, offset=25
  char inside; // size=0, offset=26
  char AILanes; // size=0, offset=27
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};

// 105 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct FELONY_DATA FELONY_DATA;
typedef struct DRIVER2_STRAIGHT DRIVER2_STRAIGHT;
typedef struct DRIVER2_JUNCTION DRIVER2_JUNCTION;
typedef struct DRIVER2_CURVE DRIVER2_CURVE;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;

// 0 labels

// 15 external declarations
extern short initialOccurrenceDelay[12]; // offset 0x0009ed98
extern short initialReccurrenceDelay[12]; // offset 0x0009edb0
extern struct FELONY_VALUE initialFelonyValue[12]; // offset 0x0009edc8
extern int test3; // offset 0x000aadf8
extern int test4; // offset 0x000aadfc
extern int test5; // offset 0x000aae00
extern int test6; // offset 0x000aae04
extern int test7; // offset 0x000aae08
extern int test8; // offset 0x000aae0c
extern int FelonyIncreaseTime; // offset 0x000aade8
extern int FelonyDecreaseTime; // offset 0x000aade4
extern int FelonyIncreaseTimer; // offset 0x000aadf0
extern int FelonyDecreaseTimer; // offset 0x000aadec
extern short playerLastRoad; // offset 0x000aadf4
extern char last_cop_phrase; // offset 0x000aade0

// 9 functions
/*
 * Offset 0x4C330, from D:\driver2\game\C\FELONY.C (lines 476..587)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ NoteFelony(struct FELONY_DATA *pFelonyData /*$a3*/, char type /*$s3*/, short scale /*$t0*/)
{ // line 1, offset 0x4c330
  int felonyTooLowForRoadblocks; // $s4
  { // line 2, offset 0x4c3a8
    struct FELONY_DELAY *pFelonyDelay; // $v1
  } // line 19, offset 0x4c3cc
  { // line 36, offset 0x4c400
    int additionalFelonyPoints; // $a0
  } // line 52, offset 0x4c514
  { // line 77, offset 0x4c630
    char rnd; // $s1
    int dir; // $a3
  } // line 107, offset 0x4c804
} // line 112, offset 0x4c894
/*
 * Offset 0x4C8B4, from D:\driver2\game\C\FELONY.C (lines 597..658)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ AdjustFelony(struct FELONY_DATA *pFelonyData /*$a0*/)
{ // line 1, offset 0x4c8b4
  { // line 52, offset 0x4cbe8
    struct FELONY_DELAY *pFelonyDelay; // $v1
  } // line 61, offset 0x4cc28
} // line 62, offset 0x4cc28
/*
 * Offset 0x4CC28, from D:\driver2\game\C\FELONY.C (lines 668..805)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CheckPlayerMiscFelonies()
{ // line 2, offset 0x4cc28
  struct FELONY_DATA *pFelonyData; // $s4
  struct DRIVER2_CURVE *cv; // $s5
  struct DRIVER2_STRAIGHT *st; // $s6
  struct _CAR_DATA *cp; // $s3
  struct VECTOR *carPos; // $s2
  int surfInd; // $s0
  { // line 22, offset 0x4ccc0
    char i; // $a1
    { // line 31, offset 0x4cd64
      struct DRIVER2_JUNCTION *jn; // $a2
      short exitId; // $s1
    } // line 47, offset 0x4ce0c
  } // line 48, offset 0x4ce0c
  { // line 48, offset 0x4ce0c
    char goingWrongWay; // $s7
    int lane; // $s0
    int dx; // $v1
    int dz; // $a0
    { // line 70, offset 0x4cfac
    } // line 80, offset 0x4d0d8
  } // line 90, offset 0x4d0f8
  { // line 111, offset 0x4d198
    int maxSpeed; // $a0
    int limit; // $v1
  } // line 137, offset 0x4d250
} // line 138, offset 0x4d250
/*
 * Offset 0x4D280, from D:\driver2\game\C\FELONY.C (lines 810..819)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitFelonySystem()
{
}
/*
 * Offset 0x4D2B8, from D:\driver2\game\C\FELONY.C (lines 824..852)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CarHitByPlayer(struct _CAR_DATA *victim /*$a0*/, int howHard /*$a2*/)
{
}
/*
 * Offset 0x4D364, from D:\driver2\game\C\FELONY.C (lines 413..421)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitFelonyDelayArray(struct FELONY_DELAY *pFelonyDelay /*$a0*/, short *pMaximum /*$a1*/, int count /*$a2*/)
{ // line 1, offset 0x4d364
  struct FELONY_DELAY *pCurrent; // $a0
} // line 9, offset 0x4d3a0
/*
 * Offset 0x4D3A0, from D:\driver2\game\C\FELONY.C (lines 431..445)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitFelonyData(struct FELONY_DATA *pFelonyData /*$s0*/)
{ // line 1, offset 0x4d3a0
  { // line 1, offset 0x4d3a0
    struct FELONY_VALUE *pSrc; // $v1
    struct FELONY_VALUE *pDest; // $s0
    struct FELONY_VALUE *pEnd; // $a0
  } // line 14, offset 0x4d420
} // line 15, offset 0x4d420
/*
 * Offset 0x4D420, from D:\driver2\game\C\FELONY.C (lines 450..451)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetCarHeading(int direction /*$a0*/)
{
}
/*
 * Offset 0x4D430, from D:\driver2\game\C\FELONY.C (lines 454..465)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
char /*$ra*/ GetCarDirectionOfTravel(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x4d430
  int direction; // $v0
} // line 12, offset 0x4d478
Source file(s) D:\driver2\game\C\FMVPLAY.C+D:\driver2\game\FMVPLAY.C, object file obj\fmvplay.obj overlay id <none>

// 28 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct RENDER_ARG {
  unsigned char render; // size=0, offset=0
  unsigned char credits; // size=0, offset=1
  unsigned short recap; // size=0, offset=2
};
struct RENDER_ARGS {
  unsigned char nRenders; // size=0, offset=0
  unsigned char subtitle; // size=0, offset=1
  char screenx; // size=0, offset=2
  char screeny; // size=0, offset=3
  struct RENDER_ARG Args[4]; // size=16, offset=4
};

// 53 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct RENDER_ARG RENDER_ARG;
typedef struct RENDER_ARGS RENDER_ARGS;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();

// 0 labels

// 0 external declarations

// 3 functions
/*
 * Offset 0x4D478, from D:\driver2\game\C\FMVPLAY.C (lines 23..47)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ ReInitSystem()
{ // line 2, offset 0x4d478
} // line 25, offset 0x4d518
/*
 * Offset 0x4D518, from D:\driver2\game\C\FMVPLAY.C (lines 68..95)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ PlayFMV(unsigned char render /*$s0*/)
{ // line 1, offset 0x4d518
  struct RENDER_ARGS args; // stack offset -40
  { // line 7, offset 0x4d544
  } // line 7, offset 0x4d544
  { // line 12, offset 0x4d570
  } // line 13, offset 0x4d578
} // line 28, offset 0x4d5d0
/*
 * Offset 0x4D5D0, from D:\driver2\game\C\FMVPLAY.C (lines 107..140)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PlayRender(struct RENDER_ARGS *args /*$s0*/)
{ // line 1, offset 0x4d5d0
  static unsigned long oldsp; // offset 0x0
  { // line 22, offset 0x4d634
  } // line 31, offset 0x4d678
} // line 34, offset 0x4d690
Source file(s) D:\driver2\game\C\GAMESND.C+D:\driver2\game\GAMESND.C, object file obj\gamesnd.OBJ overlay id <none>

// 80 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __envsound {
  unsigned char type; // size=0, offset=0
  unsigned char flags; // size=0, offset=1
  struct VECTOR pos; // size=16, offset=4
  struct VECTOR pos2; // size=16, offset=20
  int bank; // size=0, offset=36
  int sample; // size=0, offset=40
  int vol; // size=0, offset=44
};
struct __envsoundtags {
  int frame_cnt; // size=0, offset=0
  int func_cnt; // size=0, offset=4
  int num_envsnds; // size=0, offset=8
  int envsnd_cnt; // size=0, offset=12
};
struct __envsoundinfo {
  struct VECTOR eff_pos[4]; // size=64, offset=0
  struct VECTOR cam_pos; // size=16, offset=64
  float g[4]; // size=16, offset=80
  int this[4]; // size=16, offset=96
  int playing_sound[4]; // size=16, offset=112
  int chan[4]; // size=16, offset=128
  unsigned long flags; // size=0, offset=144
};
struct SPEECH_QUEUE {
  char allowed; // size=0, offset=0
  char chan; // size=0, offset=1
  char is_playing; // size=0, offset=2
  int count; // size=0, offset=4
  char reverb; // size=0, offset=8
  int slot[7]; // size=28, offset=12
};
struct __othercarsound {
  int car; // size=0, offset=0
  int chan; // size=0, offset=4
  char in_use; // size=0, offset=8
  char stopped; // size=0, offset=9
  char idle; // size=0, offset=10
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct __tunnelinfo {
  char num_tunnels; // size=0, offset=0
  char tunnel_cnt; // size=0, offset=1
  struct __tunnelcoords coords[29]; // size=928, offset=4
};
struct __bitfield64 {
  long h; // size=0, offset=0
  long l; // size=0, offset=4
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct XMCHANNEL {
  unsigned short Octave; // size=0, offset=0
  short LVol; // size=0, offset=2
  short RVol; // size=0, offset=4
  short OldLVol; // size=0, offset=6
  short OldRVol; // size=0, offset=8
  unsigned short OldPeriod; // size=0, offset=10
  unsigned char OldSample; // size=0, offset=12
  unsigned long OldSOff; // size=0, offset=16
  unsigned long SOffset; // size=0, offset=20
  unsigned char nothing; // size=0, offset=24
  unsigned char ChDead; // size=0, offset=25
  unsigned char panenvflg; // size=0, offset=26
  unsigned char panenvpts; // size=0, offset=27
  unsigned char panenvsus; // size=0, offset=28
  unsigned char panenvbeg; // size=0, offset=29
  unsigned char panenvend; // size=0, offset=30
  short panenvp; // size=0, offset=32
  unsigned short panenva; // size=0, offset=34
  unsigned short panenvb; // size=0, offset=36
  unsigned short keyoffspd; // size=0, offset=38
  unsigned char envflg; // size=0, offset=40
  unsigned char envpts; // size=0, offset=41
  unsigned char envsus; // size=0, offset=42
  unsigned char envbeg; // size=0, offset=43
  unsigned char envend; // size=0, offset=44
  short envp; // size=0, offset=46
  unsigned short enva; // size=0, offset=48
  unsigned short envb; // size=0, offset=50
  unsigned char ins; // size=0, offset=52
  unsigned char vol; // size=0, offset=53
  unsigned char dat; // size=0, offset=54
  unsigned char datold; // size=0, offset=55
  unsigned char eff; // size=0, offset=56
  unsigned char not; // size=0, offset=57
  unsigned char oldvslide; // size=0, offset=58
  unsigned char oldfvslide; // size=0, offset=59
  unsigned char oldfslide; // size=0, offset=60
  short fadevol; // size=0, offset=62
  unsigned char keyon; // size=0, offset=64
  unsigned char kick; // size=0, offset=65
  unsigned char sample; // size=0, offset=66
  short handle; // size=0, offset=68
  unsigned long start; // size=0, offset=72
  unsigned char panning; // size=0, offset=76
  unsigned char pansspd; // size=0, offset=77
  char volume; // size=0, offset=78
  unsigned short period; // size=0, offset=80
  unsigned short SPUPitch; // size=0, offset=82
  char transpose; // size=0, offset=84
  unsigned char note; // size=0, offset=85
  short ownper; // size=0, offset=86
  short ownvol; // size=0, offset=88
  short UserVol; // size=0, offset=90
  char retrig; // size=0, offset=92
  unsigned short c2spd; // size=0, offset=94
  char tmpvolume; // size=0, offset=96
  unsigned short tmpperiod; // size=0, offset=98
  unsigned short wantedperiod; // size=0, offset=100
  unsigned short slidespeed; // size=0, offset=102
  unsigned short portspeed; // size=0, offset=104
  unsigned char s3mtremor; // size=0, offset=106
  unsigned char s3mvolslide; // size=0, offset=107
  unsigned char s3mrtgspeed; // size=0, offset=108
  unsigned char s3mrtgslide; // size=0, offset=109
  unsigned char glissando; // size=0, offset=110
  unsigned char wavecontrol; // size=0, offset=111
  char vibpos; // size=0, offset=112
  unsigned char vibspd; // size=0, offset=113
  unsigned char vibdepth; // size=0, offset=114
  char trmpos; // size=0, offset=115
  unsigned char trmspd; // size=0, offset=116
  unsigned char trmdepth; // size=0, offset=117
  unsigned char SPUChannel; // size=0, offset=118
  unsigned char Dolby; // size=0, offset=119
};
struct GEAR_DESC {
  int lowidl_ws; // size=0, offset=0
  int low_ws; // size=0, offset=4
  int hi_ws; // size=0, offset=8
  int ratio_ac; // size=0, offset=12
  int ratio_id; // size=0, offset=16
};

// 114 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __envsound envsound;
typedef struct __envsoundtags envsoundtags;
typedef struct __envsoundinfo envsoundinfo;
typedef struct SPEECH_QUEUE SPEECH_QUEUE;
typedef struct __othercarsound othercarsound;
typedef struct __tunnelcoords tunnelcoords;
typedef struct __tunnelinfo tunnelinfo;
typedef struct __bitfield64 bitfield64;
typedef struct CAR_POLY CAR_POLY;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct XMCHANNEL XMCHANNEL;
typedef struct GEAR_DESC GEAR_DESC;
typedef void *va_list;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 21 external declarations
extern struct GEAR_DESC geard[2][4]; // offset 0x0009ef5c
extern int coptrackpos[8]; // offset 0x0009effc
extern int maxrevdrop; // offset 0x000aa518
extern int maxrevrise; // offset 0x000aa51c
static int copmusic; // offset 0x000aa520
extern int TimeSinceLastSpeech; // offset 0x000aae34
extern char first_offence; // offset 0x000aae31
extern char phrase_top; // offset 0x000aae30
static int loudhail_time; // offset 0x000aae24
static char cop_model; // offset 0x000aae28
static char cop_bank; // offset 0x000aae29
static unsigned int horn_time; // offset 0x000aae2c
extern struct SPEECH_QUEUE gSpeechQueue; // offset 0x000d0180
extern struct __tunnelinfo tunnels; // offset 0x000d01a8
static struct __envsound envsnd[32]; // offset 0x000cdf20
static struct __envsoundinfo ESdata[2]; // offset 0x000ce520
static struct __envsoundtags EStags; // offset 0x000ce650
static struct __othercarsound car_noise[4]; // offset 0x000ce660
static struct __othercarsound siren_noise[2]; // offset 0x000ce690
static char header_pt[3868]; // offset 0x000ce6b0
static char song_pt[2992]; // offset 0x000cf5d0

// 40 functions
/*
 * Offset 0x4D690, from D:\driver2\game\C\GAMESND.C (lines 171..182)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ ResidentModelsBodge()
{ // line 1, offset 0x4d690
  int i; // $a1
  int j; // $a2
} // line 12, offset 0x4d784
/*
 * Offset 0x4D784, from D:\driver2\game\C\GAMESND.C (lines 228..294)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ LoadLevelSFX(int missionNum /*$s1*/)
{ // line 1, offset 0x4d784
  char city_night_fx; // $s2
  int i; // $s0
  { // line 38, offset 0x4dad8
    int mission; // $a1
  } // line 41, offset 0x4dc70
} // line 67, offset 0x4de30
/*
 * Offset 0x4DE30, from D:\driver2\game\C\GAMESND.C (lines 305..363)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ StartGameSounds()
{ // line 2, offset 0x4de30
  struct VECTOR *cp; // $s2
  int i; // $s1
  { // line 10, offset 0x4de94
    int siren; // $a2
    int car_model; // $s0
  } // line 28, offset 0x4e07c
} // line 59, offset 0x4e188
/*
 * Offset 0x4E188, from D:\driver2\game\C\GAMESND.C (lines 404..438)
 * Stack frame base $sp, size 0
 */
unsigned short /*$ra*/ GetEngineRevs(struct _CAR_DATA *cp /*$t2*/)
{ // line 1, offset 0x4e188
  int gear; // $a1
  int lastgear; // $a0
  int ws; // $a2
  int acc; // $t1
  int type; // $t0
} // line 35, offset 0x4e2e8
/*
 * Offset 0x4E2E8, from D:\driver2\game\C\GAMESND.C (lines 458..512)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ ControlCarRevs(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x4e2e8
  unsigned short oldRevs; // $s2
  unsigned short desiredRevs; // $v1
  unsigned short newRevs; // $a0
  int acc; // $s3
  char spin; // $s4
  char player_id; // $s1
  { // line 40, offset 0x4e414
    int revsmax; // $a3
  } // line 46, offset 0x4e4d4
} // line 55, offset 0x4e560
/*
 * Offset 0x4E560, from D:\driver2\game\C\GAMESND.C (lines 595..634)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ControlSpeech(struct SPEECH_QUEUE *pSpeechQueue /*$s0*/)
{ // line 1, offset 0x4e560
} // line 40, offset 0x4e700
/*
 * Offset 0x4E710, from D:\driver2\game\C\GAMESND.C (lines 721..725)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitDopplerSFX()
{ // line 1, offset 0x4e710
  int i; // $v1
} // line 5, offset 0x4e790
/*
 * Offset 0x4E790, from D:\driver2\game\C\GAMESND.C (lines 734..943)
 * Stack frame base $sp, size 200
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DoDopplerSFX()
{ // line 1, offset 0x4e790
  int i; // $s1
  int j; // $s0
  int num_noisy_cars; // $s5
  unsigned long car_dist[20]; // stack offset -176
  unsigned short indexlist[20]; // stack offset -96
  struct _CAR_DATA *car_ptr; // $s2
  struct VECTOR *pp; // $a1
  unsigned long car_flags; // $s4
  char sirens; // stack offset -56
  { // line 91, offset 0x4ecb8
    int siren; // $v0
  } // line 108, offset 0x4edc8
  { // line 156, offset 0x4f09c
    int model; // $v1
  } // line 158, offset 0x4f134
  { // line 175, offset 0x4f1bc
    char old_idle; // $a1
    { // line 180, offset 0x4f240
      int model; // $v1
    } // line 190, offset 0x4f314
  } // line 195, offset 0x4f368
} // line 210, offset 0x4f4a0
/*
 * Offset 0x4F4A0, from D:\driver2\game\C\GAMESND.C (lines 946..961)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DoPoliceLoudhailer(int cars /*$s1*/, unsigned short *indexlist /*$s2*/, unsigned long *dist /*$s3*/)
{ // line 1, offset 0x4f4a0
  int i; // $t1
  int rnd; // $t0
  int time; // $s0
  { // line 5, offset 0x4f560
    struct _CAR_DATA *car_ptr; // $a3
  } // line 13, offset 0x4f624
} // line 16, offset 0x4f64c
/*
 * Offset 0x4F668, from D:\driver2\game\C\GAMESND.C (lines 975..1011)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CollisionSound(char player_id /*$s0*/, struct _CAR_DATA *cp /*$s5*/, int impact /*$s2*/, int car_car /*$s7*/)
{ // line 1, offset 0x4f668
  long *here; // $s3
  char chan; // $s1
  char crash; // $s6
  char size; // $s4
  { // line 8, offset 0x4f6f0
    unsigned long p0dst; // $a1
    unsigned long p1dst; // $a0
  } // line 9, offset 0x4f6f0
  { // line 18, offset 0x4f784
    { // line 25, offset 0x4f898
    } // line 32, offset 0x4f930
  } // line 36, offset 0x4f954
} // line 37, offset 0x4f954
/*
 * Offset 0x4F984, from D:\driver2\game\C\GAMESND.C (lines 1019..1047)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ ExplosionSound(struct VECTOR *pos /*$s4*/, int type /*$s0*/)
{ // line 1, offset 0x4f984
  int bang; // $s5
  int pitch; // $t0
  int rnd; // $s3
  struct VECTOR P; // stack offset -48
  int sc1; // $s2
  int sc2; // $s1
} // line 29, offset 0x4fb70
/*
 * Offset 0x4FB94, from D:\driver2\game\C\GAMESND.C (lines 1052..1059)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ JerichoSpeak()
{ // line 1, offset 0x4fb94
  static unsigned int j_said; // offset 0x0
  int rnd; // $a1
} // line 8, offset 0x4fc90
/*
 * Offset 0x4FC90, from D:\driver2\game\C\GAMESND.C (lines 1103..1182)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ SoundTasks()
{ // line 1, offset 0x4fc90
  int i; // $s2
  struct _CAR_DATA *cp; // $s1
} // line 80, offset 0x500e4
/*
 * Offset 0x500E4, from D:\driver2\game\C\GAMESND.C (lines 1195..1255)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ InitMusic(int musicnum /*$s0*/)
{ // line 1, offset 0x500e4
  static char *music_pt; // offset 0xc
  static char *sample_pt; // offset 0x10
  static char xm_samples; // offset 0x4
  int musicpos[3]; // stack offset -32
  char *name; // $s1
  int sample_len; // $s0
  int music_len; // $t0
  { // line 45, offset 0x501a4
  } // line 52, offset 0x50208
} // line 61, offset 0x5027c
/*
 * Offset 0x5027C, from D:\driver2\game\C\GAMESND.C (lines 1350..1363)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ Tunnels(struct __tunnelinfo *T /*$a0*/)
{ // line 1, offset 0x5027c
  int i; // $t2
  int verb; // $t4
} // line 14, offset 0x50400
/*
 * Offset 0x50400, from D:\driver2\game\C\GAMESND.C (lines 1366..1430)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ AddTunnels(int level /*$a0*/)
{
}
/*
 * Offset 0x50C08, from D:\driver2\game\C\GAMESND.C (lines 1577..1634)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AddEnvSnd(int type /*$t4*/, char flags /*$a1*/, int bank /*$a2*/, int sample /*$a3*/, int vol /*stack 16*/, long px /*stack 20*/, long pz /*stack 24*/, int vol /*$v1*/, long px /*$t2*/)
{ // line 1, offset 0x50c08
  void *data; // $a1
  struct __envsound *ep; // $t1
  struct __envsoundtags *T; // $t0
  long s; // $a1
} // line 58, offset 0x50e08
/*
 * Offset 0x50E08, from D:\driver2\game\C\GAMESND.C (lines 1646..1703)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ IdentifyZone(struct __envsound *ep /*$a3*/, struct __envsoundinfo *E /*stack 4*/, int pl /*$a2*/)
{ // line 1, offset 0x50e08
  int i; // $s7
  int j; // $fp
  int tmp[4]; // stack offset -96
  float d; // $s0
  float _g[4]; // stack offset -80
  struct __bitfield64 zones; // stack offset -64
} // line 58, offset 0x514bc
/*
 * Offset 0x514BC, from D:\driver2\game\C\GAMESND.C (lines 1706..1741)
 * Stack frame base $sp, size 8
 * Saved registers at offset -4: s0 s1
 */
void /*$ra*/ CalcEffPos(struct __envsound *ep /*$s1*/, struct __envsoundinfo *E /*$a1*/, int pl /*$a2*/)
{ // line 1, offset 0x514bc
  int j; // $t5
  int me; // $t2
} // line 36, offset 0x517d0
/*
 * Offset 0x517D0, from D:\driver2\game\C\GAMESND.C (lines 1744..1809)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CalcEffPos2(struct __envsound *ep /*stack 0*/, struct __envsoundinfo *E /*$s7*/, int pl /*$a2*/)
{ // line 1, offset 0x517d0
  int j; // stack offset -56
  int me; // $s5
  { // line 12, offset 0x518d8
  } // line 12, offset 0x518d8
} // line 66, offset 0x51f0c
/*
 * Offset 0x51F0C, from D:\driver2\game\C\GAMESND.C (lines 1812..1840)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ UpdateEnvSnd(struct __envsound *ep /*stack 0*/, struct __envsoundinfo *E /*$s4*/, int pl /*stack 8*/)
{ // line 1, offset 0x51f0c
  int i; // stack offset -48
} // line 29, offset 0x52168
/*
 * Offset 0x52168, from D:\driver2\game\C\GAMESND.C (lines 1545..1549)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ SetEnvSndVol(int snd /*$a0*/, int vol /*$a1*/)
{ // line 1, offset 0x52168
  int was; // $v0
} // line 5, offset 0x52190
/*
 * Offset 0x52190, from D:\driver2\game\C\GAMESND.C (lines 665..669)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ CopSay(int phrase /*$s1*/, int direction /*$s2*/)
{
}
/*
 * Offset 0x5228C, from D:\driver2\game\C\GAMESND.C (lines 562..582)
 * Stack frame base $sp, size 0
 */
char /*$ra*/ PlaySpeech(struct SPEECH_QUEUE *pSpeechQueue /*$a0*/, int sound /*$a1*/)
{ // line 1, offset 0x5228c
  char result; // $v0
  int i; // $a2
} // line 21, offset 0x522ec
/*
 * Offset 0x522EC, from D:\driver2\game\C\GAMESND.C (lines 127..150)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CarHasSiren(int index /*$a0*/)
{
}
/*
 * Offset 0x52388, from D:\driver2\game\C\GAMESND.C (lines 1510..1537)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitEnvSnd(int num_envsnds /*$a0*/)
{ // line 1, offset 0x52388
  int i; // $v1
  int p; // $a1
  struct __envsoundtags *T; // $t1
} // line 28, offset 0x5243c
/*
 * Offset 0x5243C, from D:\driver2\game\C\GAMESND.C (lines 1317..1324)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitTunnels(char n /*$a0*/)
{ // line 1, offset 0x5243c
  struct __tunnelinfo *T; // $a1
} // line 8, offset 0x52460
/*
 * Offset 0x52460, from D:\driver2\game\C\GAMESND.C (lines 98..118)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ LoadBankFromLump(int bank /*$s3*/, int lump /*$s2*/)
{ // line 1, offset 0x52460
  static unsigned int blockLimit[73]; // offset 0x10
  int size; // $s0
  char *name; // $s1
} // line 21, offset 0x52510
/*
 * Offset 0x52510, from D:\driver2\game\C\GAMESND.C (lines 161..168)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ SpecialVehicleKludge(char vehicle2 /*$a0*/)
{ // line 1, offset 0x52510
  static char kludge_bank[4][3]; // offset 0x134
} // line 8, offset 0x52540
/*
 * Offset 0x52540, from D:\driver2\game\C\GAMESND.C (lines 197..218)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ MapCarIndexToBank(int index /*$a1*/)
{ // line 1, offset 0x52540
  int *RM; // $a2
  static char car_banks[4][9]; // offset 0x140
} // line 22, offset 0x525f8
/*
 * Offset 0x525F8, from D:\driver2\game\C\GAMESND.C (lines 515..529)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DoSpeech(int chan /*$a0*/, int sound /*$a2*/)
{
}
/*
 * Offset 0x52654, from D:\driver2\game\C\GAMESND.C (lines 587..590)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitSpeechQueue(struct SPEECH_QUEUE *pSpeechQueue /*$s0*/)
{
}
/*
 * Offset 0x52694, from D:\driver2\game\C\GAMESND.C (lines 677..679)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ BodSay(int phrase /*$a1*/)
{
}
/*
 * Offset 0x526D0, from D:\driver2\game\C\GAMESND.C (lines 686..690)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ MissionSay(int phrase /*$a0*/)
{ // line 1, offset 0x526d0
} // line 5, offset 0x526fc
/*
 * Offset 0x5270C, from D:\driver2\game\C\GAMESND.C (lines 700..712)
 * Stack frame base $sp, size 16
 */
long /*$ra*/ jsqrt(unsigned long a /*$a0*/)
{ // line 1, offset 0x5270c
  long b1; // $a1
  long b0; // $v1
} // line 13, offset 0x527c0
/*
 * Offset 0x527C0, from D:\driver2\game\C\GAMESND.C (lines 1085..1098)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ FunkUpDaBGMTunez(int funk /*$a0*/)
{
}
/*
 * Offset 0x52848, from D:\driver2\game\C\GAMESND.C (lines 1331..1343)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AddTunnel(long x1 /*$t1*/, long y1 /*$a1*/, long z1 /*$a2*/, long x2 /*$a3*/, long y2 /*stack 16*/, long z2 /*stack 20*/, long y2 /*$v1*/, long z2 /*$v0*/)
{ // line 1, offset 0x52848
  struct __tunnelinfo *T; // $t0
} // line 13, offset 0x528fc
/*
 * Offset 0x52904, from D:\driver2\game\C\GAMESND.C (lines 1555..1560)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetEnvSndPos(int snd /*$a0*/, long px /*$a1*/, long pz /*$a2*/)
{
}
/*
 * Offset 0x52948, from D:\driver2\game\C\GAMESND.C (lines 1852..1852)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitLeadHorn()
{
}
/*
 * Offset 0x52954, from D:\driver2\game\C\GAMESND.C (lines 1855..1866)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ LeadHorn(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x52954
  static unsigned int rnd; // offset 0x8
} // line 12, offset 0x52a28
Source file(s) D:\driver2\game\C\GLAUNCH.C+D:\driver2\game\GLAUNCH.C, object file obj\glaunch.obj overlay id <none>

// 46 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PSXSCREEN {
  char index; // size=0, offset=0
  unsigned char numButtons; // size=0, offset=1
  char userFunctionNum; // size=0, offset=2
  struct PSXBUTTON buttons[8]; // size=480, offset=4
};
enum GAMEMODE : char {
  GAMEMODE_NORMAL = 0,
  GAMEMODE_QUIT = 1,
  GAMEMODE_RESTART = 2,
  GAMEMODE_REPLAY = 3,
  GAMEMODE_DIRECTOR = 4,
  GAMEMODE_NEXTMISSION = 5,
  GAMEMODE_DEMO = 6,
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct RENDER_ARG {
  unsigned char render; // size=0, offset=0
  unsigned char credits; // size=0, offset=1
  unsigned short recap; // size=0, offset=2
};
struct RENDER_ARGS {
  unsigned char nRenders; // size=0, offset=0
  unsigned char subtitle; // size=0, offset=1
  char screenx; // size=0, offset=2
  char screeny; // size=0, offset=3
  struct RENDER_ARG Args[4]; // size=16, offset=4
};
struct MISSION_STEP {
  unsigned char flags : 3; // offset=0.0
  unsigned char recap : 5; // offset=0.3
  unsigned char data : 7; // offset=1.0
  unsigned char disc : 1; // offset=1.7
};

// 75 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PSXSCREEN PSXSCREEN;
typedef enum GAMEMODE GAMEMODE;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct RENDER_ARG RENDER_ARG;
typedef struct RENDER_ARGS RENDER_ARGS;
typedef struct MISSION_STEP MISSION_STEP;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();

// 0 labels

// 19 external declarations
extern int feVariableSave[4]; // offset 0x0009f0cc
static struct MISSION_STEP MissionLadder[68]; // offset 0x0009f01c
static unsigned short RecapFrameLength[19]; // offset 0x0009f0a4
extern int bReturnToMain; // offset 0x000aa544
extern enum GAMEMODE CurrentGameMode; // offset 0x000aa548
extern enum GAMEMODE WantedGameMode; // offset 0x000aa549
extern int fakeOtherPlayer; // offset 0x000aa54c
extern int gMissionLadderPos; // offset 0x000aa550
extern int gChaseNumber; // offset 0x000aa538
extern int gRandomChase; // offset 0x000aa53c
extern int gSubGameNumber; // offset 0x000aa540
extern int gFurthestMission; // offset 0x000aa554
extern int gWantNight; // offset 0x000aa558
extern int gIdleReplay; // offset 0x000aa55c
static int gLastChase; // offset 0x000aa534
extern int ScreenDepth; // offset 0x000aae38
extern struct PSXSCREEN *pScreenStack[10]; // offset 0x000d0580
extern struct PSXBUTTON *pButtonStack[10]; // offset 0x000d05a8
extern char *ScreenNames[12]; // offset 0x000d0550

// 8 functions
/*
 * Offset 0x52A28, from D:\driver2\game\C\GLAUNCH.C (lines 834..1010)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ GameStart()
{ // line 2, offset 0x52a28
  struct RECT rect; // stack offset -16
  int oldVMode; // $s0
  int SurvivalCopSettingsBackup; // $s0
} // line 177, offset 0x52e98
/*
 * Offset 0x52E98, from D:\driver2\game\C\GLAUNCH.C (lines 1030..1102)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ReInitFrontend()
{ // line 2, offset 0x52e98
  struct RECT rect; // stack offset -24
} // line 73, offset 0x52fe8
/*
 * Offset 0x52FE8, from D:\driver2\game\C\GLAUNCH.C (lines 1105..1214)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ RunMissionLadder(int newgame /*$a1*/)
{ // line 1, offset 0x52fe8
  struct MISSION_STEP *CurrentStep; // $s0
  struct RENDER_ARGS RenderArgs; // stack offset -48
  int quit; // $s3
  { // line 38, offset 0x530a4
  } // line 38, offset 0x530a4
  { // line 43, offset 0x530b4
  } // line 44, offset 0x530bc
  { // line 48, offset 0x530cc
  } // line 52, offset 0x530e8
  { // line 58, offset 0x53134
    { // line 67, offset 0x53198
    } // line 70, offset 0x531ac
  } // line 107, offset 0x5328c
} // line 110, offset 0x532b8
/*
 * Offset 0x532B8, from D:\driver2\game\C\GLAUNCH.C (lines 1279..1414)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ LaunchGame()
{ // line 2, offset 0x532b8
  struct RECT rect; // stack offset -16
  int quit; // $s0
} // line 136, offset 0x535d8
/*
 * Offset 0x535D8, from D:\driver2\game\C\GLAUNCH.C (lines 1222..1249)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ GetRandomChase()
{ // line 2, offset 0x535d8
  int bump; // $s1
} // line 28, offset 0x5369c
/*
 * Offset 0x536B0, from D:\driver2\game\C\GLAUNCH.C (lines 1018..1020)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ StartRender(int renderNum /*$a0*/)
{
}
/*
 * Offset 0x536D8, from D:\driver2\game\C\GLAUNCH.C (lines 1252..1267)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ FindPrevMissionFromLadderPos(int pos /*$a0*/)
{ // line 2, offset 0x536d8
} // line 16, offset 0x53740
/*
 * Offset 0x53740, from D:\driver2\game\C\GLAUNCH.C (lines 1417..1456)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ FindMissionLadderPos(int mission /*$a0*/)
{ // line 1, offset 0x53740
  struct MISSION_STEP *step; // $a1
  int pos; // $a2
} // line 40, offset 0x53814
Source file(s) D:\driver2\game\C\HANDLING.C+D:\driver2\game\HANDLING.C, object file obj\handling.OBJ overlay id <none>

// 80 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct TILE {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short w; // size=0, offset=12
  short h; // size=0, offset=14
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct BOUND_BOX {
  int x0; // size=0, offset=0
  int y0; // size=0, offset=4
  int z0; // size=0, offset=8
  int x1; // size=0, offset=12
  int y1; // size=0, offset=16
  int z1; // size=0, offset=20
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_TYPE {
  char frictionScaleRatio; // size=0, offset=0
  char aggressiveBraking; // size=0, offset=1
  char fourWheelDrive; // size=0, offset=2
  char autoBrakeOn; // size=0, offset=3
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CHEATS {
  int RearWheelSteer; // size=0, offset=0
  int MiniCars; // size=0, offset=4
  int Stilts; // size=0, offset=8
  int LowGravity; // size=0, offset=12
  int Australia; // size=0, offset=16
  int MagicMirror; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _sdPlane {
  short surface; // size=0, offset=0
  short a; // size=0, offset=2
  short b; // size=0, offset=4
  short c; // size=0, offset=6
  int d; // size=0, offset=8
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};

// 111 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct TILE TILE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct _CAR_DATA CAR_DATA;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct BOUND_BOX BOUND_BOX;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_TYPE HANDLING_TYPE;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CHEATS CHEATS;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct MAPPING MAPPING;
typedef struct UV UV;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _sdPlane sdPlane;
typedef struct MR_TIMER MR_TIMER;
typedef struct CAR_POLY CAR_POLY;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct __tunnelcoords tunnelcoords;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 21 external declarations
extern struct _HANDLING_TYPE handlingType[7]; // offset 0x0009f0dc
extern struct CAR_COSMETICS src_cosmetics[20]; // offset 0x0009f0f8
extern int playerghost; // offset 0x000aa574
extern int autobrakeon; // offset 0x000aa560
extern int gPlayerCarDamage; // offset 0x000aa564
extern char DebrisTimer; // offset 0x000aa568
extern int last_track_state; // offset 0x000aa56c
extern int doWheels; // offset 0x000aa570
extern int playerhitcopsanyway; // offset 0x000aa578
extern long *savemapinfo; // offset 0x000aa57c
extern int num_active_cars; // offset 0x000aae50
extern int gTimeInWater; // offset 0x000aae54
static int hSubShad; // offset 0x000aae40
extern char continuous_track; // offset 0x000aae58
extern char rear_only; // offset 0x000aae59
extern struct SVECTOR delta; // offset 0x000aae48
extern struct CAR_COSMETICS car_cosmetics[5]; // offset 0x000d4bd0
extern struct CHEATS cheats; // offset 0x000d1250
extern struct _CAR_DATA car_data[22]; // offset 0x000d1268
extern struct BOUND_BOX bbox[20]; // offset 0x000d5070
extern struct _CAR_DATA *active_car_list[20]; // offset 0x000d1200

// 19 functions
/*
 * Offset 0x5381C, from D:\driver2\game\C\HANDLING.C (lines 998..1039)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ InitCarPhysics(struct _CAR_DATA *cp /*$s0*/, long *startpos[4] /*$t0*/, int direction /*$a2*/)
{ // line 1, offset 0x5381c
  int ty; // $v1
  int dz; // $s1
  int odz; // $a3
  { // line 6, offset 0x53890
    unsigned long *dst; // $a1
  } // line 6, offset 0x53890
} // line 42, offset 0x539e8
/*
 * Offset 0x539E8, from D:\driver2\game\C\HANDLING.C (lines 1055..1074)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ TempBuildHandlingMatrix(struct _CAR_DATA *cp /*$s0*/, int init /*$a1*/)
{ // line 1, offset 0x539e8
  int ty; // $v1
  int dz; // $a3
} // line 20, offset 0x53b08
/*
 * Offset 0x53B08, from D:\driver2\game\C\HANDLING.C (lines 1079..1102)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ UpdateCarPoints(struct CAR_COSMETICS *carCos /*$a0*/)
{ // line 1, offset 0x53b08
  struct SVECTOR *groundCollPoints; // $a1
  struct SVECTOR *wheelPoints; // $a3
  int i; // $a2
} // line 24, offset 0x53c00
/*
 * Offset 0x53C00, from D:\driver2\game\C\HANDLING.C (lines 1192..1698)
 * Stack frame base $sp, size 272
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ GlobalTimeStep()
{ // line 2, offset 0x53c00
  int i; // $fp
  int RKstep; // stack offset -84
  int subframe; // stack offset -80
  struct _CAR_DATA *c0; // $s0
  static union RigidBodyState _tp[20]; // offset 0x0
  static union RigidBodyState _d0[20]; // offset 0x410
  static union RigidBodyState _d1[20]; // offset 0x820
  { // line 76, offset 0x53c6c
    struct _CAR_DATA *c0; // $t2
    union RigidBodyState *st; // $t1
    { // line 91, offset 0x53d2c
      int s; // $v0
    } // line 101, offset 0x53d90
    { // line 109, offset 0x53e18
      long AV[4]; // stack offset -248
      long delta_orientation[4]; // stack offset -232
    } // line 129, offset 0x53ff8
  } // line 130, offset 0x53ff8
  { // line 142, offset 0x54024
    union RigidBodyState *thisDelta; // stack offset -76
    { // line 148, offset 0x54038
      struct _CAR_DATA *c0; // $s4
      { // line 156, offset 0x54094
        union RigidBodyState *thisState_i; // $s6
        int j; // stack offset -72
        { // line 1, offset 0x540ec
          union RigidBodyState *state; // $s6
          union RigidBodyState *delta; // $a3
          struct _CAR_DATA *cp; // $s4
          { // line 1, offset 0x540ec
            long AV[4]; // stack offset -248
          } // line 1, offset 0x540ec
        } // line 1, offset 0x540ec
        { // line 175, offset 0x542d8
          struct _CAR_DATA *c1; // $s3
          union RigidBodyState *thisState_j; // $s0
          { // line 183, offset 0x54340
            int strength; // $s5
            long centre0[4]; // stack offset -248
            long centre1[4]; // stack offset -232
            long normal[4]; // stack offset -216
            long collisionpoint[4]; // stack offset -200
            { // line 186, offset 0x54340
              struct BOUND_BOX *bb1; // $a2
              struct BOUND_BOX *bb2; // $a0
            } // line 217, offset 0x54440
            { // line 222, offset 0x54440
              int depth; // stack offset -88
            } // line 227, offset 0x54460
            { // line 227, offset 0x54460
              long lever0[4]; // stack offset -184
              long lever1[4]; // stack offset -168
              long torque[4]; // stack offset -152
              long pointVel0[4]; // stack offset -136
              long pointVel1[4]; // stack offset -120
              int strikeVel; // stack offset -68
              { // line 227, offset 0x54460
                int is; // $v0
                int wanted; // $v1
              } // line 227, offset 0x54460
              { // line 295, offset 0x54870
                struct VECTOR velocity; // stack offset -104
                { // line 314, offset 0x54924
                  int debris1; // $s0
                  int debris2; // $s2
                } // line 326, offset 0x5497c
              } // line 327, offset 0x5497c
              { // line 334, offset 0x549bc
                int do1; // $a0
                int do2; // $t5
                int m1; // $t3
                int m2; // $a1
                { // line 356, offset 0x54a50
                  long force[4]; // stack offset -104
                  int strength1; // $a0
                  int twistY; // $t4
                } // line 385, offset 0x54ca0
                { // line 389, offset 0x54ca8
                  long force[4]; // stack offset -104
                  int strength2; // $a1
                  int twistY; // $t2
                } // line 418, offset 0x54edc
              } // line 419, offset 0x54edc
            } // line 426, offset 0x54f58
          } // line 427, offset 0x54f58
        } // line 428, offset 0x54f58
      } // line 429, offset 0x54f7c
    } // line 430, offset 0x54f7c
    { // line 434, offset 0x54fa4
      struct _CAR_DATA *c0; // $a1
      { // line 438, offset 0x54fc4
        union RigidBodyState *st; // $t2
        union RigidBodyState *tp; // $a0
        union RigidBodyState *d0; // $a2
        union RigidBodyState *d1; // $v1
        int j; // $t1
      } // line 454, offset 0x550b0
    } // line 455, offset 0x550b0
  } // line 456, offset 0x550c8
  { // line 460, offset 0x550f4
    int carsDentedThisFrame; // $s2
    { // line 463, offset 0x55104
      { // line 464, offset 0x55104
        unsigned long *dst; // $a1
      } // line 464, offset 0x55104
      { // line 478, offset 0x55188
      } // line 481, offset 0x55198
    } // line 483, offset 0x55198
  } // line 487, offset 0x551ec
} // line 507, offset 0x551ec
/*
 * Offset 0x551EC, from D:\driver2\game\C\HANDLING.C (lines 1704..1740)
 * Stack frame base $sp, size 120
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ SetShadowPoints(struct _CAR_DATA *c0 /*$s4*/)
{ // line 1, offset 0x551ec
  int j; // $s2
  struct CAR_COSMETICS *car_cos; // $v1
  struct _sdPlane *surfacePtr; // stack offset -48
  { // line 14, offset 0x552a8
    struct SVECTOR disp; // stack offset -104
    struct VECTOR pointPos; // stack offset -96
    struct VECTOR surfaceNormal; // stack offset -80
    struct VECTOR surfacePoint; // stack offset -64
  } // line 35, offset 0x55388
} // line 37, offset 0x553cc
/*
 * Offset 0x553CC, from D:\driver2\game\C\HANDLING.C (lines 1753..1777)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ LongQuaternion2Matrix(long *qua[4] /*$a0*/, struct MATRIX *m /*$a1*/)
{ // line 1, offset 0x553cc
  int xx; // $t3
  int xy; // $a3
  int xz; // $t2
  int xw; // $t0
  int yy; // $t7
  int yz; // $a2
  int yw; // $t5
  int zz; // $v1
  int zw; // $a0
} // line 25, offset 0x554f0
/*
 * Offset 0x554F0, from D:\driver2\game\C\HANDLING.C (lines 1802..1843)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ initOBox(struct _CAR_DATA *cp /*$a2*/)
{ // line 1, offset 0x554f0
  struct SVECTOR *boxDisp; // $a0
  { // line 1, offset 0x554f0
    int length; // $a1
  } // line 40, offset 0x556e0
} // line 42, offset 0x556e0
/*
 * Offset 0x556E0, from D:\driver2\game\C\HANDLING.C (lines 1930..2013)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ CheckCarToCarCollisions()
{ // line 2, offset 0x556e0
  struct _CAR_DATA *cp; // $t2
  struct BOUND_BOX *bp; // $t1
  struct BOUND_BOX *bb1; // $t0
  struct BOUND_BOX *bb2; // $a1
  int lbod; // $v1
  int wbod; // $a0
  int hbod; // $t0
  struct SVECTOR *colBox; // $a1
  int loop1; // $t4
  int loop2; // $a3
  { // line 17, offset 0x5570c
    int wx; // $v1
    int wz; // $a2
  } // line 52, offset 0x5592c
} // line 84, offset 0x55a94
/*
 * Offset 0x55A9C, from D:\driver2\game\C\HANDLING.C (lines 2027..2374)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ ProcessCarPad(struct _CAR_DATA *cp /*$s0*/, unsigned long pad /*$s3*/, char PadSteer /*$s4*/, char use_analogue /*$s5*/)
{ // line 1, offset 0x55a9c
  int player_id; // $s1
  { // line 131, offset 0x55cd8
    int int_steer; // $v0
    int analog_angle; // $v1
  } // line 153, offset 0x55d90
  { // line 233, offset 0x55ef0
    int rws; // $v0
  } // line 243, offset 0x55f80
  { // line 255, offset 0x55fe4
    int playerCar; // $v0
    int dist; // $a0
    int dx; // $a0
    int dz; // $v0
  } // line 272, offset 0x56080
  { // line 276, offset 0x56090
    int targetCarId; // $v1
    { // line 293, offset 0x560d4
      struct _CAR_DATA *tp; // $a1
      int cx; // $v1
      int cz; // $v0
      int chase_square_dist; // $v0
      { // line 300, offset 0x5610c
        int averagePower; // $a0
      } // line 302, offset 0x56148
    } // line 313, offset 0x56258
  } // line 315, offset 0x56258
} // line 348, offset 0x562ac
/*
 * Offset 0x562AC, from D:\driver2\game\C\HANDLING.C (lines 2397..2410)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ TerminateSkidding(int player_id /*$a0*/)
{
}
/*
 * Offset 0x56350, from D:\driver2\game\C\HANDLING.C (lines 2414..2559)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ CheckCarEffects(struct _CAR_DATA *cp /*$s2*/, int player_id /*$s3*/)
{ // line 1, offset 0x56350
  int skidsound; // $s1
  int cnt; // $a0
  int wheels_on_ground; // $s5
  char lay_down_tracks; // $s7
  char desired_skid; // $a1
  char desired_wheel; // $a1
  { // line 86, offset 0x565e8
    int pitch; // $v0
  } // line 90, offset 0x56644
  { // line 93, offset 0x56660
    int wnse; // $a0
  } // line 96, offset 0x566a8
  { // line 119, offset 0x567a8
    int pitch; // $t0
  } // line 123, offset 0x56810
  { // line 132, offset 0x56840
  } // line 136, offset 0x56868
} // line 146, offset 0x568ac
/*
 * Offset 0x568D8, from D:\driver2\game\C\HANDLING.C (lines 2575..2603)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ jump_debris(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0x568d8
  int count; // $a1
  { // line 24, offset 0x56964
    struct VECTOR position; // stack offset -48
    struct VECTOR velocity; // stack offset -32
  } // line 28, offset 0x569f8
} // line 29, offset 0x569f8
/*
 * Offset 0x56A0C, from D:\driver2\game\C\HANDLING.C (lines 1875..1898)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ StepCarPhysics(struct _CAR_DATA *cp /*$a2*/)
{ // line 1, offset 0x56a0c
  struct _HANDLING_TYPE *hp; // $v0
} // line 24, offset 0x56a64
/*
 * Offset 0x56A6C, from D:\driver2\game\C\HANDLING.C (lines 1911..1916)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitialiseCarHandling()
{
}
/*
 * Offset 0x56A74, from D:\driver2\game\C\HANDLING.C (lines 2607..2611)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ nose_down(struct _CAR_DATA *cp /*$a0*/)
{
}
/*
 * Offset 0x56AE4, from D:\driver2\game\C\HANDLING.C (lines 1854..1861)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ RebuildCarMatrix(union RigidBodyState *st /*$a2*/, struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x56ae4
  { // line 1, offset 0x56ae4
    int sm; // $v1
    { // line 5, offset 0x56b8c
      int osm; // $v0
    } // line 5, offset 0x56c00
  } // line 5, offset 0x56c00
} // line 8, offset 0x56c24
/*
 * Offset 0x56C24, from D:\driver2\game\C\HANDLING.C (lines 1106..1129)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ FixCarCos(struct CAR_COSMETICS *carCos /*$s0*/, int externalModelNumber /*$a1*/)
{ // line 1, offset 0x56c24
  int current; // $v0
} // line 24, offset 0x56cb8
/*
 * Offset 0x56CB8, from D:\driver2\game\C\HANDLING.C (lines 2389..2394)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitSkidding()
{ // line 1, offset 0x56cb8
  int i; // $a0
} // line 6, offset 0x56cec
/*
 * Offset 0x56CEC, from D:\driver2\game\C\HANDLING.C (lines 2664..2668)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetPlayerId(struct _CAR_DATA *cp /*$a0*/)
{ // line 1, offset 0x56cec
  int i; // $a1
  int p_id; // $a3
} // line 5, offset 0x56d54
Source file(s) D:\driver2\game\C\JOB_FX.C+D:\driver2\game\JOB_FX.C, object file obj\job_fx.OBJ overlay id <none>

// 70 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct _ExOBJECT {
  int time; // size=0, offset=0
  int speed; // size=0, offset=4
  int hscale; // size=0, offset=8
  int rscale; // size=0, offset=12
  enum ExplosionType type; // size=2, offset=16
  struct VECTOR pos; // size=16, offset=20
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct BOXINFO {
  struct VECTOR vel; // size=16, offset=0
  struct VECTOR pos; // size=16, offset=16
  int sf; // size=0, offset=32
  int xs; // size=0, offset=36
  int zs; // size=0, offset=40
  int w; // size=0, offset=44
  int h; // size=0, offset=48
  int zb; // size=0, offset=52
  int ypos; // size=0, offset=56
};

// 98 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT4 POLY_FT4;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct MAPPING MAPPING;
typedef struct UV UV;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct _ExOBJECT EXOBJECT;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct BOXINFO BOXINFO;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 16 external declarations
extern struct BOXINFO theBox; // offset 0x000a0368
static struct VECTOR Drift; // offset 0x000a03a4
static struct MATRIX SS; // offset 0x000a03b4
extern int crateoffset; // offset 0x000aa580
extern int littleBangTime; // offset 0x000aa584
extern int TriggerBomb; // offset 0x000aae68
extern int ExBombTimer; // offset 0x000aae64
extern int ExLastCarX; // offset 0x000aae74
extern int ExLastCarZ; // offset 0x000aae78
extern int ExBoxDamage; // offset 0x000aae60
extern int ExLastCarXVel; // offset 0x000aae6c
extern int ExLastCarZVel; // offset 0x000aae70
extern struct _ExOBJECT explosion[5]; // offset 0x000d5420
static struct VECTOR SmokePos; // offset 0x000d5250
extern struct VECTOR bangPos; // offset 0x000d5260
extern struct SVECTOR globemesh[54]; // offset 0x000d5270

// 6 functions
/*
 * Offset 0x56D54, from D:\driver2\game\C\JOB_FX.C (lines 129..168)
 * Stack frame base $sp, size 8
 * Saved registers at offset -8: s0
 */
void /*$ra*/ AddExplosion(struct VECTOR pos /*stack 0*/, int type /*stack 16*/, enum ExplosionType type /*$t0*/)
{ // line 1, offset 0x56d54
  int i; // $t1
} // line 40, offset 0x56e44
/*
 * Offset 0x56E44, from D:\driver2\game\C\JOB_FX.C (lines 178..222)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ HandleExplosion()
{ // line 2, offset 0x56e44
  int i; // $s5
  struct _CAR_DATA *cp; // $s0
  { // line 34, offset 0x56f4c
  } // line 42, offset 0x56f84
} // line 45, offset 0x56f94
/*
 * Offset 0x56FC0, from D:\driver2\game\C\JOB_FX.C (lines 557..581)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ initExplosion()
{ // line 2, offset 0x56fc0
  int i; // $t0
} // line 25, offset 0x572a8
/*
 * Offset 0x572A8, from D:\driver2\game\C\JOB_FX.C (lines 588..754)
 * Stack frame base $sp, size 152
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawExplosion(int time /*stack 0*/, struct VECTOR position /*stack 4*/, int hscale /*stack 20*/, int rscale /*stack 24*/)
{ // line 1, offset 0x572a8
  int i; // $t1
  int j; // $s3
  struct POLY_FT4 *poly; // $a2
  struct SVECTOR *src; // $t0
  struct VECTOR v; // stack offset -136
  int rgb; // $s0
  int z; // stack offset -56
  int sf1; // $t0
  int sf2; // $a0
  unsigned long u0; // $s2
  unsigned long u1; // $s1
  unsigned long u2; // $s5
  unsigned long u3; // $s4
  { // line 1, offset 0x572a8
    int transparency; // $t2
    int green; // $t1
    int blue; // $v1
  } // line 1, offset 0x572a8
  { // line 43, offset 0x573f0
    struct MATRIX workmatrix; // stack offset -120
    int sf; // $v0
    int s; // $v1
    int c; // $a3
  } // line 50, offset 0x57444
  { // line 97, offset 0x57720
    int transparency; // $a0
    int red; // $a1
    int green; // $a2
    int blue; // $v1
  } // line 97, offset 0x57720
  { // line 110, offset 0x577a4
    struct MATRIX workmatrix; // stack offset -88
    int sf; // $v0
    int s; // $v1
    int c; // $a3
  } // line 119, offset 0x577f8
} // line 167, offset 0x57b0c
/*
 * Offset 0x57B0C, from D:\driver2\game\C\JOB_FX.C (lines 110..120)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitExObjects()
{ // line 2, offset 0x57b0c
  int i; // $v1
} // line 11, offset 0x57b50
/*
 * Offset 0x57B50, from D:\driver2\game\C\JOB_FX.C (lines 232..245)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ DrawAllExplosions()
{ // line 2, offset 0x57b50
  int i; // $s1
  { // line 8, offset 0x57b94
    int hscale; // $v1
    int rscale; // $a0
  } // line 12, offset 0x57bc0
} // line 14, offset 0x57bf0
Source file(s) D:\driver2\game\C\LEADAI.C+D:\driver2\game\LEADAI.C, object file obj\leadai.obj overlay id <none>

// 75 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct COLLISION_PACKET {
  short type; // size=0, offset=0
  short xpos; // size=0, offset=2
  short ypos; // size=0, offset=4
  short zpos; // size=0, offset=6
  short flags; // size=0, offset=8
  short yang; // size=0, offset=10
  short empty; // size=0, offset=12
  short xsize; // size=0, offset=14
  short ysize; // size=0, offset=16
  short zsize; // size=0, offset=18
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct CELL_DATA {
  unsigned short num; // size=0, offset=0
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct DRIVER2_STRAIGHT {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  unsigned short length; // size=0, offset=8
  short bing; // size=0, offset=10
  short angle; // size=0, offset=12
  short ConnectIdx[4]; // size=8, offset=14
  char NumLanes; // size=0, offset=22
  char LaneDirs; // size=0, offset=23
  char AILanes; // size=0, offset=24
  char packing; // size=0, offset=25
};
struct DRIVER2_JUNCTION {
  short ExitIdx[4]; // size=8, offset=0
  unsigned long flags; // size=0, offset=8
};
struct DRIVER2_CURVE {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  short start; // size=0, offset=8
  short end; // size=0, offset=10
  short ConnectIdx[4]; // size=8, offset=12
  short gradient; // size=0, offset=20
  short height; // size=0, offset=22
  char NumLanes; // size=0, offset=24
  char LaneDirs; // size=0, offset=25
  char inside; // size=0, offset=26
  char AILanes; // size=0, offset=27
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct CELL_ITERATOR {
  struct CELL_DATA *pcd; // size=2, offset=0
  struct PACKED_CELL_OBJECT *ppco; // size=8, offset=4
  struct XZPAIR near; // size=8, offset=8
  int use_computed; // size=0, offset=16
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
struct MAP_DATA {
  struct _CAR_DATA *cp; // size=0, offset=0
  struct VECTOR *base; // size=16, offset=4
  struct VECTOR *pos; // size=16, offset=8
  struct VECTOR *vel; // size=16, offset=12
  struct VECTOR *size; // size=16, offset=16
  int intention; // size=0, offset=20
  int *map; // size=0, offset=24
  int *local; // size=0, offset=28
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};

// 104 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct COLLISION_PACKET COLLISION_PACKET;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct CELL_DATA CELL_DATA;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct DB DB;
typedef struct DRIVER2_STRAIGHT DRIVER2_STRAIGHT;
typedef struct DRIVER2_JUNCTION DRIVER2_JUNCTION;
typedef struct DRIVER2_CURVE DRIVER2_CURVE;
typedef struct GAP_INFO GAP_INFO;
typedef struct CELL_ITERATOR CELL_ITERATOR;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef struct MAP_DATA MAP_DATA;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct CAR_POLY CAR_POLY;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef struct MVERTEX SV5x5[5][5];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 8 external declarations
static int pathParams[5]; // offset 0x000ecbe8
extern struct LEAD_PARAMETERS LeadValues; // offset 0x000ece90
static int randState[17]; // offset 0x000eccf0
static int randIndex; // offset 0x000ecd34
extern int road_s; // offset 0x000ecd3c
extern int road_c; // offset 0x000ecd38
extern int roadAhead[41]; // offset 0x000ecde8
extern int localMap[41]; // offset 0x000ecd40

// 14 functions
/*
 * Offset 0xE70A0, from D:\driver2\game\C\LEADAI.C (lines 205..208)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ leadRand()
{
}
/*
 * Offset 0xE7128, from D:\driver2\game\C\LEADAI.C (lines 278..377)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitLead(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0xe7128
  { // line 41, offset 0xe71a0
    struct DRIVER2_STRAIGHT *straight; // $a3
    struct DRIVER2_CURVE *curve; // $t0
    int i; // $a2
    int dx; // $a0
    int dz; // $a1
    int sqrdist; // $v1
    int min; // $t1
  } // line 74, offset 0xe7310
} // line 100, offset 0xe73e8
/*
 * Offset 0xE73E8, from D:\driver2\game\C\LEADAI.C (lines 382..563)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ LeadUpdateState(struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0xe73e8
  int dif; // $t0
  int avel; // $s1
  { // line 17, offset 0xe7498
    struct VECTOR tmpStart; // stack offset -48
  } // line 30, offset 0xe74ec
  { // line 124, offset 0xe7768
    int dist; // $t1
  } // line 153, offset 0xe792c
  { // line 160, offset 0xe7938
    struct VECTOR pos; // stack offset -32
  } // line 175, offset 0xe7980
} // line 182, offset 0xe7980
/*
 * Offset 0xE7994, from D:\driver2\game\C\LEADAI.C (lines 566..714)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
unsigned long /*$ra*/ LeadPadResponse(struct _CAR_DATA *cp /*$t0*/)
{ // line 1, offset 0xe7994
  int dif; // $t2
  int avel; // $t1
  unsigned long t0; // $s0
  { // line 34, offset 0xe7a4c
  } // line 60, offset 0xe7b18
  { // line 95, offset 0xe7bc8
    int deltaVel; // $a1
    int deltaAVel; // $a3
    int deltaPos; // $a0
    int deltaTh; // $t2
    int steerDelta; // $a0
  } // line 122, offset 0xe7d50
  { // line 128, offset 0xe7d58
    int diff; // $a0
  } // line 141, offset 0xe7dd4
} // line 149, offset 0xe7de8
/*
 * Offset 0xE7DE8, from D:\driver2\game\C\LEADAI.C (lines 718..887)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ FakeMotion(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0xe7de8
  { // line 6, offset 0xe7e40
    struct DRIVER2_STRAIGHT *straight; // $t1
    static int d; // offset 0x0
    static int toGo; // offset 0x4
    static int angle; // offset 0x8
    static int s; // offset 0xc
    static int c; // offset 0x10
    int dx; // $a2
    int dz; // $t3
    int nextJunction; // $t0
    { // line 39, offset 0xe7fa4
      struct DRIVER2_JUNCTION *junction; // $s0
    } // line 39, offset 0xe7fa4
  } // line 60, offset 0xe8010
  { // line 63, offset 0xe8010
    struct DRIVER2_CURVE *curve; // $s0
    int angle; // $a3
    int toGo; // $v0
    int radius; // $a2
    int dx; // $a0
    int dz; // $a1
    int nextJunction; // $a2
    { // line 95, offset 0xe8104
      struct DRIVER2_JUNCTION *junction; // $s0
    } // line 95, offset 0xe8104
    { // line 130, offset 0xe81f0
      struct DRIVER2_JUNCTION *junction; // $s0
    } // line 130, offset 0xe81f0
  } // line 156, offset 0xe82e0
  { // line 159, offset 0xe82e0
    struct DRIVER2_JUNCTION *junction; // $s0
  } // line 167, offset 0xe8338
} // line 170, offset 0xe8338
/*
 * Offset 0xE834C, from D:\driver2\game\C\LEADAI.C (lines 932..1047)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ PosToIndex(int *normal /*$t1*/, int *tangent /*$t4*/, int intention /*$a2*/, struct _CAR_DATA *cp /*$a3*/)
{ // line 1, offset 0xe834c
  { // line 18, offset 0xe8398
    int dist; // $a1
  } // line 26, offset 0xe8420
  { // line 38, offset 0xe84b0
    int w; // $t2
    int w80; // $t0
    int t; // $a1
    int t80; // $a3
    { // line 47, offset 0xe85f0
      int temp; // $v1
    } // line 47, offset 0xe85f0
    { // line 54, offset 0xe8614
      int temp; // $a0
    } // line 56, offset 0xe8614
    { // line 66, offset 0xe865c
    } // line 70, offset 0xe8690
  } // line 113, offset 0xe86b4
} // line 116, offset 0xe86b4
/*
 * Offset 0xE86BC, from D:\driver2\game\C\LEADAI.C (lines 1053..1559)
 * Stack frame base $sp, size 128
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ BlockToMap(struct MAP_DATA *data /*$s3*/)
{ // line 1, offset 0xe86bc
  static int carLength; // offset 0x14
  static int carWidth; // offset 0x18
  static int length; // offset 0x14
  static int width; // offset 0x18
  static int left; // offset 0x1c
  static int right; // offset 0x20
  static int ldist; // offset 0x24
  static int rdist; // offset 0x28
  static struct MAP_DATA newdata; // offset 0x30
  { // line 21, offset 0xe873c
    int dx; // $t4
    int dz; // $t3
    int v; // $v1
    int tangent; // $s0
    int normal; // $s1
  } // line 108, offset 0xe8ab0
  { // line 113, offset 0xe8ab0
    struct DRIVER2_CURVE *curve; // $s1
    int dx; // $s6
    int dz; // $s5
    int v; // $a0
    int angle; // $a2
    int s; // $s4
    int c; // $s2
    int tangent; // $s0
    int normal; // $s1
  } // line 211, offset 0xe8e48
  { // line 218, offset 0xe8e48
    int dx; // $s0
    int dz; // $s2
    int angle; // $s5
    int s; // $t3
    int c; // $t2
    int tangent; // $s1
    int normal; // $s0
    int i; // $s2
    { // line 248, offset 0xe8f7c
      int corners[4][3]; // stack offset -112
      int diff; // $v0
      int overlap; // $s1
      int quad1; // $a1
      int quad2; // $v1
      { // line 297, offset 0xe9184
        int temp; // $v1
      } // line 301, offset 0xe91b0
      { // line 310, offset 0xe921c
        int vx; // $a1
        int vz; // $t0
        int theta; // $v0
      } // line 328, offset 0xe9324
    } // line 329, offset 0xe9324
    { // line 334, offset 0xe9350
      int temp; // $a0
    } // line 354, offset 0xe93f0
  } // line 358, offset 0xe93f0
  { // line 372, offset 0xe9424
    int *nearest; // $s2
    int *furthest; // $s4
    int *ndist; // $s1
    int *fdist; // $s0
    { // line 390, offset 0xe94a4
      int temp; // stack offset -64
      int tdist; // stack offset -60
    } // line 414, offset 0xe9560
  } // line 415, offset 0xe9560
  { // line 429, offset 0xe95a0
    int locall; // stack offset -56
    int localr; // stack offset -48
    int localld; // stack offset -52
    int localrd; // stack offset -44
    { // line 439, offset 0xe9614
      int i; // $a2
    } // line 446, offset 0xe9664
    { // line 446, offset 0xe9664
      int i; // $a0
    } // line 459, offset 0xe96ec
  } // line 460, offset 0xe96ec
  { // line 469, offset 0xe9734
    int tangent; // $a2
    int i; // $a1
  } // line 480, offset 0xe97b0
  { // line 493, offset 0xe97b0
    int dtan; // $a3
    int tangent; // $a2
    int i; // $a1
  } // line 505, offset 0xe9874
} // line 507, offset 0xe9874
/*
 * Offset 0xE98A4, from D:\driver2\game\C\LEADAI.C (lines 1563..1649)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ IsOnMap(int x /*$t0*/, int z /*$a1*/, struct VECTOR *basePos /*$a2*/, int intention /*$s4*/, struct _CAR_DATA *cp /*stack 16*/, struct _CAR_DATA *cp /*$s3*/)
{ // line 1, offset 0xe98a4
  int dx; // $s1
  int dz; // $s2
  { // line 14, offset 0xe9938
    int tangent; // stack offset -44
    int normal; // stack offset -48
  } // line 28, offset 0xe99f4
  { // line 33, offset 0xe99f4
    struct DRIVER2_CURVE *curve; // $s0
    int tangent; // stack offset -36
    int normal; // stack offset -40
  } // line 59, offset 0xe9b20
  { // line 65, offset 0xe9b20
    int tangent; // stack offset -28
    int normal; // stack offset -32
  } // line 79, offset 0xe9b94
} // line 87, offset 0xe9bb8
/*
 * Offset 0xE9BB8, from D:\driver2\game\C\LEADAI.C (lines 1657..2238)
 * Stack frame base $sp, size 368
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ UpdateRoadPosition(struct _CAR_DATA *cp /*$s3*/, struct VECTOR *basePos /*stack 4*/, int intention /*stack 8*/)
{ // line 1, offset 0xe9bb8
  int sindex; // $t0
  int i; // $s0
  int di; // $a2
  struct _CAR_DATA *lcp; // $s0
  int laneAvoid; // stack offset -56
  { // line 23, offset 0xe9c4c
    int cell_x; // $s4
    int x1; // $a0
    { // line 36, offset 0xe9cb0
      int cell_z; // $s0
      int z1; // $s1
      { // line 43, offset 0xe9cfc
        int cbrx; // $a3
        int cbrz; // $a2
        int cbr; // $a0
        { // line 57, offset 0xe9d94
          struct CELL_OBJECT *cop; // $s1
          struct CELL_ITERATOR ci; // stack offset -344
          { // line 64, offset 0xe9db0
            struct COLLISION_PACKET *collide; // $s0
            struct MODEL *model; // $a0
            int num_cb; // $a0
            int box_loop; // $s2
            { // line 82, offset 0xe9e4c
              struct MATRIX *mat; // $a1
              struct VECTOR offset; // stack offset -320
              struct VECTOR vel; // stack offset -304
              struct VECTOR size; // stack offset -288
              struct MAP_DATA data; // stack offset -272
              { // line 96, offset 0xe9ef8
                int sb; // $t0
                int cb; // $a1
                int theta; // $v1
                int xsize; // $a0
                int zsize; // $a3
              } // line 110, offset 0xe9fd8
            } // line 118, offset 0xe9fd8
          } // line 138, offset 0xea068
        } // line 140, offset 0xea088
      } // line 141, offset 0xea088
    } // line 142, offset 0xea098
  } // line 143, offset 0xea0ac
  { // line 157, offset 0xea0cc
    struct SVECTOR *colBox; // $a3
    struct VECTOR pos; // stack offset -344
    struct VECTOR vel; // stack offset -328
    struct VECTOR size; // stack offset -312
    struct MAP_DATA data; // stack offset -296
  } // line 188, offset 0xea260
  { // line 203, offset 0xea2f4
    int left; // $a3
    int right; // $a2
  } // line 232, offset 0xea3d8
  { // line 247, offset 0xea410
    int smallest; // $s1
  } // line 266, offset 0xea4e0
  { // line 274, offset 0xea4ec
    int tmpMap[41]; // stack offset -240
    { // line 280, offset 0xea528
      int count; // $t0
      int j; // $a1
    } // line 287, offset 0xea594
  } // line 289, offset 0xea5c4
  { // line 349, offset 0xea8ac
    int i; // stack offset -68
    int penalty; // $a2
    int left; // stack offset -72
    int right; // stack offset -64
    int centre; // stack offset -60
  } // line 389, offset 0xeaaa0
  { // line 412, offset 0xead80
    int biggest; // $a3
    { // line 433, offset 0xeaeac
    } // line 433, offset 0xeaeac
  } // line 442, offset 0xeaee0
  { // line 446, offset 0xeaee0
    int biggest; // $a1
  } // line 456, offset 0xeaf4c
  { // line 477, offset 0xeaffc
    int smallForward; // $a1
    int smallBack; // $v0
  } // line 494, offset 0xeb060
  { // line 569, offset 0xeb0c4
    struct _CAR_DATA *cp; // $s3
    int sindex; // $a0
    int intention; // stack offset 8
  } // line 569, offset 0xeb1cc
} // line 582, offset 0xeb1cc
/*
 * Offset 0xEB1FC, from D:\driver2\game\C\LEADAI.C (lines 2242..2640)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CheckCurrentRoad(struct _CAR_DATA *cp /*$s3*/)
{ // line 1, offset 0xeb1fc
  static int heading; // offset 0x1c
  int cr; // $s5
  static int jdist; // offset 0x20
  static int nextJunction; // offset 0x50
  static struct VECTOR basePosition; // offset 0x60
  int checkNext; // $s6
  { // line 36, offset 0xeb300
    struct DRIVER2_STRAIGHT *straight; // $t3
    static int d; // offset 0x70
    static int toGo; // offset 0x74
    static int angle; // offset 0x78
    static int s; // offset 0x7c
    static int c; // offset 0x80
    int dx; // $t5
    int dz; // $t6
  } // line 77, offset 0xeb578
  { // line 86, offset 0xeb5c4
    struct DRIVER2_CURVE *curve; // $s2
    static int angle; // offset 0x84
    static int radius; // offset 0x88
    static int dx; // offset 0x8c
    static int dz; // offset 0x90
    static int fixedThresh; // offset 0x94
  } // line 144, offset 0xeb8f8
  { // line 173, offset 0xeb974
    static int diff; // offset 0x98
    { // line 178, offset 0xeb98c
      struct DRIVER2_JUNCTION *junction; // $s0
    } // line 186, offset 0xeb9d4
    { // line 198, offset 0xeba14
      struct DRIVER2_STRAIGHT *straight; // $v1
    } // line 204, offset 0xeba5c
    { // line 207, offset 0xeba5c
      struct DRIVER2_CURVE *curve; // $v1
      static int dx; // offset 0x9c
      static int dz; // offset 0xa0
    } // line 218, offset 0xebae8
    { // line 233, offset 0xebb2c
      struct DRIVER2_STRAIGHT *straight; // $t1
      static int dx; // offset 0xa4
      static int dz; // offset 0xa8
      static int dist; // offset 0xac
      static int offx; // offset 0xb0
      static int offz; // offset 0xb4
    } // line 233, offset 0xebb2c
    { // line 262, offset 0xebc5c
      struct DRIVER2_CURVE *curve; // $s4
      static int angle; // offset 0xb8
      int radius; // $s2
      static int dx; // offset 0xbc
      static int dz; // offset 0xc0
      static int basex; // offset 0xc4
      static int basez; // offset 0xc8
      static int dist; // offset 0xcc
      static int offx; // offset 0xd0
      static int offz; // offset 0xd4
    } // line 302, offset 0xebe44
  } // line 352, offset 0xebfd0
  { // line 387, offset 0xec158
  } // line 388, offset 0xec158
} // line 399, offset 0xec194
/*
 * Offset 0xEC1C4, from D:\driver2\game\C\LEADAI.C (lines 2644..2759)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ SetTarget(struct _CAR_DATA *cp /*$s1*/, int cr /*$a0*/, int heading /*$s4*/, int *nextJunction /*$s3*/)
{ // line 1, offset 0xec1c4
  { // line 13, offset 0xec1fc
    static int dx; // offset 0xd8
    static int dz; // offset 0xdc
  } // line 24, offset 0xec278
  { // line 31, offset 0xec298
    struct DRIVER2_STRAIGHT *straight; // $t5
    int dx; // $a1
    int dz; // $a0
    int rx; // $v1
    int rz; // $a2
    int ux; // $t0
    int uz; // $t4
    int d; // $v1
    int angle; // $v0
    int mul; // $v1
  } // line 51, offset 0xec33c
  { // line 76, offset 0xec444
    struct DRIVER2_CURVE *curve; // $s0
    int angle; // $a1
    int radius; // $a2
  } // line 110, offset 0xec5c4
} // line 116, offset 0xec5c4
/*
 * Offset 0xEC5E4, from D:\driver2\game\C\LEADAI.C (lines 2763..2842)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ SelectExit(struct _CAR_DATA *cp /*$s3*/, struct DRIVER2_JUNCTION *junction /*$a3*/)
{ // line 1, offset 0xec5e4
  int onward; // $s1
  int numExits; // $s2
  int el[4][2]; // stack offset -56
  int tmp; // $a1
  int i; // $a2
  int total; // $s0
  { // line 18, offset 0xec6f4
  } // line 25, offset 0xec71c
  { // line 29, offset 0xec79c
  } // line 36, offset 0xec7c8
  { // line 40, offset 0xec844
  } // line 47, offset 0xec870
} // line 80, offset 0xec99c
/*
 * Offset 0xEC99C, from D:\driver2\game\C\LEADAI.C (lines 2848..2970)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
unsigned long /*$ra*/ FreeRoamer(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0xec99c
  { // line 117, offset 0xeca4c
    struct _CAR_DATA *pCar; // $v0
    { // line 117, offset 0xeca4c
      int seed; // $a0
      { // line 117, offset 0xeca4c
        int i; // $s0
      } // line 118, offset 0xecb04
    } // line 118, offset 0xecb04
  } // line 119, offset 0xecb04
} // line 123, offset 0xecb28
/*
 * Offset 0xECB28, from D:\driver2\game\C\LEADAI.C (lines 2993..3006)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
unsigned long /*$ra*/ hypot(long x /*$s1*/, long y /*$a1*/)
{ // line 1, offset 0xecb28
  { // line 4, offset 0xecb5c
    long t; // $v0
  } // line 4, offset 0xecb64
  { // line 8, offset 0xecbb4
  } // line 13, offset 0xecbe8
} // line 14, offset 0xecbe8
Source file(s) D:\driver2\game\C\LOADSAVE.C+D:\driver2\game\LOADSAVE.C, object file obj\loadsave.obj overlay id <none>

// 37 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct GAME_SAVE_HEADER {
  unsigned long magic; // size=0, offset=0
  unsigned char gMissionLadderPos; // size=0, offset=4
  unsigned char pad1; // size=0, offset=5
  unsigned char pad2; // size=0, offset=6
  unsigned char pad3; // size=0, offset=7
  struct MISSION_DATA SavedData; // size=228, offset=8
  int reserved[8]; // size=32, offset=236
};
struct CONFIG_SAVE_HEADER {
  unsigned long magic; // size=0, offset=0
  int gMasterVolume; // size=0, offset=4
  int gMusicVolume; // size=0, offset=8
  int gSoundMode; // size=0, offset=12
  int gVibration; // size=0, offset=16
  int gCopDifficultyLevel; // size=0, offset=20
  int gFurthestMission; // size=0, offset=24
  struct MAPPING PadMapping[2]; // size=72, offset=28
  struct SCORE_TABLES ScoreTables; // size=2160, offset=100
  int PALAdjustX; // size=0, offset=2260
  int PALAdjustY; // size=0, offset=2264
  int NTSCAdjustX; // size=0, offset=2268
  int NTSCAdjustY; // size=0, offset=2272
  int gSubtitles; // size=0, offset=2276
  struct ACTIVE_CHEATS AvailableCheats; // size=4, offset=2280
  int reserved[6]; // size=24, offset=2284
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};

// 66 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct GAME_SAVE_HEADER GAME_SAVE_HEADER;
typedef struct CONFIG_SAVE_HEADER CONFIG_SAVE_HEADER;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();

// 0 labels

// 2 external declarations
extern struct ACTIVE_CHEATS AvailableCheats; // offset 0x000aae84
extern struct ACTIVE_CHEATS ActiveCheats; // offset 0x000aae80

// 9 functions
/*
 * Offset 0x57BF0, from D:\driver2\game\C\LOADSAVE.C (lines 109..137)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ SaveConfigData(char *buffer /*$a0*/)
{ // line 1, offset 0x57bf0
  struct CONFIG_SAVE_HEADER *header; // $s0
  int i; // $t0
} // line 29, offset 0x57df0
/*
 * Offset 0x57DF0, from D:\driver2\game\C\LOADSAVE.C (lines 140..167)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ LoadConfigData(char *buffer /*$a0*/)
{ // line 1, offset 0x57df0
  struct CONFIG_SAVE_HEADER *header; // $t3
  int i; // $t4
} // line 28, offset 0x57fd4
/*
 * Offset 0x57FD4, from D:\driver2\game\C\LOADSAVE.C (lines 37..45)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ CalcReplayDataSize()
{ // line 2, offset 0x57fd4
} // line 9, offset 0x57ff4
/*
 * Offset 0x57FF4, from D:\driver2\game\C\LOADSAVE.C (lines 48..53)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ SaveReplayData(char *buffer /*$a0*/)
{ // line 2, offset 0x57ff4
} // line 6, offset 0x58014
/*
 * Offset 0x58014, from D:\driver2\game\C\LOADSAVE.C (lines 56..57)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ LoadReplayData(char *buffer /*$a0*/)
{
}
/*
 * Offset 0x58034, from D:\driver2\game\C\LOADSAVE.C (lines 62..65)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CalcGameDataSize()
{
}
/*
 * Offset 0x5803C, from D:\driver2\game\C\LOADSAVE.C (lines 69..82)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ SaveGameData(char *buffer /*$s0*/)
{ // line 1, offset 0x5803c
} // line 14, offset 0x580cc
/*
 * Offset 0x580CC, from D:\driver2\game\C\LOADSAVE.C (lines 85..98)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ LoadGameData(char *buffer /*$a0*/)
{ // line 1, offset 0x580cc
  struct GAME_SAVE_HEADER *header; // $a0
} // line 14, offset 0x58164
/*
 * Offset 0x58164, from D:\driver2\game\C\LOADSAVE.C (lines 102..105)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CalcConfigDataSize()
{
}
Source file(s) D:\driver2\game\C\LOADVIEW.C+D:\driver2\game\LOADVIEW.C, object file obj\LoadView.obj overlay id <none>

// 66 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char r3; // size=0, offset=28
  unsigned char g3; // size=0, offset=29
  unsigned char b3; // size=0, offset=30
  unsigned char pad3; // size=0, offset=31
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
};
struct POLY_GT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  unsigned char r1; // size=0, offset=16
  unsigned char g1; // size=0, offset=17
  unsigned char b1; // size=0, offset=18
  unsigned char p1; // size=0, offset=19
  short x1; // size=0, offset=20
  short y1; // size=0, offset=22
  unsigned char u1; // size=0, offset=24
  unsigned char v1; // size=0, offset=25
  unsigned short tpage; // size=0, offset=26
  unsigned char r2; // size=0, offset=28
  unsigned char g2; // size=0, offset=29
  unsigned char b2; // size=0, offset=30
  unsigned char p2; // size=0, offset=31
  short x2; // size=0, offset=32
  short y2; // size=0, offset=34
  unsigned char u2; // size=0, offset=36
  unsigned char v2; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
  unsigned char r3; // size=0, offset=40
  unsigned char g3; // size=0, offset=41
  unsigned char b3; // size=0, offset=42
  unsigned char p3; // size=0, offset=43
  short x3; // size=0, offset=44
  short y3; // size=0, offset=46
  unsigned char u3; // size=0, offset=48
  unsigned char v3; // size=0, offset=49
  unsigned short pad3; // size=0, offset=50
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 99 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G4 POLY_G4;
typedef struct POLY_GT4 POLY_GT4;
typedef struct SPRT SPRT;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct MAPPING MAPPING;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 14 external declarations
extern int screen_fade_value; // offset 0x000aa588
extern int screen_fade_start; // offset 0x000aa58c
extern int screen_fade_end; // offset 0x000aa590
extern int screen_fade_speed; // offset 0x000aa594
extern int FadingScreen; // offset 0x000aa598
extern int bMissionTitleFade; // offset 0x000aa59c
static int bWantFade; // offset 0x000aa5a0
static int fadeVal; // offset 0x000aa5a4
static int loading_bar_pos; // offset 0x000aae88
static int load_steps; // offset 0x000aae8c
extern struct DISPENV load_disp; // offset 0x000d5640
extern struct DRAWENV load_draw; // offset 0x000d55e0
static struct POLY_GT4 fade_gt4[2]; // offset 0x000d5528
static struct POLY_G4 fade_g4[2]; // offset 0x000d5598

// 8 functions
/*
 * Offset 0x5816C, from D:\driver2\game\C\LOADVIEW.C (lines 200..235)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ShowLoading()
{ // line 2, offset 0x5816c
  struct POLY_G4 poly; // stack offset -56
  int col; // $s0
} // line 36, offset 0x58298
/*
 * Offset 0x582AC, from D:\driver2\game\C\LOADVIEW.C (lines 268..314)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ FadeGameScreen(int flag /*$t0*/, int speed /*$t1*/)
{ // line 1, offset 0x582ac
  static struct POLY_F4 poly; // offset 0x0
  static struct POLY_FT4 p; // offset 0x20
  int do_fade; // $v0
  { // line 23, offset 0x582ec
    int val; // $a3
  } // line 42, offset 0x583c8
} // line 47, offset 0x583f4
/*
 * Offset 0x583F4, from D:\driver2\game\C\LOADVIEW.C (lines 327..468)
 * Stack frame base $sp, size 288
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ ShowLoadingScreen(char *screen_name /*$fp*/, int effect /*$s7*/, int loading_steps /*$a2*/)
{ // line 1, offset 0x583f4
  int fcount; // $s0
  int j; // $s2
  int done; // $fp
  struct RECT dest; // stack offset -264
  struct SPRT prims[4]; // stack offset -256
  struct POLY_FT3 nulls[4]; // stack offset -176
  int fade; // $s5
  int fade_step; // stack offset -48
} // line 142, offset 0x58794
/*
 * Offset 0x58794, from D:\driver2\game\C\LOADVIEW.C (lines 527..548)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupFadePolys()
{ // line 3, offset 0x58794
  int i; // $a1
} // line 22, offset 0x58824
/*
 * Offset 0x58824, from D:\driver2\game\C\LOADVIEW.C (lines 556..576)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DrawFadePoly()
{ // line 2, offset 0x58824
  struct POLY_G4 *fl_g4; // $a2
} // line 21, offset 0x589b0
/*
 * Offset 0x589B0, from D:\driver2\game\C\LOADVIEW.C (lines 248..253)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupScreenFade(int start /*$a0*/, int end /*$a1*/, int speed /*$a2*/)
{
}
/*
 * Offset 0x589D0, from D:\driver2\game\C\LOADVIEW.C (lines 482..512)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ CloseShutters(int speed /*$s5*/, int width /*$s1*/, int height /*$s4*/)
{ // line 1, offset 0x589d0
  struct POLY_F4 poly[2]; // stack offset -80
  int h; // $s0
  int done; // $s2
} // line 31, offset 0x58b08
/*
 * Offset 0x58B08, from D:\driver2\game\C\LOADVIEW.C (lines 585..621)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DisplayMissionTitle()
{ // line 2, offset 0x58b08
  { // line 17, offset 0x58b88
  } // line 21, offset 0x58bb8
} // line 37, offset 0x58c08
Source file(s) D:\driver2\game\C\MAIN.C+D:\driver2\game\MAIN.C, object file obj\MAIN.OBJ overlay id <none>

// 95 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
enum GAMEMODE : char {
  GAMEMODE_NORMAL = 0,
  GAMEMODE_QUIT = 1,
  GAMEMODE_RESTART = 2,
  GAMEMODE_REPLAY = 3,
  GAMEMODE_DIRECTOR = 4,
  GAMEMODE_NEXTMISSION = 5,
  GAMEMODE_DEMO = 6,
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
enum GAMETYPE : char {
  GAME_MISSION = 0,
  GAME_TAKEADRIVE = 1,
  GAME_IDLEDEMO = 2,
  GAME_PURSUIT = 3,
  GAME_GETAWAY = 4,
  GAME_GATERACE = 5,
  GAME_CHECKPOINT = 6,
  GAME_TRAILBLAZER = 7,
  GAME_SURVIVAL = 8,
  GAME_INVALIDGAME1 = 9,
  GAME_REPLAYMISSION = 10,
  GAME_COPSANDROBBERS = 11,
  GAME_CAPTURETHEFLAG = 12,
  GAME_SECRET = 13,
  GAME_CONTINUEMISSION = 14,
  GAME_LOADEDREPLAY = 15,
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct CELL_DATA {
  unsigned short num; // size=0, offset=0
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct OUT_CELL_FILE_HEADER {
  int cells_across; // size=0, offset=0
  int cells_down; // size=0, offset=4
  int cell_size; // size=0, offset=8
  int num_regions; // size=0, offset=12
  int region_size; // size=0, offset=16
  int num_cell_objects; // size=0, offset=20
  int num_cell_data; // size=0, offset=24
  int ambient_light_level; // size=0, offset=28
  struct VECTOR_NOPAD light_source; // size=12, offset=32
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct DRIVER2_JUNCTION {
  short ExitIdx[4]; // size=8, offset=0
  unsigned long flags; // size=0, offset=8
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct RENDER_ARG {
  unsigned char render; // size=0, offset=0
  unsigned char credits; // size=0, offset=1
  unsigned short recap; // size=0, offset=2
};
enum EXIT_VALUE : char {
  MENU_QUIT_NONE = 0,
  MENU_QUIT_CONTINUE = 1,
  MENU_QUIT_QUIT = 2,
  MENU_QUIT_RESTART = 3,
  MENU_QUIT_DIRECTOR = 4,
  MENU_QUIT_QUICKREPLAY = 5,
  MENU_QUIT_BACKMENU = 6,
  MENU_QUIT_NEXTMISSION = 7,
};
struct MENU_HEADER {
  char *Title; // size=0, offset=0
  struct XYWH Bound; // size=8, offset=4
  unsigned char NumItems; // size=0, offset=12
  struct MENU_ITEM *MenuItems; // size=20, offset=16
};
struct MENU_ITEM {
  char *Text; // size=0, offset=0
  unsigned char Type; // size=0, offset=4
  unsigned char Justify; // size=0, offset=5
  void *func(); // size=0, offset=8
  enum EXIT_VALUE ExitValue; // size=1, offset=12
  struct MENU_HEADER *SubMenu; // size=0, offset=16
};
struct XYWH {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};

// 131 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT3 POLY_FT3;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef enum GAMEMODE GAMEMODE;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef enum GAMETYPE GAMETYPE;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct CELL_DATA CELL_DATA;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct TEX_INFO TEX_INFO;
typedef struct OUT_CELL_FILE_HEADER OUT_CELL_FILE_HEADER;
typedef struct DB DB;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct MAPPING MAPPING;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct DRIVER2_JUNCTION DRIVER2_JUNCTION;
typedef struct MR_TIMER MR_TIMER;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct RENDER_ARG RENDER_ARG;
typedef enum EXIT_VALUE EXIT_VALUE;
typedef struct MENU_HEADER MENU_HEADER;
typedef struct MENU_ITEM MENU_ITEM;
typedef struct XYWH XYWH;
typedef struct __tunnelcoords tunnelcoords;
typedef struct _EVENT EVENT;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef struct MVERTEX SV5x5[5][5];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;

// 0 labels

// 106 external declarations
extern char *LevelFiles[4]; // offset 0x000a03d4
extern char *LevelPalettes[8]; // offset 0x000a03e4
extern char *LoadingScreenNames[4]; // offset 0x000a0404
extern int PlayerCar; // offset 0x000aa5f8
extern unsigned char LoadedLevel; // offset 0x000aa5b4
extern char NewLevel; // offset 0x000aa5b5
extern char IconsLoaded; // offset 0x000aa5b6
extern char gLeadCarModel; // offset 0x000aa5b7
extern char gNoSaveAllowed; // offset 0x000aa5b8
extern char gDoneQuickReplay; // offset 0x000aa5b9
extern char gRightWayUp; // offset 0x000aa5ba
extern char ghost_mode; // offset 0x000aa5bb
extern char paused; // offset 0x000aa5bc
extern char CamerasSaved; // offset 0x000aa5bd
extern char final_replays; // offset 0x000aa5be
extern char cameraview; // offset 0x000aa5bf
extern char ReplayMode; // offset 0x000aa5c0
extern char NoPlayerControl; // offset 0x000aa5c1
extern short CurrentRoad; // offset 0x000aa5c2
extern short CurrentJunction; // offset 0x000aa5c4
extern int gNumCitiesOpen; // offset 0x000aa5c8
extern enum GAMETYPE GameType; // offset 0x000aa5cc
extern enum GAMETYPE StoredGameType; // offset 0x000aa5cd
extern int gCurrentMissionNumber; // offset 0x000aa5d0
extern int gCurrentChaseNumber; // offset 0x000aa5d4
extern int CurrentPlayerView; // offset 0x000aa5d8
extern int persuit_mode; // offset 0x000aa5dc
extern int GameLevel; // offset 0x000aa5e0
extern int PlayerCarModel; // offset 0x000aa5e4
extern int AttractMode; // offset 0x000aa5e8
extern int gCopDifficultyLevel; // offset 0x000aa5ec
extern int pauseflag; // offset 0x000aa5f0
extern int lead_car; // offset 0x000aa5f4
extern int CameraCar; // offset 0x000aa5fc
extern int TargetCar; // offset 0x000aa600
extern unsigned char defaultPlayerModel[2]; // offset 0x000aa604
extern unsigned char defaultPlayerPalette; // offset 0x000aa606
extern int gameinit; // offset 0x000aa608
extern int gInFrontend; // offset 0x000aa60c
extern int gLoadedReplay; // offset 0x000aa610
extern int gShowMap; // offset 0x000aa614
extern int gVibration; // offset 0x000aa618
extern int gInvincibleCar; // offset 0x000aa61c
extern int gPlayerImmune; // offset 0x000aa620
extern int gNight; // offset 0x000aa624
extern int gStopPadReads; // offset 0x000aa628
extern int leadAIRequired; // offset 0x000aa62c
extern int leadAILoaded; // offset 0x000aa630
extern int pathAILoaded; // offset 0x000aa634
extern int ObjectDrawnCounter; // offset 0x000aa644
extern int gSubtitles; // offset 0x000aa640
extern int wantedCar[2]; // offset 0x000aa638
extern int tannerDeathTimer; // offset 0x000aa5b0
static int WantPause; // offset 0x000aa5a8
static int gDieWithFade; // offset 0x000aa5ac
extern int leadCarId; // offset 0x000aaf10
extern char *palette_lump; // offset 0x000aaefc
extern char *car_models_lump; // offset 0x000aaeb4
extern char *map_lump; // offset 0x000aaf14
extern char InWater; // offset 0x000aaee4
extern char *mallocptr; // offset 0x000aaf48
extern char lockAllTheDoors; // offset 0x000aaf50
extern unsigned char lead_analogue; // offset 0x000aaf0c
extern unsigned short controller_bits; // offset 0x000aaed0
extern unsigned long lead_pad; // offset 0x000aaf04
extern int playerDying; // offset 0x000aaedc
extern int game_over; // offset 0x000aaf40
extern int HitLeadCar; // offset 0x000aaf38
extern int gDoCrates; // offset 0x000aaf28
extern int DawnCount; // offset 0x000aaf30
extern int NightAmbient; // offset 0x000aaef0
extern int gBobIndex; // offset 0x000aaf20
extern int gSinkingTimer; // offset 0x000aaf08
extern int saved_counter; // offset 0x000aaf24
extern int saved_leadcar_pos; // offset 0x000aaef8
extern int handle; // offset 0x000aaed4
extern int CameraCnt; // offset 0x000aaf18
extern int scr_z; // offset 0x000aaeac
extern int gLoadedOverlay; // offset 0x000aaf34
extern int gLoadedMotionCapture; // offset 0x000aaea4
extern int gLightsOn; // offset 0x000aaf2c
extern int gShowPlayerDamage; // offset 0x000aaeec
extern struct MODEL *gHubcapModelPtr; // offset 0x000aaf4c
extern struct MODEL *gCleanWheelModelPtr; // offset 0x000aaf1c
extern struct MODEL *gFastWheelModelPtr; // offset 0x000aaf00
extern struct MODEL *gDamWheelModelPtr; // offset 0x000aaee0
extern struct MODEL *gPed1HeadModelPtr; // offset 0x000aaebc
extern struct MODEL *gPed2HeadModelPtr; // offset 0x000aaec0
extern struct MODEL *gPed3HeadModelPtr; // offset 0x000aaec4
extern struct MODEL *gPed4HeadModelPtr; // offset 0x000aaec8
extern struct MODEL *gBoxModelPtr; // offset 0x000aaee8
extern struct MODEL *gRotorPtr; // offset 0x000aaf3c
extern unsigned short *cell_ptrs; // offset 0x000aaf44
extern int current_object_computed_value; // offset 0x000aaeb0
extern unsigned int ObjectDrawnValue; // offset 0x000aaecc
extern struct CELL_DATA *cells; // offset 0x000aaea8
extern struct PACKED_CELL_OBJECT *cell_objects; // offset 0x000aaef4
static enum PAUSEMODE PauseMode; // offset 0x000aaea0
extern int xa_timeout; // offset 0x000aaeb8
extern struct OUT_CELL_FILE_HEADER *cell_header; // offset 0x000aaed8
extern struct MODEL *modelpointers[1536]; // offset 0x000d56e8
extern struct VECTOR leadcar_pos; // offset 0x000d56a8
extern unsigned char lightsOnDelay[20]; // offset 0x000d56d0
extern struct MODEL *gCarCleanModelPtr[5]; // offset 0x000d56b8
extern struct MODEL *gCarDamModelPtr[5]; // offset 0x000d6ee8
extern struct MODEL *gCarLowModelPtr[5]; // offset 0x000d6f00

// 20 functions
/*
 * Offset 0x58C08, from D:\driver2\game\C\MAIN.C (lines 2672..2893)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ ProcessLumps(char *lump_ptr /*$s1*/, int lump_size /*$a1*/)
{ // line 1, offset 0x58c08
  int quit; // $s3
  int lump_type; // $v1
  int seg_size; // $s0
  { // line 14, offset 0x58d94
    { // line 173, offset 0x58f7c
      struct DRIVER2_JUNCTION *dst; // $a0
      unsigned long *src; // $a2
      int i; // $v1
    } // line 186, offset 0x58fc4
    { // line 193, offset 0x58fcc
      struct DRIVER2_JUNCTION *dst; // $a0
      unsigned long *src; // $a2
      int i; // $v1
    } // line 206, offset 0x59018
  } // line 218, offset 0x59024
} // line 222, offset 0x59050
/*
 * Offset 0x59050, from D:\driver2\game\C\MAIN.C (lines 2896..2966)
 * Stack frame base $sp, size 112
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ LoadGameLevel()
{ // line 2, offset 0x59050
  int sector; // stack offset -32
  int nsectors; // $s1
  char name[64]; // stack offset -96
  char *malloc_lump; // $s2
} // line 71, offset 0x59238
/*
 * Offset 0x59238, from D:\driver2\game\C\MAIN.C (lines 3003..3066)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitModelNames()
{ // line 2, offset 0x59238
} // line 64, offset 0x59330
/*
 * Offset 0x59330, from D:\driver2\game\C\MAIN.C (lines 3114..3508)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ GameInit()
{ // line 8, offset 0x59330
  { // line 112, offset 0x594c0
  } // line 114, offset 0x594d4
  { // line 149, offset 0x595b4
  } // line 149, offset 0x595b4
  { // line 157, offset 0x595dc
  } // line 163, offset 0x59604
  { // line 191, offset 0x596b0
    struct STREAM_SOURCE *pinfo; // $s0
    char padid; // stack offset -48
    int i; // $s2
  } // line 245, offset 0x5980c
  { // line 328, offset 0x59944
    int loop; // $s0
    { // line 331, offset 0x5994c
    } // line 331, offset 0x5994c
  } // line 333, offset 0x5996c
  { // line 341, offset 0x5998c
    int i; // $v1
  } // line 346, offset 0x599b8
  { // line 350, offset 0x599b8
  } // line 361, offset 0x599b8
  { // line 390, offset 0x59a0c
  } // line 392, offset 0x59a14
} // line 395, offset 0x59a44
/*
 * Offset 0x59A44, from D:\driver2\game\C\MAIN.C (lines 3555..4038)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ StepSim()
{ // line 2, offset 0x59a44
  static unsigned long t0; // offset 0x0
  static char t1; // offset 0x4
  static char t2; // offset 0x5
  static int oldsp; // offset 0x8
  struct _CAR_DATA *lcp; // $s0
  int i; // $s2
  { // line 78, offset 0x59c70
    int eekTimer; // $s0
    { // line 84, offset 0x59cc4
    } // line 86, offset 0x59cc4
  } // line 90, offset 0x59d20
  { // line 94, offset 0x59d6c
  } // line 98, offset 0x59d6c
  { // line 1, offset 0x59fd8
  } // line 1, offset 0x59fd8
  { // line 283, offset 0x5a220
    int padsteer; // $a1
    { // line 313, offset 0x5a320
    } // line 317, offset 0x5a33c
    { // line 324, offset 0x5a374
    } // line 324, offset 0x5a374
  } // line 324, offset 0x5a374
  { // line 331, offset 0x5a394
  } // line 333, offset 0x5a3c8
  { // line 428, offset 0x5a650
    int i; // $s1
    int j; // $s0
    static int stupid_logic[4]; // offset 0x0
    { // line 448, offset 0x5a744
    } // line 450, offset 0x5a794
  } // line 451, offset 0x5a7b0
  { // line 478, offset 0x5a894
  } // line 481, offset 0x5a8ac
} // line 484, offset 0x5a8dc
/*
 * Offset 0x5A8DC, from D:\driver2\game\C\MAIN.C (lines 4046..4187)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ GameLoop()
{ // line 2, offset 0x5a8dc
  int i; // $s0
  struct RECT dest; // stack offset -24
  { // line 79, offset 0x5aa2c
    static struct POLY_FT3 buffer[2]; // offset 0x10
    static struct POLY_FT3 *null; // offset 0xc
  } // line 94, offset 0x5aa98
} // line 142, offset 0x5ab28
/*
 * Offset 0x5AB28, from D:\driver2\game\C\MAIN.C (lines 4196..4546)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ StepGame()
{ // line 2, offset 0x5ab28
  { // line 42, offset 0x5ab60
  } // line 44, offset 0x5ab70
  { // line 56, offset 0x5abd8
    int i; // $a1
  } // line 66, offset 0x5ac3c
  { // line 140, offset 0x5ae20
  } // line 149, offset 0x5ae50
  { // line 165, offset 0x5aec0
  } // line 172, offset 0x5aed0
  { // line 199, offset 0x5af6c
    int strobe; // $v0
  } // line 202, offset 0x5afb8
  { // line 340, offset 0x5b2e4
  } // line 342, offset 0x5b31c
} // line 351, offset 0x5b384
/*
 * Offset 0x5B384, from D:\driver2\game\C\MAIN.C (lines 4767..4867)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: ra
 */
int /*$ra*/ main()
{ // line 1, offset 0x5b384
  { // line 1, offset 0x5b384
    { // line 1, offset 0x5b384
      char *PALScreenNames[4]; // stack offset -24
      char *NTSCScreenNames[4]; // stack offset -40
      char *OPMScreenNames[4]; // stack offset -56
    } // line 1, offset 0x5b384
  } // line 1, offset 0x5b384
} // line 101, offset 0x5b54c
/*
 * Offset 0x5B54C, from D:\driver2\game\C\MAIN.C (lines 4893..4971)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ UpdatePlayerInformation()
{ // line 2, offset 0x5b54c
  struct _CAR_DATA *cp; // $s1
  int count; // $s0
  int scale; // $v1
  int wheel; // $t1
  int wheelsonwater; // $t2
} // line 79, offset 0x5b888
/*
 * Offset 0x5B888, from D:\driver2\game\C\MAIN.C (lines 5021..5131)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ RenderGame2(int view /*$s3*/)
{ // line 1, offset 0x5b888
  int spaceFree; // $a1
  int notInDreaAndStevesEvilLair; // $s0
  { // line 46, offset 0x5b9a4
    int strobe; // $v0
  } // line 49, offset 0x5b9ec
  { // line 52, offset 0x5b9ec
    int i; // $s1
  } // line 56, offset 0x5ba84
  { // line 69, offset 0x5bae4
    struct POLY_F4 *poly; // $v1
    int col; // $a1
  } // line 92, offset 0x5bc20
  { // line 100, offset 0x5bc40
  } // line 104, offset 0x5bc88
} // line 111, offset 0x5bce4
/*
 * Offset 0x5BCE4, from D:\driver2\game\C\MAIN.C (lines 5272..5340)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ InitGameVariables()
{ // line 2, offset 0x5bce4
} // line 69, offset 0x5bf74
/*
 * Offset 0x5BF74, from D:\driver2\game\C\MAIN.C (lines 5345..5364)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ DealWithHorn(char *hr /*$s2*/, int i /*$s1*/)
{ // line 1, offset 0x5bf74
  struct _CAR_DATA *car; // $s0
  { // line 3, offset 0x5c014
  } // line 18, offset 0x5c124
} // line 20, offset 0x5c154
/*
 * Offset 0x5C16C, from D:\driver2\game\C\MAIN.C (lines 5367..5479)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ Havana3DOcclusion(void *func() /*$a3*/, int *param /*$fp*/)
{ // line 1, offset 0x5c16c
  int outside; // $s6
  int otAltered; // $s5
  { // line 12, offset 0x5c208
    int draw; // $s2
    int loop; // $s0
  } // line 106, offset 0x5c414
} // line 113, offset 0x5c458
/*
 * Offset 0x5C458, from D:\driver2\game\C\MAIN.C (lines 4549..4582)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DrawGame()
{ // line 2, offset 0x5c458
  static unsigned long frame; // offset 0xc8
  { // line 6, offset 0x5c480
  } // line 12, offset 0x5c4d0
  { // line 18, offset 0x5c4ec
  } // line 28, offset 0x5c554
} // line 34, offset 0x5c574
/*
 * Offset 0x5C574, from D:\driver2\game\C\MAIN.C (lines 4586..4589)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ EndGame(enum GAMEMODE mode /*$a0*/)
{
}
/*
 * Offset 0x5C590, from D:\driver2\game\C\MAIN.C (lines 4593..4599)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ EnablePause(enum PAUSEMODE mode /*$a0*/)
{
}
/*
 * Offset 0x5C5D0, from D:\driver2\game\C\MAIN.C (lines 4602..4617)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CheckForPause()
{ // line 2, offset 0x5c5d0
  { // line 1, offset 0x5c5e4
  } // line 1, offset 0x5c614
} // line 16, offset 0x5c668
/*
 * Offset 0x5C668, from D:\driver2\game\C\MAIN.C (lines 4870..4887)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ FadeScreen(int end_value /*$a1*/)
{ // line 1, offset 0x5c668
  int tmp2; // $s1
} // line 18, offset 0x5c6e0
/*
 * Offset 0x5C6E0, from D:\driver2\game\C\MAIN.C (lines 5260..5268)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ RenderGame()
{ // line 2, offset 0x5c6e0
  { // line 2, offset 0x5c6e0
    { // line 2, offset 0x5c6e0
      static unsigned long frame; // offset 0xc8
      { // line 1, offset 0x5c714
      } // line 1, offset 0x5c764
      { // line 1, offset 0x5c780
      } // line 1, offset 0x5c7e8
    } // line 1, offset 0x5c7e8
  } // line 1, offset 0x5c7e8
} // line 9, offset 0x5c81c
/*
 * Offset 0x5C81C, from D:\driver2\game\C\MAIN.C (lines 2973..2990)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ ReplayLog_Fnarr_He_Said_Log(int val /*$a0*/)
{
}
Source file(s) D:\driver2\game\C\MAP.C+D:\driver2\game\MAP.C, object file obj\map.oBJ overlay id <none>

// 57 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct AREA_LOAD_INFO {
  int xoffset; // size=0, offset=0
  int zoffset; // size=0, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct CELL_DATA {
  unsigned short num; // size=0, offset=0
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct ROAD_MAP_LUMP_DATA {
  int width; // size=0, offset=0
  int height; // size=0, offset=4
  int unitXMid; // size=0, offset=8
  int unitZMid; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct Spool {
  unsigned short offset; // size=0, offset=0
  unsigned char connected_areas[2]; // size=2, offset=2
  unsigned char pvs_size; // size=0, offset=4
  unsigned char cell_data_size[3]; // size=3, offset=5
  unsigned char super_region; // size=0, offset=8
  unsigned char num_connected_areas; // size=0, offset=9
  unsigned char roadm_size; // size=0, offset=10
  unsigned char roadh_size; // size=0, offset=11
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};

// 83 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct AREA_LOAD_INFO AREA_LOAD_INFO;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct CELL_DATA CELL_DATA;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct TEX_INFO TEX_INFO;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct ROAD_MAP_LUMP_DATA ROAD_MAP_LUMP_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct Spool Spool;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 33 external declarations
extern int cells_across; // offset 0x000aa67c
extern int cells_down; // offset 0x000aa680
extern int regions_across; // offset 0x000aafac
extern int regions_down; // offset 0x000aaf70
extern int current_region; // offset 0x000aafb0
extern int units_across_halved; // offset 0x000aaf5c
extern int units_down_halved; // offset 0x000aaf74
extern int current_cell_x; // offset 0x000aafa4
extern int current_cell_z; // offset 0x000aafa8
extern int num_models_in_pack; // offset 0x000aaf94
extern int view_dist; // offset 0x000aafa0
extern int pvs_cells_rejected; // offset 0x000aaf98
extern int pvs_objects_rejected; // offset 0x000aaf68
extern int pvs_square; // offset 0x000aaf64
extern int pvs_square_sq; // offset 0x000aaf9c
extern int camera_cell_x; // offset 0x000aaf78
extern int camera_cell_z; // offset 0x000aaf7c
extern int num_regions; // offset 0x000aaf6c
extern int num_straddlers; // offset 0x000aafb4
extern int current_barrel_region_xcell; // offset 0x000aaf80
extern int current_barrel_region_zcell; // offset 0x000aaf84
extern int region_x; // offset 0x000aaf8c
extern int region_z; // offset 0x000aaf90
extern int initarea; // offset 0x000aaf88
extern int old_region; // offset 0x000aaf60
static unsigned char *PVSEncodeTable; // offset 0x000aaf58
extern char *PVS_Buffers[4]; // offset 0x000d6f18
extern int cell_slots_add[5]; // offset 0x000d7350
extern int cell_objects_add[5]; // offset 0x000d6f28
extern int regions_unpacked[4]; // offset 0x000d7340
extern char *gRamSlotPosition[128]; // offset 0x000d6f40
extern char CurrentPVS[444]; // offset 0x000d7368
extern char nybblearray[512]; // offset 0x000d7140

// 16 functions
/*
 * Offset 0x5C824, from D:\driver2\game\C\MAP.C (lines 438..597)
 * Stack frame base $sp, size 120
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CheckUnpackNewRegions()
{ // line 2, offset 0x5c824
  struct AREA_LOAD_INFO regions_to_unpack[3]; // stack offset -104
  int leftright_unpack; // $a1
  int topbottom_unpack; // $a2
  int num_regions_to_unpack; // $s5
  int x; // $a2
  int z; // $v1
  int loop; // $s6
  int barrel_region; // $s1
  int sortcount; // $s4
  int i; // $v1
  int j; // $a2
  struct SVECTOR sortregions[4]; // stack offset -80
  unsigned short sortorder[4]; // stack offset -48
  int force_load_boundary; // $a0
  { // line 101, offset 0x5c9f4
    int region_to_unpack; // $s0
    struct Spool *spoolptr; // $a1
    { // line 121, offset 0x5ca74
    } // line 141, offset 0x5cb00
  } // line 142, offset 0x5cb00
  { // line 146, offset 0x5cb28
  } // line 156, offset 0x5cb94
} // line 160, offset 0x5cc00
/*
 * Offset 0x5CC00, from D:\driver2\game\C\MAP.C (lines 612..653)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ControlMap()
{ // line 2, offset 0x5cc00
  int x; // $a2
  int z; // $a1
  { // line 27, offset 0x5cce4
  } // line 28, offset 0x5ccec
  { // line 36, offset 0x5cd10
  } // line 37, offset 0x5cd20
} // line 42, offset 0x5cd80
/*
 * Offset 0x5CD80, from D:\driver2\game\C\MAP.C (lines 677..743)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitMap()
{ // line 2, offset 0x5cd80
  int i; // $s0
  int tpage; // $v0
  char result[8]; // stack offset -24
  { // line 30, offset 0x5ce30
    { // line 39, offset 0x5ce88
      int region; // $a3
      int barrel_region; // $a1
      struct Spool *spoolptr; // $v1
      { // line 49, offset 0x5cef4
      } // line 55, offset 0x5cf20
    } // line 56, offset 0x5cf20
  } // line 65, offset 0x5cf90
  { // line 1, offset 0x5cf90
  } // line 1, offset 0x5cfa8
} // line 67, offset 0x5cfa8
/*
 * Offset 0x5CFA8, from D:\driver2\game\C\MAP.C (lines 824..912)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ PVSDecode(char *output /*$s2*/, char *celldata /*$s3*/, unsigned short sz /*$s0*/, int havanaCorruptCellBodge /*$s4*/)
{ // line 1, offset 0x5cfa8
  char *decodeBuf; // $s1
  { // line 1, offset 0x5cfa8
    int pixelIndex; // $t0
    int i; // $a0
    int ni; // $a3
    0x8EC spod
    { // line 11, offset 0x5cff4
    } // line 11, offset 0x5cff4
    { // line 18, offset 0x5d03c
      int symIndex; // $a2
      int sym; // $a0
      { // line 1, offset 0x5d0a8
        unsigned char *pt; // $v0
      } // line 1, offset 0x5d0a8
      { // line 1, offset 0x5d0bc
        unsigned char *pt; // $v0
      } // line 1, offset 0x5d0bc
    } // line 45, offset 0x5d104
  } // line 48, offset 0x5d110
  { // line 49, offset 0x5d110
    int i; // $a2
    int j; // $v1
    int sz; // $a3
    char *op; // $a1
  } // line 80, offset 0x5d1e4
  { // line 82, offset 0x5d1e4
    int i; // $v1
  } // line 87, offset 0x5d224
} // line 89, offset 0x5d224
/*
 * Offset 0x5D224, from D:\driver2\game\C\MAP.C (lines 928..962)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ GetPVSRegionCell2(int source_region /*$a0*/, int region /*$a1*/, int cell /*$t2*/, char *output /*$a3*/)
{ // line 1, offset 0x5d224
  char *bp; // $a2
  char *tbp; // $a1
  int j; // $v1
  unsigned short length; // $t0
  { // line 17, offset 0x5d29c
    unsigned char *pt; // $a0
  } // line 17, offset 0x5d29c
  { // line 17, offset 0x5d29c
  } // line 17, offset 0x5d29c
  { // line 1, offset 0x5d32c
    char *output; // $a0
    { // line 1, offset 0x5d32c
      int k; // $v1
    } // line 1, offset 0x5d35c
  } // line 1, offset 0x5d35c
} // line 35, offset 0x5d35c
/*
 * Offset 0x5D36C, from D:\driver2\game\C\MAP.C (lines 311..359)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitCellData()
{ // line 2, offset 0x5d36c
  char *alloclist; // $a2
  int loop; // $v1
} // line 49, offset 0x5d40c
/*
 * Offset 0x5D40C, from D:\driver2\game\C\MAP.C (lines 289..292)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
struct MODEL * /*$ra*/ FindModelPtrWithName(char *name /*$s4*/)
{ // line 1, offset 0x5d40c
  int dummy; // stack offset -32
  { // line 1, offset 0x5d40c
    char *name; // $s4
    int *num; // $s2
    { // line 1, offset 0x5d40c
      int count; // $s1
      char *temp; // $s0
    } // line 1, offset 0x5d4a4
  } // line 1, offset 0x5d4a4
} // line 4, offset 0x5d4c4
/*
 * Offset 0x5D4C4, from D:\driver2\game\C\MAP.C (lines 295..299)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ FindModelIdxWithName(char *name /*$s3*/)
{ // line 1, offset 0x5d4c4
  int i; // stack offset -32
  { // line 1, offset 0x5d4c4
    char *name; // $s3
    int *num; // $s2
    { // line 1, offset 0x5d4c4
      int count; // $s1
      char *temp; // $s0
    } // line 1, offset 0x5d540
  } // line 1, offset 0x5d540
} // line 5, offset 0x5d560
/*
 * Offset 0x5D560, from D:\driver2\game\C\MAP.C (lines 400..419)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ PositionVisible(struct VECTOR *pos /*$a0*/)
{ // line 1, offset 0x5d560
  int dx; // $a1
  int dz; // $a0
  int cellx; // $v1
  int cellz; // $v0
} // line 20, offset 0x5d61c
/*
 * Offset 0x5D61C, from D:\driver2\game\C\MAP.C (lines 378..397)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ newPositionVisible(struct VECTOR *pos /*$a0*/, char *pvs /*$a1*/, int ccx /*$a2*/, int ccz /*$a3*/)
{ // line 1, offset 0x5d61c
  int dx; // $a2
  int dz; // $a0
  int cellx; // $v1
  int cellz; // $v0
} // line 20, offset 0x5d6c4
/*
 * Offset 0x5D6C4, from D:\driver2\game\C\MAP.C (lines 252..252)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessRoadsLump(char *lump_file /*$a0*/, int lump_size /*$a1*/)
{
}
/*
 * Offset 0x5D6CC, from D:\driver2\game\C\MAP.C (lines 247..248)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessJunctionsLump(char *lump_file /*$a0*/, int lump_size /*$a1*/)
{
}
/*
 * Offset 0x5D6D4, from D:\driver2\game\C\MAP.C (lines 253..253)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessRoadBoundsLump(char *lump_file /*$a0*/, int lump_size /*$a1*/)
{
}
/*
 * Offset 0x5D6DC, from D:\driver2\game\C\MAP.C (lines 254..254)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessJuncBoundsLump(char *lump_file /*$a0*/, int lump_size /*$a1*/)
{
}
/*
 * Offset 0x5D6E4, from D:\driver2\game\C\MAP.C (lines 756..778)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ GetVisSetAtPosition(struct VECTOR *pos /*$a0*/, char *tgt /*$t3*/, int *ccx /*$a1*/, int *ccz /*$a3*/)
{ // line 1, offset 0x5d6e4
  int x; // $t2
  int z; // $t1
  int cx; // $t0
  int cz; // $a2
  int rx; // $a3
  int rz; // $a0
  { // line 11, offset 0x5d76c
    int barrel_region_x; // $v0
    int barrel_region_z; // $a0
  } // line 22, offset 0x5d7bc
} // line 23, offset 0x5d7bc
/*
 * Offset 0x5D7BC, from D:\driver2\game\C\MAP.C (lines 237..242)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ NewProcessRoadMapLump(struct ROAD_MAP_LUMP_DATA *pRoadMapLumpData /*$s0*/, char *pLumpFile /*$s1*/)
{ // line 1, offset 0x5d7bc
} // line 6, offset 0x5d814
Source file(s) D:\driver2\game\C\MC_SND.C+D:\driver2\game\MC_SND.C, object file obj\mc_snd.oBJ overlay id <none>

// 69 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct __io {
  char in; // size=0, offset=0
  char out; // size=0, offset=1
};
struct __xa_request {
  short delay; // size=0, offset=0
  char bank; // size=0, offset=2
  char track; // size=0, offset=3
  char mission; // size=0, offset=4
  char cutscene; // size=0, offset=5
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};

// 103 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct __io io;
typedef struct __xa_request xa_request;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef struct CAR_POLY CAR_POLY;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct _EVENT EVENT;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 13 external declarations
static char missionstarts[42]; // offset 0x000a0414
static struct __io id_map[49]; // offset 0x000a0440
static struct __xa_request xa_data[26]; // offset 0x000a04a4
extern char es_mobile[1]; // offset 0x000aa684
extern char force_idle[8]; // offset 0x000aafd0
extern char force_siren[8]; // offset 0x000aafe0
extern int jericho_in_back; // offset 0x000aafd8
static int cutscene_timer; // offset 0x000aafb8
static int holdall; // offset 0x000aafbc
static int bodgevar; // offset 0x000aafc0
static int rio_alarm; // offset 0x000aafc4
static struct __xa_request xa; // offset 0x000aafc8
static long pos[4]; // offset 0x000d7528

// 10 functions
/*
 * Offset 0x5D814, from D:\driver2\game\C\MC_SND.C (lines 88..105)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
char /*$ra*/ GetMissionSound(char id /*$s1*/)
{ // line 1, offset 0x5d814
  char c; // $s0
  char start; // $s2
  char end; // $a0
  char rnd; // $t1
} // line 18, offset 0x5d950
/*
 * Offset 0x5D950, from D:\driver2\game\C\MC_SND.C (lines 187..270)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DoCutsceneSound()
{ // line 1, offset 0x5d950
  { // line 4, offset 0x5d99c
    { // line 37, offset 0x5da88
      { // line 39, offset 0x5dab0
        long *here; // $t0
      } // line 41, offset 0x5daec
    } // line 42, offset 0x5daec
    { // line 57, offset 0x5db9c
      { // line 58, offset 0x5dbac
        struct _CAR_DATA *you; // $s0
      } // line 61, offset 0x5dbf0
    } // line 63, offset 0x5dc1c
  } // line 82, offset 0x5dd00
} // line 84, offset 0x5dd10
/*
 * Offset 0x5DD10, from D:\driver2\game\C\MC_SND.C (lines 279..307)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ InitializeMissionSound()
{ // line 1, offset 0x5dd10
  int i; // $a1
} // line 29, offset 0x5e020
/*
 * Offset 0x5E020, from D:\driver2\game\C\MC_SND.C (lines 321..627)
 * Stack frame base $sp, size 128
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DoMissionSound()
{ // line 1, offset 0x5e020
  int i; // $a2
  { // line 79, offset 0x5e1e4
    long *pos; // $s5
    long *vel; // $s4
    { // line 83, offset 0x5e25c
      int chan; // $s1
    } // line 83, offset 0x5e25c
  } // line 83, offset 0x5e25c
  { // line 154, offset 0x5e348
    struct VECTOR Q[3]; // stack offset -96
    struct VECTOR P; // stack offset -48
  } // line 157, offset 0x5e410
  { // line 159, offset 0x5e424
    int i; // $s0
  } // line 163, offset 0x5e5b8
  { // line 202, offset 0x5e6f0
    struct VECTOR Q[3]; // stack offset -96
    struct VECTOR P; // stack offset -48
  } // line 205, offset 0x5e7b8
  { // line 207, offset 0x5e7cc
    int i; // $s0
  } // line 211, offset 0x5e968
  { // line 236, offset 0x5ea74
    long V[3]; // stack offset -96
    long *C; // $a1
  } // line 245, offset 0x5eb98
} // line 307, offset 0x5ee00
/*
 * Offset 0x5EE00, from D:\driver2\game\C\MC_SND.C (lines 652..740)
 * Stack frame base $sp, size 0
 */
char /*$ra*/ SilenceThisCar(int car /*$a1*/)
{
}
/*
 * Offset 0x5F12C, from D:\driver2\game\C\MC_SND.C (lines 145..156)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ RequestXA()
{ // line 1, offset 0x5f12c
} // line 12, offset 0x5f1b4
/*
 * Offset 0x5F1B4, from D:\driver2\game\C\MC_SND.C (lines 164..169)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ HandleRequestedXA()
{ // line 2, offset 0x5f1b4
} // line 6, offset 0x5f224
/*
 * Offset 0x5F224, from D:\driver2\game\C\MC_SND.C (lines 176..180)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitializeCutsceneSound(int cutscene /*$a0*/)
{ // line 1, offset 0x5f224
  int i; // $a0
} // line 5, offset 0x5f25c
/*
 * Offset 0x5F25C, from D:\driver2\game\C\MC_SND.C (lines 636..641)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetMSoundVar(int var /*$a0*/, struct VECTOR *V /*$a1*/)
{
}
/*
 * Offset 0x5F294, from D:\driver2\game\C\MC_SND.C (lines 749..756)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ AdjustPlayerCarVolume()
{
}
Source file(s) D:\driver2\game\C\MDRAW.C+D:\driver2\game\MDRAW.C, object file obj\mdraw.obj overlay id <none>

// 66 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};

// 101 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 1 external declarations
extern int gDisplayPosition; // offset 0x000aa688

// 12 functions
/*
 * Offset 0x5F2FC, from D:\driver2\game\C\MDRAW.C (lines 58..123)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ DrawMission()
{ // line 2, offset 0x5f2fc
  { // line 10, offset 0x5f390
    char *string; // $s1
  } // line 27, offset 0x5f418
} // line 66, offset 0x5f554
/*
 * Offset 0x5F56C, from D:\driver2\game\C\MDRAW.C (lines 312..416)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ DrawWorldTarget(struct _TARGET *target /*$s0*/)
{ // line 1, offset 0x5f56c
  struct VECTOR tv; // stack offset -32
  int slot; // $v1
  int flags; // $s1
} // line 105, offset 0x5f850
/*
 * Offset 0x5F864, from D:\driver2\game\C\MDRAW.C (lines 419..516)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawMultiplayerTarget(struct _TARGET *target /*$s0*/)
{ // line 1, offset 0x5f864
  struct VECTOR tv; // stack offset -40
  unsigned char r; // $s3
  unsigned char g; // $s2
  unsigned char b; // $s1
} // line 98, offset 0x5fa6c
/*
 * Offset 0x5FA88, from D:\driver2\game\C\MDRAW.C (lines 126..152)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ DrawTimer(struct MR_TIMER *timer /*$s1*/)
{ // line 1, offset 0x5fa88
  char string[16]; // stack offset -32
} // line 27, offset 0x5fb68
/*
 * Offset 0x5FB7C, from D:\driver2\game\C\MDRAW.C (lines 155..160)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DisplayPlayerPosition()
{ // line 2, offset 0x5fb7c
  char string[32]; // stack offset -40
} // line 6, offset 0x5fbc4
/*
 * Offset 0x5FBC4, from D:\driver2\game\C\MDRAW.C (lines 163..176)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ DrawMessage(int y /*$s1*/, char *string /*$s0*/)
{ // line 1, offset 0x5fbc4
  { // line 4, offset 0x5fbe0
  } // line 13, offset 0x5fc28
} // line 14, offset 0x5fc3c
/*
 * Offset 0x5FC3C, from D:\driver2\game\C\MDRAW.C (lines 179..187)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawWorldTargets()
{ // line 2, offset 0x5fc3c
  int i; // $s0
} // line 9, offset 0x5fc7c
/*
 * Offset 0x5FC8C, from D:\driver2\game\C\MDRAW.C (lines 190..198)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawOverheadTargets()
{ // line 2, offset 0x5fc8c
  int i; // $s0
} // line 9, offset 0x5fccc
/*
 * Offset 0x5FCDC, from D:\driver2\game\C\MDRAW.C (lines 201..209)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawFullscreenTargets()
{ // line 2, offset 0x5fcdc
  int i; // $s0
} // line 9, offset 0x5fd1c
/*
 * Offset 0x5FD2C, from D:\driver2\game\C\MDRAW.C (lines 212..220)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawMultiplayerTargets()
{ // line 2, offset 0x5fd2c
  int i; // $s0
} // line 9, offset 0x5fd6c
/*
 * Offset 0x5FD7C, from D:\driver2\game\C\MDRAW.C (lines 230..268)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawOverheadTarget(struct _TARGET *target /*$s0*/)
{ // line 1, offset 0x5fd7c
  struct VECTOR tv; // stack offset -24
} // line 39, offset 0x5fe84
/*
 * Offset 0x5FE94, from D:\driver2\game\C\MDRAW.C (lines 271..309)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawFullscreenTarget(struct _TARGET *target /*$s0*/)
{ // line 1, offset 0x5fe94
  struct VECTOR tv; // stack offset -24
} // line 39, offset 0x5ff9c
Source file(s) D:\driver2\game\C\MGENERIC.C+D:\driver2\game\MGENERIC.C, object file obj\mgeneric.obj overlay id <none>

// 66 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};

// 101 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 3 external declarations
extern int gHaveStoredData; // offset 0x000aa6a0
extern struct MISSION_DATA MissionStartData; // offset 0x000d7538
extern struct MISSION_DATA MissionEndData; // offset 0x000d7620

// 6 functions
/*
 * Offset 0x5FFAC, from D:\driver2\game\C\MGENERIC.C (lines 109..147)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ StorePlayerPosition(struct SAVED_PLAYER_POS *data /*$a2*/)
{ // line 1, offset 0x5ffac
  unsigned short type; // $a0
} // line 39, offset 0x60248
/*
 * Offset 0x60248, from D:\driver2\game\C\MGENERIC.C (lines 150..177)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ RestorePlayerPosition(struct SAVED_PLAYER_POS *data /*$a2*/)
{ // line 1, offset 0x60248
} // line 28, offset 0x603b0
/*
 * Offset 0x603B0, from D:\driver2\game\C\MGENERIC.C (lines 180..211)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ StoreCarPosition(struct _TARGET *target /*$t1*/, struct SAVED_CAR_POS *data /*$t0*/)
{ // line 1, offset 0x603b0
  int slot; // $v1
} // line 32, offset 0x604dc
/*
 * Offset 0x604E4, from D:\driver2\game\C\MGENERIC.C (lines 214..262)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ RestoreCarPosition(struct SAVED_CAR_POS *data /*$a3*/)
{
}
/*
 * Offset 0x60740, from D:\driver2\game\C\MGENERIC.C (lines 62..83)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ StoreEndData()
{ // line 2, offset 0x60740
  struct _TARGET *target; // $s0
  struct SAVED_CAR_POS *carpos; // $s2
  int i; // $s1
} // line 22, offset 0x607e4
/*
 * Offset 0x607E4, from D:\driver2\game\C\MGENERIC.C (lines 86..103)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ RestoreStartData()
{ // line 2, offset 0x607e4
  struct SAVED_CAR_POS *carpos; // $s0
  int i; // $s1
} // line 18, offset 0x60838
Source file(s) D:\driver2\game\C\MISSION.C+D:\driver2\game\MISSION.C, object file obj\mission.obj overlay id <none>

// 83 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct _PLAYER {
  long pos[4]; // size=16, offset=0
  int dir; // size=0, offset=16
  struct VECTOR *spoolXZ; // size=16, offset=20
  struct VECTOR cameraPos; // size=16, offset=24
  int cameraDist; // size=0, offset=40
  int maxCameraDist; // size=0, offset=44
  int cameraAngle; // size=0, offset=48
  int headPos; // size=0, offset=52
  int headTarget; // size=0, offset=56
  int viewChange; // size=0, offset=60
  char dying; // size=0, offset=64
  char upsideDown; // size=0, offset=65
  char onGrass; // size=0, offset=66
  char targetCarId; // size=0, offset=67
  char cameraView; // size=0, offset=68
  char headTimer; // size=0, offset=69
  char playerType; // size=0, offset=70
  char worldCentreCarId; // size=0, offset=71
  char playerCarId; // size=0, offset=72
  char cameraCarId; // size=0, offset=73
  char padid; // size=0, offset=74
  char car_is_sounding; // size=0, offset=75
  long camera_vel[3]; // size=12, offset=76
  int snd_cam_ang; // size=0, offset=88
  struct __skidinfo skidding; // size=2, offset=92
  struct __skidinfo wheelnoise; // size=2, offset=94
  struct __horninfo horn; // size=3, offset=96
  int car_sound_timer; // size=0, offset=100
  short revsvol; // size=0, offset=104
  short idlevol; // size=0, offset=106
  struct PEDESTRIAN *pPed; // size=92, offset=108
  int crash_timer; // size=0, offset=112
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _MISSION {
  int id; // size=0, offset=0
  int size; // size=0, offset=4
  int city; // size=0, offset=8
  int time; // size=0, offset=12
  int weather; // size=0, offset=16
  struct XYPAIR playerStartPosition; // size=8, offset=20
  int playerStartRotation; // size=0, offset=28
  int type; // size=0, offset=32
  short timer; // size=0, offset=36
  short timerFlags; // size=0, offset=38
  int strings; // size=0, offset=40
  struct _COP_DATA cops; // size=16, offset=44
  int msgCarWrecked; // size=0, offset=60
  int msgOutOfTime; // size=0, offset=64
  int msgComplete; // size=0, offset=68
  int region; // size=0, offset=72
  int route; // size=0, offset=76
  int msgDrowned; // size=0, offset=80
  int playerCarModel; // size=0, offset=84
  int playerCarColour; // size=0, offset=88
  int maxDamage; // size=0, offset=92
  int residentModels[5]; // size=20, offset=96
  int nCutscenes; // size=0, offset=116
  int title; // size=0, offset=120
  int msgPoliceCar; // size=0, offset=124
  int msgDoorsLocked; // size=0, offset=128
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _ROUTE_INFO {
  int nJunctions; // size=0, offset=0
  char data[1000][4]; // size=4000, offset=4
  struct LEAD_PARAMETERS parameters; // size=64, offset=4004
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct MR_MISSION {
  int active; // size=0, offset=0
  int gameover_delay; // size=0, offset=4
  enum PAUSEMODE gameover_mode; // size=1, offset=8
  short message_timer[2]; // size=4, offset=10
  short message_priority[2]; // size=4, offset=14
  char *message_string[2]; // size=8, offset=20
  struct MR_TIMER timer[2]; // size=24, offset=28
  struct _TARGET *CarTarget; // size=64, offset=52
  struct _TARGET *ChaseTarget; // size=64, offset=56
  int PhantomCarId; // size=0, offset=60
  int ChaseHitDelay; // size=0, offset=64
  char *StealMessage; // size=0, offset=68
};
struct STOPCOPS {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  int radius; // size=0, offset=12
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
enum FAIL_REASON : char {
  FAILED_OUTOFTIME = 0,
  FAILED_CnR_LOSTHIM = 1,
  FAILED_MESSAGESET = 2,
};
struct MR_THREAD {
  unsigned char active; // size=0, offset=0
  unsigned char player; // size=0, offset=1
  unsigned long *initial_sp; // size=0, offset=4
  unsigned long *pc; // size=0, offset=8
  unsigned long *sp; // size=0, offset=12
};

// 115 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct _PLAYER PLAYER;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _MISSION MS_MISSION;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _ROUTE_INFO MS_ROUTE_INFO;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct MR_MISSION MR_MISSION;
typedef struct STOPCOPS STOPCOPS;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct CAR_POLY CAR_POLY;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct _EVENT EVENT;
typedef enum FAIL_REASON FAIL_REASON;
typedef struct MR_THREAD MR_THREAD;
typedef unsigned int size_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 46 external declarations
static char *gameNames[64]; // offset 0x000a0540
static char *cheatText[5]; // offset 0x000a0640
static char *CutSceneNames[28]; // offset 0x000a0654
static char *MissionName[37]; // offset 0x000a06c4
extern int gStartOnFoot; // offset 0x000aa6f4
extern int gTimeOfDay; // offset 0x000aa6f8
extern int gWeather; // offset 0x000aa6fc
extern int gTannerActionNeeded; // offset 0x000aa700
extern int gPlayerWithTheFlag; // offset 0x000aa704
extern int gCarWithABerm; // offset 0x000aa708
extern int gCantDrive; // offset 0x000aa70c
extern int MaxPlayerDamage[2]; // offset 0x000aa710
extern int TAIL_TOOCLOSE; // offset 0x000aa718
extern int TAIL_GETTINGCLOSE; // offset 0x000aa71c
extern int TAIL_GETTINGFAR; // offset 0x000aa720
extern int TAIL_TOOFAR; // offset 0x000aa724
extern int gNumRaceTrackLaps; // offset 0x000aa728
extern char *gMissionTitle; // offset 0x000aa72c
extern enum PAUSEMODE gMissionCompletionState; // offset 0x000aa730
extern int gDontPingInCops; // offset 0x000aa734
extern int g321GoDelay; // offset 0x000aa738
extern int gGotInStolenCar; // offset 0x000aa73c
extern int gCopCarTheftAttempted; // offset 0x000aa740
extern int gLockPickingAttempted; // offset 0x000aa744
extern int gDontResetCarDamage; // offset 0x000aa748
static char *carSelectPlayerText[2]; // offset 0x000aa6a4
static char *MissionLoadAddress; // offset 0x000aa6dc
static int cop_adjust; // offset 0x000aa6e0
static char NewLeadDelay; // offset 0x000aa6e4
static int prevCopsInPursuit; // offset 0x000aa6e8
static int last_flag; // offset 0x000aa6ec
static int lastsay; // offset 0x000aa6f0
extern struct _MISSION *MissionHeader; // offset 0x000aaff4
extern struct _TARGET *MissionTargets; // offset 0x000ab004
extern unsigned long *MissionScript; // offset 0x000aaffc
extern char *MissionStrings; // offset 0x000ab008
extern int gMusicType; // offset 0x000aafec
extern int gPlayerDamageFactor; // offset 0x000ab000
extern unsigned long *Driver2TempJunctionsPtr; // offset 0x000aaff8
extern int NumTempJunctions; // offset 0x000aaff0
static unsigned char playercollected[2]; // offset 0x000aafe8
extern struct MR_MISSION Mission; // offset 0x000d7c08
extern int gLapTimes[2][5]; // offset 0x000d7c50
extern struct STOPCOPS gStopCops; // offset 0x000d7c78
static unsigned long MissionStack[16][16]; // offset 0x000d7708
static struct MR_THREAD MissionThreads[16]; // offset 0x000d7b08

// 42 functions
/*
 * Offset 0x6084C, from D:\driver2\game\C\MISSION.C (lines 1347..1434)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ InitialiseMissionDefaults()
{ // line 2, offset 0x6084c
  int i; // $a0
} // line 88, offset 0x60a74
/*
 * Offset 0x60A74, from D:\driver2\game\C\MISSION.C (lines 1437..1878)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ LoadMission(int missionnum /*$s0*/)
{ // line 1, offset 0x60a74
  char filename[32]; // stack offset -64
  unsigned long header; // stack offset -32
  unsigned long offset; // $s0
  unsigned long length; // $s1
  int size; // $t1
  int i; // $v0
  { // line 240, offset 0x60d88
    int flags; // $a1
    int time; // $a2
  } // line 261, offset 0x60e04
  { // line 330, offset 0x60f84
    struct _ROUTE_INFO *rinfo; // $s0
  } // line 356, offset 0x61024
  { // line 393, offset 0x610fc
    int num; // $v1
  } // line 404, offset 0x61128
} // line 442, offset 0x61258
/*
 * Offset 0x61274, from D:\driver2\game\C\MISSION.C (lines 1881..1959)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ HandleMission()
{
}
/*
 * Offset 0x614A4, from D:\driver2\game\C\MISSION.C (lines 1962..2012)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ HandleTimer(struct MR_TIMER *timer /*$s0*/)
{
}
/*
 * Offset 0x61684, from D:\driver2\game\C\MISSION.C (lines 2015..2042)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ RegisterChaseHit(int car1 /*$a0*/, int car2 /*$a1*/)
{
}
/*
 * Offset 0x61784, from D:\driver2\game\C\MISSION.C (lines 2140..2220)
 * Stack frame base $sp, size 720
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ Swap2Cars(int curslot /*$a3*/, int newslot /*$s1*/)
{ // line 1, offset 0x61784
  struct _CAR_DATA cd; // stack offset -704
  struct _CAR_DATA *cp; // $s0
  int ctrlNodeCurId; // $s4
  int pnodeCurId; // $s5
  int ctrlNodeNewId; // $t2
  int pnodeNewId; // $t3
} // line 81, offset 0x61c5c
/*
 * Offset 0x61C5C, from D:\driver2\game\C\MISSION.C (lines 2234..2276)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ HandleMissionThreads()
{ // line 2, offset 0x61c5c
  struct MR_THREAD *thread; // $s0
  int running; // $s1
  unsigned long value; // $a1
  int i; // $a0
} // line 43, offset 0x61e3c
/*
 * Offset 0x61E3C, from D:\driver2\game\C\MISSION.C (lines 2279..2438)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ MRCommand(struct MR_THREAD *thread /*$s1*/, unsigned long cmd /*$a1*/)
{ // line 1, offset 0x61e3c
  unsigned long val1; // $s0
  unsigned long val2; // $s0
} // line 160, offset 0x62470
/*
 * Offset 0x62470, from D:\driver2\game\C\MISSION.C (lines 2701..3293)
 * Stack frame base $sp, size 120
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ MRProcessTarget(struct MR_THREAD *thread /*$s7*/, struct _TARGET *target /*$s5*/)
{ // line 1, offset 0x62470
  struct VECTOR tv; // stack offset -96
  struct VECTOR pv; // stack offset -80
  int ret; // $fp
  unsigned long dist; // $s6
  int slot; // stack offset -48
  int message; // $v0
  int sample; // $a0
  { // line 158, offset 0x629bc
    unsigned long message; // $s1
    unsigned long timer; // $s0
    unsigned long delay; // $s2
  } // line 173, offset 0x62a2c
  { // line 233, offset 0x62bfc
    int direction; // $s0
    long pos[4]; // stack offset -64
    int *inform; // $s4
    struct _CAR_DATA *cp; // $v0
  } // line 239, offset 0x62bfc
  { // line 368, offset 0x63028
    long pos[4]; // stack offset -64
  } // line 375, offset 0x63090
  { // line 403, offset 0x6319c
  } // line 403, offset 0x6319c
  { // line 434, offset 0x63254
  } // line 434, offset 0x63254
  { // line 457, offset 0x63318
  } // line 457, offset 0x63318
} // line 593, offset 0x63728
/*
 * Offset 0x63728, from D:\driver2\game\C\MISSION.C (lines 3311..3389)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ MRCreateCar(struct _TARGET *target /*$s1*/)
{ // line 1, offset 0x63728
  long pos[4]; // stack offset -64
  int actAsCop; // $s2
  int damaged; // $s7
  int model; // $s4
  int palette; // $s5
  int dir; // $s3
  int rot; // $a2
  int id; // $s0
  char playerid; // stack offset -48
} // line 79, offset 0x639a0
/*
 * Offset 0x639A0, from D:\driver2\game\C\MISSION.C (lines 3398..3449)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ PreProcessTargets()
{ // line 2, offset 0x639a0
  struct _TARGET *target; // $s0
  int i; // $s1
} // line 52, offset 0x63b78
/*
 * Offset 0x63B78, from D:\driver2\game\C\MISSION.C (lines 3469..3588)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ HandleGameOver()
{ // line 3, offset 0x63b78
  { // line 5, offset 0x63bb8
    struct _PLAYER *lp; // $s0
    struct _CAR_DATA *cp; // $a2
    int i; // $s2
    int playersdead; // $s3
    { // line 41, offset 0x63ce4
      int surfInd; // $v1
    } // line 53, offset 0x63d7c
  } // line 96, offset 0x63ee4
} // line 120, offset 0x63f84
/*
 * Offset 0x63F84, from D:\driver2\game\C\MISSION.C (lines 3623..3681)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetMissionComplete()
{
}
/*
 * Offset 0x641A8, from D:\driver2\game\C\MISSION.C (lines 3716..3738)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ActivateNextFlag()
{ // line 2, offset 0x641a8
  int i; // $a3
  int j; // $a1
} // line 23, offset 0x64268
/*
 * Offset 0x64268, from D:\driver2\game\C\MISSION.C (lines 2046..2056)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ PauseMissionTimer(int pause /*$a0*/)
{
}
/*
 * Offset 0x642A8, from D:\driver2\game\C\MISSION.C (lines 2060..2078)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetMissionMessage(char *message /*$a0*/, int priority /*$a1*/, int seconds /*$a2*/)
{ // line 1, offset 0x642a8
  int i; // $a3
} // line 19, offset 0x64340
/*
 * Offset 0x64348, from D:\driver2\game\C\MISSION.C (lines 2081..2091)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetPlayerMessage(int player /*$a0*/, char *message /*$a1*/, int priority /*$a2*/, int seconds /*$a3*/)
{
}
/*
 * Offset 0x643C4, from D:\driver2\game\C\MISSION.C (lines 2094..2114)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ TargetComplete(struct _TARGET *target /*$a0*/, int player /*$a1*/)
{ // line 1, offset 0x643c4
  unsigned long complete; // $a0
} // line 21, offset 0x64408
/*
 * Offset 0x64408, from D:\driver2\game\C\MISSION.C (lines 2117..2137)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ TargetActive(struct _TARGET *target /*$a0*/, int player /*$a1*/)
{ // line 1, offset 0x64408
  unsigned long active; // $a0
} // line 21, offset 0x6444c
/*
 * Offset 0x6444C, from D:\driver2\game\C\MISSION.C (lines 2223..2227)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetConfusedCar(int slot /*$a0*/)
{
}
/*
 * Offset 0x64498, from D:\driver2\game\C\MISSION.C (lines 2441..2491)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ MROperator(struct MR_THREAD *thread /*$s3*/, unsigned long op /*$s0*/)
{ // line 1, offset 0x64498
  int result; // $s2
  long val1; // $s1
  long val2; // $a1
} // line 51, offset 0x645ac
/*
 * Offset 0x645AC, from D:\driver2\game\C\MISSION.C (lines 2494..2510)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ MRFunction(struct MR_THREAD *thread /*$s0*/, unsigned long fnc /*$a1*/)
{ // line 1, offset 0x645ac
} // line 17, offset 0x64614
/*
 * Offset 0x64614, from D:\driver2\game\C\MISSION.C (lines 2514..2518)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MRInitialiseThread(struct MR_THREAD *thread /*$a0*/, unsigned long *pc /*$a1*/, unsigned char player /*$a2*/)
{
}
/*
 * Offset 0x64630, from D:\driver2\game\C\MISSION.C (lines 2526..2542)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ MRStartThread(struct MR_THREAD *callingthread /*$t0*/, unsigned long addr /*$a1*/, unsigned char player /*$a2*/)
{ // line 1, offset 0x64630
  int i; // $v1
} // line 17, offset 0x64680
/*
 * Offset 0x64690, from D:\driver2\game\C\MISSION.C (lines 2545..2547)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ MRStopThread(struct MR_THREAD *thread /*$a0*/)
{
}
/*
 * Offset 0x6469C, from D:\driver2\game\C\MISSION.C (lines 2551..2556)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ MRCommitThreadGenocide()
{ // line 2, offset 0x6469c
  int i; // $s0
} // line 6, offset 0x646e0
/*
 * Offset 0x646E0, from D:\driver2\game\C\MISSION.C (lines 2560..2571)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ MRJump(struct MR_THREAD *thread /*$a2*/, long jump /*$a1*/)
{
}
/*
 * Offset 0x6472C, from D:\driver2\game\C\MISSION.C (lines 2575..2581)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MRPush(struct MR_THREAD *thread /*$a0*/, long value /*$a1*/)
{
}
/*
 * Offset 0x64744, from D:\driver2\game\C\MISSION.C (lines 2585..2596)
 * Stack frame base $sp, size 0
 */
long /*$ra*/ MRPop(struct MR_THREAD *thread /*$a0*/)
{ // line 1, offset 0x64744
} // line 12, offset 0x64760
/*
 * Offset 0x64760, from D:\driver2\game\C\MISSION.C (lines 2600..2619)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
long /*$ra*/ MRGetParam(struct MR_THREAD *thread /*$s0*/)
{ // line 1, offset 0x64760
  long value; // $a1
} // line 20, offset 0x647cc
/*
 * Offset 0x647CC, from D:\driver2\game\C\MISSION.C (lines 2622..2644)
 * Stack frame base $sp, size 0
 */
long /*$ra*/ MRGetVariable(struct MR_THREAD *thread /*$a2*/, unsigned long var /*$a1*/)
{
}
/*
 * Offset 0x648B0, from D:\driver2\game\C\MISSION.C (lines 2648..2696)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MRSetVariable(struct MR_THREAD *thread /*$v1*/, unsigned long var /*$a1*/, long value /*$a2*/)
{
}
/*
 * Offset 0x649E4, from D:\driver2\game\C\MISSION.C (lines 3296..3301)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ MRRequestCar(struct _TARGET *target /*$a0*/)
{
}
/*
 * Offset 0x64A24, from D:\driver2\game\C\MISSION.C (lines 3305..3307)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ MRHandleCarRequests()
{
}
/*
 * Offset 0x64A50, from D:\driver2\game\C\MISSION.C (lines 3392..3394)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MRCancelCarRequest(struct _TARGET *target /*$a0*/)
{
}
/*
 * Offset 0x64A74, from D:\driver2\game\C\MISSION.C (lines 3452..3466)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ Handle321Go()
{ // line 2, offset 0x64a74
} // line 15, offset 0x64ad0
/*
 * Offset 0x64AD0, from D:\driver2\game\C\MISSION.C (lines 3591..3620)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ CompleteAllActiveTargets(int player /*$a0*/)
{ // line 2, offset 0x64ad0
  int i; // $a1
  int flag1; // $a3
  int flag2; // $a2
} // line 30, offset 0x64b38
/*
 * Offset 0x64B38, from D:\driver2\game\C\MISSION.C (lines 3684..3700)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetMissionFailed(enum FAIL_REASON reason /*$a0*/)
{
}
/*
 * Offset 0x64BD8, from D:\driver2\game\C\MISSION.C (lines 3704..3712)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetMissionOver(enum PAUSEMODE mode /*$a0*/)
{
}
/*
 * Offset 0x64C24, from D:\driver2\game\C\MISSION.C (lines 3760..3767)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CalcLapTime(int player /*$a0*/, int time /*$a1*/, int lap /*$a2*/)
{ // line 1, offset 0x64c24
  int i; // $a2
  int ptime; // $a3
} // line 8, offset 0x64c60
/*
 * Offset 0x64C60, from D:\driver2\game\C\MISSION.C (lines 3770..3777)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ SetCarToBeStolen(struct _TARGET *target /*$s0*/, int player /*$s1*/)
{
}
/*
 * Offset 0x64CD0, from D:\driver2\game\C\MISSION.C (lines 3781..3786)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MakePhantomCarEqualPlayerCar()
{
}
Source file(s) D:\driver2\game\C\MODELS.C+D:\driver2\game\MODELS.C, object file obj\models.OBJ overlay id <none>

// 56 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 80 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 4 external declarations
extern char specModelValid; // offset 0x000aa74c
extern char *modelname_buffer; // offset 0x000ab010
extern char *specmallocptr; // offset 0x000ab014
extern char *specLoadBuffer; // offset 0x000ab018

// 3 functions
/*
 * Offset 0x64CFC, from D:\driver2\game\C\MODELS.C (lines 33..93)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessMDSLump(char *lump_file /*$a0*/, int lump_size /*$a1*/)
{ // line 1, offset 0x64cfc
  int i; // $a2
  int size; // $v0
  int modelamt; // $a3
  char *mdsfile; // $a0
  struct MODEL *model; // $a0
  struct MODEL *parentmodel; // $a1
} // line 61, offset 0x64e6c
/*
 * Offset 0x64E6C, from D:\driver2\game\C\MODELS.C (lines 212..347)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ ProcessCarModelLump(char *lump_ptr /*$s2*/, int lump_size /*$a1*/)
{ // line 2, offset 0x64e6c
  int offset; // $a0
  int i; // $s3
  int car_model; // $a0
  int specMemReq; // $s4
  { // line 19, offset 0x64eb0
    struct MODEL *model; // $v0
    int mem; // $a1
  } // line 74, offset 0x64f88
} // line 136, offset 0x65134
/*
 * Offset 0x65134, from D:\driver2\game\C\MODELS.C (lines 391..431)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
struct MODEL * /*$ra*/ GetCarModel(char *src /*$s2*/, char **dest /*$s1*/, int KeepNormals /*$s3*/)
{ // line 1, offset 0x65134
  struct MODEL *model; // $s0
  int size; // $a2
  char *mem; // $v1
  { // line 28, offset 0x6519c
  } // line 38, offset 0x651ec
} // line 41, offset 0x6520c
Source file(s) D:\driver2\game\C\MOTION_C.C+D:\driver2\game\MOTION_C.C, object file obj\motion_c.OBJ overlay id <none>

// 79 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct TILE {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short w; // size=0, offset=12
  short h; // size=0, offset=14
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct POLYFT3 {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char spare; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char pad; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO pad2; // size=2, offset=14
  struct RGB color; // size=4, offset=16
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct BONE {
  enum LIMBS id; // size=1, offset=0
  struct BONE *pParent; // size=68, offset=4
  char numChildren; // size=0, offset=8
  struct BONE *pChildren[3]; // size=12, offset=12
  struct SVECTOR_NOPAD *pvOrigPos; // size=6, offset=24
  struct SVECTOR *pvRotation; // size=8, offset=28
  struct VECTOR vOffset; // size=16, offset=32
  struct VECTOR vCurrPos; // size=16, offset=48
  struct MODEL **pModel; // size=36, offset=64
};
enum LIMBS : char {
  ROOT = 0,
  LOWERBACK = 1,
  JOINT_1 = 2,
  NECK = 3,
  HEAD = 4,
  LSHOULDER = 5,
  LELBOW = 6,
  LHAND = 7,
  LFINGERS = 8,
  RSHOULDER = 9,
  RELBOW = 10,
  RHAND = 11,
  RFINGERS = 12,
  HIPS = 13,
  LHIP = 14,
  LKNEE = 15,
  LFOOT = 16,
  LTOE = 17,
  RHIP = 18,
  RKNEE = 19,
  RFOOT = 20,
  RTOE = 21,
  JOINT = 22,
};
enum TEXTURE_PALS : char {
  NO_PAL = 0,
  JEANS_PAL = 1,
  ARM_PAL = 2,
  CHEST_PAL = 3,
};
struct PED_DATA {
  char cWidth; // size=0, offset=0
  unsigned char cAdj; // size=0, offset=1
  struct TEXTURE_DETAILS *ptd; // size=14, offset=4
  enum TEXTURE_PALS texPal; // size=1, offset=8
};

// 105 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct TILE TILE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct POLYFT3 POLYFT3;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct DB DB;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct BONE BONE;
typedef enum LIMBS LIMBS;
typedef enum TEXTURE_PALS TEXTURE_PALS;
typedef struct PED_DATA PED_DATA;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef struct MVERTEX SV5x5[5][5];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 33 external declarations
extern char MotionSpeed[7]; // offset 0x000a07a0
extern enum LIMBS lRoutes[5][8]; // offset 0x000a0758
extern char *motion_files[8]; // offset 0x000a0780
extern struct PED_DATA MainPed[23]; // offset 0x000a07a8
extern struct BONE Skel[23]; // offset 0x000a08bc
extern int boneIdvals[15]; // offset 0x000a0ed8
extern int bAllreadyRotated; // offset 0x000aa750
extern int bDoingShadow; // offset 0x000aa754
extern int vStored; // offset 0x000aa758
extern int zVal; // offset 0x000aa75c
extern char *motion_dir; // offset 0x000aa79c
extern int bLoadedAllMC; // offset 0x000aa7a0
extern int bDisplayBones; // offset 0x000aa7a4
extern int myVal; // offset 0x000aa7a8
extern int bodyShiftValue; // offset 0x000aa7ac
extern int palnumber; // offset 0x000aa7b0
extern int gCurrentZ; // offset 0x000ab044
extern struct RECT rectTannerWindow; // offset 0x000ab038
extern int ThisMotion; // offset 0x000ab020
extern int frames; // offset 0x000ab02c
extern int joints; // offset 0x000ab034
extern struct SVECTOR_NOPAD *svTemp; // offset 0x000ab030
extern int iCurrBone; // offset 0x000ab040
extern struct PEDESTRIAN *pDrawingPed; // offset 0x000ab024
extern int Tangle; // offset 0x000ab028
extern struct PEDESTRIAN pedestrians[28]; // offset 0x000d83b8
extern struct TILE tileTannerClear[2]; // offset 0x000d7c88
extern struct POLY_FT4 ft4TannerShadow[2]; // offset 0x000d9158
extern int MotionCaptureData[24]; // offset 0x000d8dc8
extern int cTannerVNumbers[24]; // offset 0x000d7ca8
extern struct SVECTOR vTannerList[210]; // offset 0x000d7d28
extern int cJerichoVNumbers[7]; // offset 0x000d7d08
extern struct SVECTOR vJerichoList[102]; // offset 0x000d8e28

// 18 functions
/*
 * Offset 0x6520C, from D:\driver2\game\C\MOTION_C.C (lines 978..1208)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawBodySprite(int boneId /*$s1*/, long v1 /*$a1*/, long v2 /*$a2*/, int sz /*$s7*/, int sy /*stack 16*/, int sy /*$v1*/)
{ // line 1, offset 0x6520c
  struct TEXTURE_DETAILS *body_texture; // $s2
  int x0; // $s5
  int x1; // $s6
  int y0; // $fp
  int y1; // stack offset -48
  int dx1; // $s4
  int dy1; // $s3
  int z; // $a3
  int z2; // $a3
  int dx2; // $t5
  int dy2; // $t3
  int width; // $t0
  int sort_fix; // $a3
  int angle; // $t3
  int c; // $t0
  int s; // $a2
  int clut; // $a2
  int tpage; // $t0
  struct POLY_FT4 *prims; // $t2
  int z1; // stack offset -44
  int pal; // $v1
  { // line 125, offset 0x655b0
    int tp; // $v1
  } // line 155, offset 0x6564c
} // line 231, offset 0x6594c
/*
 * Offset 0x6594C, from D:\driver2\game\C\MOTION_C.C (lines 1289..1345)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ StoreVertexLists()
{ // line 2, offset 0x6594c
  int i; // $t1
  int j; // $a3
  int numVerts; // $t3
  struct MODEL *pModel; // $t0
  struct SVECTOR *pVerts; // $a2
  int counter; // $t4
  struct BONE *pBone; // $a0
} // line 57, offset 0x65ad8
/*
 * Offset 0x65AD8, from D:\driver2\game\C\MOTION_C.C (lines 1355..1412)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupTannerSkeleton()
{ // line 2, offset 0x65ad8
  int i; // $t1
  struct BONE *pBone; // $a3
  char *pC; // $v0
  struct SVECTOR *store; // $t4
  struct SVECTOR_NOPAD *pSVNP; // $v1
} // line 58, offset 0x65cd8
/*
 * Offset 0x65CD8, from D:\driver2\game\C\MOTION_C.C (lines 1421..1598)
 * Stack frame base $sp, size 152
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ newShowTanner()
{ // line 2, offset 0x65cd8
  struct VECTOR *playerPos; // $a2
  struct VECTOR *camPos; // $a1
  struct VECTOR *vJPos; // $s1
  struct VECTOR v; // stack offset -128
  struct MODEL *pModel; // $t0
  struct SVECTOR *mVerts; // $a1
  int i; // $s2
  int j; // $a3
  int c; // $a3
  int id; // $a2
  int limbs; // $a0
  struct BONE *pBone; // $s0
  int lval; // $t1
  { // line 109, offset 0x660a0
    struct BONE *pBone; // $s0
    struct VECTOR *v1; // $a2
    struct VECTOR *v2; // $a1
    { // line 109, offset 0x660a0
      struct SVECTOR *data; // $t1
      long t1; // stack offset -92
      long t0; // stack offset -96
      int z2; // stack offset -80
      int z1; // stack offset -84
      int z; // stack offset -88
    } // line 109, offset 0x661c4
  } // line 109, offset 0x661c4
  { // line 115, offset 0x661f8
    struct BONE *pBone; // $s0
    struct VECTOR *v1; // $a0
    struct VECTOR *v2; // $a2
    { // line 115, offset 0x661f8
      struct SVECTOR *data; // $t0
      long t1; // stack offset -72
      long t0; // stack offset -76
      int z2; // stack offset -60
      int z1; // stack offset -64
      int z; // stack offset -68
    } // line 115, offset 0x661f8
  } // line 115, offset 0x661f8
  { // line 121, offset 0x66330
    struct SVECTOR v1; // stack offset -112
    struct SVECTOR v2; // stack offset -104
  } // line 123, offset 0x66330
  { // line 148, offset 0x6648c
    struct BONE *pBone; // $s0
    struct VECTOR *v1; // $a2
    struct VECTOR *v2; // $a1
    { // line 148, offset 0x6648c
      struct SVECTOR *data; // $t1
      long t1; // stack offset -52
      long t0; // stack offset -56
      int z2; // stack offset -40
      int z1; // stack offset -44
      int z; // stack offset -48
    } // line 148, offset 0x6648c
  } // line 148, offset 0x6648c
  { // line 154, offset 0x665c8
    int bias; // $a3
  } // line 167, offset 0x665f4
} // line 178, offset 0x66648
/*
 * Offset 0x66648, from D:\driver2\game\C\MOTION_C.C (lines 1606..1765)
 * Stack frame base $sp, size 1104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ newRotateBones(struct BONE *poBone /*$a0*/)
{ // line 2, offset 0x66648
  struct MATRIX mStore[32]; // stack offset -1088
  struct MATRIX *pMatrix; // $s2
  struct MATRIX *oMatrix; // $s5
  struct SVECTOR *svBone; // $s6
  struct VECTOR *vBoneRotated; // $s3
  struct BONE *pBone; // $s1
  int id; // $s0
  struct SVECTOR *pVerts; // $a3
  struct SVECTOR *pmVerts; // $s0
  int numVerts; // $t0
  struct MODEL *pModel; // $v0
  int i; // $a2
  struct SVECTOR *pD; // $a0
  int c; // $s4
  int j; // $a1
  struct VECTOR sv; // stack offset -64
  { // line 3, offset 0x66648
    int cx; // $t2
    int sx; // $a3
    int cy; // $a0
    int sy; // $t0
    int cz; // $t3
    int sz; // $t6
    int stmp; // $v0
  } // line 3, offset 0x66648
} // line 160, offset 0x66fb8
/*
 * Offset 0x66FB8, from D:\driver2\game\C\MOTION_C.C (lines 1774..1821)
 * Stack frame base $sp, size 0
 */
struct SVECTOR * /*$ra*/ GetModelVertPtr(int boneId /*$a1*/, int modelType /*$a1*/)
{
}
/*
 * Offset 0x670CC, from D:\driver2\game\C\MOTION_C.C (lines 1834..2000)
 * Stack frame base $sp, size 184
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawCiv(struct PEDESTRIAN *pPed /*$fp*/)
{ // line 1, offset 0x670cc
  int i; // $s5
  struct DVECTOR *outpoints; // $t9
  long *outlongs; // $s5
  struct SVECTOR *psrLerpData; // $t8
  long *zbuff; // $s4
  struct SVECTOR *pLerpData; // $s0
  struct SVECTOR pos; // stack offset -160
  struct VECTOR pos1; // stack offset -152
  struct SVECTOR *vert1; // $a1
  struct SVECTOR *vert2; // $a0
  struct SVECTOR temp1; // stack offset -136
  struct SVECTOR temp2; // stack offset -128
  int cnt3; // $a2
  int bHeadModel; // stack offset -56
  int shift; // $t0
  int frame; // $a2
  struct MATRIX workmatrix; // stack offset -120
  int j; // $s7
  { // line 74, offset 0x672b8
    int cx; // $v1
    int sx; // $a0
    int cy; // $a1
    int sy; // $t0
    int cz; // $t3
    int sz; // $t6
    int stmp; // $t7
  } // line 74, offset 0x672b8
  { // line 130, offset 0x677c0
    struct SVECTOR sV; // stack offset -88
    struct SVECTOR sV2; // stack offset -80
    struct VECTOR v; // stack offset -72
  } // line 142, offset 0x677fc
  { // line 151, offset 0x677fc
    struct CVECTOR cv; // stack offset -88
    struct VECTOR pos; // stack offset -80
    int phase; // $s0
  } // line 164, offset 0x678a0
} // line 167, offset 0x678a0
/*
 * Offset 0x678D0, from D:\driver2\game\C\MOTION_C.C (lines 2041..2112)
 * Stack frame base $sp, size 128
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawTanner(struct PEDESTRIAN *pPed /*$s2*/)
{ // line 1, offset 0x678d0
  struct VECTOR v; // stack offset -112
  struct CVECTOR cV; // stack offset -96
  struct MATRIX mRotStore; // stack offset -88
  struct MATRIX iMatrix; // stack offset -56
  { // line 1, offset 0x678d0
  } // line 20, offset 0x679e0
  { // line 26, offset 0x679e0
    int cx; // $a2
    int sx; // $t0
    int cy; // $a0
    int sy; // $t2
    int cz; // $t5
    int sz; // $s0
    int stmp; // $v1
  } // line 26, offset 0x679e0
} // line 72, offset 0x67d44
/*
 * Offset 0x67D44, from D:\driver2\game\C\MOTION_C.C (lines 2120..2192)
 * Stack frame base $sp, size 144
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ DrawCharacter(struct PEDESTRIAN *pPed /*$s1*/)
{ // line 1, offset 0x67d44
  struct MATRIX mRotStore; // stack offset -128
  struct MATRIX iMatrix; // stack offset -96
  struct CVECTOR cV; // stack offset -64
  struct VECTOR v; // stack offset -56
  { // line 1, offset 0x67d44
    int cx; // $t0
    int sx; // $a3
    int cy; // $a0
    int sy; // $t2
    int cz; // $a2
    int sz; // $t7
    int stmp; // $v1
  } // line 1, offset 0x67d44
  { // line 55, offset 0x68134
    struct CVECTOR cv; // stack offset -40
    struct VECTOR pos; // stack offset -32
    int phase; // $s0
  } // line 69, offset 0x681d0
} // line 73, offset 0x681ec
/*
 * Offset 0x681EC, from D:\driver2\game\C\MOTION_C.C (lines 2201..2246)
 * Stack frame base $sp, size 8
 */
void /*$ra*/ InitTannerShadow()
{ // line 2, offset 0x681ec
  struct CVECTOR cV; // stack offset -8
  int i; // $a3
} // line 46, offset 0x68358
/*
 * Offset 0x68358, from D:\driver2\game\C\MOTION_C.C (lines 2258..2433)
 * Stack frame base $sp, size 296
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ TannerShadow(struct VECTOR *pPedPos /*$s6*/, struct SVECTOR *pLightPos /*$s7*/, struct CVECTOR *col /*$a2*/, short angle /*$a3*/)
{ // line 1, offset 0x68358
  int z; // $a1
  int z0; // stack offset -72
  int z1; // stack offset -68
  int z2; // stack offset -64
  int z3; // stack offset -60
  struct SVECTOR vert[4]; // stack offset -272
  struct VECTOR d; // stack offset -240
  struct DR_ENV *pDE; // $s3
  struct DRAWENV drEnv; // stack offset -224
  struct VECTOR cp; // stack offset -128
  struct SVECTOR ca; // stack offset -112
  struct VECTOR v1; // stack offset -104
  int i; // $s4
  struct VECTOR myVector; // stack offset -88
  int avalue2; // $v0
  int w; // $v1
  { // line 117, offset 0x68818
  } // line 117, offset 0x68818
} // line 176, offset 0x68b2c
/*
 * Offset 0x68B2C, from D:\driver2\game\C\MOTION_C.C (lines 2442..2553)
 * Stack frame base $sp, size 200
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ DoCivHead(struct SVECTOR *vert1 /*$s1*/, struct SVECTOR *vert2 /*$s3*/)
{ // line 1, offset 0x68b2c
  struct VECTOR headpos; // stack offset -184
  struct SVECTOR final_rotation; // stack offset -168
  struct SVECTOR spos1; // stack offset -160
  struct MODEL *model; // $s5
  struct MATRIX work2matrix; // stack offset -152
  struct MATRIX mRotStore; // stack offset -120
  struct VECTOR pos1; // stack offset -88
  int pal; // $v1
  int ci; // $s6
  { // line 53, offset 0x68d38
    int cx; // $v1
    int sx; // $a0
    int cy; // $a1
    int sy; // $t0
    int cz; // $t3
    int sz; // $t6
    int stmp; // $a3
  } // line 53, offset 0x68d38
  { // line 65, offset 0x68f98
    int cx; // $v1
    int sx; // $t3
    int cy; // $t1
    int sy; // $a3
    int stmp; // $v0
  } // line 65, offset 0x68f98
  { // line 93, offset 0x69274
    struct MATRIX comb; // stack offset -72
  } // line 95, offset 0x69274
} // line 112, offset 0x6940c
/*
 * Offset 0x69438, from D:\driver2\game\C\MOTION_C.C (lines 2562..2682)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ DrawObject(struct MODEL *model /*$t8*/, struct MATRIX *matrix /*$a1*/, struct VECTOR *pos /*$a2*/, int z_correct /*$a3*/)
{ // line 1, offset 0x69438
  struct DVECTOR *outpoints; // $t7
  short *zbuff; // $t5
  struct SVECTOR *verts; // $t6
  char *polys; // $s0
  int cnt3; // $t1
  int i; // $s1
  int z0; // stack offset -40
  int z1; // stack offset -36
  int z2; // stack offset -32
  long *outlongs; // $s2
  int z; // stack offset -28
  { // line 92, offset 0x697d4
  } // line 101, offset 0x69840
} // line 121, offset 0x69874
/*
 * Offset 0x69874, from D:\driver2\game\C\MOTION_C.C (lines 2690..2723)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ wjmDraw3()
{ // line 2, offset 0x69874
  struct POLYFT3 *src; // $a3
  short *zbuff; // $t2
  long *outlongs; // $a2
  struct POLY_FT3 *prims; // $t1
  unsigned long clut; // $t0
  unsigned long tpage; // $a1
  int z; // $a2
} // line 34, offset 0x69a38
/*
 * Offset 0x69A38, from D:\driver2\game\C\MOTION_C.C (lines 853..864)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ProcessMotionLump(char *lump_ptr /*$a0*/, int lump_size /*$s0*/)
{
}
/*
 * Offset 0x69AB8, from D:\driver2\game\C\MOTION_C.C (lines 944..945)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupPedMotionData(struct PEDESTRIAN *pPed /*$a0*/)
{
}
/*
 * Offset 0x69AD8, from D:\driver2\game\C\MOTION_C.C (lines 2011..2032)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetSkelModelPointers(int type /*$a0*/)
{
}
/*
 * Offset 0x69B6C, from D:\driver2\game\C\MOTION_C.C (lines 955..966)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupPedestrian(struct PEDESTRIAN *pedptr /*$a0*/)
{
}
Source file(s) D:\driver2\game\C\OBJCOLL.C+D:\driver2\game\OBJCOLL.C, object file obj\objcoll.OBJ overlay id <none>

// 74 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct COLLISION_PACKET {
  short type; // size=0, offset=0
  short xpos; // size=0, offset=2
  short ypos; // size=0, offset=4
  short zpos; // size=0, offset=6
  short flags; // size=0, offset=8
  short yang; // size=0, offset=10
  short empty; // size=0, offset=12
  short xsize; // size=0, offset=14
  short ysize; // size=0, offset=16
  short zsize; // size=0, offset=18
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct XZPAIR {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct CELL_DATA {
  unsigned short num; // size=0, offset=0
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PACKED_CELL_OBJECT {
  struct USVECTOR_NOPAD pos; // size=6, offset=0
  unsigned short value; // size=0, offset=6
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct BUILDING_BOX {
  struct VECTOR pos; // size=16, offset=0
  int xsize; // size=0, offset=16
  int zsize; // size=0, offset=20
  int theta; // size=0, offset=24
  int height; // size=0, offset=28
};
struct CDATA2D {
  struct VECTOR x; // size=16, offset=0
  struct VECTOR axis[2]; // size=32, offset=16
  struct VECTOR vel; // size=16, offset=48
  int theta; // size=0, offset=64
  int length[2]; // size=8, offset=68
  int dist[2]; // size=8, offset=76
  int limit[2]; // size=8, offset=84
  int avel; // size=0, offset=92
  int isCameraOrTanner; // size=0, offset=96
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _EVENT {
  struct VECTOR position; // size=16, offset=0
  short rotation; // size=0, offset=16
  short timer; // size=0, offset=18
  int *data; // size=0, offset=20
  int *node; // size=0, offset=24
  short flags; // size=0, offset=28
  short radius; // size=0, offset=30
  int model; // size=0, offset=32
  struct _EVENT *next; // size=40, offset=36
};
struct CELL_ITERATOR {
  struct CELL_DATA *pcd; // size=2, offset=0
  struct PACKED_CELL_OBJECT *ppco; // size=8, offset=4
  struct XZPAIR near; // size=8, offset=8
  int use_computed; // size=0, offset=16
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct tRay {
  long org[4]; // size=16, offset=0
  long dir[4]; // size=16, offset=16
};
struct tRange {
  int lower; // size=0, offset=0
  int upper; // size=0, offset=4
};
struct tAABB {
  struct tRange slab[3]; // size=24, offset=0
};

// 109 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct COLLISION_PACKET COLLISION_PACKET;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct XZPAIR XZPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct CELL_DATA CELL_DATA;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PACKED_CELL_OBJECT PACKED_CELL_OBJECT;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct BUILDING_BOX BUILDING_BOX;
typedef struct CDATA2D CDATA2D;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct GAP_INFO GAP_INFO;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _EVENT EVENT;
typedef struct CELL_ITERATOR CELL_ITERATOR;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct tRay tRay;
typedef struct tRange tRange;
typedef struct tAABB tAABB;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct MVERTEX SV5x5[5][5];
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 6 external declarations
extern int testRadius; // offset 0x000aa7b4
extern int test777; // offset 0x000aa7b8
extern unsigned short gLastModelCollisionCheck; // offset 0x000ab058
extern struct PACKED_CELL_OBJECT **pcoplist; // offset 0x000ab054
extern struct CELL_OBJECT **coplist; // offset 0x000ab050
static struct CDATA2D cd[2]; // offset 0x000d91a8

// 11 functions
/*
 * Offset 0x69BA4, from D:\driver2\game\C\OBJCOLL.C (lines 63..152)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
char /*$ra*/ CellEmpty(struct VECTOR *pPosition /*$s1*/, int radius /*$s2*/)
{ // line 1, offset 0x69ba4
  struct CELL_ITERATOR ci; // stack offset -48
  int cell_x; // $a0
  struct CELL_OBJECT *pCellObject; // $a2
  struct MODEL *pModel; // $a3
  { // line 37, offset 0x69c60
    int sphere_sq; // $v0
    int xd; // $t5
    int zd; // $t4
    { // line 51, offset 0x69cc4
      int box_loop; // $t3
      int num_cb; // $t6
      struct COLLISION_PACKET *collide; // $t0
      { // line 56, offset 0x69ce8
        unsigned int zs; // $t2
        unsigned int xs; // $t1
        int cs; // $a2
        int sn; // $a0
      } // line 75, offset 0x69dc8
    } // line 76, offset 0x69dd8
  } // line 78, offset 0x69dd8
} // line 90, offset 0x69e1c
/*
 * Offset 0x69E1C, from D:\driver2\game\C\OBJCOLL.C (lines 217..254)
 * Stack frame base $sp, size 24
 */
int /*$ra*/ RaySlabsIntersection(struct tRay *ray /*$t5*/, struct tAABB *bbox /*$t4*/)
{ // line 1, offset 0x69e1c
  int i; // $t1
  struct tRange inside; // stack offset -24
  { // line 9, offset 0x69e40
    struct tRange cabbage; // stack offset -16
    struct tRange scaledCabbage; // stack offset -8
    int dir; // $a2
  } // line 36, offset 0x69f94
} // line 38, offset 0x69fb4
/*
 * Offset 0x69FB4, from D:\driver2\game\C\OBJCOLL.C (lines 259..359)
 * Stack frame base $sp, size 200
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
char /*$ra*/ lineClear(struct VECTOR *v1 /*stack 0*/, struct VECTOR *v2 /*stack 4*/)
{ // line 1, offset 0x69fb4
  int we; // stack offset -56
  int ocx; // $t2
  int ocz; // $t3
  struct VECTOR pos; // stack offset -184
  struct VECTOR va; // stack offset -168
  struct VECTOR vb; // stack offset -152
  { // line 20, offset 0x6a074
    int cell_x; // $fp
    int cell_z; // $s7
    struct CELL_ITERATOR ci; // stack offset -136
    struct CELL_OBJECT *pCellObject; // $s4
    { // line 40, offset 0x6a134
      struct MODEL *pModel; // $a1
      { // line 48, offset 0x6a170
        int sphere_sq; // $v0
        int xd; // $a0
        int zd; // $v1
        { // line 59, offset 0x6a1d4
          int box_loop; // $s5
          int num_cb; // $s6
          struct COLLISION_PACKET *collide; // $s3
          { // line 64, offset 0x6a1f0
            struct MATRIX *mat; // $a0
            int cx; // $v1
            int cy; // $a2
            int cz; // $v0
            int cs; // $t1
            int sn; // $t5
            { // line 64, offset 0x6a1f0
              struct tRay ray; // stack offset -112
              struct tAABB box; // stack offset -80
            } // line 88, offset 0x6a414
          } // line 89, offset 0x6a414
        } // line 90, offset 0x6a424
      } // line 92, offset 0x6a424
    } // line 93, offset 0x6a424
  } // line 96, offset 0x6a444
} // line 101, offset 0x6a498
/*
 * Offset 0x6A498, from D:\driver2\game\C\OBJCOLL.C (lines 391..431)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ CollisionCopList(struct XZPAIR *pos /*$a0*/, int *count /*$s0*/)
{ // line 1, offset 0x6a498
  static struct XZPAIR initial; // offset 0x0
  { // line 11, offset 0x6a4e8
    struct XZPAIR cell; // stack offset -72
    int i; // $a0
    int j; // $t1
    { // line 20, offset 0x6a508
      struct CELL_ITERATOR ci; // stack offset -64
      struct XZPAIR cbr; // stack offset -40
      int barrelRegion; // $v0
      struct CELL_OBJECT *cop; // $a0
    } // line 38, offset 0x6a5f8
  } // line 40, offset 0x6a628
} // line 41, offset 0x6a64c
/*
 * Offset 0x6A64C, from D:\driver2\game\C\OBJCOLL.C (lines 439..596)
 * Stack frame base $sp, size 168
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CheckScenaryCollisions(struct _CAR_DATA *cp /*$s7*/)
{ // line 1, offset 0x6a64c
  struct MODEL *model; // stack offset -76
  struct CELL_OBJECT *cop; // $s5
  struct VECTOR player_pos; // stack offset -152
  struct COLLISION_PACKET *collide; // $s1
  int cell_x; // $a0
  int xd; // $v1
  int zd; // $a0
  int num_cb; // stack offset -72
  int box_loop; // $s6
  int sphere_sq; // $v0
  int x1; // stack offset -68
  struct BUILDING_BOX bbox; // stack offset -136
  int mdcount; // stack offset -80
  int coll_test_count; // $t0
  struct XZPAIR box; // stack offset -104
  int lbody; // stack offset -64
  int extraDist; // stack offset -60
  { // line 80, offset 0x6a934
    struct BUILDING_BOX *pbox; // $s4
    struct MATRIX *mat; // $a1
    struct VECTOR offset; // stack offset -96
  } // line 152, offset 0x6ad48
} // line 158, offset 0x6ad8c
/*
 * Offset 0x6ADBC, from D:\driver2\game\C\OBJCOLL.C (lines 609..720)
 * Stack frame base $sp, size 128
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ QuickBuildingCollisionCheck(struct VECTOR *pPos /*$s5*/, int dir /*stack 4*/, int l /*stack 8*/, int w /*$fp*/, int extra /*stack 16*/)
{ // line 1, offset 0x6adbc
  struct MODEL *model; // $a1
  struct CELL_OBJECT *cop; // $s3
  struct VECTOR player_pos; // stack offset -112
  struct COLLISION_PACKET *collide; // $s0
  int cell_x; // $a0
  int xd; // $v1
  int zd; // $a0
  int num_cb; // $s7
  int box_loop; // $s4
  int sphere_sq; // $v0
  int x1; // $s6
  struct BUILDING_BOX bbox; // stack offset -96
  int mdcount; // stack offset -48
  { // line 60, offset 0x6afa4
    struct BUILDING_BOX *pbox; // $s1
    struct MATRIX *mat; // $a1
    struct VECTOR offset; // stack offset -64
    { // line 76, offset 0x6b0f0
    } // line 103, offset 0x6b1bc
  } // line 105, offset 0x6b1bc
} // line 112, offset 0x6b220
/*
 * Offset 0x6B220, from D:\driver2\game\C\OBJCOLL.C (lines 735..752)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ DoScenaryCollisions()
{ // line 2, offset 0x6b220
  struct _CAR_DATA *lcp; // $s0
} // line 18, offset 0x6b2ec
/*
 * Offset 0x6B2EC, from D:\driver2\game\C\OBJCOLL.C (lines 155..174)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GlobalPositionToCellNumber(struct VECTOR *pPosition /*$a0*/)
{ // line 1, offset 0x6b2ec
  int cellX; // $a3
  int cellZ; // $a1
  int cbrX; // $t1
  int cbrZ; // $t0
  int cbr; // $t2
  int xOff; // $a3
  int yOff; // $a0
} // line 20, offset 0x6b3e4
/*
 * Offset 0x6B3E4, from D:\driver2\game\C\OBJCOLL.C (lines 183..204)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
char /*$ra*/ CellAtPositionEmpty(struct VECTOR *pPosition /*$s0*/, int radius /*$s1*/)
{ // line 1, offset 0x6b3e4
} // line 22, offset 0x6b430
/*
 * Offset 0x6B430, from D:\driver2\game\C\OBJCOLL.C (lines 377..383)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetCopListCell(int x /*$a0*/, int z /*$a1*/)
{ // line 2, offset 0x6b430
  struct XZPAIR cell; // stack offset -16
} // line 7, offset 0x6b45c
/*
 * Offset 0x6B45C, from D:\driver2\game\C\OBJCOLL.C (lines 386..387)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ BuildCollisionCopList(int *count /*$a1*/)
{
}
Source file(s) D:\driver2\game\C\PAD.C+D:\driver2\game\PAD.C, object file obj\pad.OBJ overlay id <none>

// 59 complex types
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
struct PADRAW {
  unsigned char status; // size=0, offset=0
  unsigned char id; // size=0, offset=1
  unsigned char buttons[2]; // size=2, offset=2
  unsigned char analog[4]; // size=4, offset=4
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct PAD {
  unsigned char active; // size=0, offset=0
  unsigned char type; // size=0, offset=1
  unsigned char dualshock; // size=0, offset=2
  unsigned char reserved1; // size=0, offset=3
  unsigned short direct; // size=0, offset=4
  unsigned short dirnew; // size=0, offset=6
  char diranalog[4]; // size=4, offset=8
  unsigned short mapped; // size=0, offset=12
  unsigned short mapnew; // size=0, offset=14
  char mapanalog[4]; // size=4, offset=16
  struct MAPPING mappings; // size=36, offset=20
  unsigned char alarmShakeCounter; // size=0, offset=56
  unsigned char asd; // size=0, offset=57
  unsigned char sdf; // size=0, offset=58
  unsigned char dfg; // size=0, offset=59
  unsigned char delay; // size=0, offset=60
  unsigned char port; // size=0, offset=61
  unsigned char state; // size=0, offset=62
  unsigned char dsactive; // size=0, offset=63
  unsigned char *shakeptr; // size=0, offset=64
  unsigned char motors[2]; // size=2, offset=68
  unsigned char shake_type; // size=0, offset=70
  unsigned char vibrate; // size=0, offset=71
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
enum EXIT_VALUE : char {
  MENU_QUIT_NONE = 0,
  MENU_QUIT_CONTINUE = 1,
  MENU_QUIT_QUIT = 2,
  MENU_QUIT_RESTART = 3,
  MENU_QUIT_DIRECTOR = 4,
  MENU_QUIT_QUICKREPLAY = 5,
  MENU_QUIT_BACKMENU = 6,
  MENU_QUIT_NEXTMISSION = 7,
};
struct MENU_HEADER {
  char *Title; // size=0, offset=0
  struct XYWH Bound; // size=8, offset=4
  unsigned char NumItems; // size=0, offset=12
  struct MENU_ITEM *MenuItems; // size=20, offset=16
};
struct MENU_ITEM {
  char *Text; // size=0, offset=0
  unsigned char Type; // size=0, offset=4
  unsigned char Justify; // size=0, offset=5
  void *func(); // size=0, offset=8
  enum EXIT_VALUE ExitValue; // size=1, offset=12
  struct MENU_HEADER *SubMenu; // size=0, offset=16
};
struct XYWH {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct DUPLICATION {
  char *buffer; // size=0, offset=0
  int size; // size=0, offset=4
};

// 86 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef struct PADRAW PADRAW;
typedef struct MAPPING MAPPING;
typedef struct PAD PAD;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef enum EXIT_VALUE EXIT_VALUE;
typedef struct MENU_HEADER MENU_HEADER;
typedef struct MENU_ITEM MENU_ITEM;
typedef struct XYWH XYWH;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct DUPLICATION DUPLICATION;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 11 external declarations
static unsigned char High_shake_data[21]; // offset 0x000a0f14
static unsigned char Med_shake_data[13]; // offset 0x000a0f2c
static unsigned char Low_shake_data[10]; // offset 0x000a0f3c
static unsigned char *shake_data[3]; // offset 0x000a0f48
extern int pad_connected; // offset 0x000aa7d0
static unsigned char align[6]; // offset 0x000aa7bc
static unsigned char dummymotors[2]; // offset 0x000aa7c4
static struct DUPLICATION DuplicatePadData; // offset 0x000aa7c8
extern int gDualShockMax; // offset 0x000aa7d4
extern struct PAD Pads[2]; // offset 0x000d92b8
static char padbuffer[2][34]; // offset 0x000d9270

// 11 functions
/*
 * Offset 0x6B480, from D:\driver2\game\C\PAD.C (lines 75..110)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ InitControllers()
{ // line 2, offset 0x6b480
  int i; // $s3
  int j; // $a1
} // line 36, offset 0x6b5a8
/*
 * Offset 0x6B5A8, from D:\driver2\game\C\PAD.C (lines 132..188)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ ReadControllers()
{ // line 2, offset 0x6b5a8
  int i; // $s3
  int pad; // $s2
} // line 57, offset 0x6b6f0
/*
 * Offset 0x6B6F0, from D:\driver2\game\C\PAD.C (lines 257..320)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MapPad(int pad /*$t2*/, struct PADRAW *pData /*$a3*/)
{ // line 1, offset 0x6b6f0
  unsigned short i; // $a3
  unsigned short buttons; // $t0
  unsigned short mapped; // $t1
} // line 64, offset 0x6b8d8
/*
 * Offset 0x6B8E0, from D:\driver2\game\C\PAD.C (lines 336..449)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ HandleDualShock()
{ // line 2, offset 0x6b8e0
  int state; // $v1
  int port; // $s3
  int pad; // $s5
  int dsload; // $s7
} // line 114, offset 0x6bbc4
/*
 * Offset 0x6BBC4, from D:\driver2\game\C\PAD.C (lines 452..495)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ HandlePadVibration(int pad /*$t1*/)
{ // line 1, offset 0x6bbc4
  int speed; // $a3
} // line 44, offset 0x6bde8
/*
 * Offset 0x6BDF8, from D:\driver2\game\C\PAD.C (lines 113..123)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CloseControllers()
{ // line 2, offset 0x6bdf8
  int i; // $v1
} // line 11, offset 0x6be38
/*
 * Offset 0x6BE38, from D:\driver2\game\C\PAD.C (lines 191..206)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetPadVibration(int pad /*$a3*/, unsigned char type /*$a1*/)
{
}
/*
 * Offset 0x6BEB4, from D:\driver2\game\C\PAD.C (lines 209..215)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ StopPadVibration(int pad /*$a0*/)
{
}
/*
 * Offset 0x6BEEC, from D:\driver2\game\C\PAD.C (lines 228..229)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ StopDualShockMotors()
{
}
/*
 * Offset 0x6BEF4, from D:\driver2\game\C\PAD.C (lines 232..242)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetDuplicatePadData(char *buffer /*$a0*/, int size /*$a1*/)
{
}
/*
 * Offset 0x6BF24, from D:\driver2\game\C\PAD.C (lines 323..327)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ClearPad(int pad /*$a0*/)
{
}
Source file(s) D:\driver2\game\C\PATHFIND.C+D:\driver2\game\PATHFIND.C, object file obj\pathfind.OBJ overlay id <none>

// 75 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct tNode {
  int vx; // size=0, offset=0
  int vy; // size=0, offset=4
  int vz; // size=0, offset=8
  unsigned short dist; // size=0, offset=12
  unsigned short ptoey; // size=0, offset=14
};

// 108 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT4 POLY_FT4;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct _CAR_DATA CAR_DATA;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct MAPPING MAPPING;
typedef struct UV UV;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct CAR_POLY CAR_POLY;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct tNode tNode;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef short int16;
typedef long int32;

// 0 labels

// 23 external declarations
extern int OverlayOccupancyGrid; // offset 0x000e91a0
extern struct {
  short dx; // size=0, offset=0
  short dz; // size=0, offset=2
} ends[6][2]; // offset 0x000e9108
extern unsigned int cellsPerFrame; // offset 0x000e9138
extern int slowWallTests; // offset 0x000e913c
extern struct {
  short dx; // size=0, offset=0
  short dz; // size=0, offset=2
} dirs[6]; // offset 0x000e9140
extern int asf; // offset 0x000e9158
extern int na; // offset 0x000e915c
extern int lastDistanceFound; // offset 0x000e9ac8
extern int distLogIndex; // offset 0x000e9ab0
extern int distanceReturnedLog[8]; // offset 0x000f27a0
extern struct VECTOR searchTarget; // offset 0x000e9ab8
extern unsigned int numHeapEntries; // offset 0x000f279c
extern struct tNode heap[201]; // offset 0x000f1b08
static char omap[128][16]; // offset 0x000e91a8
extern long dunyet[32][2]; // offset 0x000e99b0
extern unsigned int cellsThisFrame; // offset 0x000f2798
extern unsigned short distanceCache[16384]; // offset 0x000e9b00
extern int pathIterations; // offset 0x000f27c0
extern int pathFrames; // offset 0x000e99a8
extern int pathFrame; // offset 0x000f1b00
extern int playerTargetDistanceSq; // offset 0x000e9acc
extern int DoExtraWorkForNFrames; // offset 0x000e99ac
extern struct tNode dbb[3]; // offset 0x000e9ad0

// 12 functions
/*
 * Offset 0xE7000, from D:\driver2\game\C\PATHFIND.C (lines 314..362)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 s1
 */
struct tNode /*$ra*/ popNode()
{ // line 1, offset 0xe7000
  unsigned int lNumHeapEntries; // $s0
  struct tNode res; // stack offset -24
  unsigned short f; // $t8
  unsigned int child; // $a1
  unsigned int here; // $t5
  { // line 11, offset 0xe7058
    unsigned int lastEntry; // $t4
    { // line 15, offset 0xe7070
      int d; // $t3
      int d2; // $t2
      int d3; // $a3
      int d4; // $t1
    } // line 32, offset 0xe70b8
  } // line 33, offset 0xe7110
  { // line 35, offset 0xe7110
    int d; // $a2
    int d2; // $a3
    int d3; // $t1
    int d4; // $t2
  } // line 44, offset 0xe715c
} // line 47, offset 0xe715c
/*
 * Offset 0xE7194, from D:\driver2\game\C\PATHFIND.C (lines 426..449)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ WunCell(struct VECTOR *pbase /*$s0*/)
{ // line 1, offset 0xe7194
  int i; // $s2
  int j; // $s4
  struct VECTOR v[2]; // stack offset -88
  struct VECTOR pos; // stack offset -56
  { // line 14, offset 0xe723c
    { // line 14, offset 0xe723c
      int z; // $a1
      int x; // $a2
    } // line 20, offset 0xe72c8
  } // line 20, offset 0xe72c8
} // line 24, offset 0xe735c
/*
 * Offset 0xE735C, from D:\driver2\game\C\PATHFIND.C (lines 453..486)
 * Stack frame base $sp, size 16
 */
void /*$ra*/ InvalidateMap()
{ // line 2, offset 0xe735c
  struct VECTOR bPos; // stack offset -16
  int count; // $t4
  int dir; // $t1
  int p; // $t2
  int q; // $t3
  { // line 12, offset 0xe73a8
    int tile; // $a0
    int mask; // $a1
    int diff; // $a1
    int i; // $v0
  } // line 15, offset 0xe73a8
} // line 34, offset 0xe74b0
/*
 * Offset 0xE74B0, from D:\driver2\game\C\PATHFIND.C (lines 495..564)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ BloodyHell()
{ // line 2, offset 0xe74b0
  struct VECTOR bPos; // stack offset -48
  int count; // $s4
  int dir; // $s0
  int p; // $s1
  int q; // $s2
  unsigned int howMany; // $s3
  0x69C raa
  { // line 22, offset 0xe755c
    int tile; // $a0
    int mask; // $a1
    int diff; // $v0
    int i; // $v0
  } // line 42, offset 0xe75e4
} // line 70, offset 0xe76c4
/*
 * Offset 0xE76C4, from D:\driver2\game\C\PATHFIND.C (lines 567..589)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: ra
 */
int /*$ra*/ blocked(struct tNode *v1 /*$a3*/, struct tNode *v2 /*$a2*/)
{ // line 1, offset 0xe76c4
  struct VECTOR pos; // stack offset -24
  int res; // $a0
  { // line 8, offset 0xe76e0
    { // line 8, offset 0xe76e0
      int z; // $a2
      int x; // $v1
    } // line 11, offset 0xe774c
  } // line 11, offset 0xe774c
  { // line 18, offset 0xe7790
    { // line 18, offset 0xe7790
      int z; // $v1
      int x; // $a0
    } // line 18, offset 0xe7790
  } // line 18, offset 0xe7790
} // line 23, offset 0xe7814
/*
 * Offset 0xE7814, from D:\driver2\game\C\PATHFIND.C (lines 712..775)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ iterate()
{ // line 2, offset 0xe7814
  int dir; // $s2
  struct tNode itHere; // stack offset -48
  struct tNode *nbr; // $s4
  { // line 12, offset 0xe7870
    int nearBy; // $v1
    int computed; // $s1
    { // line 14, offset 0xe7870
      int dx; // $v0
      int dz; // $a0
    } // line 15, offset 0xe7870
    { // line 15, offset 0xe7870
      { // line 15, offset 0xe7870
        int res; // $a0
      } // line 15, offset 0xe7870
    } // line 15, offset 0xe7870
  } // line 51, offset 0xe797c
  { // line 56, offset 0xe79b4
    int nr; // $a0
    int nl; // $v1
    { // line 58, offset 0xe7a08
      unsigned int a; // $v1
      { // line 58, offset 0xe7a08
        { // line 1, offset 0xe7a44
          unsigned int r; // $v0
        } // line 1, offset 0xe7a68
      } // line 1, offset 0xe7a68
    } // line 1, offset 0xe7a68
    { // line 61, offset 0xe7aac
      struct tNode *pnode; // $s0
      { // line 61, offset 0xe7aac
        unsigned int parent; // $a2
        unsigned int i; // $a3
      } // line 61, offset 0xe7b98
    } // line 61, offset 0xe7b98
  } // line 62, offset 0xe7b98
} // line 64, offset 0xe7ba8
/*
 * Offset 0xE7BD0, from D:\driver2\game\C\PATHFIND.C (lines 801..818)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitPathFinding()
{ // line 2, offset 0xe7bd0
  int i; // $a0
  { // line 1, offset 0xe7bd0
  } // line 1, offset 0xe7bd0
  { // line 1, offset 0xe7bd0
  } // line 1, offset 0xe7bd0
} // line 18, offset 0xe7ca8
/*
 * Offset 0xE7CA8, from D:\driver2\game\C\PATHFIND.C (lines 821..879)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ getInterpolatedDistance(struct VECTOR *pos /*$s2*/)
{ // line 1, offset 0xe7ca8
  struct tNode n; // stack offset -72
  int fx; // $s4
  int fz; // $s5
  int a; // $s3
  int b; // $s2
  int c; // $v1
  int min; // $s0
  int flag; // $fp
  { // line 1, offset 0xe7ca8
    struct VECTOR *where; // $s2
    struct tNode *node; // $s0
    { // line 1, offset 0xe7ca8
      int x; // $v1
      { // line 1, offset 0xe7ca8
        struct tNode *pos; // $s0
        { // line 1, offset 0xe7ca8
          struct VECTOR sp; // stack offset -56
          { // line 1, offset 0xe7ca8
            { // line 1, offset 0xe7ca8
              int z; // $v0
              int x; // $a0
            } // line 1, offset 0xe7ca8
          } // line 1, offset 0xe7ca8
          { // line 1, offset 0xe7d78
            int res; // $v0
          } // line 1, offset 0xe7d9c
        } // line 1, offset 0xe7da0
      } // line 1, offset 0xe7da0
    } // line 1, offset 0xe7da0
  } // line 1, offset 0xe7da0
  { // line 1, offset 0xe7da0
    { // line 1, offset 0xe7da0
      int res; // $v0
    } // line 1, offset 0xe7da0
  } // line 1, offset 0xe7da0
  { // line 1, offset 0xe7da0
    { // line 1, offset 0xe7da0
      struct VECTOR sp; // stack offset -56
      { // line 1, offset 0xe7da0
        { // line 1, offset 0xe7da0
          int x; // $a3
          int z; // $v0
        } // line 1, offset 0xe7da0
      } // line 1, offset 0xe7da0
      { // line 1, offset 0xe7e84
        int res; // $v0
      } // line 1, offset 0xe7ea8
    } // line 1, offset 0xe7eac
  } // line 1, offset 0xe7eac
  { // line 18, offset 0xe7eac
    { // line 18, offset 0xe7eac
      int res; // $a0
    } // line 18, offset 0xe7eac
  } // line 18, offset 0xe7eac
  { // line 27, offset 0xe7f28
    { // line 27, offset 0xe7f28
      struct VECTOR sp; // stack offset -56
      { // line 27, offset 0xe7f28
        { // line 27, offset 0xe7f28
          int x; // $v1
          int z; // $v0
        } // line 27, offset 0xe7f28
      } // line 27, offset 0xe7f28
      { // line 1, offset 0xe7f8c
        int res; // $v0
      } // line 1, offset 0xe7fb0
    } // line 1, offset 0xe7fb4
  } // line 1, offset 0xe7fb4
  { // line 29, offset 0xe7fb4
    { // line 29, offset 0xe7fb4
      int res; // $a0
    } // line 29, offset 0xe7fb4
  } // line 29, offset 0xe7fb4
  { // line 43, offset 0xe807c
    { // line 43, offset 0xe807c
      struct VECTOR sp; // stack offset -56
      { // line 43, offset 0xe807c
        { // line 43, offset 0xe807c
          int x; // $v1
          int z; // $v0
        } // line 43, offset 0xe807c
      } // line 43, offset 0xe807c
      { // line 1, offset 0xe80d8
        int res; // $v0
      } // line 1, offset 0xe80fc
    } // line 1, offset 0xe8100
  } // line 1, offset 0xe8100
  { // line 44, offset 0xe8100
    { // line 44, offset 0xe8100
      int res; // $a0
    } // line 44, offset 0xe8100
  } // line 44, offset 0xe8100
} // line 59, offset 0xe822c
/*
 * Offset 0xE822C, from D:\driver2\game\C\PATHFIND.C (lines 891..924)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ addCivs()
{ // line 2, offset 0xe822c
  struct _CAR_DATA *cp; // $t5
  { // line 7, offset 0xe8260
    int where; // $a3
    { // line 9, offset 0xe8260
      int vx; // $a3
      int vz; // $a1
      int x; // $a3
      int z; // $t0
    } // line 9, offset 0xe8260
    { // line 9, offset 0xe8260
      int vx; // $t1
      int vz; // $t2
      int x; // $t1
      int z; // $a1
    } // line 31, offset 0xe8354
  } // line 32, offset 0xe8354
} // line 34, offset 0xe836c
/*
 * Offset 0xE836C, from D:\driver2\game\C\PATHFIND.C (lines 933..1045)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ UpdateCopMap()
{ // line 2, offset 0xe836c
  { // line 6, offset 0xe83c0
  } // line 6, offset 0xe83c0
  { // line 13, offset 0xe83fc
    struct tNode startNode; // stack offset -72
    { // line 19, offset 0xe843c
      struct _CAR_DATA *cp; // $a0
    } // line 19, offset 0xe843c
    { // line 1, offset 0xe8500
      { // line 1, offset 0xe8500
        { // line 1, offset 0xe8500
          { // line 1, offset 0xe8500
            int i; // $a1
            { // line 1, offset 0xe8524
              int d; // $v0
            } // line 1, offset 0xe8554
          } // line 1, offset 0xe8564
        } // line 1, offset 0xe8564
      } // line 1, offset 0xe8564
    } // line 1, offset 0xe8564
    { // line 1, offset 0xe8564
      { // line 1, offset 0xe8564
        int x; // $v0
        { // line 1, offset 0xe8564
          { // line 1, offset 0xe8564
            struct VECTOR sp; // stack offset -56
            { // line 1, offset 0xe8564
              { // line 1, offset 0xe8564
                int z; // $v0
                int x; // $v1
              } // line 1, offset 0xe8564
            } // line 1, offset 0xe8564
            { // line 1, offset 0xe8604
              int res; // $v0
            } // line 1, offset 0xe8628
          } // line 1, offset 0xe862c
        } // line 1, offset 0xe862c
      } // line 1, offset 0xe862c
    } // line 1, offset 0xe862c
    { // line 1, offset 0xe862c
      struct tNode n; // stack offset -56
      int fx; // $v1
      int fz; // $v0
      { // line 1, offset 0xe8660
        { // line 1, offset 0xe8660
          int dz; // $a0
          int dx; // $v0
        } // line 1, offset 0xe8660
      } // line 1, offset 0xe8660
      { // line 1, offset 0xe8660
        { // line 1, offset 0xe8660
          unsigned int parent; // $a2
          unsigned int i; // $a3
        } // line 1, offset 0xe8774
      } // line 1, offset 0xe8774
      { // line 53, offset 0xe8774
        { // line 53, offset 0xe8774
          int dz; // $a0
          int dx; // $v0
        } // line 53, offset 0xe8774
      } // line 53, offset 0xe8774
      { // line 53, offset 0xe8774
        { // line 53, offset 0xe8774
          unsigned int parent; // $a2
          unsigned int i; // $a3
        } // line 54, offset 0xe88b4
      } // line 54, offset 0xe88b4
      { // line 56, offset 0xe88b4
        { // line 56, offset 0xe88b4
          int dz; // $a0
          int dx; // $v0
        } // line 56, offset 0xe88b4
      } // line 56, offset 0xe88b4
      { // line 56, offset 0xe88b4
        { // line 56, offset 0xe88b4
          unsigned int parent; // $a2
          unsigned int i; // $a3
        } // line 57, offset 0xe89bc
      } // line 57, offset 0xe89bc
      { // line 1, offset 0xe89c4
        { // line 1, offset 0xe89c4
          int dz; // $a0
          int dx; // $v0
        } // line 1, offset 0xe89c4
      } // line 1, offset 0xe89c4
      { // line 1, offset 0xe89c4
        { // line 1, offset 0xe89c4
          unsigned int parent; // $a2
          unsigned int i; // $a3
        } // line 1, offset 0xe8ad8
      } // line 1, offset 0xe8ad8
      { // line 63, offset 0xe8ad8
        { // line 63, offset 0xe8ad8
          int dz; // $a0
          int dx; // $v0
        } // line 63, offset 0xe8ad8
      } // line 63, offset 0xe8ad8
      { // line 63, offset 0xe8ad8
        { // line 63, offset 0xe8ad8
          unsigned int parent; // $a2
          unsigned int i; // $a3
        } // line 64, offset 0xe8c18
      } // line 64, offset 0xe8c18
      { // line 66, offset 0xe8c18
        { // line 66, offset 0xe8c18
          int dz; // $a0
          int dx; // $v0
        } // line 66, offset 0xe8c18
      } // line 66, offset 0xe8c18
      { // line 66, offset 0xe8c18
        { // line 66, offset 0xe8c18
          unsigned int parent; // $a2
          unsigned int i; // $a3
        } // line 66, offset 0xe8d18
      } // line 66, offset 0xe8d18
    } // line 66, offset 0xe8d18
  } // line 66, offset 0xe8d18
  { // line 77, offset 0xe8d54
    int i; // $s0
    { // line 1, offset 0xe8df4
    } // line 1, offset 0xe8dfc
  } // line 91, offset 0xe8dfc
  { // line 94, offset 0xe8dfc
    int i; // $a1
    int maxRet; // $a0
  } // line 105, offset 0xe8e70
  { // line 108, offset 0xe8e70
    int dx; // $a0
    int dy; // $v1
    int dz; // $v0
  } // line 112, offset 0xe8f00
} // line 113, offset 0xe8f00
/*
 * Offset 0xE8F00, from D:\driver2\game\C\PATHFIND.C (lines 1050..1111)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ getHeadingToPlayer(int vx /*$s4*/, int vy /*$a1*/, int vz /*$s3*/)
{ // line 1, offset 0xe8f00
  int d1; // $s2
  int d2; // $s1
  int d3; // $s0
  struct VECTOR pos; // stack offset -48
  { // line 1, offset 0xe8f00
    int dx; // $a3
    int dy; // $v1
    int dz; // $v0
    int playerHereDistSq; // $a3
    { // line 21, offset 0xe8f98
    } // line 23, offset 0xe8f98
  } // line 24, offset 0xe8f98
  { // line 48, offset 0xe8ff8
  } // line 50, offset 0xe9024
  { // line 52, offset 0xe9030
  } // line 60, offset 0xe9058
  { // line 56, offset 0xe9058
  } // line 61, offset 0xe90a4
} // line 62, offset 0xe90a4
/*
 * Offset 0xE90A4, from D:\driver2\game\C\PATHFIND.C (lines 659..663)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ setDistance(struct tNode *n /*$a0*/, unsigned short dist /*$a1*/)
{
}
Source file(s) D:\driver2\game\C\PAUSE.C+D:\driver2\game\PAUSE.C, object file obj\pause.obj overlay id <none>

// 65 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct PLAYER_SCORE {
  int time; // size=0, offset=0
  int P2time; // size=0, offset=4
  short items; // size=0, offset=8
  short P2items; // size=0, offset=10
  char name[6]; // size=6, offset=12
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
enum EXIT_VALUE : char {
  MENU_QUIT_NONE = 0,
  MENU_QUIT_CONTINUE = 1,
  MENU_QUIT_QUIT = 2,
  MENU_QUIT_RESTART = 3,
  MENU_QUIT_DIRECTOR = 4,
  MENU_QUIT_QUICKREPLAY = 5,
  MENU_QUIT_BACKMENU = 6,
  MENU_QUIT_NEXTMISSION = 7,
};
struct MENU_HEADER {
  char *Title; // size=0, offset=0
  struct XYWH Bound; // size=8, offset=4
  unsigned char NumItems; // size=0, offset=12
  struct MENU_ITEM *MenuItems; // size=20, offset=16
};
struct MENU_ITEM {
  char *Text; // size=0, offset=0
  unsigned char Type; // size=0, offset=4
  unsigned char Justify; // size=0, offset=5
  void *func(); // size=0, offset=8
  enum EXIT_VALUE ExitValue; // size=1, offset=12
  struct MENU_HEADER *SubMenu; // size=0, offset=16
};
struct XYWH {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};

// 97 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT3 POLY_FT3;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct PLAYER_SCORE PLAYER_SCORE;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MR_TIMER MR_TIMER;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef enum EXIT_VALUE EXIT_VALUE;
typedef struct MENU_HEADER MENU_HEADER;
typedef struct MENU_ITEM MENU_ITEM;
typedef struct XYWH XYWH;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;

// 0 labels

// 52 external declarations
extern struct MENU_HEADER YesNoRestartHeader; // offset 0x000a1604
extern struct MENU_HEADER YesNoQuitHeader; // offset 0x000a1618
static struct MENU_HEADER PauseMenuHeader; // offset 0x000a14f4
static struct MENU_HEADER CutscenePauseMenuHeader; // offset 0x000a151c
static struct MENU_ITEM MainPauseItems[9]; // offset 0x000a0f54
static struct MENU_ITEM MultiplayerPauseItems[7]; // offset 0x000a1008
static struct MENU_ITEM CutscenePauseItems[6]; // offset 0x000a1094
static struct MENU_ITEM MissionCompleteItems[8]; // offset 0x000a110c
static struct MENU_ITEM MissionFailedItems[6]; // offset 0x000a11ac
static struct MENU_ITEM TakeARideFinishedItems[6]; // offset 0x000a1224
static struct MENU_ITEM DrivingGameFinishedItems[7]; // offset 0x000a129c
static struct MENU_ITEM MultiplayerFinishedItems[5]; // offset 0x000a1328
static struct MENU_ITEM ChaseGameFinishedItems[6]; // offset 0x000a138c
static struct MENU_ITEM YesNoRestartItems[3]; // offset 0x000a1404
static struct MENU_ITEM YesNoQuitItems[3]; // offset 0x000a1440
static struct MENU_ITEM NoPadItems[1]; // offset 0x000a147c
static struct MENU_ITEM NoMultiPadItems[2]; // offset 0x000a1490
static struct MENU_ITEM InvalidPadItems[1]; // offset 0x000a14b8
static struct MENU_ITEM InvalidMultiPadItems[2]; // offset 0x000a14cc
static struct MENU_HEADER MultiplayerPauseHeader; // offset 0x000a1508
static struct MENU_HEADER MissionCompleteHeader; // offset 0x000a1530
static struct MENU_HEADER MissionFailedHeader; // offset 0x000a1544
static struct MENU_HEADER TakeARideFinishedHeader; // offset 0x000a1558
static struct MENU_HEADER DrivingGameFinishedHeader; // offset 0x000a156c
static struct MENU_HEADER MultiplayerFinishedHeader; // offset 0x000a1580
static struct MENU_HEADER ChaseGameFinishedHeader; // offset 0x000a1594
static struct MENU_HEADER NoPadHeader; // offset 0x000a15a8
static struct MENU_HEADER NoMultiPadHeader; // offset 0x000a15bc
static struct MENU_HEADER InvalidPadHeader; // offset 0x000a15d0
static struct MENU_HEADER InvalidMultiPadHeader; // offset 0x000a15e4
static int playerwithcontrol[3]; // offset 0x000a15f8
static char validchars[68]; // offset 0x000a162c
extern int gDrawPauseMenus; // offset 0x000aa7f8
extern char gNoReplaySaveAllowed; // offset 0x000aa7fc
static int gEnteringScore; // offset 0x000aa7d8
static int gScorePosition; // offset 0x000aa7dc
static int gScoreEntered; // offset 0x000aa7e0
static int allownameentry; // offset 0x000aa7f4
static int VisibleMenu; // offset 0x000ab060
static struct MENU_HEADER *ActiveMenu; // offset 0x000ab064
static int ActiveMenuItem; // offset 0x000ab068
static int PauseReturnValue; // offset 0x000ab06c
static char SfxVolumeText[8]; // offset 0x000ab070
static char MusicVolumeText[8]; // offset 0x000ab078
extern char EnterScoreText[32]; // offset 0x000d9470
static struct MENU_HEADER *VisibleMenus[3]; // offset 0x000d9348
static struct MENU_ITEM *ActiveItem[3]; // offset 0x000d9358
static char EnterNameText[32]; // offset 0x000d9368
static char ScoreName[5][7]; // offset 0x000d9388
static char ScoreItems[5][16]; // offset 0x000d93b8
static char ScoreTime[5][16]; // offset 0x000d9408
static struct MENU_HEADER DrivingDebugHeader; // offset 0x000d9458

// 16 functions
/*
 * Offset 0x6BF50, from D:\driver2\game\C\PAUSE.C (lines 1004..1136)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ ShowPauseMenu(enum PAUSEMODE mode /*$s0*/)
{ // line 1, offset 0x6bf50
  enum PAUSEMODE passed_mode; // $s2
  { // line 58, offset 0x6c0c0
  } // line 81, offset 0x6c140
  { // line 88, offset 0x6c178
    struct RECT rect; // stack offset -32
  } // line 97, offset 0x6c1fc
} // line 133, offset 0x6c2ac
/*
 * Offset 0x6C2AC, from D:\driver2\game\C\PAUSE.C (lines 1216..1387)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitaliseMenu(enum PAUSEMODE mode /*$a2*/)
{ // line 1, offset 0x6c2ac
  struct MENU_ITEM *pItem; // $a0
  int i; // $a1
} // line 172, offset 0x6c6b8
/*
 * Offset 0x6C6B8, from D:\driver2\game\C\PAUSE.C (lines 1401..1430)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupMenu(struct MENU_HEADER *menu /*$a0*/, int back /*$a1*/)
{ // line 1, offset 0x6c6b8
  struct MENU_ITEM *pItem; // $a2
  int count; // $a3
} // line 30, offset 0x6c7f4
/*
 * Offset 0x6C7F4, from D:\driver2\game\C\PAUSE.C (lines 1443..1527)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawVisibleMenus()
{ // line 2, offset 0x6c7f4
  struct MENU_HEADER *pActive; // $s5
  struct MENU_ITEM *pItem; // $s1
  struct POLY_FT3 *null; // $a0
  int i; // stack offset -48
  int ypos; // $s3
  int xpos; // $fp
  int width; // $s4
  { // line 30, offset 0x6c8c0
    unsigned char r; // $s6
    unsigned char b; // $s7
    int x1; // $s0
    int x2; // $s2
  } // line 66, offset 0x6ca40
} // line 85, offset 0x6cbe8
/*
 * Offset 0x6CBE8, from D:\driver2\game\C\PAUSE.C (lines 1543..1704)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ControlMenu()
{ // line 2, offset 0x6cbe8
  static int debounce; // offset 0x30
  unsigned short paddata; // $a2
  unsigned short paddirect; // $a3
  { // line 53, offset 0x6ccd4
    int doit; // $v1
  } // line 78, offset 0x6cd78
  { // line 132, offset 0x6cf54
    int i; // $a0
  } // line 139, offset 0x6cfb8
  { // line 149, offset 0x6cfd8
    int i; // $a0
  } // line 160, offset 0x6d034
} // line 162, offset 0x6d034
/*
 * Offset 0x6D044, from D:\driver2\game\C\PAUSE.C (lines 1787..1940)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ EnterScoreName()
{ // line 2, offset 0x6d044
  struct SCORE_ENTRY *table; // stack offset -40
  char *username; // $s3
  unsigned short npad; // $a1
  int so; // $s0
  int co; // $s1
  int delay; // $s2
  char c; // $a0
  char toggle; // $s6
} // line 154, offset 0x6d324
/*
 * Offset 0x6D324, from D:\driver2\game\C\PAUSE.C (lines 1943..2011)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ CreateScoreNames(struct SCORE_ENTRY *table /*$s0*/, struct PLAYER_SCORE *score /*stack 4*/, int position /*stack 8*/)
{ // line 1, offset 0x6d324
  char *text; // $s1
  int min; // $t1
  int frac; // $v0
  int i; // $s5
} // line 69, offset 0x6d664
/*
 * Offset 0x6D694, from D:\driver2\game\C\PAUSE.C (lines 2020..2074)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawHighScoreMenu(int selection /*stack 0*/)
{ // line 1, offset 0x6d694
  struct POLY_FT3 *null; // $a0
  char text[4]; // stack offset -48
  unsigned char r; // $s3
  unsigned char g; // $s5
  unsigned char b; // $s2
  int i; // $s0
  int ypos; // $s4
} // line 55, offset 0x6d9b0
/*
 * Offset 0x6D9B0, from D:\driver2\game\C\PAUSE.C (lines 1153..1154)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SaveReplay(int direction /*$a0*/)
{
}
/*
 * Offset 0x6D9D4, from D:\driver2\game\C\PAUSE.C (lines 1158..1159)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SaveGame(int direction /*$a0*/)
{
}
/*
 * Offset 0x6D9F8, from D:\driver2\game\C\PAUSE.C (lines 1163..1164)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ EnterName()
{
}
/*
 * Offset 0x6DA18, from D:\driver2\game\C\PAUSE.C (lines 1185..1205)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ MaxMenuStringLength(struct MENU_HEADER *pMenu /*$v0*/)
{ // line 1, offset 0x6da18
  struct MENU_ITEM *pItems; // $s1
  int max; // $s2
  int temp; // $s0
} // line 21, offset 0x6dad0
/*
 * Offset 0x6DAD0, from D:\driver2\game\C\PAUSE.C (lines 1710..1721)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PauseMap(int direction /*$a0*/)
{
}
/*
 * Offset 0x6DB34, from D:\driver2\game\C\PAUSE.C (lines 1725..1743)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SfxVolume(int direction /*$a0*/)
{ // line 1, offset 0x6db34
} // line 19, offset 0x6dc04
/*
 * Offset 0x6DC04, from D:\driver2\game\C\PAUSE.C (lines 1746..1764)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ MusicVolume(int direction /*$a0*/)
{ // line 1, offset 0x6dc04
} // line 19, offset 0x6dcd4
/*
 * Offset 0x6DCD4, from D:\driver2\game\C\PAUSE.C (lines 1139..1149)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DrawPauseMenus()
{
}
Source file(s) D:\driver2\game\C\PEDEST.C+D:\driver2\game\PEDEST.C, object file obj\pedest.OBJ overlay id <none>

// 86 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct _PLAYER {
  long pos[4]; // size=16, offset=0
  int dir; // size=0, offset=16
  struct VECTOR *spoolXZ; // size=16, offset=20
  struct VECTOR cameraPos; // size=16, offset=24
  int cameraDist; // size=0, offset=40
  int maxCameraDist; // size=0, offset=44
  int cameraAngle; // size=0, offset=48
  int headPos; // size=0, offset=52
  int headTarget; // size=0, offset=56
  int viewChange; // size=0, offset=60
  char dying; // size=0, offset=64
  char upsideDown; // size=0, offset=65
  char onGrass; // size=0, offset=66
  char targetCarId; // size=0, offset=67
  char cameraView; // size=0, offset=68
  char headTimer; // size=0, offset=69
  char playerType; // size=0, offset=70
  char worldCentreCarId; // size=0, offset=71
  char playerCarId; // size=0, offset=72
  char cameraCarId; // size=0, offset=73
  char padid; // size=0, offset=74
  char car_is_sounding; // size=0, offset=75
  long camera_vel[3]; // size=12, offset=76
  int snd_cam_ang; // size=0, offset=88
  struct __skidinfo skidding; // size=2, offset=92
  struct __skidinfo wheelnoise; // size=2, offset=94
  struct __horninfo horn; // size=3, offset=96
  int car_sound_timer; // size=0, offset=100
  short revsvol; // size=0, offset=104
  short idlevol; // size=0, offset=106
  struct PEDESTRIAN *pPed; // size=92, offset=108
  int crash_timer; // size=0, offset=112
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct SEATED_PEDESTRIANS {
  int x; // size=0, offset=0
  int z; // size=0, offset=4
  short rotation; // size=0, offset=8
  char index; // size=0, offset=10
  char pad; // size=0, offset=11
};
struct CAR_COLLISION_BOX {
  int min_x; // size=0, offset=0
  int max_x; // size=0, offset=4
  int min_z; // size=0, offset=8
  int max_z; // size=0, offset=12
};
struct PEDESTRIAN_ROADS {
  short pos; // size=0, offset=0
  short north; // size=0, offset=2
  short south; // size=0, offset=4
  short east; // size=0, offset=6
  short west; // size=0, offset=8
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct DRIVER2_STRAIGHT {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  unsigned short length; // size=0, offset=8
  short bing; // size=0, offset=10
  short angle; // size=0, offset=12
  short ConnectIdx[4]; // size=8, offset=14
  char NumLanes; // size=0, offset=22
  char LaneDirs; // size=0, offset=23
  char AILanes; // size=0, offset=24
  char packing; // size=0, offset=25
};
struct DRIVER2_CURVE {
  int Midx; // size=0, offset=0
  int Midz; // size=0, offset=4
  short start; // size=0, offset=8
  short end; // size=0, offset=10
  short ConnectIdx[4]; // size=8, offset=12
  short gradient; // size=0, offset=20
  short height; // size=0, offset=22
  char NumLanes; // size=0, offset=24
  char LaneDirs; // size=0, offset=25
  char inside; // size=0, offset=26
  char AILanes; // size=0, offset=27
};
struct _sdPlane {
  short surface; // size=0, offset=0
  short a; // size=0, offset=2
  short b; // size=0, offset=4
  short c; // size=0, offset=6
  int d; // size=0, offset=8
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct CDATA2D {
  struct VECTOR x; // size=16, offset=0
  struct VECTOR axis[2]; // size=32, offset=16
  struct VECTOR vel; // size=16, offset=48
  int theta; // size=0, offset=64
  int length[2]; // size=8, offset=68
  int dist[2]; // size=8, offset=76
  int limit[2]; // size=8, offset=84
  int avel; // size=0, offset=92
  int isCameraOrTanner; // size=0, offset=96
};
struct CRET2D {
  struct VECTOR hit; // size=16, offset=0
  struct VECTOR surfNormal; // size=16, offset=16
  int penetration; // size=0, offset=32
  int neverfree; // size=0, offset=36
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};

// 118 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct _PLAYER PLAYER;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct SEATED_PEDESTRIANS SEATED_PEDESTRIANS;
typedef struct CAR_COLLISION_BOX CAR_COLLISION_BOX;
typedef struct PEDESTRIAN_ROADS PEDESTRIAN_ROADS;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct DRIVER2_STRAIGHT DRIVER2_STRAIGHT;
typedef struct DRIVER2_CURVE DRIVER2_CURVE;
typedef struct _sdPlane sdPlane;
typedef struct MR_TIMER MR_TIMER;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct CDATA2D CDATA2D;
typedef struct CRET2D CRET2D;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;

// 0 labels

// 54 external declarations
extern struct VECTOR tannerLookAngle; // offset 0x000a16a8
extern long force[4]; // offset 0x000a16b8
extern long point[4]; // offset 0x000a16c8
static int num_pedestrians; // offset 0x000aa838
static int numTannerPeds; // offset 0x000aa83c
extern int bReverseYRotation; // offset 0x000aa860
extern int bTannerSitting; // offset 0x000aa840
extern int bKillTanner; // offset 0x000aa85c
extern int pinginPedAngle; // offset 0x000aa844
extern int iAllowWatch; // offset 0x000aa848
extern int iFreezeTimer; // offset 0x000aa84c
extern int bFreezeAnimation; // offset 0x000aa850
extern int bReverseAnimation; // offset 0x000aa854
extern int max_pedestrians; // offset 0x000aa858
extern int bAvoidTanner; // offset 0x000aa864
extern int bAvoidBomb; // offset 0x000aa868
extern int iIdleTimer; // offset 0x000aa86c
extern int bKilled; // offset 0x000aa870
extern int bStopTanner; // offset 0x000aa874
static int numCopPeds; // offset 0x000aa878
extern int tannerTurnStep; // offset 0x000aa87c
extern int tannerTurnMax; // offset 0x000aa880
extern int tannerTurn; // offset 0x000aa884
extern int bPower; // offset 0x000aa888
extern int powerCounter; // offset 0x000aa88c
extern struct _CAR_DATA *pCivCarToGetIn; // offset 0x000aa8b4
extern int allreadydone; // offset 0x000aa8bc
extern struct PEDESTRIAN *pPlayerPed; // offset 0x000ab094
extern struct PEDESTRIAN *pUsedPeds; // offset 0x000ab0b4
extern struct _CAR_DATA *pcdTanner; // offset 0x000ab0c0
extern struct SEATED_PEDESTRIANS *seated_pedestrian; // offset 0x000ab0a8
extern int seated_count; // offset 0x000ab0a4
extern int maxSeated; // offset 0x000ab0b8
extern int basic_car_interest; // offset 0x000ab0ac
extern struct _CAR_DATA *carToGetIn; // offset 0x000ab0c4
extern int collision_boxes_set; // offset 0x000ab098
extern int num_extra_boxes_set; // offset 0x000ab09c
extern char ping_in_pedestrians; // offset 0x000ab0c8
extern struct PEDESTRIAN *pFreePeds; // offset 0x000ab0b0
extern unsigned long tannerPad; // offset 0x000ab0bc
static int storedCam; // offset 0x000ab080
static int oldCamView; // offset 0x000ab084
static struct SVECTOR camAngle; // offset 0x000ab088
static int oldDir; // offset 0x000ab090
extern int oldWeather; // offset 0x000ab0a0
extern struct PEDESTRIAN *pHold; // offset 0x000ab0cc
extern struct MODEL *pmTannerModels[17]; // offset 0x000d96e0
extern struct MODEL *pmJerichoModels[6]; // offset 0x000d95b8
static struct CDATA2D cd[2]; // offset 0x000d94f0
extern struct CAR_COLLISION_BOX collision_box[8]; // offset 0x000d9660
extern struct CAR_COLLISION_BOX tanner_collision_box; // offset 0x000d95d0
extern struct CAR_COLLISION_BOX extra_collision_boxes[5]; // offset 0x000d95f0
extern struct _CAR_DATA *collision_car_ptr[8]; // offset 0x000d9640
extern struct PEDESTRIAN_ROADS pedestrian_roads; // offset 0x000d95e0

// 64 functions
/*
 * Offset 0x6DD34, from D:\driver2\game\C\PEDEST.C (lines 1137..1181)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ IHaveThePower()
{ // line 2, offset 0x6dd34
  struct _CAR_DATA *cp; // $t4
  { // line 15, offset 0x6ddb8
  } // line 33, offset 0x6df20
} // line 45, offset 0x6df54
/*
 * Offset 0x6DF54, from D:\driver2\game\C\PEDEST.C (lines 1191..1366)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ ProcessTannerPad(struct PEDESTRIAN *pPed /*$s1*/, unsigned long pad /*$a1*/, char PadSteer /*$a2*/, char use_analogue /*$a3*/)
{ // line 1, offset 0x6df54
  struct VECTOR vec; // stack offset -88
  int mapheight; // $s2
  struct VECTOR normal; // stack offset -72
  struct VECTOR out; // stack offset -56
  struct _sdPlane *SurfacePtr; // stack offset -24
  { // line 33, offset 0x6dfc8
    struct VECTOR tVec; // stack offset -40
    struct _sdPlane *plane; // $v0
    int mH; // $v1
    int sI; // $a0
  } // line 86, offset 0x6e104
  { // line 168, offset 0x6e390
  } // line 174, offset 0x6e3f0
} // line 176, offset 0x6e3f0
/*
 * Offset 0x6E408, from D:\driver2\game\C\PEDEST.C (lines 1375..1432)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitTanner()
{ // line 2, offset 0x6e408
} // line 58, offset 0x6e5c4
/*
 * Offset 0x6E5C4, from D:\driver2\game\C\PEDEST.C (lines 1466..1512)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitPedestrians()
{ // line 2, offset 0x6e5c4
  int loop; // $a1
  struct SEATED_PEDESTRIANS *seatedptr; // $s2
} // line 47, offset 0x6e6c4
/*
 * Offset 0x6E6C4, from D:\driver2\game\C\PEDEST.C (lines 1623..1834)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ ActivatePlayerPedestrian(struct _CAR_DATA *pCar /*$s6*/, char *padId /*stack 4*/, int direction /*$a1*/, long *position[4] /*$a3*/, int playerType /*stack 16*/, enum PED_MODEL_TYPES playerType /*stack -56*/)
{ // line 1, offset 0x6e6c4
  struct PEDESTRIAN *pPed; // $s1
  struct PEDESTRIAN *pSPed; // $a0
  struct VECTOR v; // stack offset -72
  int nx; // $s4
  int nz; // $s2
  long w; // $s0
  long x; // $s5
  long y; // stack offset -52
  long z; // $s1
  long d; // stack offset -48
  int side; // $fp
  int id; // $s3
  { // line 65, offset 0x6e7d4
    { // line 140, offset 0x6ea48
    } // line 140, offset 0x6ea48
    { // line 184, offset 0x6eb48
    } // line 184, offset 0x6eb48
  } // line 184, offset 0x6eb48
} // line 212, offset 0x6ec88
/*
 * Offset 0x6EC88, from D:\driver2\game\C\PEDEST.C (lines 1877..1967)
 * Stack frame base $sp, size 168
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ PlaceRoadBlockCops()
{ // line 2, offset 0x6ec88
  struct _CAR_DATA *pCar; // $a0
  struct _CAR_DATA *pCopCars[16]; // stack offset -152
  int numCops; // $fp
  { // line 19, offset 0x6ed1c
    int x; // $s2
    int z; // $s0
    int w; // $s0
    int i; // $s7
    int s1; // $s1
    int s2; // $a3
    struct VECTOR vert; // stack offset -88
    long disp[4]; // stack offset -72
    long dir[4]; // stack offset -56
    int alpha; // $s1
  } // line 89, offset 0x6efdc
} // line 91, offset 0x6efdc
/*
 * Offset 0x6F00C, from D:\driver2\game\C\PEDEST.C (lines 1975..2044)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ CreatePedAtLocation(long *pPos[4] /*$s2*/, int pedType /*$s1*/)
{ // line 1, offset 0x6f00c
  struct PEDESTRIAN *pPed; // $s0
} // line 70, offset 0x6f16c
/*
 * Offset 0x6F16C, from D:\driver2\game\C\PEDEST.C (lines 2168..2240)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ ControlPedestrians()
{ // line 2, offset 0x6f16c
  struct PEDESTRIAN *pPed; // $s0
  struct PEDESTRIAN *pPedNext; // $s2
  struct _CAR_DATA *pCar; // $v0
  { // line 57, offset 0x6f26c
  } // line 65, offset 0x6f2b0
} // line 73, offset 0x6f2dc
/*
 * Offset 0x6F2DC, from D:\driver2\game\C\PEDEST.C (lines 2385..2512)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PedDoNothing(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x6F5AC, from D:\driver2\game\C\PEDEST.C (lines 2523..2631)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PedUserRunner(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x6f5ac
} // line 109, offset 0x6f80c
/*
 * Offset 0x6F80C, from D:\driver2\game\C\PEDEST.C (lines 2827..2890)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ SetupGetOutCar(struct PEDESTRIAN *pPed /*$s5*/, struct _CAR_DATA *pCar /*$s3*/, int side /*$s7*/)
{ // line 1, offset 0x6f80c
  int alpha; // $s2
  long disp[4]; // stack offset -80
  long dir[4]; // stack offset -64
  struct SVECTOR vert; // stack offset -48
  int x; // $s4
  int z; // $s0
  int a; // $s6
  int nx; // $a3
  int nz; // $a1
} // line 64, offset 0x6fa3c
/*
 * Offset 0x6FA3C, from D:\driver2\game\C\PEDEST.C (lines 2898..2987)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ SetupGetInCar(struct PEDESTRIAN *pPed /*$s2*/)
{ // line 1, offset 0x6fa3c
  int alpha; // $s1
  long disp[4]; // stack offset -72
  long dir[4]; // stack offset -56
  struct SVECTOR vert; // stack offset -40
  { // line 36, offset 0x6fb2c
    int x; // $t1
    int z; // $t2
    int a; // $a0
    int nx; // $a3
    int nz; // $a1
  } // line 59, offset 0x6fc24
  { // line 70, offset 0x6fc70
    long pos[4]; // stack offset -32
  } // line 71, offset 0x6fc70
} // line 90, offset 0x6fd08
/*
 * Offset 0x6FD08, from D:\driver2\game\C\PEDEST.C (lines 3074..3149)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ TannerCameraHandler(struct PEDESTRIAN *pPed /*$a0*/)
{ // line 2, offset 0x6fd08
  int padsteer; // $a3
  int maxY; // $t1
  int maxX; // $t5
  int range; // $t0
  int minX; // $t4
  int extra; // $a3
} // line 76, offset 0x6ff48
/*
 * Offset 0x6FF48, from D:\driver2\game\C\PEDEST.C (lines 3157..3218)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: ra
 */
void /*$ra*/ TannerSitDown(struct PEDESTRIAN *pPed /*$a2*/)
{ // line 1, offset 0x6ff48
  struct VECTOR angle; // stack offset -24
} // line 62, offset 0x700d0
/*
 * Offset 0x700D0, from D:\driver2\game\C\PEDEST.C (lines 3227..3349)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ AnimatePed(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x700d0
  { // line 11, offset 0x700f0
    int mapheight; // $a3
    int reverse; // $s1
    { // line 14, offset 0x700f0
      struct VECTOR vec; // stack offset -32
    } // line 39, offset 0x7015c
    { // line 103, offset 0x7030c
      int sfc; // $v1
    } // line 108, offset 0x703bc
  } // line 121, offset 0x70468
} // line 123, offset 0x70468
/*
 * Offset 0x7047C, from D:\driver2\game\C\PEDEST.C (lines 3447..3631)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ PingInPedestrians()
{ // line 2, offset 0x7047c
  int bFound; // $s1
  struct VECTOR randomLoc; // stack offset -88
  struct VECTOR baseLoc; // stack offset -72
  int i; // $s2
  int pingInDist; // $a2
  struct VECTOR position; // stack offset -56
  struct VECTOR target; // stack offset -40
  struct PEDESTRIAN *pedestrian; // $s1
  { // line 37, offset 0x70518
    { // line 55, offset 0x705f8
      struct PEDESTRIAN *pPed; // $a2
      { // line 73, offset 0x70628
        int x; // $v1
        int z; // $v0
        int radius; // $v1
      } // line 75, offset 0x70628
    } // line 77, offset 0x70674
  } // line 79, offset 0x70674
  { // line 87, offset 0x706ac
    { // line 136, offset 0x707f4
      int rval; // $v1
    } // line 175, offset 0x70858
  } // line 180, offset 0x70858
} // line 185, offset 0x70858
/*
 * Offset 0x70878, from D:\driver2\game\C\PEDEST.C (lines 3685..3752)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ FindPointOfCollision(struct _CAR_DATA *pCar /*$s3*/, struct VECTOR *pPos /*$a1*/)
{ // line 1, offset 0x70878
  int tb1; // $v1
  int tb2; // $v0
  int minX; // $a3
  int maxX; // $t0
  int minZ; // $v0
  int maxZ; // $a0
  int x; // $t1
  int z; // $a1
  int s1; // $a2
  int s2; // $v1
  int carLength[2]; // stack offset -40
  static struct CRET2D collisionResult; // offset 0x0
} // line 68, offset 0x70a9c
/*
 * Offset 0x70A9C, from D:\driver2\game\C\PEDEST.C (lines 3762..3906)
 * Stack frame base $sp, size 136
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ TannerCarCollisionCheck(struct VECTOR *pPos /*$s5*/, int dir /*$a1*/, int bQuick /*stack 8*/)
{ // line 1, offset 0x70a9c
  int carLength[2]; // stack offset -120
  struct _CAR_DATA *cp0; // $s0
  struct _CAR_DATA *cp1; // $s1
  static struct CRET2D collisionResult; // offset 0x30
  unsigned int dNewLBODY[2]; // stack offset -112
  int speed; // $v0
  { // line 36, offset 0x70b2c
    { // line 36, offset 0x70b2c
    } // line 36, offset 0x70b2c
    { // line 53, offset 0x70c04
      struct VECTOR velocity; // stack offset -104
      long pointVel[4]; // stack offset -88
      long reaction[4]; // stack offset -72
      long lever[4]; // stack offset -56
      int strikeVel; // $t1
      { // line 84, offset 0x70d84
      } // line 95, offset 0x70d84
      { // line 99, offset 0x70db0
        int twistY; // $a2
        int lever_dot_n; // $a0
        int displacementsquared; // $a1
        int denom; // $a0
      } // line 112, offset 0x70e8c
    } // line 133, offset 0x70fd8
  } // line 142, offset 0x71008
} // line 145, offset 0x71054
/*
 * Offset 0x71054, from D:\driver2\game\C\PEDEST.C (lines 3946..4039)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ SetupCivJump(struct PEDESTRIAN *pPed /*$s1*/, struct _CAR_DATA *cp /*$s0*/)
{ // line 1, offset 0x71054
  long disp[4]; // stack offset -48
  long dir[4]; // stack offset -32
  int angle; // $s0
  { // line 14, offset 0x710c0
    short scale; // $a2
  } // line 21, offset 0x710e4
  { // line 62, offset 0x711e8
  } // line 81, offset 0x712ac
} // line 94, offset 0x71324
/*
 * Offset 0x71324, from D:\driver2\game\C\PEDEST.C (lines 4101..4181)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ CivPedWalk(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x71324
  int turn; // $a1
  int offset1; // $t0
  int offset2; // $v1
  int lookahead; // $s3
  int speed; // $s1
} // line 81, offset 0x715fc
/*
 * Offset 0x715FC, from D:\driver2\game\C\PEDEST.C (lines 4508..4609)
 * Stack frame base $sp, size 32
 */
void /*$ra*/ CorrectPathPosition(struct PEDESTRIAN *pedestrian /*$a0*/, struct VECTOR *position /*$a1*/)
{ // line 2, offset 0x715fc
  struct VECTOR vec; // stack offset -16
} // line 102, offset 0x715fc
/*
 * Offset 0x71608, from D:\driver2\game\C\PEDEST.C (lines 4619..4733)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ CalcPedestrianDirection(int last_dir /*$a0*/, int wx /*$s5*/, int wz /*$s6*/, struct VECTOR *target /*$s3*/)
{ // line 1, offset 0x71608
  int dir; // $s2
  int num; // $s1
  int rx; // $v1
  int rz; // $a0
  int mask; // $s0
  { // line 50, offset 0x716c0
  } // line 62, offset 0x7170c
} // line 115, offset 0x717ac
/*
 * Offset 0x717AC, from D:\driver2\game\C\PEDEST.C (lines 4984..5022)
 * Stack frame base $sp, size 0
 */
struct SEATED_PEDESTRIANS * /*$ra*/ FindTannerASeat(struct PEDESTRIAN *pPed /*$t4*/)
{ // line 1, offset 0x717ac
  struct SEATED_PEDESTRIANS *seatedptr; // $a2
  struct SEATED_PEDESTRIANS *theOne; // $t1
  int dx; // $a0
  int dz; // $v1
  int distsqr; // $v0
  int bestSqr; // $t2
} // line 39, offset 0x718c8
/*
 * Offset 0x718C8, from D:\driver2\game\C\PEDEST.C (lines 5031..5075)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ add_seated(struct SEATED_PEDESTRIANS *seatedptr /*$s0*/, int seat_index /*$s2*/)
{ // line 1, offset 0x718c8
  struct PEDESTRIAN *pedestrian; // $s1
  int index; // $v0
} // line 45, offset 0x71a44
/*
 * Offset 0x71A5C, from D:\driver2\game\C\PEDEST.C (lines 5084..5109)
 * Stack frame base $sp, size 16
 */
void /*$ra*/ set_coll_box(int index /*$t2*/, struct _CAR_DATA *cp /*$t0*/, int offset /*$t3*/)
{ // line 1, offset 0x71a5c
  struct VECTOR BoxCentre; // stack offset -16
  int boxsize; // $t1
} // line 26, offset 0x71b74
/*
 * Offset 0x71B7C, from D:\driver2\game\C\PEDEST.C (lines 5118..5170)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ BuildCarCollisionBox()
{ // line 2, offset 0x71b7c
  struct _CAR_DATA *cp; // $s3
  int count1; // $s4
  int i; // $t1
  { // line 28, offset 0x71cbc
    int x; // $a0
    int z; // $a2
  } // line 37, offset 0x71d58
} // line 53, offset 0x71e0c
/*
 * Offset 0x71E0C, from D:\driver2\game\C\PEDEST.C (lines 5249..5317)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ CalculatePedestrianInterest(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x71e0c
  int interest; // $a2
  int dist; // $v1
  struct _CAR_DATA *pCar; // $a2
  struct VECTOR v1; // stack offset -40
  struct VECTOR v2; // stack offset -24
} // line 69, offset 0x71f44
/*
 * Offset 0x71F54, from D:\driver2\game\C\PEDEST.C (lines 1521..1533)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DestroyPedestrians()
{ // line 2, offset 0x71f54
} // line 13, offset 0x71fb4
/*
 * Offset 0x71FB4, from D:\driver2\game\C\PEDEST.C (lines 1567..1615)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DestroyPedestrian(struct PEDESTRIAN *pPed /*$a1*/)
{ // line 1, offset 0x71fb4
  { // line 38, offset 0x72064
    struct SEATED_PEDESTRIANS *seatedptr; // $a0
  } // line 41, offset 0x72090
} // line 49, offset 0x720ac
/*
 * Offset 0x720AC, from D:\driver2\game\C\PEDEST.C (lines 1842..1868)
 * Stack frame base $sp, size 0
 */
struct PEDESTRIAN * /*$ra*/ CreatePedestrian()
{ // line 2, offset 0x720ac
} // line 27, offset 0x72114
/*
 * Offset 0x7211C, from D:\driver2\game\C\PEDEST.C (lines 4221..4456)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ HandlePedestrians()
{ // line 2, offset 0x7211c
} // line 236, offset 0x7215c
/*
 * Offset 0x7216C, from D:\driver2\game\C\PEDEST.C (lines 3357..3395)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DeActivatePlayerPedestrian(struct PEDESTRIAN *pPed /*$s3*/)
{ // line 1, offset 0x7216c
  int distToCarSq; // stack offset -32
  struct _CAR_DATA *closestCar; // $s1
  struct _PLAYER *pPlayer; // $v0
  struct VECTOR point; // stack offset -48
  int getIn; // $s2
  { // line 27, offset 0x7221c
  } // line 38, offset 0x72274
} // line 39, offset 0x72290
/*
 * Offset 0x72290, from D:\driver2\game\C\PEDEST.C (lines 2052..2136)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ DrawAllPedestrians()
{ // line 2, offset 0x72290
  struct PEDESTRIAN *pPed; // $s0
  int pedType; // $s2
  struct MATRIX mStore; // stack offset -56
  { // line 19, offset 0x7231c
    { // line 26, offset 0x7234c
    } // line 26, offset 0x7234c
  } // line 33, offset 0x72364
  { // line 49, offset 0x723d4
  } // line 54, offset 0x72400
} // line 85, offset 0x72430
/*
 * Offset 0x72430, from D:\driver2\game\C\PEDEST.C (lines 2145..2157)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ TannerActionHappening()
{ // line 2, offset 0x72430
  struct PEDESTRIAN *pPed; // $a0
} // line 13, offset 0x72478
/*
 * Offset 0x72478, from D:\driver2\game\C\PEDEST.C (lines 1440..1458)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetTannerPosition(struct VECTOR *pVec /*$a0*/)
{ // line 1, offset 0x72478
  struct PEDESTRIAN *pPed; // $a1
} // line 19, offset 0x72500
/*
 * Offset 0x72500, from D:\driver2\game\C\PEDEST.C (lines 4924..4934)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetPedestrianTurn(struct PEDESTRIAN *pedestrian /*$a0*/, int turn /*$a1*/)
{ // line 1, offset 0x72500
  int dir; // $a2
  int speed; // $v1
} // line 11, offset 0x72584
/*
 * Offset 0x72584, from D:\driver2\game\C\PEDEST.C (lines 5325..5334)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ PedSurfaceType(struct VECTOR *ped_pos /*$a0*/)
{ // line 5, offset 0x72584
  struct _sdPlane *sfc_ptr; // $v0
} // line 10, offset 0x725b8
/*
 * Offset 0x725B8, from D:\driver2\game\C\PEDEST.C (lines 4845..4916)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ IsPavement(int x /*$a0*/, int y /*$a1*/, int z /*$a2*/, struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x725b8
  struct VECTOR vec; // stack offset -24
  int r; // $v1
} // line 72, offset 0x72644
/*
 * Offset 0x72644, from D:\driver2\game\C\PEDEST.C (lines 4943..4976)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
struct SEATED_PEDESTRIANS * /*$ra*/ FindSeated()
{ // line 2, offset 0x72644
  struct SEATED_PEDESTRIANS *seatedptr; // $s0
  { // line 7, offset 0x7266c
    int dx; // $v1
    int dz; // $v0
    int distsqr; // $v1
    int count1; // $a2
  } // line 32, offset 0x72724
} // line 34, offset 0x72738
/*
 * Offset 0x72738, from D:\driver2\game\C\PEDEST.C (lines 5178..5222)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
struct _CAR_DATA * /*$ra*/ CheckForCar(struct PEDESTRIAN *pedestrian /*$s3*/)
{ // line 1, offset 0x72738
  int count; // $s0
  { // line 5, offset 0x72770
  } // line 26, offset 0x72790
  { // line 28, offset 0x727b4
  } // line 35, offset 0x727b4
  { // line 39, offset 0x72800
  } // line 43, offset 0x7281c
} // line 45, offset 0x7283c
/*
 * Offset 0x7283C, from D:\driver2\game\C\PEDEST.C (lines 4465..4495)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PedestrianActionInit_WalkToTarget(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x7283c
  int dir; // $v1
} // line 31, offset 0x728b8
/*
 * Offset 0x728C8, from D:\driver2\game\C\PEDEST.C (lines 3060..3064)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupTannerSitDown(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x72904, from D:\driver2\game\C\PEDEST.C (lines 3026..3031)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupPressButton(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x72944, from D:\driver2\game\C\PEDEST.C (lines 2639..2693)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PedUserWalker(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x72944
  static int speed; // offset 0x80
} // line 55, offset 0x72a10
/*
 * Offset 0x72A10, from D:\driver2\game\C\PEDEST.C (lines 2702..2787)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PedCarryOutAnimation(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x72B5C, from D:\driver2\game\C\PEDEST.C (lines 2994..3017)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PedGetInCar(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x72b5c
  long disp[4]; // stack offset -48
  long dir[4]; // stack offset -32
  struct SVECTOR vert; // stack offset -16
} // line 24, offset 0x72bec
/*
 * Offset 0x72BEC, from D:\driver2\game\C\PEDEST.C (lines 2796..2816)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ PedGetOutCar(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x72C90, from D:\driver2\game\C\PEDEST.C (lines 3040..3051)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PedPressButton(struct PEDESTRIAN *pPed /*$v1*/)
{
}
/*
 * Offset 0x72CE0, from D:\driver2\game\C\PEDEST.C (lines 3402..3403)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ CivPedDoNothing(struct PEDESTRIAN *pPed /*$a0*/)
{
}
/*
 * Offset 0x72CE8, from D:\driver2\game\C\PEDEST.C (lines 4190..4207)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ CivPedSit(struct PEDESTRIAN *pPed /*$a0*/)
{ // line 2, offset 0x72ce8
} // line 18, offset 0x72cf0
/*
 * Offset 0x72CF0, from D:\driver2\game\C\PEDEST.C (lines 4047..4072)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ CivPedJump(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x72cf0
} // line 26, offset 0x72da0
/*
 * Offset 0x72DA0, from D:\driver2\game\C\PEDEST.C (lines 2353..2376)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ CopStand(struct PEDESTRIAN *pPed /*$s0*/)
{ // line 1, offset 0x72da0
  struct VECTOR v; // stack offset -24
} // line 24, offset 0x72dfc
/*
 * Offset 0x72DFC, from D:\driver2\game\C\PEDEST.C (lines 2325..2345)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ CivGetIn(struct PEDESTRIAN *pPed /*$s2*/)
{ // line 1, offset 0x72dfc
  struct DRIVER2_STRAIGHT *str; // $s1
  struct DRIVER2_CURVE *crv; // $s0
  { // line 1, offset 0x72dfc
  } // line 20, offset 0x72ee4
} // line 21, offset 0x72ee4
/*
 * Offset 0x72EE4, from D:\driver2\game\C\PEDEST.C (lines 3640..3674)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ TannerCollision(struct PEDESTRIAN *pPed /*$s1*/)
{ // line 1, offset 0x72ee4
} // line 35, offset 0x72fbc
/*
 * Offset 0x72FD0, from D:\driver2\game\C\PEDEST.C (lines 1541..1558)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ DestroyCivPedestrians()
{ // line 2, offset 0x72fd0
  struct PEDESTRIAN *pPed; // $v1
  struct PEDESTRIAN *pHPed; // $s0
} // line 18, offset 0x73038
/*
 * Offset 0x73038, from D:\driver2\game\C\PEDEST.C (lines 2256..2266)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupDoNowt(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x7307C, from D:\driver2\game\C\PEDEST.C (lines 2275..2282)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupWalker(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x730B8, from D:\driver2\game\C\PEDEST.C (lines 2291..2298)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupRunner(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x730FC, from D:\driver2\game\C\PEDEST.C (lines 2302..2309)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupBack(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x7313C, from D:\driver2\game\C\PEDEST.C (lines 3411..3434)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ SetupCivPedRouteData(struct VECTOR *pPos /*$s1*/)
{ // line 1, offset 0x7313c
  struct VECTOR baseLoc; // stack offset -32
} // line 24, offset 0x731f8
/*
 * Offset 0x731F8, from D:\driver2\game\C\PEDEST.C (lines 3915..3937)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ PingOutPed(struct PEDESTRIAN *pPed /*$a2*/)
{ // line 1, offset 0x731f8
  int px; // $a0
  int pz; // $v1
  int ps; // $a0
} // line 23, offset 0x73270
/*
 * Offset 0x73270, from D:\driver2\game\C\PEDEST.C (lines 4080..4092)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupCivPedWalk(struct PEDESTRIAN *pPed /*$s0*/)
{
}
/*
 * Offset 0x732C0, from D:\driver2\game\C\PEDEST.C (lines 5231..5240)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CheckForPlayerCar(struct PEDESTRIAN *pedestrian /*$a0*/, struct CAR_COLLISION_BOX *collision_box /*$a1*/)
{
}
/*
 * Offset 0x73328, from D:\driver2\game\C\PEDEST.C (lines 5344..5345)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessChairLump(char *lump_file /*$a0*/, int lump_size /*$a1*/)
{
}
Source file(s) D:\driver2\game\C\PLAYERS.C+D:\driver2\game\PLAYERS.C, object file obj\players.OBJ overlay id <none>

// 67 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct _PLAYER {
  long pos[4]; // size=16, offset=0
  int dir; // size=0, offset=16
  struct VECTOR *spoolXZ; // size=16, offset=20
  struct VECTOR cameraPos; // size=16, offset=24
  int cameraDist; // size=0, offset=40
  int maxCameraDist; // size=0, offset=44
  int cameraAngle; // size=0, offset=48
  int headPos; // size=0, offset=52
  int headTarget; // size=0, offset=56
  int viewChange; // size=0, offset=60
  char dying; // size=0, offset=64
  char upsideDown; // size=0, offset=65
  char onGrass; // size=0, offset=66
  char targetCarId; // size=0, offset=67
  char cameraView; // size=0, offset=68
  char headTimer; // size=0, offset=69
  char playerType; // size=0, offset=70
  char worldCentreCarId; // size=0, offset=71
  char playerCarId; // size=0, offset=72
  char cameraCarId; // size=0, offset=73
  char padid; // size=0, offset=74
  char car_is_sounding; // size=0, offset=75
  long camera_vel[3]; // size=12, offset=76
  int snd_cam_ang; // size=0, offset=88
  struct __skidinfo skidding; // size=2, offset=92
  struct __skidinfo wheelnoise; // size=2, offset=94
  struct __horninfo horn; // size=3, offset=96
  int car_sound_timer; // size=0, offset=100
  short revsvol; // size=0, offset=104
  short idlevol; // size=0, offset=106
  struct PEDESTRIAN *pPed; // size=92, offset=108
  int crash_timer; // size=0, offset=112
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct FELONY_DELAY {
  short current; // size=0, offset=0
  short maximum; // size=0, offset=2
};
struct FELONY_VALUE {
  short placid; // size=0, offset=0
  short angry; // size=0, offset=2
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};

// 101 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct _PLAYER PLAYER;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct FELONY_DELAY FELONY_DELAY;
typedef struct FELONY_VALUE FELONY_VALUE;
typedef struct __tunnelcoords tunnelcoords;
typedef struct CAR_POLY CAR_POLY;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 5 external declarations
extern long levelstartpos[8][4]; // offset 0x000a16d8
extern int numPlayersToCreate; // offset 0x000aa8c4
extern int lastCarCameraView; // offset 0x000aa8c0
extern int my_sly_var; // offset 0x000ab0d0
extern struct _PLAYER player[8]; // offset 0x000d9728

// 7 functions
/*
 * Offset 0x73334, from D:\driver2\game\C\PLAYERS.C (lines 130..180)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ ChangeCarPlayerToPed(int playerID /*$s0*/)
{ // line 1, offset 0x73334
  struct _CAR_DATA *lcp; // $s2
} // line 51, offset 0x7350c
/*
 * Offset 0x7350C, from D:\driver2\game\C\PLAYERS.C (lines 184..243)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ ChangePedPlayerToCar(int playerID /*$s4*/, struct _CAR_DATA *newCar /*$s2*/)
{ // line 1, offset 0x7350c
  struct _PLAYER *lPlayer; // $s1
  int siren; // $s5
  long *pos; // $s3
  int carParked; // $s6
} // line 60, offset 0x73898
/*
 * Offset 0x73898, from D:\driver2\game\C\PLAYERS.C (lines 247..285)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ UpdatePlayers()
{ // line 2, offset 0x73898
  struct _PLAYER *locPlayer; // $t0
  struct _CAR_DATA *cp; // $v1
} // line 39, offset 0x739d8
/*
 * Offset 0x739D8, from D:\driver2\game\C\PLAYERS.C (lines 75..126)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ InitPlayer(struct _PLAYER *locPlayer /*$s1*/, struct _CAR_DATA *cp /*$s2*/, char carCtrlType /*$s3*/, int direction /*$s6*/, long *startPos[4] /*stack 16*/, int externModel /*stack 20*/, int palette /*stack 24*/, char *padid /*stack 28*/, long *startPos[4] /*$s4*/, unsigned char externModel /*$s0*/, unsigned char palette /*$s5*/, char *padid /*$s7*/)
{ // line 1, offset 0x739d8
} // line 52, offset 0x73c0c
/*
 * Offset 0x73C0C, from D:\driver2\game\C\PLAYERS.C (lines 298..302)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ RequestSlightPauseBeforeCarSoundStarts(char player_id /*$a0*/)
{
}
/*
 * Offset 0x73C54, from D:\driver2\game\C\PLAYERS.C (lines 305..306)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ HaveCarSoundStraightAway(char player_id /*$a0*/)
{
}
/*
 * Offset 0x73C8C, from D:\driver2\game\C\PLAYERS.C (lines 310..311)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ MakeTheCarShutUp(char player_id /*$a0*/)
{
}
Source file(s) <none>, object file obj\poly.oBJ overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file <none> overlay id <none>

// 21 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct DENTUVS {
  char u3; // size=0, offset=0
};

// 39 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct DENTUVS DENTUVS;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];

// 0 labels

// 3 external declarations
extern int PolySizes[56]; // offset 0x000a1758
extern struct DENTUVS *gTempCarUVPtr; // offset 0x000ab0dc
extern int combointensity; // offset 0x000ab0d8

// 0 functions
Source file(s) D:\driver2\game\C\PRES.C+D:\driver2\game\PRES.C, object file obj\pres.OBJ overlay id <none>

// 51 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct OUT_FONTINFO {
  unsigned char x; // size=0, offset=0
  unsigned char y; // size=0, offset=1
  char offx; // size=0, offset=2
  char offy; // size=0, offset=3
  unsigned char width; // size=0, offset=4
  unsigned char height; // size=0, offset=5
  unsigned short pad; // size=0, offset=6
};
struct FONT_DIGIT {
  char xOffset; // size=0, offset=0
  char width; // size=0, offset=1
};

// 76 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct SPRT SPRT;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct TEX_INFO TEX_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct UV UV;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct OUT_FONTINFO OUT_FONTINFO;
typedef struct FONT_DIGIT FONT_DIGIT;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;

// 0 labels

// 9 external declarations
static struct FONT_DIGIT fontDigit[12]; // offset 0x000a1838
static char *button_names[11]; // offset 0x000a1850
extern short fonttpage; // offset 0x000ab0f0
extern short fontclutid; // offset 0x000ab0e4
extern struct RECT fontclutpos; // offset 0x000ab0e8
static struct CVECTOR gFontColour; // offset 0x000ab0e0
extern char AsciiTable[256]; // offset 0x000d9f68
extern struct OUT_FONTINFO fontinfo[128]; // offset 0x000d9b68
static struct TEXTURE_DETAILS button_textures[11]; // offset 0x000d9ac8

// 17 functions
/*
 * Offset 0x73CC8, from D:\driver2\game\C\PRES.C (lines 360..407)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ LoadFont(char *buffer /*$a0*/)
{ // line 1, offset 0x73cc8
  struct RECT dest; // stack offset -24
  char *file; // $s1
  int i; // $v1
  int nchars; // $s0
} // line 48, offset 0x73ea0
/*
 * Offset 0x73EA0, from D:\driver2\game\C\PRES.C (lines 457..535)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ PrintString(char *string /*$s3*/, int x /*$s2*/, int y /*$s6*/)
{ // line 1, offset 0x73ea0
  struct OUT_FONTINFO *pFontInfo; // $a1
  struct SPRT *font; // $s0
  unsigned char width; // $s1
  unsigned char c; // $s1
  int index; // $v1
} // line 79, offset 0x74140
/*
 * Offset 0x74140, from D:\driver2\game\C\PRES.C (lines 539..605)
 * Stack frame base $sp, size 8
 * Saved registers at offset -4: s0 s1
 */
short /*$ra*/ PrintDigit(int x /*$t3*/, int y /*$s1*/, char *string /*$a2*/)
{ // line 1, offset 0x74140
  struct FONT_DIGIT *pDigit; // $a1
  struct SPRT *font; // $t0
  char width; // $a3
  char fixedWidth; // $t1
  char vOff; // $t2
  char h; // $a0
  { // line 13, offset 0x74190
    char let; // $v1
    char convLet; // $a0
  } // line 44, offset 0x741f4
} // line 67, offset 0x74364
/*
 * Offset 0x74364, from D:\driver2\game\C\PRES.C (lines 643..710)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ PrintStringBoxed(char *string /*$s2*/, int ix /*$s5*/, int iy /*$a2*/)
{ // line 1, offset 0x74364
  struct OUT_FONTINFO *pFontInfo; // $a1
  struct SPRT *font; // $s0
  char word[32]; // stack offset -64
  char *wpt; // $t0
  char c; // $a0
  int x; // $s1
  int y; // $s3
  int index; // $a1
  int wordcount; // $s4
} // line 68, offset 0x745dc
/*
 * Offset 0x745DC, from D:\driver2\game\C\PRES.C (lines 726..793)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ PrintScaledString(int y /*$s4*/, char *string /*$s1*/, int scale /*$s2*/)
{ // line 1, offset 0x745dc
  struct FONT_DIGIT *pDigit; // $a2
  struct POLY_FT4 *font; // $t0
  int x; // $s0
  int width; // $t3
  int height; // $t6
  int y0; // $t1
  int x1; // $t5
  int y1; // $v0
  unsigned char vOff; // $t8
  char c; // $a0
} // line 68, offset 0x74858
/*
 * Offset 0x74858, from D:\driver2\game\C\PRES.C (lines 819..852)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void * /*$ra*/ DrawButton(unsigned char button /*$a0*/, void *prim /*$s1*/, int x /*$a2*/, int y /*$a3*/)
{ // line 1, offset 0x74858
  struct TEXTURE_DETAILS *btn; // $a1
  struct POLY_FT3 *null; // $s0
} // line 34, offset 0x74a10
/*
 * Offset 0x74A10, from D:\driver2\game\C\PRES.C (lines 228..231)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetTextColour(unsigned char Red /*$a0*/, unsigned char Green /*$a1*/, unsigned char Blue /*$a2*/)
{
}
/*
 * Offset 0x74A24, from D:\driver2\game\C\PRES.C (lines 245..268)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ StringWidth(char *pString /*$a0*/)
{ // line 1, offset 0x74a24
  int w; // $a2
  char let; // $a1
  { // line 11, offset 0x74a60
    char convLet; // $v1
  } // line 21, offset 0x74a98
} // line 24, offset 0x74ab0
/*
 * Offset 0x74AB0, from D:\driver2\game\C\PRES.C (lines 285..322)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ OutputString(char *pString /*$s2*/, int formatting /*$s0*/, int x /*$a2*/, int y /*$s3*/, int xw /*stack 16*/, int r /*stack 20*/, int g /*stack 24*/, int b /*stack 28*/, int xw /*$v1*/)
{ // line 1, offset 0x74ab0
  int xpos; // $s1
  { // line 17, offset 0x74b14
  } // line 17, offset 0x74b14
} // line 38, offset 0x74b8c
/*
 * Offset 0x74B8C, from D:\driver2\game\C\PRES.C (lines 333..336)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ PrintStringRightAligned(char *pString /*$s1*/, int x /*$s0*/, int y /*$s2*/)
{
}
/*
 * Offset 0x74BD8, from D:\driver2\game\C\PRES.C (lines 347..351)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ PrintStringCentred(char *pString /*$s1*/, short y /*$a1*/)
{ // line 1, offset 0x74bd8
} // line 5, offset 0x74c28
/*
 * Offset 0x74C28, from D:\driver2\game\C\PRES.C (lines 416..425)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ StoreClut2(unsigned long *pDest /*$a1*/, int x /*$a1*/, int y /*$a2*/)
{ // line 1, offset 0x74c28
  struct RECT rect; // stack offset -16
} // line 10, offset 0x74c64
/*
 * Offset 0x74C64, from D:\driver2\game\C\PRES.C (lines 434..454)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ SetCLUT16Flags(unsigned short clutID /*$a0*/, unsigned short mask /*$s2*/, char transparent /*$s0*/)
{ // line 1, offset 0x74c64
  unsigned short buffer[16]; // stack offset -56
  unsigned short *pCurrent; // $a0
  char ctr; // $a1
  int x; // $s3
  int y; // $s1
} // line 21, offset 0x74d34
/*
 * Offset 0x74D34, from D:\driver2\game\C\PRES.C (lines 612..614)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ PrintStringFeature(char *string /*$a0*/, int x /*$a1*/, int y /*$a2*/, int w /*$a3*/, int h /*stack 16*/, int transparent /*stack 20*/)
{
}
/*
 * Offset 0x74D54, from D:\driver2\game\C\PRES.C (lines 800..816)
 * Stack frame base $sp, size 0
 */
char * /*$ra*/ GetNextWord(char *string /*$a0*/, char *word /*$a1*/)
{ // line 1, offset 0x74d54
  char c; // $v1
} // line 17, offset 0x74d94
/*
 * Offset 0x74D94, from D:\driver2\game\C\PRES.C (lines 855..870)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void * /*$ra*/ SetFontTPage(void *prim /*$a0*/)
{ // line 1, offset 0x74d94
  struct POLY_FT3 *null; // $s0
} // line 16, offset 0x74e54
/*
 * Offset 0x74E54, from D:\driver2\game\C\PRES.C (lines 713..718)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitButtonTextures()
{ // line 2, offset 0x74e54
  int i; // $s0
} // line 6, offset 0x74eb4
Source file(s) D:\driver2\game\C\ROADBITS.C, object file obj\roadbits.OBJ overlay id <none>

// 25 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct ROAD_MAP_LUMP_DATA {
  int width; // size=0, offset=0
  int height; // size=0, offset=4
  int unitXMid; // size=0, offset=8
  int unitZMid; // size=0, offset=12
};
struct ROUTE_DATA {
  short type; // size=0, offset=0
  short height; // size=0, offset=2
  short objectAngle; // size=0, offset=4
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};

// 43 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct ROAD_MAP_LUMP_DATA ROAD_MAP_LUMP_DATA;
typedef struct ROUTE_DATA ROUTE_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];

// 0 labels

// 5 external declarations
extern char JunctionLightsNS; // offset 0x000ab0f9
extern char JunctionLightsWE; // offset 0x000ab0f8
extern struct ROAD_MAP_LUMP_DATA roadMapLumpData; // offset 0x000da088
extern int RoadMapRegions[4]; // offset 0x000da078
extern short *RoadMapDataRegions[4]; // offset 0x000da068

// 1 functions
/*
 * Offset 0x74EB4, from D:\driver2\game\C\ROADBITS.C (lines 147..153)
 * Stack frame base $sp, size 0
 */
char /*$ra*/ ROADS_GetRouteData(int x /*$a0*/, int z /*$a1*/, struct ROUTE_DATA *pRouteData /*$a2*/)
{
}
Source file(s) D:\driver2\game\C\SCORES.C+D:\driver2\game\SCORES.C, object file obj\scores.obj overlay id <none>

// 61 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct PLAYER_SCORE {
  int time; // size=0, offset=0
  int P2time; // size=0, offset=4
  short items; // size=0, offset=8
  short P2items; // size=0, offset=10
  char name[6]; // size=6, offset=12
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 83 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct _CAR_DATA CAR_DATA;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct MAPPING MAPPING;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct PLAYER_SCORE PLAYER_SCORE;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;

// 0 labels

// 2 external declarations
extern struct SCORE_TABLES ScoreTables; // offset 0x000da098
extern struct PLAYER_SCORE gPlayerScore; // offset 0x000da908

// 8 functions
/*
 * Offset 0x74EC0, from D:\driver2\game\C\SCORES.C (lines 58..83)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ InitialiseScoreTables()
{ // line 2, offset 0x74ec0
  int i; // $s3
  int j; // $s1
} // line 26, offset 0x7503c
/*
 * Offset 0x7503C, from D:\driver2\game\C\SCORES.C (lines 86..125)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ OnScoreTable(struct SCORE_ENTRY **tablept /*$s1*/)
{ // line 1, offset 0x7503c
  struct SCORE_ENTRY *table; // $s0
  int position; // $v0
} // line 40, offset 0x751f8
/*
 * Offset 0x751F8, from D:\driver2\game\C\SCORES.C (lines 133..148)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ AddScoreToTable(struct SCORE_ENTRY *table /*$a2*/, int entry /*$a1*/)
{ // line 1, offset 0x751f8
  int i; // $a3
} // line 16, offset 0x7526c
/*
 * Offset 0x7526C, from D:\driver2\game\C\SCORES.C (lines 162..177)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CheckGetawayPlacing(struct SCORE_ENTRY *table /*$a0*/)
{ // line 1, offset 0x7526c
  int i; // $v1
} // line 16, offset 0x752bc
/*
 * Offset 0x752BC, from D:\driver2\game\C\SCORES.C (lines 188..208)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CheckTrailblazerPlacing(struct SCORE_ENTRY *table /*$a0*/)
{ // line 1, offset 0x752bc
  int i; // $a2
} // line 21, offset 0x75338
/*
 * Offset 0x75338, from D:\driver2\game\C\SCORES.C (lines 218..233)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CheckCheckpointPlacing(struct SCORE_ENTRY *table /*$a0*/)
{ // line 1, offset 0x75338
  int i; // $v1
} // line 16, offset 0x75388
/*
 * Offset 0x75388, from D:\driver2\game\C\SCORES.C (lines 243..258)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CheckSurvivalPlacing(struct SCORE_ENTRY *table /*$a0*/)
{ // line 1, offset 0x75388
  int i; // $v1
} // line 16, offset 0x753d8
/*
 * Offset 0x753D8, from D:\driver2\game\C\SCORES.C (lines 261..271)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ResetTable(struct SCORE_ENTRY *table /*$a0*/)
{ // line 1, offset 0x753d8
  int i; // $v1
} // line 11, offset 0x75408
Source file(s) D:\driver2\game\C\SHADOW.C+D:\driver2\game\SHADOW.C, object file obj\shadow.OBJ overlay id <none>

// 67 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct POLY_G4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char r3; // size=0, offset=28
  unsigned char g3; // size=0, offset=29
  unsigned char b3; // size=0, offset=30
  unsigned char pad3; // size=0, offset=31
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct TEXINF {
  unsigned short id; // size=0, offset=0
  unsigned short nameoffset; // size=0, offset=2
  unsigned char x; // size=0, offset=4
  unsigned char y; // size=0, offset=5
  unsigned char width; // size=0, offset=6
  unsigned char height; // size=0, offset=7
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct POLYFT4 {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char spare; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO uv3; // size=2, offset=14
  struct RGB color; // size=4, offset=16
};
struct POLYFT4LIT {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char spare; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO uv3; // size=2, offset=14
  struct RGB color; // size=4, offset=16
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TPAN {
  unsigned char texture_page; // size=0, offset=0
  unsigned char texture_number; // size=0, offset=1
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct ROUTE_DATA {
  short type; // size=0, offset=0
  short height; // size=0, offset=2
  short objectAngle; // size=0, offset=4
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct SHADOWHDR {
  unsigned long num_common_verts; // size=0, offset=0
  unsigned short num_verts_total; // size=0, offset=4
  unsigned short num_polys_total; // size=0, offset=6
  unsigned short vert_offsets[4]; // size=8, offset=8
  unsigned short nverts[4]; // size=8, offset=16
  unsigned short npolys[4]; // size=8, offset=24
  unsigned long *poly_block[4]; // size=16, offset=32
  struct SVECTOR *vertices; // size=8, offset=48
};
struct _sdPlane {
  short surface; // size=0, offset=0
  short a; // size=0, offset=2
  short b; // size=0, offset=4
  short c; // size=0, offset=6
  int d; // size=0, offset=8
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct TYRE_TRACK {
  char type; // size=0, offset=0
  char shade; // size=0, offset=1
  char shade_type; // size=0, offset=2
  char surface; // size=0, offset=3
  struct SVECTOR_NOPAD p1; // size=6, offset=4
  struct SVECTOR_NOPAD p2; // size=6, offset=10
  struct SVECTOR_NOPAD p3; // size=6, offset=16
  struct SVECTOR_NOPAD p4; // size=6, offset=22
};
struct S_XYZ {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short z; // size=0, offset=4
};

// 88 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F3 POLY_F3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct POLY_G4 POLY_G4;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct TEXINF TEXINF;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct POLYFT4 POLYFT4;
typedef struct POLYFT4LIT POLYFT4LIT;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_POLY CAR_POLY;
typedef struct UV UV;
typedef struct TPAN TPAN;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct ROUTE_DATA ROUTE_DATA;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct SHADOWHDR SHADOWHDR;
typedef struct _sdPlane sdPlane;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct TYRE_TRACK TYRE_TRACK;
typedef struct S_XYZ S_XYZ;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 30 external declarations
extern struct VECTOR dummy; // offset 0x000a187c
extern struct VECTOR frustpos; // offset 0x000a188c
extern struct MATRIX tempmatrix; // offset 0x000a189c
extern int *idx; // offset 0x000aa900
extern struct SVECTOR *rotated; // offset 0x000aa904
extern struct S_XYZ *distance; // offset 0x000aa908
extern struct VECTOR *pos; // offset 0x000aa90c
extern struct DVECTOR *outvertices; // offset 0x000aa910
extern unsigned long *outcoords; // offset 0x000aa914
extern int gShadowTexturePage; // offset 0x000ab110
extern int gShadowTextureNum; // offset 0x000ab10c
extern struct UV shadowuv; // offset 0x000ab118
extern struct SHADOWHDR *shadow_header; // offset 0x000ab114
extern unsigned short edgecount; // offset 0x000ab120
extern unsigned short nextindex; // offset 0x000ab122
static int numcv; // offset 0x000ab100
static int lastcv; // offset 0x000ab104
extern struct POLY_F3 *spolys; // offset 0x000ab108
extern int smoke_count[4]; // offset 0x000db020
extern struct POLYFT4 ShadowPolygon; // offset 0x000dcc60
extern struct VECTOR tyre_save_positions[4]; // offset 0x000da990
extern struct VECTOR tyre_new_positions[4]; // offset 0x000dd078
extern int num_tyre_tracks[4]; // offset 0x000da9d0
extern int tyre_track_offset[4]; // offset 0x000dcc30
extern struct TYRE_TRACK track_buffer[4][64]; // offset 0x000db030
extern struct POLY_FT4 shadowPolys[2][20]; // offset 0x000da9e0
extern unsigned short edgelist[16]; // offset 0x000dcc40
extern struct VECTOR direction; // offset 0x000dd0b8
static struct SVECTOR cv[12]; // offset 0x000da930
extern struct SVECTOR camverts[128]; // offset 0x000dcc78

// 11 functions
/*
 * Offset 0x75408, from D:\driver2\game\C\SHADOW.C (lines 272..297)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ GetTyreTrackPositions(struct _CAR_DATA *cp /*$s3*/, int player_id /*$s7*/)
{ // line 1, offset 0x75408
  struct CAR_COSMETICS *car_cos; // $s4
  struct VECTOR WheelPos; // stack offset -88
  struct VECTOR target_pos; // stack offset -72
  struct VECTOR normal; // stack offset -56
  int loop; // $s2
  { // line 11, offset 0x75458
  } // line 16, offset 0x75480
} // line 26, offset 0x75540
/*
 * Offset 0x75540, from D:\driver2\game\C\SHADOW.C (lines 330..505)
 * Stack frame base $sp, size 200
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ AddTyreTrack(int wheel /*$s2*/, int tracksAndSmoke /*$s6*/, int padid /*$s0*/)
{ // line 1, offset 0x75540
  struct VECTOR New1; // stack offset -168
  struct VECTOR New2; // stack offset -152
  struct VECTOR New3; // stack offset -136
  struct VECTOR New4; // stack offset -120
  struct VECTOR *old; // $s5
  struct VECTOR *new; // $s3
  struct TYRE_TRACK *tt_p; // $s1
  int x; // $v1
  int z; // $a1
  int c; // $t1
  int s; // $t0
  unsigned int index; // $a2
  static int Cont[4]; // offset 0x0
  struct VECTOR psxoffset; // stack offset -104
  struct VECTOR SmokeDrift; // stack offset -88
  struct VECTOR SmokePosition; // stack offset -72
  char trackSurface; // $s0
  { // line 34, offset 0x75610
    struct ROUTE_DATA routeData; // stack offset -56
    struct _sdPlane *SurfaceDataPtr; // $v0
  } // line 69, offset 0x7569c
  { // line 74, offset 0x756a8
  } // line 81, offset 0x756d0
  { // line 91, offset 0x7572c
    struct VECTOR grass_vector; // stack offset -48
  } // line 91, offset 0x7572c
} // line 176, offset 0x759b8
/*
 * Offset 0x759E0, from D:\driver2\game\C\SHADOW.C (lines 517..644)
 * Stack frame base $sp, size 136
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6
 */
void /*$ra*/ DrawTyreTracks()
{ // line 2, offset 0x759e0
  struct VECTOR p[4]; // stack offset -136
  struct SVECTOR ps[4]; // stack offset -72
  struct TYRE_TRACK *tt_p; // $t0
  int z; // stack offset -40
  int temp; // $a2
  int loop; // $t7
  int wheel_loop; // $s0
  int index; // $t2
  char last_duff; // $s1
  struct POLY_FT4 *poly; // $a3
  struct POLY_FT4 *lasttyre; // $t8
} // line 128, offset 0x75f34
/*
 * Offset 0x75F34, from D:\driver2\game\C\SHADOW.C (lines 659..696)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ InitShadow()
{ // line 2, offset 0x75f34
  struct TPAN pos; // stack offset -16
  struct TEXINF *texinf; // $v0
  int i; // $a2
  int j; // $a3
  { // line 23, offset 0x76090
  } // line 25, offset 0x76090
} // line 38, offset 0x76108
/*
 * Offset 0x76108, from D:\driver2\game\C\SHADOW.C (lines 717..860)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SubdivShadow(long z0 /*$t7*/, long z1 /*$t9*/, long z2 /*$t8*/, long z3 /*$t6*/, struct POLY_FT4 *sps /*stack 16*/, struct POLY_FT4 *sps /*$t5*/)
{ // line 1, offset 0x76108
  struct POLY_FT4 *spd; // $t3
  int i; // $t4
  { // line 18, offset 0x761b8
    unsigned long A0; // $v1
    unsigned long A1; // $a1
    unsigned long E0; // $a3
    unsigned long E1; // $t0
    unsigned long C0; // $a0
    unsigned long C1; // $a2
    unsigned long B0; // $v1
    unsigned long B1; // $a1
    unsigned long D0; // $a0
    unsigned long D1; // $a2
  } // line 18, offset 0x761b8
  { // line 18, offset 0x761b8
    unsigned long A0; // $a1
    unsigned long A1; // $a2
    unsigned long E0; // $a3
    unsigned long E1; // $t0
    unsigned long C0; // $a0
    unsigned long C1; // $v1
    unsigned long B0; // $a1
    unsigned long B1; // $a2
    unsigned long D0; // $a0
    unsigned long D1; // $v1
  } // line 18, offset 0x761b8
} // line 144, offset 0x766cc
/*
 * Offset 0x766CC, from D:\driver2\game\C\SHADOW.C (lines 864..932)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ PlaceShadowForCar(struct VECTOR *shadowPoints /*$t0*/, int slot /*$s0*/, struct VECTOR *CarPos /*$a2*/, int zclip /*$a3*/)
{ // line 1, offset 0x766cc
  struct SVECTOR points[4]; // stack offset -64
  long z; // $a0
  long z0; // stack offset -32
  long z1; // stack offset -28
  long z2; // stack offset -24
  long z3; // stack offset -20
  struct POLY_FT4 *spt; // $a3
} // line 69, offset 0x76a40
/*
 * Offset 0x76A40, from D:\driver2\game\C\SHADOW.C (lines 1038..1078)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ clipAgainstZ()
{ // line 2, offset 0x76a40
  int srccount; // $t4
  int dstcount; // $t5
  struct SVECTOR *current; // $t2
  struct SVECTOR *previous; // $t1
  struct SVECTOR *dst; // $a3
  int flags; // $t3
  { // line 19, offset 0x76ac0
    int q; // $a2
  } // line 19, offset 0x76ac0
  { // line 25, offset 0x76bb8
    int q; // $a2
  } // line 25, offset 0x76bb8
} // line 41, offset 0x76cd4
/*
 * Offset 0x76CD4, from D:\driver2\game\C\SHADOW.C (lines 1081..1155)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ clippedPoly()
{ // line 2, offset 0x76cd4
  int i; // $a3
  int j; // $t0
  int z1; // $v1
  struct POLY_G3 *pg3; // $s0
  int z[3]; // stack offset -24
} // line 75, offset 0x77128
/*
 * Offset 0x77138, from D:\driver2\game\C\SHADOW.C (lines 1160..1221)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ sQuad(struct SVECTOR *v0 /*$a0*/, struct SVECTOR *v1 /*$s5*/, struct SVECTOR *v2 /*$s6*/, struct SVECTOR *v3 /*$s4*/)
{ // line 1, offset 0x77138
  int z1; // $v0
  int z[4]; // stack offset -48
  { // line 8, offset 0x771b4
    struct POLY_G4 *pf4; // $t2
  } // line 30, offset 0x772b4
} // line 62, offset 0x77524
/*
 * Offset 0x77524, from D:\driver2\game\C\SHADOW.C (lines 253..261)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitTyreTracks()
{ // line 2, offset 0x77524
  int loop; // $a0
} // line 9, offset 0x77558
/*
 * Offset 0x77558, from D:\driver2\game\C\SHADOW.C (lines 306..308)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetTyreTrackOldPositions(int player_id /*$a0*/)
{
}
Source file(s) D:\driver2\game\C\SKY.C+D:\driver2\game\SKY.C, object file obj\sky.OBJ overlay id <none>

// 76 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct DR_MOVE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[5]; // size=20, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct POLYFT4 {
  unsigned char id; // size=0, offset=0
  unsigned char texture_set; // size=0, offset=1
  unsigned char texture_id; // size=0, offset=2
  unsigned char spare; // size=0, offset=3
  unsigned char v0; // size=0, offset=4
  unsigned char v1; // size=0, offset=5
  unsigned char v2; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
  struct UV_INFO uv0; // size=2, offset=8
  struct UV_INFO uv1; // size=2, offset=10
  struct UV_INFO uv2; // size=2, offset=12
  struct UV_INFO uv3; // size=2, offset=14
  struct RGB color; // size=4, offset=16
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct FLAREREC {
  struct RGB16 transparency; // size=8, offset=0
  char size; // size=0, offset=8
  short gapmod; // size=0, offset=10
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};

// 108 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct DR_MOVE DR_MOVE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct POLYFT4 POLYFT4;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct UV UV;
typedef struct _CAR_DATA CAR_DATA;
typedef struct RGB16 RGB16;
typedef struct FLAREREC FLAREREC;
typedef struct BVECTOR BVECTOR;
typedef struct MAPPING MAPPING;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();

// 0 labels

// 19 external declarations
extern struct SVECTOR sun_position[4]; // offset 0x000a1924
extern struct SVECTOR moon_position[4]; // offset 0x000a1944
static int sky_y_offset[4]; // offset 0x000a18dc
static unsigned char HorizonLookup[4][4]; // offset 0x000a18ec
static unsigned char HorizonTextures[40]; // offset 0x000a18fc
static struct SVECTOR moon_shadow_position[4]; // offset 0x000a1964
static struct FLAREREC flare_info[8]; // offset 0x000a1984
extern int tunnelDir[3][2]; // offset 0x000a19e4
extern struct VECTOR tunnelPos[3][2]; // offset 0x000a19fc
extern int gTunnelNum; // offset 0x000aa930
extern int gDrawLowerSky; // offset 0x000aa924
static long skyred; // offset 0x000aa918
static long skygreen; // offset 0x000aa91c
static long skyblue; // offset 0x000aa920
static int skycolour; // offset 0x000ab12c
extern int skyFade; // offset 0x000ab130
static short skytpage[28]; // offset 0x000dd208
static short skyclut[28]; // offset 0x000dd248
static struct UV skytexuv[28]; // offset 0x000dd288

// 9 functions
/*
 * Offset 0x775C8, from D:\driver2\game\C\SKY.C (lines 145..318)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ LoadSky()
{ // line 2, offset 0x775c8
  struct RECT rect; // stack offset -96
  char name[16]; // stack offset -88
  int x; // $s6
  int y; // $a1
  int i; // $t1
  int u; // $v1
  int v; // $s2
  int skynum; // $a2
  int offset; // stack offset -72
  { // line 11, offset 0x77608
    int flipped; // $t0
    int single; // $s5
    int ry; // $a2
  } // line 113, offset 0x777d0
} // line 174, offset 0x7795c
/*
 * Offset 0x7795C, from D:\driver2\game\C\SKY.C (lines 327..340)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DrawSkyDome()
{
}
/*
 * Offset 0x77A8C, from D:\driver2\game\C\SKY.C (lines 351..517)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DrawLensFlare()
{ // line 2, offset 0x77a8c
  static char last_attempt_failed; // offset 0x0
  static short buffer[160]; // offset 0x0
  struct DVECTOR sun_pers_conv_position; // stack offset -64
  struct RECT source; // stack offset -56
  struct DR_MOVE *sample_sun; // $s0
  int distance_to_sun; // $s0
  int xpos; // $t1
  int ypos; // $v0
  int xgap; // $s4
  int ygap; // $s2
  int flarez; // stack offset -40
  int shade; // $t4
  int sun_intensity; // $s3
  struct POLY_FT4 *polys; // $a1
  struct CVECTOR col; // stack offset -48
  int r; // $a2
  int g; // $a3
  int b; // $a0
  { // line 36, offset 0x77b58
    int bufferX; // $a0
    int bufferY; // $v1
    unsigned short *pwBuffer; // $s0
  } // line 54, offset 0x77bc0
  { // line 95, offset 0x77d34
    int temp; // $v0
    { // line 107, offset 0x77dd0
      struct FLAREREC *pFlareInfo; // $t3
      int flaresize; // $t0
    } // line 144, offset 0x77fac
  } // line 145, offset 0x77fac
} // line 167, offset 0x78098
/*
 * Offset 0x780BC, from D:\driver2\game\C\SKY.C (lines 527..599)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 s3
 */
void /*$ra*/ DisplaySun(struct DVECTOR *pos /*$a0*/, struct CVECTOR *col /*$a1*/, int flare_col /*$a2*/)
{ // line 1, offset 0x780bc
  struct POLY_FT4 *polys; // $a1
  struct POLY_FT3 *null; // $a3
  struct VECTOR output; // stack offset -32
  int width; // $t5
  int height; // $t4
} // line 73, offset 0x78544
/*
 * Offset 0x78544, from D:\driver2\game\C\SKY.C (lines 609..648)
 * Stack frame base $sp, size 16
 */
void /*$ra*/ DisplayMoon(struct DVECTOR *pos /*$t4*/, struct CVECTOR *col /*$t6*/, int flip /*$a2*/)
{ // line 1, offset 0x78544
  struct POLY_FT3 *null; // $a0
  struct VECTOR output; // stack offset -16
  int width; // $t5
  int height; // $t3
} // line 40, offset 0x787b0
/*
 * Offset 0x787B0, from D:\driver2\game\C\SKY.C (lines 679..776)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ TunnelSkyFade()
{ // line 2, offset 0x787b0
  int tun; // $a3
  { // line 16, offset 0x787d8
    int diffX; // $v1
    int diffZ; // $v0
    int dX; // $v1
    int dZ; // $v0
    int len; // $a1
    struct VECTOR *v1; // $t1
    struct VECTOR *v2; // $t0
    { // line 46, offset 0x78874
      int l2; // $v1
    } // line 66, offset 0x788e8
  } // line 97, offset 0x7895c
} // line 98, offset 0x7895c
/*
 * Offset 0x78964, from D:\driver2\game\C\SKY.C (lines 785..842)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ calc_sky_brightness()
{
}
/*
 * Offset 0x78B18, from D:\driver2\game\C\SKY.C (lines 855..893)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ PlotSkyPoly(int skytexnum /*$t5*/, unsigned char r /*$a1*/, unsigned char g /*$a2*/, unsigned char b /*$a3*/, int offset /*stack 16*/, int offset /*$t4*/)
{ // line 1, offset 0x78b18
  struct POLYFT4 *src; // $t1
  struct DVECTOR *outpoints; // $t0
  struct POLY_FT4 *prims; // $t2
} // line 39, offset 0x78ebc
/*
 * Offset 0x78EC4, from D:\driver2\game\C\SKY.C (lines 896..944)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ PlotHorizonMDL(struct MODEL *model /*$s6*/, int horizontaboffset /*$a1*/)
{ // line 1, offset 0x78ec4
  struct SVECTOR *verts; // $v1
  char *polys; // $s1
  int i; // $s0
  int p; // stack offset -56
  int flag; // stack offset -52
  short *zbuff; // $t5
  int z; // stack offset -48
  unsigned char r; // $s5
  unsigned char g; // $s4
  unsigned char b; // $s3
} // line 49, offset 0x790b4
Source file(s) D:\driver2\game\C\SOUND.C+D:\driver2\game\SOUND.C, object file obj\sound.OBJ overlay id <none>

// 55 complex types
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuReverbAttr {
  unsigned long mask; // size=0, offset=0
  long mode; // size=0, offset=4
  struct SpuVolume depth; // size=4, offset=8
  long delay; // size=0, offset=12
  long feedback; // size=0, offset=16
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuCommonAttr {
  unsigned long mask; // size=0, offset=0
  struct SpuVolume mvol; // size=4, offset=4
  struct SpuVolume mvolmode; // size=4, offset=8
  struct SpuVolume mvolx; // size=4, offset=12
  struct SpuExtAttr cd; // size=12, offset=16
  struct SpuExtAttr ext; // size=12, offset=28
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct _PLAYER {
  long pos[4]; // size=16, offset=0
  int dir; // size=0, offset=16
  struct VECTOR *spoolXZ; // size=16, offset=20
  struct VECTOR cameraPos; // size=16, offset=24
  int cameraDist; // size=0, offset=40
  int maxCameraDist; // size=0, offset=44
  int cameraAngle; // size=0, offset=48
  int headPos; // size=0, offset=52
  int headTarget; // size=0, offset=56
  int viewChange; // size=0, offset=60
  char dying; // size=0, offset=64
  char upsideDown; // size=0, offset=65
  char onGrass; // size=0, offset=66
  char targetCarId; // size=0, offset=67
  char cameraView; // size=0, offset=68
  char headTimer; // size=0, offset=69
  char playerType; // size=0, offset=70
  char worldCentreCarId; // size=0, offset=71
  char playerCarId; // size=0, offset=72
  char cameraCarId; // size=0, offset=73
  char padid; // size=0, offset=74
  char car_is_sounding; // size=0, offset=75
  long camera_vel[3]; // size=12, offset=76
  int snd_cam_ang; // size=0, offset=88
  struct __skidinfo skidding; // size=2, offset=92
  struct __skidinfo wheelnoise; // size=2, offset=94
  struct __horninfo horn; // size=3, offset=96
  int car_sound_timer; // size=0, offset=100
  short revsvol; // size=0, offset=104
  short idlevol; // size=0, offset=106
  struct PEDESTRIAN *pPed; // size=92, offset=108
  int crash_timer; // size=0, offset=112
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct __LSBDinfo {
  int addr; // size=0, offset=0
  int memtop; // size=0, offset=4
  int count[7]; // size=28, offset=8
  int bnktop[7]; // size=28, offset=36
  int append; // size=0, offset=64
};
struct CHANNEL_DATA {
  struct SpuVoiceAttr attr; // size=64, offset=0
  unsigned char loop; // size=0, offset=64
  unsigned char locked; // size=0, offset=65
  unsigned short time; // size=0, offset=66
  long samplerate; // size=0, offset=68
  char player; // size=0, offset=72
  long srcvolume; // size=0, offset=76
  long volumeScale; // size=0, offset=80
  unsigned short srcpitch; // size=0, offset=84
  unsigned short dopplerScale; // size=0, offset=86
  long cameradist; // size=0, offset=88
  long lastcameradist; // size=0, offset=92
  struct VECTOR *srcposition; // size=16, offset=96
  struct VECTOR position; // size=16, offset=100
  long *srcvelocity; // size=0, offset=116
};
struct SAMPLE_DATA {
  unsigned long address; // size=0, offset=0
  unsigned long length; // size=0, offset=4
  unsigned long loop; // size=0, offset=8
  unsigned long samplerate; // size=0, offset=12
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct __pauseinfo {
  unsigned short pitch[16]; // size=32, offset=0
  unsigned short voll[16]; // size=32, offset=32
  unsigned short volr[16]; // size=32, offset=64
  unsigned short max; // size=0, offset=96
  unsigned short lev; // size=0, offset=98
};

// 85 typedefs
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuReverbAttr SpuReverbAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuCommonAttr SpuCommonAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct _PLAYER PLAYER;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct __LSBDinfo LSBDinfo;
typedef struct CHANNEL_DATA CHANNEL_DATA;
typedef struct SAMPLE_DATA SAMPLE_DATA;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct __tunnelcoords tunnelcoords;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct __pauseinfo pauseinfo;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 27 external declarations
extern long dummylong[3]; // offset 0x000a1a5c
extern int gSoundMode; // offset 0x000aa934
extern int gSurround; // offset 0x000aa938
extern int Song_ID; // offset 0x000aa954
extern int VABID; // offset 0x000aa958
extern int gMusicVolume; // offset 0x000aa95c
extern int gMasterVolume; // offset 0x000aa960
extern int gAllowMusic; // offset 0x000aa964
extern int gAllowSfx; // offset 0x000aa968
static long banksize[2]; // offset 0x000aa93c
static int sound_paused; // offset 0x000aa944
extern int music_paused; // offset 0x000aa948
static int master_volume; // offset 0x000aa94c
static int stop_sound_handler; // offset 0x000aa950
extern long bankaddr[2]; // offset 0x000ab148
extern char *music_address; // offset 0x000ab150
extern char *song_address; // offset 0x000ab13c
extern char camera_change; // offset 0x000ab140
extern char old_camera_change; // offset 0x000ab138
extern struct CHANNEL_DATA channels[16]; // offset 0x000de480
extern struct SAMPLE_DATA samples[7][35]; // offset 0x000dd520
static char banks[24]; // offset 0x000dd3b8
static unsigned long channel_lookup[16]; // offset 0x000dd3d8
static struct SpuCommonAttr sound_attr; // offset 0x000dd418
extern struct VECTOR lis_pos; // offset 0x000de470
static struct __pauseinfo pause; // offset 0x000dd448
static struct __pauseinfo musps; // offset 0x000dd4b8

// 41 functions
/*
 * Offset 0x790E4, from D:\driver2\game\C\SOUND.C (lines 114..160)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ InitSound()
{ // line 2, offset 0x790e4
  int ct; // $s0
} // line 47, offset 0x791d4
/*
 * Offset 0x791D4, from D:\driver2\game\C\SOUND.C (lines 163..177)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ClearChannelFields(int channel /*$a0*/)
{
}
/*
 * Offset 0x79250, from D:\driver2\game\C\SOUND.C (lines 187..221)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ ResetSound()
{ // line 2, offset 0x79250
  int ct; // $s0
} // line 35, offset 0x79330
/*
 * Offset 0x79330, from D:\driver2\game\C\SOUND.C (lines 399..442)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ CompleteSoundSetup(int channel /*$s2*/, int bank /*$s0*/, int sample /*$s5*/, int pitch /*$s1*/, int proximity /*stack 16*/)
{ // line 1, offset 0x79330
  long bpf; // $a1
  long rate; // $a1
} // line 44, offset 0x79504
/*
 * Offset 0x79504, from D:\driver2\game\C\SOUND.C (lines 450..469)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetChannelPitch(int channel /*$a0*/, int pitch /*$a1*/)
{ // line 1, offset 0x79504
  long rate; // $a0
} // line 20, offset 0x795b4
/*
 * Offset 0x795C4, from D:\driver2\game\C\SOUND.C (lines 501..526)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ComputeDoppler(struct CHANNEL_DATA *ch /*$s1*/)
{ // line 1, offset 0x795c4
  int dist; // $s0
  int seperationrate; // $v0
  struct _PLAYER *pl; // $s0
} // line 26, offset 0x79720
/*
 * Offset 0x79734, from D:\driver2\game\C\SOUND.C (lines 635..654)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PauseXM()
{ // line 1, offset 0x79734
  int fade; // $v1
} // line 20, offset 0x79794
/*
 * Offset 0x79794, from D:\driver2\game\C\SOUND.C (lines 657..680)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ PauseSFX()
{ // line 1, offset 0x79794
  int i; // $s1
  int fade; // $s3
} // line 24, offset 0x79958
/*
 * Offset 0x79958, from D:\driver2\game\C\SOUND.C (lines 698..716)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ UnPauseXM()
{ // line 1, offset 0x79958
  int fade; // $a1
} // line 19, offset 0x799b0
/*
 * Offset 0x799B0, from D:\driver2\game\C\SOUND.C (lines 720..741)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ UnPauseSFX()
{ // line 1, offset 0x799b0
  int i; // $s1
  int fade; // $s2
} // line 22, offset 0x79b38
/*
 * Offset 0x79B38, from D:\driver2\game\C\SOUND.C (lines 822..837)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SoundHandler()
{ // line 2, offset 0x79b38
  int ct; // $a0
  long off; // $a1
} // line 16, offset 0x79bbc
/*
 * Offset 0x79BCC, from D:\driver2\game\C\SOUND.C (lines 904..976)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ LoadSoundBankDynamic(char *address /*$s2*/, int length /*$s6*/, int dbank /*$a2*/)
{ // line 1, offset 0x79bcc
  static struct __LSBDinfo tabs; // offset 0x0
  int i; // $a3
  int num_samples; // $s1
  int slength; // $s0
} // line 73, offset 0x79e04
/*
 * Offset 0x79E04, from D:\driver2\game\C\SOUND.C (lines 1124..1155)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ GetFreeChannel()
{ // line 1, offset 0x79e04
  int ct; // $a0
  int least; // $s1
  int il; // $s0
  char status[24]; // stack offset -40
} // line 32, offset 0x79f38
/*
 * Offset 0x79F38, from D:\driver2\game\C\SOUND.C (lines 1163..1229)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ UpdateVolumeAttributesS(int channel /*$s2*/, int proximity /*$s5*/)
{ // line 1, offset 0x79f38
  int volume; // $s1
  int vol; // $a2
  long ang; // $s0
  long dist; // $s6
  int player_id; // $a3
  struct VECTOR *pos; // $s3
  struct VECTOR *cam_pos; // $s4
  int cam_ang; // $fp
  long damp; // $v1
  { // line 52, offset 0x7a1b4
  } // line 54, offset 0x7a200
} // line 67, offset 0x7a330
/*
 * Offset 0x7A360, from D:\driver2\game\C\SOUND.C (lines 1257..1294)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ CalculateVolume(int channel /*$a2*/)
{ // line 1, offset 0x7a360
  int volume; // $s0
  struct VECTOR *pp; // $a3
  { // line 9, offset 0x7a3f4
    int distance; // $v1
    { // line 14, offset 0x7a3f4
      struct VECTOR ofse; // stack offset -24
    } // line 17, offset 0x7a3f4
    { // line 29, offset 0x7a4ac
      int fade; // $a0
    } // line 34, offset 0x7a504
  } // line 36, offset 0x7a520
} // line 38, offset 0x7a534
/*
 * Offset 0x7A534, from D:\driver2\game\C\SOUND.C (lines 1326..1357)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ FESound(int sample /*$s0*/)
{ // line 1, offset 0x7a534
  long bpf; // $a1
  long rate; // $a1
  long pitch; // $s5
  int channel; // $s6
} // line 32, offset 0x7a6c0
/*
 * Offset 0x7A6C0, from D:\driver2\game\C\SOUND.C (lines 233..244)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetReverbState(int on /*$a0*/)
{
}
/*
 * Offset 0x7A704, from D:\driver2\game\C\SOUND.C (lines 253..263)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetReverbInGameState(int on /*$a0*/)
{ // line 1, offset 0x7a704
  long cl; // $a1
} // line 11, offset 0x7a75c
/*
 * Offset 0x7A75C, from D:\driver2\game\C\SOUND.C (lines 274..280)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ SetReverbChannelState(int ch /*$a0*/, int on /*$s0*/)
{ // line 1, offset 0x7a75c
  long cl; // $s1
  int prev; // $s2
} // line 7, offset 0x7a7b0
/*
 * Offset 0x7A7B0, from D:\driver2\game\C\SOUND.C (lines 288..296)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetMasterVolume(int vol /*$a0*/)
{
}
/*
 * Offset 0x7A7F8, from D:\driver2\game\C\SOUND.C (lines 323..329)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ StartSound(int channel /*$a0*/, int bank /*$s1*/, int sample /*$s2*/, int volume /*$s0*/, int pitch /*stack 16*/)
{
}
/*
 * Offset 0x7A894, from D:\driver2\game\C\SOUND.C (lines 357..370)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ Start3DSoundVolPitch(int channel /*$s1*/, int bank /*$s0*/, int sample /*$s4*/, int x /*$s3*/, int y /*stack 16*/, int z /*stack 20*/, int volume /*stack 24*/, int pitch /*stack 28*/, int y /*$v0*/, int z /*$v0*/, int volume /*$v0*/, int pitch /*$s2*/)
{
}
/*
 * Offset 0x7A994, from D:\driver2\game\C\SOUND.C (lines 342..353)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ Start3DTrackingSound(int channel /*$s1*/, int bank /*$s0*/, int sample /*$s3*/, struct VECTOR *position /*$s2*/, long *velocity /*stack 16*/, long *velocity /*$v1*/)
{
}
/*
 * Offset 0x7AA78, from D:\driver2\game\C\SOUND.C (lines 477..494)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ SetChannelVolume(int channel /*$s0*/, int volume /*$t1*/, int proximity /*$a2*/)
{ // line 1, offset 0x7aa78
} // line 18, offset 0x7ab24
/*
 * Offset 0x7AB3C, from D:\driver2\game\C\SOUND.C (lines 1303..1318)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ AllocateReverb(long mode /*$s1*/, long depth /*$s0*/)
{ // line 1, offset 0x7ab3c
  struct SpuReverbAttr r_attr; // stack offset -40
} // line 16, offset 0x7ab94
/*
 * Offset 0x7ABA8, from D:\driver2\game\C\SOUND.C (lines 307..311)
 * Stack frame base $sp, size 0
 */
char /*$ra*/ SetPlayerOwnsChannel(int chan /*$a0*/, char player /*$a1*/)
{ // line 1, offset 0x7aba8
} // line 5, offset 0x7abcc
/*
 * Offset 0x7ABCC, from D:\driver2\game\C\SOUND.C (lines 588..611)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ SetChannelPosition3(int channel /*$s1*/, struct VECTOR *position /*$a0*/, long *velocity /*$t0*/, int volume /*$t2*/, int pitch /*stack 16*/, int proximity /*stack 20*/)
{ // line 1, offset 0x7abcc
} // line 24, offset 0x7acc0
/*
 * Offset 0x7ACD8, from D:\driver2\game\C\SOUND.C (lines 683..688)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PauseSound()
{
}
/*
 * Offset 0x7AD10, from D:\driver2\game\C\SOUND.C (lines 744..752)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ UnPauseSound()
{ // line 1, offset 0x7ad10
} // line 9, offset 0x7ad40
/*
 * Offset 0x7AD40, from D:\driver2\game\C\SOUND.C (lines 760..772)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ StopChannel(int channel /*$s2*/)
{ // line 1, offset 0x7ad40
  { // line 3, offset 0x7ad64
    unsigned char l; // $s3
    int vsync; // $s0
  } // line 11, offset 0x7add8
} // line 13, offset 0x7adf4
/*
 * Offset 0x7ADF4, from D:\driver2\game\C\SOUND.C (lines 780..789)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ StopAllChannels()
{ // line 2, offset 0x7adf4
  int ct; // $s0
} // line 10, offset 0x7ae34
/*
 * Offset 0x7AE34, from D:\driver2\game\C\SOUND.C (lines 797..802)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ LockChannel(int channel /*$a0*/)
{
}
/*
 * Offset 0x7AE64, from D:\driver2\game\C\SOUND.C (lines 811..811)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ UnlockChannel(int c /*$a0*/)
{
}
/*
 * Offset 0x7AE90, from D:\driver2\game\C\SOUND.C (lines 845..875)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ LoadSoundBank(char *address /*$s3*/, int length /*$s2*/, int bank /*$s1*/)
{ // line 1, offset 0x7ae90
  int num_samples; // $s4
  int slength; // $s2
  int spuaddress; // $s1
  int ct; // $v1
} // line 31, offset 0x7af84
/*
 * Offset 0x7AF84, from D:\driver2\game\C\SOUND.C (lines 993..1002)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ FreeXM()
{
}
/*
 * Offset 0x7AFD0, from D:\driver2\game\C\SOUND.C (lines 1012..1027)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ StartXM(int reverb /*$s2*/)
{ // line 1, offset 0x7afd0
  int ct; // $s0
} // line 16, offset 0x7b050
/*
 * Offset 0x7B050, from D:\driver2\game\C\SOUND.C (lines 1035..1037)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ StopXM()
{
}
/*
 * Offset 0x7B074, from D:\driver2\game\C\SOUND.C (lines 1073..1084)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetXMVolume(int volume /*$a0*/)
{ // line 1, offset 0x7b074
  int vol; // $a1
} // line 12, offset 0x7b0c4
/*
 * Offset 0x7B0C4, from D:\driver2\game\C\SOUND.C (lines 1232..1248)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ UpdateVolumeAttributesM(int channel /*$s0*/)
{ // line 1, offset 0x7b0c4
  int volume; // $a1
  int vol; // $a0
} // line 17, offset 0x7b178
/*
 * Offset 0x7B178, from D:\driver2\game\C\SOUND.C (lines 1371..1380)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ VsyncProc()
{
}
/*
 * Offset 0x7B1C4, from D:\driver2\game\C\SOUND.C (lines 882..887)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ UpdateXMSamples(int num_samps /*$s2*/)
{ // line 1, offset 0x7b1c4
  int i; // $s0
} // line 6, offset 0x7b228
Source file(s) D:\driver2\game\C\SPOOL.C+D:\driver2\game\SPOOL.C, object file obj\spool.OBJ overlay id <none>

// 70 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct SPOOLQ {
  unsigned char type; // size=0, offset=0
  unsigned char data; // size=0, offset=1
  unsigned short nsectors; // size=0, offset=2
  unsigned long sector; // size=0, offset=4
  char *addr; // size=0, offset=8
  void *func(); // size=0, offset=12
};
struct SPL_REGIONINFO {
  unsigned short region_to_unpack; // size=0, offset=0
  unsigned short target_barrel_region; // size=0, offset=2
  int nsectors; // size=0, offset=4
  char *cell_addr; // size=0, offset=8
  char *roadm_addr; // size=0, offset=12
};
struct Spool {
  unsigned short offset; // size=0, offset=0
  unsigned char connected_areas[2]; // size=2, offset=2
  unsigned char pvs_size; // size=0, offset=4
  unsigned char cell_data_size[3]; // size=3, offset=5
  unsigned char super_region; // size=0, offset=8
  unsigned char num_connected_areas; // size=0, offset=9
  unsigned char roadm_size; // size=0, offset=10
  unsigned char roadh_size; // size=0, offset=11
};
struct AreaDataStr {
  unsigned short gfx_offset; // size=0, offset=0
  unsigned short model_offset; // size=0, offset=2
  unsigned short music_offset; // size=0, offset=4
  unsigned short ambient_offset; // size=0, offset=6
  unsigned char model_size; // size=0, offset=8
  unsigned char pad; // size=0, offset=9
  unsigned char num_tpages; // size=0, offset=10
  unsigned char ambient_size; // size=0, offset=11
  unsigned char music_size; // size=0, offset=12
  unsigned char music_samples_size; // size=0, offset=13
  unsigned char music_id; // size=0, offset=14
  unsigned char ambient_id; // size=0, offset=15
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct AREA_LOAD_INFO {
  int xoffset; // size=0, offset=0
  int zoffset; // size=0, offset=4
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct TEX_INFO {
  char name[8]; // size=8, offset=0
  char tset; // size=0, offset=8
  char u; // size=0, offset=9
  char v; // size=0, offset=10
  char w; // size=0, offset=11
  char h; // size=0, offset=12
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct TEXTURE_LOOKUP {
  struct TEX_INFO *Damage[6]; // size=24, offset=0
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};

// 104 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT4 POLY_FT4;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct SPOOLQ SPOOLQ;
typedef struct SPL_REGIONINFO SPL_REGIONINFO;
typedef struct Spool Spool;
typedef struct AreaDataStr AreaDataStr;
typedef struct GAP_INFO GAP_INFO;
typedef struct UV UV;
typedef struct AREA_LOAD_INFO AREA_LOAD_INFO;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct TEX_INFO TEX_INFO;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct _CAR_DATA CAR_DATA;
typedef struct TEXTURE_LOOKUP TEXTURE_LOOKUP;
typedef struct CAR_POLY CAR_POLY;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned char DAMAGEZONEVERTS[5][6][50];
typedef unsigned char HDDAMAGEZONEPOLYS[5][6][70];
typedef char HDDAMAGELEVELS[5][255];
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;

// 0 labels

// 85 external declarations
static int pvsSize[4]; // offset 0x000a1a68
extern int SpecialByRegion[4][20]; // offset 0x000a1a78
extern int spoolpos_writing; // offset 0x000aa974
extern int doSpooling; // offset 0x000aa980
extern int LoadingArea; // offset 0x000aa96c
extern int spoolpos_reading; // offset 0x000aa970
extern int type; // offset 0x000aa978
extern int music_is_loading; // offset 0x000aa97c
extern int error_bounds; // offset 0x000aa984
extern int times; // offset 0x000aa988
extern int specialState; // offset 0x000aa98c
extern int specBlocksToLoad; // offset 0x000aa990
extern char *packed_cell_pointers; // offset 0x000ab1b0
extern int LoadedArea; // offset 0x000ab240
extern int spoolactive; // offset 0x000ab1c8
extern int spoolpos; // offset 0x000ab218
extern int spoolcounter; // offset 0x000ab1f8
extern short loading_region[4]; // offset 0x000ab248
extern int spool_regionpos; // offset 0x000ab1b8
extern int spool_regioncounter; // offset 0x000ab1a0
extern unsigned short *spoolinfo_offsets; // offset 0x000ab1fc
extern char *RegionSpoolInfo; // offset 0x000ab198
extern char *model_spool_buffer; // offset 0x000ab21c
extern int SpoolLumpOffset; // offset 0x000ab19c
extern int new_area_location; // offset 0x000ab1e8
extern int NumAreas; // offset 0x000ab1f0
extern struct AreaDataStr *AreaData; // offset 0x000ab1d4
extern unsigned char *AreaTPages; // offset 0x000ab23c
extern struct SXYPAIR *Music_And_AmbientOffsets; // offset 0x000ab214
extern int spoolerror; // offset 0x000ab1b4
extern int spoolseek; // offset 0x000ab264
extern int tsetpos; // offset 0x000ab1ec
extern int tsetcounter; // offset 0x000ab1d0
extern int unpack_roadmap_flag; // offset 0x000ab250
extern unsigned long unpack_roadmap_tbl[2]; // offset 0x000ab208
extern int unpack_cellptr_flag; // offset 0x000ab26c
extern int models_ready; // offset 0x000ab1dc
extern unsigned short *newmodels; // offset 0x000ab260
extern char *buffer; // offset 0x000ab1bc
extern int done; // offset 0x000ab22c
extern int nsectors; // offset 0x000ab210
static unsigned char param[8]; // offset 0x000ab158
static unsigned char result[8]; // offset 0x000ab160
static char *target_address; // offset 0x000ab168
static int current_sector; // offset 0x000ab16c
static int sectors_to_read; // offset 0x000ab170
static int sectors_this_chunk; // offset 0x000ab174
extern int chunk_complete; // offset 0x000ab268
static int switch_spooltype; // offset 0x000ab178
static int nTPchunks; // offset 0x000ab17c
static int nTPchunks_reading; // offset 0x000ab180
static int nTPchunks_writing; // offset 0x000ab184
static struct RECT tpage; // offset 0x000ab188
static int ntpages; // offset 0x000ab190
static int endchunk; // offset 0x000ab194
extern int loadbank_read; // offset 0x000ab200
extern int loadbank_write; // offset 0x000ab254
extern int sample_chunk; // offset 0x000ab1e0
extern int n_sample_chunks; // offset 0x000ab1ac
extern int last_size; // offset 0x000ab25c
extern int send_bank; // offset 0x000ab234
extern int spuaddress; // offset 0x000ab1a8
extern int num_samples; // offset 0x000ab1c4
extern int current_music_id; // offset 0x000ab1cc
extern int firstLowBlock; // offset 0x000ab204
extern int firstDamBlock; // offset 0x000ab1f4
extern int lengthLowBlock; // offset 0x000ab230
extern int lengthDamBlock; // offset 0x000ab220
extern int lastCleanBlock; // offset 0x000ab224
extern int lowOffset; // offset 0x000ab238
extern int damOffset; // offset 0x000ab228
extern int *modelMemory; // offset 0x000ab1c0
extern int quickSpool; // offset 0x000ab1a4
extern int startSpecSpool; // offset 0x000ab258
extern int specSpoolComplete; // offset 0x000ab1d8
extern int allowSpecSpooling; // offset 0x000ab1e4
extern struct SPOOLQ spooldata[48]; // offset 0x000dedb8
extern struct SPL_REGIONINFO spool_regioninfo[8]; // offset 0x000dec98
extern int multiplayerregions[4]; // offset 0x000deda8
extern int tsetinfo[32]; // offset 0x000ded18
extern unsigned long unpack_cellptr_tbl[3]; // offset 0x000ded98
static struct POLY_FT4 cd_sprite; // offset 0x000dec00
extern unsigned short cd_palette[32]; // offset 0x000dec58
extern struct MODEL *pLodModels[1536]; // offset 0x000df0b8
static struct MODEL dummyModel; // offset 0x000dec30

// 48 functions
/*
 * Offset 0x7B228, from D:\driver2\game\C\SPOOL.C (lines 532..587)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ test_changemode()
{ // line 2, offset 0x7b228
  struct SPOOLQ *current; // $a3
} // line 56, offset 0x7b3b4
/*
 * Offset 0x7B3C4, from D:\driver2\game\C\SPOOL.C (lines 625..770)
 * Stack frame base $sp, size 160
 * Saved registers at offset -8: s0
 */
int /*$ra*/ check_regions_present()
{ // line 2, offset 0x7b3c4
  struct AREA_LOAD_INFO regions_to_unpack[3]; // stack offset -160
  int leftright_unpack; // $a2
  int topbottom_unpack; // $a3
  int num_regions_to_unpack; // $a1
  int x; // $v1
  int z; // $v0
  int loop; // $t1
  int retval; // $a3
  int region_to_unpack; // $a0
  int barrel_region; // $v1
  char textbuf[128]; // stack offset -136
} // line 146, offset 0x7b6c4
/*
 * Offset 0x7B6C4, from D:\driver2\game\C\SPOOL.C (lines 925..976)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ UpdateSpool()
{ // line 2, offset 0x7b6c4
  struct SPOOLQ *current; // $s0
  struct CdlLOC pos; // stack offset -16
} // line 52, offset 0x7b87c
/*
 * Offset 0x7B88C, from D:\driver2\game\C\SPOOL.C (lines 1161..1234)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ SendTPage()
{ // line 2, offset 0x7b88c
  int tpage2send; // $s2
  int slot; // $s0
  int old; // $v1
  char *tpageaddress; // $t0
  { // line 15, offset 0x7b900
    struct RECT cluts; // stack offset -32
    int npalettes; // $s1
    int i; // $a3
    unsigned long *clutptr; // $a1
  } // line 47, offset 0x7ba24
} // line 74, offset 0x7bb14
/*
 * Offset 0x7BB14, from D:\driver2\game\C\SPOOL.C (lines 1262..1332)
 * Stack frame base $sp, size 128
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ LoadInAreaTSets(int area /*$t4*/)
{ // line 1, offset 0x7bb14
  unsigned char *tpages; // $s1
  int ntpages_to_load; // $s3
  int i; // $s0
  int slot; // $a0
  int j; // $a1
  int offset; // $s4
  int availableslots[16]; // stack offset -104
  int navailable; // $s2
  char *loadaddr; // $fp
} // line 71, offset 0x7bd84
/*
 * Offset 0x7BD84, from D:\driver2\game\C\SPOOL.C (lines 1337..1379)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ SendSBK()
{ // line 2, offset 0x7bd84
  char *address; // $s0
  int slength; // $s1
  int i; // $a1
  unsigned long *source; // $v0
  unsigned long *dest; // $a0
} // line 43, offset 0x7bebc
/*
 * Offset 0x7BEBC, from D:\driver2\game\C\SPOOL.C (lines 1484..1542)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ init_spooled_models()
{ // line 2, offset 0x7bebc
  int i; // $s1
  int nmodels; // $s4
  int size; // $s2
  int model_number; // $a1
  char *addr; // $s0
  struct MODEL *parentmodel; // $a1
  { // line 35, offset 0x7bfbc
  } // line 37, offset 0x7bfd0
  { // line 44, offset 0x7c004
  } // line 52, offset 0x7c048
} // line 59, offset 0x7c08c
/*
 * Offset 0x7C08C, from D:\driver2\game\C\SPOOL.C (lines 1574..1665)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CheckLoadAreaData(int cellx /*$t9*/, int cellz /*$a1*/)
{ // line 1, offset 0x7c08c
  int i; // $a2
  int nAreas; // $t0
  struct Spool *spoolptr; // $t1
  int load; // $a3
  int force_load_boundary; // $a0
} // line 92, offset 0x7c27c
/*
 * Offset 0x7C28C, from D:\driver2\game\C\SPOOL.C (lines 1713..1775)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ LoadRegionData(int region /*$s4*/, int target_region /*$s5*/)
{ // line 1, offset 0x7c28c
  int offset; // $s0
  char *target_unpacked_data; // $t1
  struct Spool *spoolptr; // $s1
  char *roadmap_buffer; // $s6
  char *cell_buffer; // $s3
} // line 63, offset 0x7c464
/*
 * Offset 0x7C464, from D:\driver2\game\C\SPOOL.C (lines 1815..1917)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessSpoolInfoLump(char *lump_ptr /*$a2*/, int lump_size /*$a1*/)
{ // line 1, offset 0x7c464
  int i; // $t2
  int size; // $v1
  int slots_count; // $t0
  int objects_count; // $t1
  int num_of_regions; // $v0
  char *alloclist; // $a3
} // line 103, offset 0x7c5c0
/*
 * Offset 0x7C5C0, from D:\driver2\game\C\SPOOL.C (lines 2351..2436)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ unpack_cellpointers()
{ // line 2, offset 0x7c5c0
  int target_barrel_region; // $t0
  char *source_packed_data; // $v0
  int bitpos; // $a3
  int loop; // $a2
  int packtype; // $a0
  unsigned short cell; // $a0
  unsigned short *short_ptr; // $a1
  unsigned short pcode; // $t1
} // line 86, offset 0x7c74c
/*
 * Offset 0x7C74C, from D:\driver2\game\C\SPOOL.C (lines 2509..2545)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ SpecClutsSpooled()
{ // line 2, offset 0x7c74c
  char *loadaddr; // $s4
  int i; // $s1
  int j; // $s2
  int tpage; // $s0
  struct RECT specCluts; // stack offset -48
  { // line 13, offset 0x7c7f4
    int index; // $a3
    { // line 28, offset 0x7c91c
    } // line 28, offset 0x7c91c
  } // line 33, offset 0x7c95c
} // line 37, offset 0x7c9b8
/*
 * Offset 0x7C9B8, from D:\driver2\game\C\SPOOL.C (lines 2549..2590)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CleanModelSpooled()
{ // line 3, offset 0x7c9b8
  int *loadaddr; // $a1
  int *mem; // $a3
  { // line 27, offset 0x7ca80
  } // line 38, offset 0x7cad0
} // line 42, offset 0x7cafc
/*
 * Offset 0x7CAFC, from D:\driver2\game\C\SPOOL.C (lines 2594..2632)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DamagedModelSpooled()
{ // line 2, offset 0x7cafc
  int *loadaddr; // $a1
  int *mem; // $a3
  { // line 26, offset 0x7cbc0
  } // line 35, offset 0x7cbf8
} // line 39, offset 0x7cc24
/*
 * Offset 0x7CC24, from D:\driver2\game\C\SPOOL.C (lines 2635..2675)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ LowModelSpooled()
{ // line 2, offset 0x7cc24
  int *loadaddr; // $a1
  int *mem; // $a3
  { // line 26, offset 0x7cce8
  } // line 37, offset 0x7cd38
} // line 41, offset 0x7cd64
/*
 * Offset 0x7CD64, from D:\driver2\game\C\SPOOL.C (lines 2680..2716)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CleanSpooled()
{ // line 3, offset 0x7cd64
  char *loadaddr; // $a1
  { // line 22, offset 0x7ce8c
    struct MODEL *tempModel; // $a1
  } // line 33, offset 0x7cee0
} // line 37, offset 0x7cf0c
/*
 * Offset 0x7CF0C, from D:\driver2\game\C\SPOOL.C (lines 2744..2792)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ Tada()
{ // line 2, offset 0x7cf0c
  char *loadaddr; // $s1
  { // line 7, offset 0x7cf60
    struct RECT tpage; // stack offset -32
    int spec_tpage; // $a0
  } // line 20, offset 0x7d018
  { // line 23, offset 0x7d018
    struct RECT tpage; // stack offset -24
    int spec_tpage; // $a0
  } // line 36, offset 0x7d0ec
  { // line 39, offset 0x7d0ec
  } // line 45, offset 0x7d130
} // line 49, offset 0x7d144
/*
 * Offset 0x7D144, from D:\driver2\game\C\SPOOL.C (lines 2799..2924)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SpecialStartNextBlock()
{ // line 2, offset 0x7d144
  char *loadaddr; // $s0
  int fileSector; // $t0
} // line 126, offset 0x7d4d0
/*
 * Offset 0x7D4E0, from D:\driver2\game\C\SPOOL.C (lines 2956..3021)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CheckSpecialSpool()
{ // line 2, offset 0x7d4e0
  struct _CAR_DATA *lcp; // $a0
  int ret; // $a3
  { // line 9, offset 0x7d51c
  } // line 13, offset 0x7d53c
} // line 66, offset 0x7d6c8
/*
 * Offset 0x7D6D8, from D:\driver2\game\C\SPOOL.C (lines 3063..3158)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InitSpecSpool()
{
}
/*
 * Offset 0x7D978, from D:\driver2\game\C\SPOOL.C (lines 2442..2468)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ Unpack_CellPtrs()
{ // line 2, offset 0x7d978
  int region_to_unpack; // $a1
  int target_barrel_region; // $a1
  char *source_packed_data; // $v1
} // line 27, offset 0x7d9cc
/*
 * Offset 0x7D9CC, from D:\driver2\game\C\SPOOL.C (lines 1970..1989)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ GotRegion()
{ // line 2, offset 0x7d9cc
  int cbr; // $a1
} // line 20, offset 0x7da60
/*
 * Offset 0x7DA60, from D:\driver2\game\C\SPOOL.C (lines 2246..2275)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ data_cb_misc()
{ // line 2, offset 0x7da60
  { // line 4, offset 0x7da74
    struct SPOOLQ *current; // $v0
  } // line 29, offset 0x7db28
} // line 30, offset 0x7db38
/*
 * Offset 0x7DB38, from D:\driver2\game\C\SPOOL.C (lines 2278..2298)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ready_cb_misc(unsigned char intr /*$s0*/, unsigned char *result /*$a2*/)
{
}
/*
 * Offset 0x7DBCC, from D:\driver2\game\C\SPOOL.C (lines 2171..2200)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ data_cb_soundbank()
{ // line 2, offset 0x7dbcc
  { // line 4, offset 0x7dbe0
  } // line 29, offset 0x7dc94
} // line 30, offset 0x7dca4
/*
 * Offset 0x7DCA4, from D:\driver2\game\C\SPOOL.C (lines 2203..2243)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ready_cb_soundbank(unsigned char intr /*$s0*/, unsigned char *result /*$a2*/)
{ // line 1, offset 0x7dca4
  { // line 14, offset 0x7dd04
    struct SPOOLQ *current; // $a0
  } // line 34, offset 0x7dd70
} // line 41, offset 0x7dd98
/*
 * Offset 0x7DDA8, from D:\driver2\game\C\SPOOL.C (lines 2132..2167)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ data_cb_regions()
{ // line 2, offset 0x7dda8
  { // line 4, offset 0x7ddbc
    struct SPOOLQ *current; // $v0
  } // line 35, offset 0x7de80
} // line 36, offset 0x7de90
/*
 * Offset 0x7DE90, from D:\driver2\game\C\SPOOL.C (lines 2090..2128)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ready_cb_regions(unsigned char intr /*$s0*/, unsigned char *result /*$a2*/)
{ // line 1, offset 0x7de90
  { // line 20, offset 0x7df08
    struct SPOOLQ *current; // $v1
  } // line 20, offset 0x7df08
} // line 39, offset 0x7df64
/*
 * Offset 0x7DF64, from D:\driver2\game\C\SPOOL.C (lines 1993..2033)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ data_cb_textures()
{ // line 2, offset 0x7df64
  { // line 4, offset 0x7df78
  } // line 40, offset 0x7e068
} // line 41, offset 0x7e078
/*
 * Offset 0x7E078, from D:\driver2\game\C\SPOOL.C (lines 2036..2085)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ready_cb_textures(unsigned char intr /*$s0*/, unsigned char *result /*$a2*/)
{ // line 1, offset 0x7e078
  { // line 14, offset 0x7e0d8
    struct SPOOLQ *current; // $a2
  } // line 44, offset 0x7e188
} // line 50, offset 0x7e198
/*
 * Offset 0x7E1A8, from D:\driver2\game\C\SPOOL.C (lines 591..613)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ changemode(struct SPOOLQ *current /*$a0*/)
{
}
/*
 * Offset 0x7E24C, from D:\driver2\game\C\SPOOL.C (lines 836..855)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DrawCDicon()
{ // line 2, offset 0x7e24c
  unsigned short *palette; // $a1
  int temp; // $a2
  int i; // $a0
  struct RECT dest; // stack offset -16
} // line 20, offset 0x7e2cc
/*
 * Offset 0x7E2CC, from D:\driver2\game\C\SPOOL.C (lines 859..917)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CheckValidSpoolData()
{ // line 2, offset 0x7e2cc
  struct RECT dest; // stack offset -16
} // line 59, offset 0x7e35c
/*
 * Offset 0x7E36C, from D:\driver2\game\C\SPOOL.C (lines 1104..1125)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ RequestSpool(int type /*$a0*/, int data /*$a1*/, int offset /*$a2*/, int loadsize /*$a3*/, char *address /*stack 16*/, void *func() /*stack 20*/, char *address /*$v0*/, void *func() /*$v1*/)
{ // line 1, offset 0x7e36c
  struct SPOOLQ *next; // $t0
  int sector; // $v0
} // line 22, offset 0x7e3e4
/*
 * Offset 0x7E3E4, from D:\driver2\game\C\SPOOL.C (lines 1670..1710)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ClearRegion(int target_region /*$a0*/)
{ // line 1, offset 0x7e3e4
  int loop; // $a1
  unsigned short *cell_ptrs_s; // $v1
  unsigned long *pvsptr; // $v0
} // line 41, offset 0x7e494
/*
 * Offset 0x7E494, from D:\driver2\game\C\SPOOL.C (lines 1129..1157)
 * Stack frame base $sp, size 168
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ InitSpooling()
{ // line 2, offset 0x7e494
  int i; // $s0
  char namebuffer[128]; // stack offset -152
  struct CdlLOC pos; // stack offset -24
} // line 29, offset 0x7e528
/*
 * Offset 0x7E528, from D:\driver2\game\C\SPOOL.C (lines 1239..1255)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SpoolSYNC()
{
}
/*
 * Offset 0x7E540, from D:\driver2\game\C\SPOOL.C (lines 1545..1552)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetupModels()
{
}
/*
 * Offset 0x7E580, from D:\driver2\game\C\SPOOL.C (lines 1559..1570)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ LoadInAreaModels(int area /*$a0*/)
{ // line 2, offset 0x7e580
  int offset; // $a2
  int length; // $a3
} // line 12, offset 0x7e5dc
/*
 * Offset 0x7E5DC, from D:\driver2\game\C\SPOOL.C (lines 1779..1811)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ UnpackRegion(int region_to_unpack /*$s1*/, int target_barrel_region /*$s0*/)
{ // line 1, offset 0x7e5dc
} // line 33, offset 0x7e658
/*
 * Offset 0x7E66C, from D:\driver2\game\C\SPOOL.C (lines 1928..1941)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ WaitCloseLid()
{ // line 2, offset 0x7e66c
  void *old(); // $s1
} // line 14, offset 0x7e6d8
/*
 * Offset 0x7E6D8, from D:\driver2\game\C\SPOOL.C (lines 1945..1962)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ FoundError(char *name /*$a0*/, unsigned char intr /*$a1*/, unsigned char *result /*$a2*/)
{ // line 2, offset 0x7e6d8
  struct CdlLOC p; // stack offset -16
} // line 18, offset 0x7e724
/*
 * Offset 0x7E724, from D:\driver2\game\C\SPOOL.C (lines 2302..2320)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ StartSpooling()
{ // line 2, offset 0x7e724
} // line 19, offset 0x7e7b0
/*
 * Offset 0x7E7C0, from D:\driver2\game\C\SPOOL.C (lines 2720..2740)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ LowSpooled()
{ // line 3, offset 0x7e7c0
  char *loadaddr; // $v1
  { // line 8, offset 0x7e7d8
    struct MODEL *tempModel; // $a1
  } // line 17, offset 0x7e820
} // line 21, offset 0x7e84c
/*
 * Offset 0x7E84C, from D:\driver2\game\C\SPOOL.C (lines 3025..3041)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ QuickSpoolSpecial()
{
}
/*
 * Offset 0x7E8DC, from D:\driver2\game\C\SPOOL.C (lines 3046..3059)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PrepareSecretCar()
{
}
/*
 * Offset 0x7E958, from D:\driver2\game\C\SPOOL.C (lines 818..826)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ stopgame()
{ // line 4, offset 0x7e958
} // line 9, offset 0x7e9a0
/*
 * Offset 0x7E9A0, from D:\driver2\game\C\SPOOL.C (lines 829..832)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ startgame()
{ // line 2, offset 0x7e9a0
} // line 4, offset 0x7e9d0
Source file(s) D:\driver2\game\C\SYSTEM.C+D:\driver2\game\SYSTEM.C, object file obj\system.OBJ overlay id <none>

// 65 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct CdlFILE {
  struct CdlLOC pos; // size=4, offset=0
  unsigned long size; // size=0, offset=4
  char name[16]; // size=16, offset=8
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct DRAW_MODE {
  short x1; // size=0, offset=0
  short y1; // size=0, offset=2
  short x2; // size=0, offset=4
  short y2; // size=0, offset=6
  short width; // size=0, offset=8
  short height; // size=0, offset=10
  short framex; // size=0, offset=12
  short framey; // size=0, offset=14
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
enum CDTYPE : char {
  CDTYPE_NODISC = 0,
  CDTYPE_SHELLOPEN = 1,
  CDTYPE_DISCERROR = 2,
  CDTYPE_WRONGDISC = 3,
  CDTYPE_CORRECTDISC = 4,
};
enum CITYTYPE : char {
  CITYTYPE_DAY = 0,
  CITYTYPE_NIGHT = 1,
  CITYTYPE_MULTI_DAY = 2,
  CITYTYPE_MULTI_NIGHT = 3,
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 98 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct CdlFILE CdlFILE;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct DRAW_MODE DRAW_MODE;
typedef struct DB DB;
typedef enum CDTYPE CDTYPE;
typedef enum CITYTYPE CITYTYPE;
typedef struct MAPPING MAPPING;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 28 external declarations
extern struct DRAW_MODE draw_mode_pal; // offset 0x000a1bb8
extern struct DRAW_MODE draw_mode_ntsc; // offset 0x000a1bc8
extern char currentfilename[128]; // offset 0x000a1bd8
extern char NumPlayers; // offset 0x000aa99e
extern int gMultiplayerLevels; // offset 0x000aa9a4
static enum CITYTYPE lasttype; // offset 0x000aa99c
static enum CITYTYPE lastcity; // offset 0x000aa99d
extern int DoNotSwap; // offset 0x000aa9a0
extern int cak; // offset 0x000aa9ac
extern int FrameCnt; // offset 0x000ab2a8
extern short padd; // offset 0x000ab2ac
extern short paddp; // offset 0x000ab28c
extern struct DB *current; // offset 0x000ab2a0
extern struct DB *last; // offset 0x000ab2b8
extern int vblcounter; // offset 0x000ab290
extern struct DB *MPcurrent[2]; // offset 0x000ab2b0
extern struct DB *MPlast[2]; // offset 0x000ab298
extern char *primptr; // offset 0x000ab2a4
static unsigned char load_complete; // offset 0x000ab278
static unsigned char endread; // offset 0x000ab279
static int current_sector; // offset 0x000ab27c
static int sectors_left; // offset 0x000ab280
static int sectors_read; // offset 0x000ab284
static char *current_address; // offset 0x000ab288
extern struct DB MPBuff[2][2]; // offset 0x000e08b8
extern struct XYPAIR citylumps[8][4]; // offset 0x000e0af0
extern int citystart[8]; // offset 0x000e0ad0
extern struct CdlFILE currentfileinfo; // offset 0x000e0ab8

// 23 functions
/*
 * Offset 0x7E9D0, from D:\driver2\game\C\SYSTEM.C (lines 759..878)
 * Stack frame base $sp, size 2208
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ LoadfileSeg(char *name /*$v0*/, char *addr /*$s1*/, int offset /*$s5*/, int loadsize /*$fp*/)
{ // line 1, offset 0x7e9d0
  char namebuffer[64]; // stack offset -2192
  unsigned char result[8]; // stack offset -2128
  int sector; // $s2
  int nsectors; // $s5
  char sectorbuffer[2048]; // stack offset -2120
  struct CdlFILE info; // stack offset -72
  struct CdlLOC pos; // stack offset -48
  int i; // $a2
  int toload; // $s4
  int first; // $a0
} // line 120, offset 0x7ecf0
/*
 * Offset 0x7ECF0, from D:\driver2\game\C\SYSTEM.C (lines 1310..1339)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SwapDrawBuffers2(int player /*$s0*/)
{ // line 1, offset 0x7ecf0
  int toggle; // $v1
} // line 30, offset 0x7eddc
/*
 * Offset 0x7EDDC, from D:\driver2\game\C\SYSTEM.C (lines 1364..1410)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ SetupDrawBuffers()
{ // line 2, offset 0x7eddc
  struct RECT rect; // stack offset -24
  int i; // $v1
} // line 47, offset 0x7ef0c
/*
 * Offset 0x7EF0C, from D:\driver2\game\C\SYSTEM.C (lines 1429..1522)
 * Stack frame base $sp, size 96
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ SetupDrawBufferData(int num_players /*stack 0*/)
{ // line 1, offset 0x7ef0c
  unsigned long *otpt; // $s2
  unsigned char *primpt; // $s1
  unsigned char *PRIMpt; // $fp
  int x[2]; // stack offset -72
  int y[2]; // stack offset -64
  int i; // $s3
  int j; // $s6
  int toggle; // $s7
  int height; // stack offset -56
} // line 94, offset 0x7f118
/*
 * Offset 0x7F118, from D:\driver2\game\C\SYSTEM.C (lines 1577..1654)
 * Stack frame base $sp, size 136
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ SetCityType(enum CITYTYPE type /*$a0*/)
{ // line 1, offset 0x7f118
  struct CdlFILE cdfile; // stack offset -120
  struct XYPAIR *info; // $s2
  char namebuffer[64]; // stack offset -96
  unsigned char result[8]; // stack offset -32
  int i; // $a2
  int sector; // $s0
} // line 78, offset 0x7f338
/*
 * Offset 0x7F354, from D:\driver2\game\C\SYSTEM.C (lines 646..669)
 * Stack frame base $sp, size 104
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ Loadfile(char *name /*$a2*/, char *addr /*$s2*/)
{ // line 1, offset 0x7f354
  char namebuffer[64]; // stack offset -88
  unsigned char result[8]; // stack offset -24
  int nread; // $s0
} // line 24, offset 0x7f3e8
/*
 * Offset 0x7F3E8, from D:\driver2\game\C\SYSTEM.C (lines 389..415)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ClearMem(char *mem /*$a0*/, int size /*$a1*/)
{ // line 1, offset 0x7f3e8
  char *end; // $v1
} // line 27, offset 0x7f47c
/*
 * Offset 0x7F47C, from D:\driver2\game\C\SYSTEM.C (lines 427..458)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ setMem8(unsigned char *mem /*$a0*/, unsigned char val /*$a1*/, int size /*$a2*/)
{ // line 1, offset 0x7f47c
  unsigned char *end; // $v1
  unsigned long lval; // $a3
} // line 32, offset 0x7f524
/*
 * Offset 0x7F524, from D:\driver2\game\C\SYSTEM.C (lines 469..494)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ setMem16(unsigned short *mem /*$a0*/, unsigned short val /*$a1*/, int size /*$a2*/)
{ // line 1, offset 0x7f524
  unsigned short *end; // $a3
  unsigned long lval; // $a2
} // line 26, offset 0x7f5b4
/*
 * Offset 0x7F5B4, from D:\driver2\game\C\SYSTEM.C (lines 1566..1568)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ResetCityType()
{
}
/*
 * Offset 0x7F5C8, from D:\driver2\game\C\SYSTEM.C (lines 1682..1707)
 * Stack frame base $sp, size 192
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ FileExists(char *filename /*$a2*/)
{ // line 1, offset 0x7f5c8
  struct CdlFILE cdfile; // stack offset -176
  char namebuffer[128]; // stack offset -152
  unsigned char result[8]; // stack offset -24
  int retries; // $s1
} // line 26, offset 0x7f640
/*
 * Offset 0x7F640, from D:\driver2\game\C\SYSTEM.C (lines 1723..1761)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 ra
 */
enum CDTYPE /*$ra*/ DiscSwapped(char *filename /*$s1*/)
{ // line 1, offset 0x7f640
  struct CdlFILE cdfile; // stack offset -40
  int ret; // $v1
} // line 39, offset 0x7f6fc
/*
 * Offset 0x7F6FC, from D:\driver2\game\C\SYSTEM.C (lines 1253..1302)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SwapDrawBuffers()
{ // line 2, offset 0x7f6fc
} // line 50, offset 0x7f7c0
/*
 * Offset 0x7F7C0, from D:\driver2\game\C\SYSTEM.C (lines 1535..1543)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ InitaliseDrawEnv(struct DB *pBuff /*$s0*/, int x /*$s4*/, int y /*$s3*/, int w /*$s1*/, int h /*stack 16*/, int h /*$s2*/)
{
}
/*
 * Offset 0x7F848, from D:\driver2\game\C\SYSTEM.C (lines 580..583)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ Init_FileSystem()
{
}
/*
 * Offset 0x7F870, from D:\driver2\game\C\SYSTEM.C (lines 622..632)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DoCDRetry()
{ // line 2, offset 0x7f870
  static int retries; // offset 0xc
  unsigned char result[8]; // stack offset -16
} // line 11, offset 0x7f8b8
/*
 * Offset 0x7F8B8, from D:\driver2\game\C\SYSTEM.C (lines 952..966)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ReportMode(int on /*$s0*/)
{ // line 1, offset 0x7f8b8
  static unsigned char param[8]; // offset 0x0
} // line 15, offset 0x7f8f4
/*
 * Offset 0x7F904, from D:\driver2\game\C\SYSTEM.C (lines 1017..1034)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ loadsectors(char *addr /*$a0*/, int sector /*$v0*/, int nsectors /*$a2*/)
{ // line 1, offset 0x7f904
  struct CdlLOC pos; // stack offset -16
} // line 18, offset 0x7f984
/*
 * Offset 0x7F984, from D:\driver2\game\C\SYSTEM.C (lines 1221..1229)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ EnableDisplay()
{ // line 2, offset 0x7f984
  int i; // $s1
} // line 9, offset 0x7f9f0
/*
 * Offset 0x7F9F0, from D:\driver2\game\C\SYSTEM.C (lines 1239..1240)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DisableDisplay()
{
}
/*
 * Offset 0x7FA10, from D:\driver2\game\C\SYSTEM.C (lines 1349..1353)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ UpdatePadData()
{
}
/*
 * Offset 0x7FA44, from D:\driver2\game\C\SYSTEM.C (lines 978..983)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ data_ready()
{
}
/*
 * Offset 0x7FA74, from D:\driver2\game\C\SYSTEM.C (lines 987..1014)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ sector_ready(unsigned char intr /*$a0*/, unsigned char *result /*$a1*/)
{ // line 1, offset 0x7fa74
  { // line 17, offset 0x7fae4
    struct CdlLOC p; // stack offset -16
  } // line 27, offset 0x7fb34
} // line 28, offset 0x7fb44
Source file(s) D:\driver2\game\C\TARGETS.C+D:\driver2\game\TARGETS.C, object file obj\targets.obj overlay id <none>

// 70 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct COLOUR_BAND {
  struct CVECTOR colour; // size=4, offset=0
  int value; // size=0, offset=4
  int flags; // size=0, offset=8
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct TARGET_ARROW_MODEL {
  struct SVECTOR *pVerts; // size=8, offset=0
  char *pTris; // size=0, offset=4
  char numTris; // size=0, offset=8
};

// 105 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F3 POLY_F3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct COLOUR_BAND COLOUR_BAND;
typedef struct UV UV;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct __tunnelcoords tunnelcoords;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct TARGET_ARROW_MODEL TARGET_ARROW_MODEL;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct _PERCENTAGE_BAR *LPPERCENTAGE_BAR;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 7 external declarations
static struct SVECTOR targetArrowVerts[43]; // offset 0x000a1c58
static char normalTargetArrowTris[9]; // offset 0x000a1db0
static char loseTailTargetArrowTris[24]; // offset 0x000a1dbc
static char windowTargetArrowTris[30]; // offset 0x000a1dd4
static char maxSpeedTargetArrowTris[18]; // offset 0x000a1df4
static struct TARGET_ARROW_MODEL targetArrowModel[4]; // offset 0x000a1e08
extern int gDraw3DArrowBlue; // offset 0x000aa9b0

// 4 functions
/*
 * Offset 0x7FB44, from D:\driver2\game\C\TARGETS.C (lines 213..261)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ Draw3DTarget(struct VECTOR *position /*$s0*/, int flags /*$s2*/)
{ // line 1, offset 0x7fb44
  struct VECTOR pos; // stack offset -32
  int shadow; // $s1
} // line 49, offset 0x7fd48
/*
 * Offset 0x7FD48, from D:\driver2\game\C\TARGETS.C (lines 267..329)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ DrawTargetArrowModel(struct TARGET_ARROW_MODEL *pTargetArrowModel /*$s1*/, struct VECTOR *pPosition /*$s2*/, int shadow /*$s4*/, int invert /*$s3*/)
{ // line 1, offset 0x7fd48
  { // line 4, offset 0x7fd9c
    struct VECTOR tempVec; // stack offset -56
    struct SVECTOR *pVerts; // $s0
    struct SVECTOR temp; // stack offset -40
    char *pVertIndex; // $a3
    { // line 16, offset 0x7fe2c
      struct POLY_F3 *poly; // $t0
      int z; // stack offset -32
    } // line 56, offset 0x80044
  } // line 62, offset 0x800d8
} // line 63, offset 0x800f8
/*
 * Offset 0x800F8, from D:\driver2\game\C\TARGETS.C (lines 412..488)
 * Stack frame base $sp, size 144
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawStopZone(struct VECTOR *pPosition /*$s5*/)
{ // line 1, offset 0x800f8
  struct VECTOR *pVector; // $s0
  struct VECTOR pStopZonePt[4]; // stack offset -128
  struct POLY_FT4 *pPoly; // $s1
  long *pOut; // $s2
  long sz; // stack offset -48
  { // line 18, offset 0x801fc
    struct SVECTOR temp; // stack offset -64
    long p; // stack offset -56
    long flag; // stack offset -52
  } // line 53, offset 0x8030c
} // line 77, offset 0x8047c
/*
 * Offset 0x8047C, from D:\driver2\game\C\TARGETS.C (lines 496..510)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ WorldToCameraPositions(struct VECTOR *pGlobalPositionIn /*$s1*/, struct VECTOR *pCameraPositionOut /*$s0*/, int count /*$s2*/)
{ // line 1, offset 0x8047c
  { // line 4, offset 0x804b8
    struct VECTOR temp; // stack offset -48
  } // line 6, offset 0x804b8
} // line 15, offset 0x80528
Source file(s) D:\driver2\game\C\TEXTURE.C+D:\driver2\game\TEXTURE.C, object file obj\texture.OBJ overlay id <none>

// 67 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct MODEL {
  unsigned short shape_flags; // size=0, offset=0
  unsigned short flags2; // size=0, offset=2
  short instance_number; // size=0, offset=4
  unsigned char tri_verts; // size=0, offset=6
  unsigned char zBias; // size=0, offset=7
  short bounding_sphere; // size=0, offset=8
  unsigned short num_point_normals; // size=0, offset=10
  unsigned short num_vertices; // size=0, offset=12
  unsigned short num_polys; // size=0, offset=14
  int vertices; // size=0, offset=16
  int poly_block; // size=0, offset=20
  int normals; // size=0, offset=24
  int point_normals; // size=0, offset=28
  int collision_block; // size=0, offset=32
};
struct TEXINF {
  unsigned short id; // size=0, offset=0
  unsigned short nameoffset; // size=0, offset=2
  unsigned char x; // size=0, offset=4
  unsigned char y; // size=0, offset=5
  unsigned char width; // size=0, offset=6
  unsigned char height; // size=0, offset=7
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct TPAN {
  unsigned char texture_page; // size=0, offset=0
  unsigned char texture_number; // size=0, offset=1
};
struct TEXTURE_DETAILS {
  struct UV coords; // size=8, offset=0
  unsigned short tpageid; // size=0, offset=8
  unsigned short clutid; // size=0, offset=10
  char texture_number; // size=0, offset=12
  char texture_page; // size=0, offset=13
};
struct TP {
  unsigned long flags; // size=0, offset=0
  unsigned long offset; // size=0, offset=4
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};

// 100 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct MODEL MODEL;
typedef struct TEXINF TEXINF;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct UV UV;
typedef struct TPAN TPAN;
typedef struct TEXTURE_DETAILS TEXTURE_DETAILS;
typedef struct TP TP;
typedef struct CAR_POLY CAR_POLY;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 28 external declarations
extern struct SXYPAIR tpagepos[20]; // offset 0x000a1e38
extern int LevelTab[32]; // offset 0x000a1e88
extern short specspooldata[3]; // offset 0x000aa9b8
extern int texture_is_icon; // offset 0x000aa9b4
extern int NoTextureMemory; // offset 0x000ab2cc
extern struct RECT mapclutpos; // offset 0x000ab2d0
extern struct RECT clutpos; // offset 0x000ab2f0
extern int tpage_amount; // offset 0x000ab2e8
extern int texamount; // offset 0x000ab308
extern int nperms; // offset 0x000ab2dc
extern struct XYPAIR *permlist; // offset 0x000ab2fc
extern struct TP *tpage_position; // offset 0x000ab310
extern int texture_lump_start; // offset 0x000ab304
extern int slotsused; // offset 0x000ab30c
extern char *texturename_buffer; // offset 0x000ab300
extern short specialSlot; // offset 0x000ab2d8
extern int MaxSpecCluts; // offset 0x000ab2e0
extern int environmenttpage; // offset 0x000ab2e4
extern struct RECT tpage; // offset 0x000ab2c0
extern int nspecpages; // offset 0x000ab2c8
extern struct XYPAIR *speclist; // offset 0x000ab2f8
extern struct TEXINF *tpage_ids[128]; // offset 0x000e0fa8
extern int tpage_texamts[128]; // offset 0x000e0d58
extern unsigned char tpageslots[19]; // offset 0x000e0bf0
extern unsigned char tpageloaded[128]; // offset 0x000e0c08
extern struct DVECTOR slot_clutpos[19]; // offset 0x000e0d08
extern struct DVECTOR slot_tpagepos[19]; // offset 0x000e0f58
extern char tsdname[128]; // offset 0x000e0c88

// 11 functions
/*
 * Offset 0x80528, from D:\driver2\game\C\TEXTURE.C (lines 126..152)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ IncrementTPageNum(struct RECT *tpage /*$t0*/)
{ // line 1, offset 0x80528
  int i; // $a3
} // line 27, offset 0x805ec
/*
 * Offset 0x805EC, from D:\driver2\game\C\TEXTURE.C (lines 191..257)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ Find_TexID(struct MODEL *model /*$t0*/, int t_id /*$a1*/)
{ // line 1, offset 0x805ec
  char *polylist; // $a2
  int i; // $a3
  { // line 12, offset 0x80638
  } // line 15, offset 0x80650
  { // line 18, offset 0x80650
  } // line 21, offset 0x80650
  { // line 24, offset 0x80650
  } // line 27, offset 0x80650
  { // line 31, offset 0x80650
  } // line 34, offset 0x80650
  { // line 38, offset 0x80650
  } // line 41, offset 0x80650
  { // line 44, offset 0x80650
  } // line 47, offset 0x80650
  { // line 50, offset 0x80650
  } // line 53, offset 0x80650
  { // line 56, offset 0x80650
  } // line 59, offset 0x80650
} // line 67, offset 0x80688
/*
 * Offset 0x80688, from D:\driver2\game\C\TEXTURE.C (lines 378..574)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ LoadPermanentTPages(int *sector /*$fp*/)
{ // line 1, offset 0x80688
  int tloop; // $s1
  int i; // $s1
  int tset; // $s0
  int nsectors; // $s3
  char *tpagebuffer; // $s2
  { // line 67, offset 0x808dc
    int specmodel; // $a1
    int page1; // $s6
    int page2; // $s5
    { // line 87, offset 0x80984
      int temp; // $s4
      int clutsLoaded; // $s7
    } // line 126, offset 0x80ad8
  } // line 127, offset 0x80ad8
} // line 197, offset 0x80bb0
/*
 * Offset 0x80BB0, from D:\driver2\game\C\TEXTURE.C (lines 602..646)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ GetTextureDetails(char *name /*stack 0*/, struct TEXTURE_DETAILS *info /*$s3*/)
{ // line 1, offset 0x80bb0
  int i; // $s2
  int j; // $s1
  int texamt; // $s4
  struct TEXINF *texinf; // $v1
  char *nametable; // stack offset -56
} // line 45, offset 0x80d70
/*
 * Offset 0x80DA0, from D:\driver2\game\C\TEXTURE.C (lines 290..299)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
struct TEXINF * /*$ra*/ GetTextureInfoName(char *name /*$a0*/, struct TPAN *result /*$s0*/)
{ // line 1, offset 0x80da0
  int tpagenum; // stack offset -16
  int texturenum; // stack offset -12
} // line 10, offset 0x80ddc
/*
 * Offset 0x80DDC, from D:\driver2\game\C\TEXTURE.C (lines 116..122)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ IncrementClutNum(struct RECT *clut /*$a0*/)
{
}
/*
 * Offset 0x80E14, from D:\driver2\game\C\TEXTURE.C (lines 155..184)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ LoadTPageAndCluts(struct RECT *tpage /*$s5*/, struct RECT *cluts /*$s2*/, int tpage2send /*$s6*/, char *tpageaddress /*$s0*/)
{ // line 1, offset 0x80e14
  int i; // $s3
  int npalettes; // $s4
  struct RECT temptpage; // stack offset -40
} // line 30, offset 0x80f3c
/*
 * Offset 0x80F3C, from D:\driver2\game\C\TEXTURE.C (lines 261..286)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
struct TEXINF * /*$ra*/ GetTEXINFName(char *name /*$fp*/, int *tpagenum /*stack 4*/, int *texturenum /*stack 8*/)
{ // line 1, offset 0x80f3c
  int i; // $s4
  int j; // $s1
  int texamt; // $s2
  struct TEXINF *texinf; // $s3
  char *nametable; // $s6
} // line 26, offset 0x81038
/*
 * Offset 0x81038, from D:\driver2\game\C\TEXTURE.C (lines 334..342)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ update_slotinfo(int tpage /*$a0*/, int slot /*$a1*/, struct RECT *pos /*$a2*/)
{
}
/*
 * Offset 0x81080, from D:\driver2\game\C\TEXTURE.C (lines 347..374)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ ProcessTextureInfo(char *lump_ptr /*$a1*/)
{ // line 1, offset 0x81080
  int i; // $a0
} // line 28, offset 0x81118
/*
 * Offset 0x81118, from D:\driver2\game\C\TEXTURE.C (lines 578..598)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: ra
 */
void /*$ra*/ ReloadIcons()
{ // line 2, offset 0x81118
  struct RECT tpage; // stack offset -88
  struct RECT clutpos; // stack offset -80
  char name[64]; // stack offset -72
} // line 21, offset 0x81140
Source file(s) D:\driver2\game\C\TIME.C+D:\driver2\game\TIME.C, object file obj\time.obj overlay id <none>

// 18 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};

// 36 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];

// 0 labels

// 0 external declarations

// 1 functions
/*
 * Offset 0x81140, from D:\driver2\game\C\TIME.C (lines 5..7)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ GetTimeStamp(char *buffer /*$a0*/)
{
}
Source file(s) D:\driver2\game\C\WHEELFORCES.C+D:\driver2\game\WHEELFORCES.C, object file obj\wheelfor.OBJ overlay id <none>

// 77 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct CELL_OBJECT {
  struct VECTOR_NOPAD pos; // size=12, offset=0
  unsigned char pad; // size=0, offset=12
  unsigned char yang; // size=0, offset=13
  unsigned short type; // size=0, offset=14
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_TYPE {
  char frictionScaleRatio; // size=0, offset=0
  char aggressiveBraking; // size=0, offset=1
  char fourWheelDrive; // size=0, offset=2
  char autoBrakeOn; // size=0, offset=3
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct CAR_LOCALS {
  long vel[4]; // size=16, offset=0
  long avel[4]; // size=16, offset=16
  int extraangulardamping; // size=0, offset=32
  int aggressive; // size=0, offset=36
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct GAP_INFO {
  struct DVECTOR offset; // size=4, offset=0
  char clear; // size=0, offset=4
};
struct ADJACENT_ROAD_INFO {
  struct DVECTOR offset; // size=4, offset=0
  struct GAP_INFO gap; // size=6, offset=4
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct RGB16 {
  short r; // size=0, offset=0
  short g; // size=0, offset=2
  short b; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct UnpaddedHackVector {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
  short vy; // size=0, offset=8
};
struct UnpaddedCharVector {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
};
struct BVECTOR {
  char vx; // size=0, offset=0
  char vy; // size=0, offset=1
  char vz; // size=0, offset=2
  char pad; // size=0, offset=3
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
enum ExplosionType : short {
  BIG_BANG = 0,
  LITTLE_BANG = 1,
  HEY_MOMMA = 666,
  BANG_USED = 999,
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct _sdPlane {
  short surface; // size=0, offset=0
  short a; // size=0, offset=2
  short b; // size=0, offset=4
  short c; // size=0, offset=6
  int d; // size=0, offset=8
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct CAR_POLY {
  int vindices; // size=0, offset=0
  int nindices; // size=0, offset=4
  int clut_uv0; // size=0, offset=8
  int tpage_uv1; // size=0, offset=12
  int uv3_uv2; // size=0, offset=16
  short originalindex; // size=0, offset=20
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct __tunnelcoords {
  struct VECTOR p1; // size=16, offset=0
  struct VECTOR p2; // size=16, offset=16
};

// 108 typedefs
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct CELL_OBJECT CELL_OBJECT;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct _CAR_DATA CAR_DATA;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_TYPE HANDLING_TYPE;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct CAR_LOCALS CAR_LOCALS;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct GAP_INFO GAP_INFO;
typedef struct ADJACENT_ROAD_INFO ADJACENT_ROAD_INFO;
typedef struct MAPPING MAPPING;
typedef struct UV UV;
typedef struct RGB16 RGB16;
typedef struct BVECTOR BVECTOR;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct _sdPlane sdPlane;
typedef struct MR_TIMER MR_TIMER;
typedef struct CAR_POLY CAR_POLY;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct __tunnelcoords tunnelcoords;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 2 external declarations
extern struct _sdPlane *dbSurfacePtr; // offset 0x000aa9cc
extern int impulse; // offset 0x000ab318

// 5 functions
/*
 * Offset 0x81178, from D:\driver2\game\C\WHEELFORCES.C (lines 98..281)
 * Stack frame base $sp, size 264
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ StepOneCar(struct _CAR_DATA *cp /*$s1*/)
{ // line 1, offset 0x81178
  struct CAR_LOCALS _cl; // stack offset -248
  struct CAR_LOCALS *cl; // $s3
  int i; // $s0
  int speed; // $v1
  struct _sdPlane *SurfacePtr; // stack offset -48
  { // line 24, offset 0x81214
    int a; // $v1
    int b; // $a0
  } // line 33, offset 0x8127c
  { // line 35, offset 0x8127c
    long deepestNormal[4]; // stack offset -208
    long deepestLever[4]; // stack offset -192
    long deepestPoint[4]; // stack offset -176
    int lift; // $s5
    int count; // $a0
    int friToUse; // $s6
    struct SVECTOR *carDisp; // $a1
    { // line 58, offset 0x81314
      long pointPos[4]; // stack offset -160
      long surfacePoint[4]; // stack offset -144
      long surfaceNormal[4]; // stack offset -128
      long lever[4]; // stack offset -112
      int newLift; // $a0
    } // line 98, offset 0x81410
    { // line 103, offset 0x81428
      long pointVel[4]; // stack offset -112
      long reaction[4]; // stack offset -96
      int strikeVel; // $a2
      int componant; // $t3
      static int frictionLimit[6]; // offset 0x0
      { // line 111, offset 0x81428
        int lever_dot_n; // $v1
        int twistY; // $v0
        int displacementsquared; // $a0
        int denom; // $a0
      } // line 111, offset 0x81428
      { // line 128, offset 0x81630
        int loss; // $v1
        int limit; // $a1
      } // line 132, offset 0x8166c
      { // line 137, offset 0x816b8
        { // line 139, offset 0x816cc
          struct VECTOR direction; // stack offset -80
        } // line 139, offset 0x816cc
        { // line 144, offset 0x8170c
          struct VECTOR direction; // stack offset -64
        } // line 146, offset 0x81744
      } // line 151, offset 0x8179c
    } // line 152, offset 0x8179c
    { // line 158, offset 0x8186c
      struct VECTOR offset; // stack offset -112
    } // line 171, offset 0x81944
  } // line 172, offset 0x81944
} // line 184, offset 0x8198c
/*
 * Offset 0x8198C, from D:\driver2\game\C\WHEELFORCES.C (lines 288..393)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ GetFrictionScalesDriver1(struct _CAR_DATA *cp /*$t0*/, struct CAR_LOCALS *cl /*$a1*/, int *frontFS /*$a2*/, int *rearFS /*$a3*/)
{ // line 1, offset 0x8198c
  struct _HANDLING_TYPE *hp; // $t2
  { // line 18, offset 0x81a1c
    int q; // $v1
  } // line 26, offset 0x81a98
  { // line 99, offset 0x81dc8
    int traction; // $a0
  } // line 105, offset 0x81e20
} // line 106, offset 0x81e20
/*
 * Offset 0x81E20, from D:\driver2\game\C\WHEELFORCES.C (lines 412..438)
 * Stack frame base $sp, size 16
 */
void /*$ra*/ ConvertTorqueToAngularAcceleration(struct _CAR_DATA *cp /*$a0*/, struct CAR_LOCALS *cl /*$t5*/)
{ // line 1, offset 0x81e20
  long nose[4]; // stack offset -16
  int zd; // $a3
  int i; // $t4
  int twistY; // $t0
  int twistZ; // $v1
} // line 27, offset 0x81f50
/*
 * Offset 0x81F50, from D:\driver2\game\C\WHEELFORCES.C (lines 442..693)
 * Stack frame base $sp, size 208
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ AddWheelForcesDriver1(struct _CAR_DATA *cp /*$s2*/, struct CAR_LOCALS *cl /*$s7*/)
{ // line 1, offset 0x81f50
  int oldSpeed; // $v1
  int frictionScale; // $fp
  int frontFS; // stack offset -96
  int rearFS; // stack offset -92
  int i; // stack offset -84
  int cdx; // stack offset -80
  int cdz; // stack offset -76
  int sdx; // stack offset -72
  int sdz; // stack offset -68
  int friction_coef; // $s6
  struct CAR_COSMETICS *car_cos; // stack offset -64
  struct _sdPlane *SurfacePtr; // stack offset -88
  int player_id; // stack offset -60
  { // line 27, offset 0x820a4
    int oldCompression; // $s5
    int newCompression; // $s3
    int susForce; // $s0
    long wheelPos[4]; // stack offset -176
    long surfacePoint[4]; // stack offset -160
    long surfaceNormal[4]; // stack offset -144
    { // line 46, offset 0x82140
      short typ; // $v1
    } // line 55, offset 0x821d8
    { // line 71, offset 0x82284
      int chan; // $s1
    } // line 83, offset 0x8231c
    { // line 95, offset 0x82380
      struct VECTOR force; // stack offset -128
      long pointVel[4]; // stack offset -112
      int lfx; // $a2
      int lfz; // $t2
      int sidevel; // $t0
      int slidevel; // $t1
      { // line 112, offset 0x8248c
      } // line 117, offset 0x824f0
      { // line 150, offset 0x82630
        int hack; // $v0
        int hx; // $v0
        int hz; // $v1
      } // line 150, offset 0x82630
      { // line 203, offset 0x828f0
        int a; // $v1
      } // line 206, offset 0x82928
    } // line 229, offset 0x82a04
  } // line 237, offset 0x82adc
} // line 252, offset 0x82bd0
/*
 * Offset 0x82BD0, from D:\driver2\game\C\WHEELFORCES.C (lines 66..82)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ StepCars()
{ // line 2, offset 0x82bd0
  struct _CAR_DATA **ppCar; // $s0
  struct _CAR_DATA **end; // $s1
  { // line 7, offset 0x82c0c
  } // line 10, offset 0x82c0c
  { // line 14, offset 0x82c34
  } // line 15, offset 0x82c34
} // line 17, offset 0x82c64
Source file(s) D:\driver2\game\C\XAPLAY.C+D:\driver2\game\XAPLAY.C, object file obj\xaplay.obj overlay id <none>

// 29 complex types
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct CdlFILTER {
  unsigned char file; // size=0, offset=0
  unsigned char chan; // size=0, offset=1
  unsigned short pad; // size=0, offset=2
};
struct CdlFILE {
  struct CdlLOC pos; // size=4, offset=0
  unsigned long size; // size=0, offset=4
  char name[16]; // size=16, offset=8
};
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct XA_TRACK {
  int start; // size=0, offset=0
  int end; // size=0, offset=4
};

// 54 typedefs
typedef struct CdlLOC CdlLOC;
typedef struct CdlFILTER CdlFILTER;
typedef struct CdlFILE CdlFILE;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct SndVolume2 SndVolume2;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct XA_TRACK XA_TRACK;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *CdlCB();
typedef void *SsMarkCallbackProc();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();

// 0 labels

// 11 external declarations
extern char *XANames[4]; // offset 0x000a1f20
static unsigned long finished_count; // offset 0x000aa9d0
static int gPlaying; // offset 0x000aa9d4
extern unsigned short gChannel; // offset 0x000aa9d8
static int xa_prepared; // offset 0x000aa9dc
static unsigned short CurrentChannel; // offset 0x000ab320
static unsigned short ID; // offset 0x000ab322
static int StartPos; // offset 0x000ab324
static struct CdlLOC pause_loc; // offset 0x000ab328
static unsigned long buffer[8]; // offset 0x000e11a8
extern struct XA_TRACK XAMissionMessages[4]; // offset 0x000e11c8

// 11 functions
/*
 * Offset 0x82C64, from D:\driver2\game\C\XAPLAY.C (lines 265..289)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ PlayXA(int num /*$a3*/, int index /*$t0*/)
{ // line 1, offset 0x82c64
  struct CdlFILTER filt; // stack offset -40
  struct CdlLOC loc; // stack offset -32
  unsigned char res[8]; // stack offset -24
} // line 25, offset 0x82d48
/*
 * Offset 0x82D60, from D:\driver2\game\C\XAPLAY.C (lines 155..166)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ GetXAData(int number /*$a0*/)
{ // line 1, offset 0x82d60
  int i; // $s0
  struct CdlFILE fp; // stack offset -32
} // line 12, offset 0x82dac
/*
 * Offset 0x82DAC, from D:\driver2\game\C\XAPLAY.C (lines 226..248)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PrepareXA()
{ // line 2, offset 0x82dac
  unsigned char param[4]; // stack offset -16
} // line 23, offset 0x82e58
/*
 * Offset 0x82E68, from D:\driver2\game\C\XAPLAY.C (lines 320..336)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ UnprepareXA()
{ // line 2, offset 0x82e68
  unsigned char param[4]; // stack offset -16
} // line 17, offset 0x82eb0
/*
 * Offset 0x82EC0, from D:\driver2\game\C\XAPLAY.C (lines 128..143)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ GetMissionXAData(int number /*$s0*/)
{ // line 1, offset 0x82ec0
  struct CdlFILE fp; // stack offset -32
} // line 16, offset 0x82f18
/*
 * Offset 0x82F18, from D:\driver2\game\C\XAPLAY.C (lines 185..196)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetXAVolume(int volume /*$a0*/)
{ // line 1, offset 0x82f18
} // line 12, offset 0x82f78
/*
 * Offset 0x82F78, from D:\driver2\game\C\XAPLAY.C (lines 343..348)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ StopXA()
{
}
/*
 * Offset 0x82FC4, from D:\driver2\game\C\XAPLAY.C (lines 386..407)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ResumeXA()
{ // line 2, offset 0x82fc4
  struct CdlFILTER filt; // stack offset -32
  unsigned char res[8]; // stack offset -24
} // line 22, offset 0x83064
/*
 * Offset 0x83078, from D:\driver2\game\C\XAPLAY.C (lines 418..432)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PauseXA()
{ // line 1, offset 0x83078
  unsigned char res[8]; // stack offset -16
} // line 15, offset 0x830e0
/*
 * Offset 0x830F0, from D:\driver2\game\C\XAPLAY.C (lines 310..310)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ XAPrepared()
{
}
/*
 * Offset 0x830FC, from D:\driver2\game\C\XAPLAY.C (lines 355..376)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ cbready(int intr /*$s1*/, unsigned char *result /*$a1*/)
{
}
Source file(s) D:\driver2\game\C\XMPLAY.C+D:\driver2\game\XMPLAY.C, object file obj\xmplay.obj overlay id <none>

// 14 complex types
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuReverbAttr {
  unsigned long mask; // size=0, offset=0
  long mode; // size=0, offset=4
  struct SpuVolume depth; // size=4, offset=8
  long delay; // size=0, offset=12
  long feedback; // size=0, offset=16
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct XM_HeaderInfo {
  unsigned short BPM; // size=0, offset=0
  unsigned short Speed; // size=0, offset=2
};
struct XM_VABInfo {
  unsigned char *Address; // size=0, offset=0
  unsigned long Size; // size=0, offset=4
};
struct XM_Feedback {
  unsigned char Volume; // size=0, offset=0
  short Panning; // size=0, offset=2
  int CurrentStart; // size=0, offset=4
  short PlayNext; // size=0, offset=8
  unsigned short SongLength; // size=0, offset=10
  unsigned char Status; // size=0, offset=12
  unsigned short PatternPos; // size=0, offset=14
  short SongPos; // size=0, offset=16
  unsigned short CurrentPattern; // size=0, offset=18
  unsigned short SongSpeed; // size=0, offset=20
  unsigned short SongBPM; // size=0, offset=22
  int SongLoop; // size=0, offset=24
  int ActiveVoices; // size=0, offset=28
};
struct XMHEADER {
  unsigned short version; // size=0, offset=0
  unsigned short songlength; // size=0, offset=2
  unsigned short restart; // size=0, offset=4
  unsigned short numchn; // size=0, offset=6
  unsigned short numpat; // size=0, offset=8
  unsigned short numins; // size=0, offset=10
  unsigned short flags; // size=0, offset=12
  unsigned short tempo; // size=0, offset=14
  unsigned short bpm; // size=0, offset=16
  unsigned short XMChannels; // size=0, offset=18
  unsigned short XMPSXChannels; // size=0, offset=20
  unsigned long *JAP_PAT_ADDR[256]; // size=1024, offset=24
  unsigned long *JAP_PAT_ADDR2[256]; // size=1024, offset=1048
  unsigned long *JAP_InstrumentOffset[128]; // size=512, offset=2072
  unsigned long *JAP_SampAddr[128]; // size=512, offset=2584
  unsigned long *JAP_SampHdrAddr[128]; // size=512, offset=3096
  unsigned char jorders[256]; // size=256, offset=3608
  int S3MPanning; // size=0, offset=3864
};
struct XMCHANNEL {
  unsigned short Octave; // size=0, offset=0
  short LVol; // size=0, offset=2
  short RVol; // size=0, offset=4
  short OldLVol; // size=0, offset=6
  short OldRVol; // size=0, offset=8
  unsigned short OldPeriod; // size=0, offset=10
  unsigned char OldSample; // size=0, offset=12
  unsigned long OldSOff; // size=0, offset=16
  unsigned long SOffset; // size=0, offset=20
  unsigned char nothing; // size=0, offset=24
  unsigned char ChDead; // size=0, offset=25
  unsigned char panenvflg; // size=0, offset=26
  unsigned char panenvpts; // size=0, offset=27
  unsigned char panenvsus; // size=0, offset=28
  unsigned char panenvbeg; // size=0, offset=29
  unsigned char panenvend; // size=0, offset=30
  short panenvp; // size=0, offset=32
  unsigned short panenva; // size=0, offset=34
  unsigned short panenvb; // size=0, offset=36
  unsigned short keyoffspd; // size=0, offset=38
  unsigned char envflg; // size=0, offset=40
  unsigned char envpts; // size=0, offset=41
  unsigned char envsus; // size=0, offset=42
  unsigned char envbeg; // size=0, offset=43
  unsigned char envend; // size=0, offset=44
  short envp; // size=0, offset=46
  unsigned short enva; // size=0, offset=48
  unsigned short envb; // size=0, offset=50
  unsigned char ins; // size=0, offset=52
  unsigned char vol; // size=0, offset=53
  unsigned char dat; // size=0, offset=54
  unsigned char datold; // size=0, offset=55
  unsigned char eff; // size=0, offset=56
  unsigned char not; // size=0, offset=57
  unsigned char oldvslide; // size=0, offset=58
  unsigned char oldfvslide; // size=0, offset=59
  unsigned char oldfslide; // size=0, offset=60
  short fadevol; // size=0, offset=62
  unsigned char keyon; // size=0, offset=64
  unsigned char kick; // size=0, offset=65
  unsigned char sample; // size=0, offset=66
  short handle; // size=0, offset=68
  unsigned long start; // size=0, offset=72
  unsigned char panning; // size=0, offset=76
  unsigned char pansspd; // size=0, offset=77
  char volume; // size=0, offset=78
  unsigned short period; // size=0, offset=80
  unsigned short SPUPitch; // size=0, offset=82
  char transpose; // size=0, offset=84
  unsigned char note; // size=0, offset=85
  short ownper; // size=0, offset=86
  short ownvol; // size=0, offset=88
  short UserVol; // size=0, offset=90
  char retrig; // size=0, offset=92
  unsigned short c2spd; // size=0, offset=94
  char tmpvolume; // size=0, offset=96
  unsigned short tmpperiod; // size=0, offset=98
  unsigned short wantedperiod; // size=0, offset=100
  unsigned short slidespeed; // size=0, offset=102
  unsigned short portspeed; // size=0, offset=104
  unsigned char s3mtremor; // size=0, offset=106
  unsigned char s3mvolslide; // size=0, offset=107
  unsigned char s3mrtgspeed; // size=0, offset=108
  unsigned char s3mrtgslide; // size=0, offset=109
  unsigned char glissando; // size=0, offset=110
  unsigned char wavecontrol; // size=0, offset=111
  char vibpos; // size=0, offset=112
  unsigned char vibspd; // size=0, offset=113
  unsigned char vibdepth; // size=0, offset=114
  char trmpos; // size=0, offset=115
  unsigned char trmspd; // size=0, offset=116
  unsigned char trmdepth; // size=0, offset=117
  unsigned char SPUChannel; // size=0, offset=118
  unsigned char Dolby; // size=0, offset=119
};
struct XMSONG {
  unsigned char Status; // size=0, offset=0
  int HeaderNum; // size=0, offset=4
  int CurPos; // size=0, offset=8
  unsigned short reppos; // size=0, offset=12
  unsigned short repcnt; // size=0, offset=14
  unsigned short vbtick; // size=0, offset=16
  unsigned short patbrk; // size=0, offset=18
  unsigned char patdly; // size=0, offset=20
  unsigned char patdly2; // size=0, offset=21
  unsigned short numrow; // size=0, offset=22
  short posjmp; // size=0, offset=24
  unsigned short PatternPos; // size=0, offset=26
  short SongPos; // size=0, offset=28
  unsigned short CurrentPattern; // size=0, offset=30
  unsigned short SongSpeed; // size=0, offset=32
  unsigned short SongBPM; // size=0, offset=34
  int SongLoop; // size=0, offset=36
  unsigned char SongVolume; // size=0, offset=40
  unsigned char MasterVolume; // size=0, offset=41
  int XMActiveVoices; // size=0, offset=44
  int NotAmiga; // size=0, offset=48
  unsigned char XMPlay; // size=0, offset=52
  int FirstCh; // size=0, offset=56
  int JBPM; // size=0, offset=60
  int PCounter; // size=0, offset=64
  unsigned short PatSize; // size=0, offset=68
  unsigned long *PatAdr; // size=0, offset=72
  unsigned long *PatAdr2; // size=0, offset=76
  int PlayMask; // size=0, offset=80
  int SFXNum; // size=0, offset=84
  struct XMCHANNEL XM_Chnl[24]; // size=2880, offset=88
  int JUp; // size=0, offset=2968
  short PlayNext; // size=0, offset=2972
  short BPlayNext; // size=0, offset=2974
  short BPlayFlag; // size=0, offset=2976
  int CurrentStart; // size=0, offset=2980
  unsigned char VabID; // size=0, offset=2984
  short UserPan; // size=0, offset=2986
  unsigned char MaxChans; // size=0, offset=2988
};

// 32 typedefs
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuReverbAttr SpuReverbAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct XM_HeaderInfo XM_HeaderInfo;
typedef struct XM_VABInfo XM_VABInfo;
typedef struct XM_Feedback XM_Feedback;
typedef struct XMHEADER XMHEADER;
typedef struct XMCHANNEL XMCHANNEL;
typedef struct XMSONG XMSONG;
typedef unsigned int size_t;
typedef unsigned long wchar_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;

// 0 labels

// 38 external declarations
extern short iVABID[8]; // offset 0x000a1f30
extern short XMSongIDs[24]; // offset 0x000a1f40
extern short XMSPU_SFX[24]; // offset 0x000a1f70
extern unsigned short lintab[768]; // offset 0x000a1fa0
extern unsigned short logtab[104]; // offset 0x000a25a0
static unsigned char VibratoTable[32]; // offset 0x000a2670
extern int JPPer; // offset 0x000aaa04
extern int XM_SCAN; // offset 0x000aa9e0
extern int JPError; // offset 0x000aa9e4
extern char MonoMode; // offset 0x000aa9e8
extern int XM_NSA; // offset 0x000aa9ec
extern int XM_HA; // offset 0x000aa9f0
extern int tt; // offset 0x000aa9f4
extern int aa; // offset 0x000aa9f8
extern int dd; // offset 0x000aa9fc
extern int de; // offset 0x000aaa00
extern int XMTime1; // offset 0x000ab338
extern int XMTime2; // offset 0x000ab33c
extern int XMTime3; // offset 0x000ab340
extern int JP_Do_Nothing; // offset 0x000ab368
extern int BPMLimit; // offset 0x000ab354
extern int PALType; // offset 0x000ab344
extern int XM_FrameSpeed; // offset 0x000ab360
extern struct XMCHANNEL *XMC; // offset 0x000ab35c
extern struct XMCHANNEL *XMCU; // offset 0x000ab36c
extern struct XMHEADER *mh; // offset 0x000ab348
extern struct XMHEADER *mhu; // offset 0x000ab370
extern struct XMSONG *ms; // offset 0x000ab34c
extern struct XMSONG *mu; // offset 0x000ab350
extern int CurrentCh; // offset 0x000ab374
extern int DVL; // offset 0x000ab358
extern int DVR; // offset 0x000ab364
extern struct SpuVoiceAttr xm_g_s_attr; // offset 0x000e1208
extern struct SpuVoiceAttr uxm_g_s_attr; // offset 0x000e22a8
extern struct SpuReverbAttr xm_r_attr; // offset 0x000e22e8
extern unsigned long xm_l_vag_spu_addr[8][128]; // offset 0x000e12a8
extern unsigned char *XM_SngAddress[24]; // offset 0x000e1248
extern unsigned char *XM_HeaderAddress[8]; // offset 0x000e11e8

// 69 functions
/*
 * Offset 0x831B0, from D:\driver2\game\C\XMPLAY.C (lines 454..520)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ InitXMData(unsigned char *mpp /*$s5*/, int XM_ID /*$a1*/, int S3MPan /*$a2*/)
{ // line 1, offset 0x831b0
  int t; // $s2
  int a; // $s4
  int c; // $s3
  unsigned long b; // $a2
  unsigned short b2; // $v1
} // line 67, offset 0x8344c
/*
 * Offset 0x8344C, from D:\driver2\game\C\XMPLAY.C (lines 627..777)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ XM_Init(int VabID /*$s5*/, int XM_ID /*$s4*/, int SongID /*$s0*/, int FirstCh /*$s2*/, int Loop /*stack 16*/, int PlayMask /*stack 20*/, int PlayType /*stack 24*/, int SFXNum /*stack 28*/, int Loop /*$v0*/, int PlayMask /*$v1*/, int PlayType /*$s6*/, int SFXNum /*$s1*/)
{ // line 1, offset 0x8344c
  int i; // $s1
  int pmsk; // $v1
  int Chn; // $s0
  int t; // $a2
  int SngID; // $s3
  int fr; // $a3
} // line 151, offset 0x8392c
/*
 * Offset 0x8392C, from D:\driver2\game\C\XMPLAY.C (lines 788..875)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ JPlayNote(unsigned char *j /*$s0*/, int pmsk /*$s3*/)
{ // line 1, offset 0x8392c
  unsigned char b; // $s1
  int ret; // $s2
  unsigned char note; // $s4
} // line 88, offset 0x83b64
/*
 * Offset 0x83B64, from D:\driver2\game\C\XMPLAY.C (lines 885..1003)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ JPlayEffects()
{ // line 2, offset 0x83b64
  unsigned char vol; // $a1
  unsigned char eff; // $s1
  unsigned char dat; // $s0
} // line 119, offset 0x83da4
/*
 * Offset 0x83DA4, from D:\driver2\game\C\XMPLAY.C (lines 1012..1173)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SPE(unsigned char eff /*$a0*/, unsigned char dat /*$s0*/)
{ // line 1, offset 0x83da4
  int hi; // $v1
  int lo; // $a0
} // line 162, offset 0x841b0
/*
 * Offset 0x841B0, from D:\driver2\game\C\XMPLAY.C (lines 1182..1319)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DoEEffects(unsigned char dat /*$a0*/)
{ // line 1, offset 0x841b0
  unsigned char nib; // $a1
} // line 138, offset 0x84524
/*
 * Offset 0x84524, from D:\driver2\game\C\XMPLAY.C (lines 1448..1508)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetPer()
{ // line 2, offset 0x84524
  unsigned long *j; // $a1
} // line 61, offset 0x846c8
/*
 * Offset 0x846D8, from D:\driver2\game\C\XMPLAY.C (lines 1596..1671)
 * Stack frame base $sp, size 8
 */
void /*$ra*/ DoS3MRetrig(unsigned char inf /*$a0*/)
{ // line 1, offset 0x846d8
  unsigned char hi; // $a1
} // line 76, offset 0x848f0
/*
 * Offset 0x848F0, from D:\driver2\game\C\XMPLAY.C (lines 1710..1745)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DoVibrato()
{ // line 2, offset 0x848f0
  unsigned char q; // $a1
  unsigned short temp; // $a2
} // line 36, offset 0x849f0
/*
 * Offset 0x849F0, from D:\driver2\game\C\XMPLAY.C (lines 1754..1793)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DoTremolo()
{ // line 2, offset 0x849f0
  unsigned char q; // $a2
  unsigned short temp; // $a3
} // line 40, offset 0x84b3c
/*
 * Offset 0x84B3C, from D:\driver2\game\C\XMPLAY.C (lines 1921..2094)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ UpdatePatternData(int SC /*$a0*/)
{ // line 1, offset 0x84b3c
  int SP; // $s1
  int t; // $s0
  int pmsk; // $a2
  int FindOffset; // $t0
  unsigned char *pataddr; // $a0
  unsigned char patdat; // $a1
} // line 174, offset 0x85018
/*
 * Offset 0x85034, from D:\driver2\game\C\XMPLAY.C (lines 2195..2280)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ ApplyEffs()
{ // line 2, offset 0x85034
  short envpan; // $s2
  short envvol; // $s1
  int t; // $s3
  int pmsk; // $v1
  short vlm; // $s0
  short Pn; // $a1
  unsigned char MaxChans; // $s4
} // line 86, offset 0x85350
/*
 * Offset 0x85374, from D:\driver2\game\C\XMPLAY.C (lines 2322..2358)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DoDolbySS()
{
}
/*
 * Offset 0x85448, from D:\driver2\game\C\XMPLAY.C (lines 2398..2502)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ UpdateHardware()
{ // line 2, offset 0x85448
  int t; // $s2
  int prd; // $s0
  int SPUKeyOn; // $s6
  int pmsk; // $v1
  int Chnl; // $s1
  unsigned char MaxChans; // $s3
  int i; // $v1
} // line 105, offset 0x8577c
/*
 * Offset 0x857A4, from D:\driver2\game\C\XMPLAY.C (lines 2564..2626)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
short /*$ra*/ ProcessEnvelope(short v /*$a2*/, unsigned char keyon /*$a1*/, int JSmp /*$a2*/)
{ // line 1, offset 0x857a4
  unsigned char a2; // $s2
  unsigned char b; // $s0
  unsigned short p; // $s1
  unsigned long *j; // $s5
  short bpos; // $s3
} // line 63, offset 0x85974
/*
 * Offset 0x85974, from D:\driver2\game\C\XMPLAY.C (lines 2635..2698)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
short /*$ra*/ ProcessPanEnvelope(short v /*$a2*/, unsigned char keyon /*$a1*/, int JSmp /*$a2*/)
{ // line 1, offset 0x85974
  unsigned char a2; // $s2
  unsigned char b; // $s0
  unsigned short p; // $s1
  unsigned long *j; // $s5
  short bpos; // $s3
} // line 64, offset 0x85b44
/*
 * Offset 0x85B44, from D:\driver2\game\C\XMPLAY.C (lines 3206..3225)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ XM_Restart(int Song_ID /*$a1*/)
{ // line 1, offset 0x85b44
  int t; // $s0
} // line 20, offset 0x85c24
/*
 * Offset 0x85C38, from D:\driver2\game\C\XMPLAY.C (lines 3160..3178)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ XM_Pause(int Song_ID /*$a1*/)
{ // line 1, offset 0x85c38
  int t; // $s0
} // line 19, offset 0x85d04
/*
 * Offset 0x85D18, from D:\driver2\game\C\XMPLAY.C (lines 331..341)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ XM_Exit()
{ // line 2, offset 0x85d18
  int i; // $s0
} // line 11, offset 0x85d78
/*
 * Offset 0x85D78, from D:\driver2\game\C\XMPLAY.C (lines 374..384)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ XM_Update()
{ // line 2, offset 0x85d78
} // line 11, offset 0x85db8
/*
 * Offset 0x85DC8, from D:\driver2\game\C\XMPLAY.C (lines 429..439)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ XM_PlayStop(int Song_ID /*$a1*/)
{
}
/*
 * Offset 0x85E38, from D:\driver2\game\C\XMPLAY.C (lines 409..419)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_PlayStart(int Song_ID /*$a2*/, int PlayMask /*$a1*/)
{
}
/*
 * Offset 0x85E8C, from D:\driver2\game\C\XMPLAY.C (lines 2707..2735)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_SetSongPos(int Song_ID /*$a2*/, unsigned short pos /*$a1*/)
{ // line 1, offset 0x85e8c
  int t; // $a2
} // line 29, offset 0x85f74
/*
 * Offset 0x85F7C, from D:\driver2\game\C\XMPLAY.C (lines 592..608)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_OnceOffInit(int PAL /*$a0*/)
{
}
/*
 * Offset 0x85FB4, from D:\driver2\game\C\XMPLAY.C (lines 345..350)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ XM_CloseVAB(int VabID /*$a1*/)
{
}
/*
 * Offset 0x86008, from D:\driver2\game\C\XMPLAY.C (lines 3273..3283)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_SetMasterVol(int Song_ID /*$a2*/, unsigned char Vol /*$a1*/)
{
}
/*
 * Offset 0x8605C, from D:\driver2\game\C\XMPLAY.C (lines 3331..3332)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ XM_FreeVAG(int addr /*$a0*/)
{
}
/*
 * Offset 0x8607C, from D:\driver2\game\C\XMPLAY.C (lines 1855..1883)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ UpdateWithTimer(int SC /*$a3*/)
{
}
/*
 * Offset 0x86178, from D:\driver2\game\C\XMPLAY.C (lines 1887..1915)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ XM_DoFullUpdate(int SC /*$s1*/)
{
}
/*
 * Offset 0x86234, from D:\driver2\game\C\XMPLAY.C (lines 3351..3354)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ XM_Quit(int SongID /*$s0*/)
{
}
/*
 * Offset 0x86278, from D:\driver2\game\C\XMPLAY.C (lines 3449..3458)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ XM_GetFreeVAB()
{ // line 2, offset 0x86278
  int i; // $v1
} // line 10, offset 0x862b0
/*
 * Offset 0x862B8, from D:\driver2\game\C\XMPLAY.C (lines 3461..3463)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_SetVAGAddress(int VabID /*$a0*/, int slot /*$a1*/, int addr /*$a2*/)
{
}
/*
 * Offset 0x862F0, from D:\driver2\game\C\XMPLAY.C (lines 354..366)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_CloseVAB2(int VabID /*$a3*/)
{ // line 1, offset 0x862f0
  int i; // $v0
} // line 13, offset 0x86358
/*
 * Offset 0x86358, from D:\driver2\game\C\XMPLAY.C (lines 3511..3516)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_SetSongAddress(unsigned char *Address /*$a0*/)
{
}
/*
 * Offset 0x8639C, from D:\driver2\game\C\XMPLAY.C (lines 3506..3507)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ XM_GetSongSize()
{
}
/*
 * Offset 0x863A4, from D:\driver2\game\C\XMPLAY.C (lines 3527..3528)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_FreeAllSongIDs()
{
}
/*
 * Offset 0x863B0, from D:\driver2\game\C\XMPLAY.C (lines 3537..3542)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ XM_SetFileHeaderAddress(unsigned char *Address /*$a0*/)
{
}
/*
 * Offset 0x863E4, from D:\driver2\game\C\XMPLAY.C (lines 3532..3533)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ XM_GetFileHeaderSize()
{
}
/*
 * Offset 0x863EC, from D:\driver2\game\C\XMPLAY.C (lines 256..280)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 ra
 */
unsigned short /*$ra*/ GetLogPeriod(unsigned char note /*$a0*/, unsigned short fine /*$a1*/)
{ // line 1, offset 0x863ec
} // line 25, offset 0x86484
/*
 * Offset 0x86484, from D:\driver2\game\C\XMPLAY.C (lines 1831..1850)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ UpdateXMData()
{ // line 2, offset 0x86484
  int SC; // $s0
} // line 20, offset 0x86520
/*
 * Offset 0x86538, from D:\driver2\game\C\XMPLAY.C (lines 1817..1821)
 * Stack frame base $sp, size 0
 */
short /*$ra*/ DoVol(unsigned long a /*$v0*/, short b /*$a1*/, short c /*$a2*/)
{
}
/*
 * Offset 0x86560, from D:\driver2\game\C\XMPLAY.C (lines 1802..1803)
 * Stack frame base $sp, size 0
 */
short /*$ra*/ DoPan(short envpan /*$a0*/, short pan /*$a1*/)
{
}
/*
 * Offset 0x865B4, from D:\driver2\game\C\XMPLAY.C (lines 1545..1552)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DoVolSlide(unsigned char dat /*$a1*/)
{
}
/*
 * Offset 0x86644, from D:\driver2\game\C\XMPLAY.C (lines 1680..1701)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DoToneSlide()
{ // line 2, offset 0x86644
  int dist; // $v1
} // line 22, offset 0x866ac
/*
 * Offset 0x866AC, from D:\driver2\game\C\XMPLAY.C (lines 1561..1587)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DoXMPanSlide(unsigned char inf /*$a0*/)
{ // line 1, offset 0x866ac
  unsigned char lo; // $v0
  unsigned char hi; // $a0
  short pan; // $v1
} // line 27, offset 0x86730
/*
 * Offset 0x86738, from D:\driver2\game\C\XMPLAY.C (lines 1517..1536)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ Arpeggio(unsigned char dat /*$a1*/)
{ // line 1, offset 0x86738
  unsigned char note; // $a2
} // line 20, offset 0x867e4
/*
 * Offset 0x867E4, from D:\driver2\game\C\XMPLAY.C (lines 1372..1432)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetInstr(unsigned char inst /*$a0*/)
{ // line 1, offset 0x867e4
  unsigned long *j; // $a2
} // line 61, offset 0x868d8
/*
 * Offset 0x868E0, from D:\driver2\game\C\XMPLAY.C (lines 1328..1362)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetNote(unsigned char note /*$a0*/)
{ // line 1, offset 0x868e0
  unsigned char *j; // $a0
} // line 35, offset 0x869b8
/*
 * Offset 0x869C0, from D:\driver2\game\C\XMPLAY.C (lines 568..583)
 * Stack frame base $sp, size 0
 */
unsigned long /*$ra*/ GetLong(unsigned char *mpp /*$a0*/)
{ // line 1, offset 0x869c0
} // line 16, offset 0x869ec
/*
 * Offset 0x869EC, from D:\driver2\game\C\XMPLAY.C (lines 237..247)
 * Stack frame base $sp, size 0
 */
short /*$ra*/ Interpolate(short p /*$a0*/, short p1 /*$a1*/, short p2 /*$a2*/, short v1 /*$a3*/, int v2 /*stack 16*/)
{ // line 1, offset 0x869ec
} // line 11, offset 0x86a6c
/*
 * Offset 0x86A6C, from D:\driver2\game\C\XMPLAY.C (lines 288..289)
 * Stack frame base $sp, size 0
 */
unsigned short /*$ra*/ JPGetPeriod(unsigned char note /*$a0*/, short fine /*$a1*/)
{
}
/*
 * Offset 0x86AA0, from D:\driver2\game\C\XMPLAY.C (lines 299..306)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
unsigned short /*$ra*/ GetPeriod(unsigned char note /*$a2*/, unsigned short c2spd /*$a1*/)
{ // line 1, offset 0x86aa0
} // line 8, offset 0x86af0
/*
 * Offset 0x86AF0, from D:\driver2\game\C\XMPLAY.C (lines 2540..2555)
 * Stack frame base $sp, size 0
 */
long /*$ra*/ GetFreq2(long period /*$v1*/)
{ // line 2, offset 0x86af0
  int okt; // $a1
  long frequency; // $a0
} // line 16, offset 0x86b48
/*
 * Offset 0x86B48, from D:\driver2\game\C\XMPLAY.C (lines 3068..3082)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: ra
 */
void /*$ra*/ CurrentKeyStat()
{ // line 2, offset 0x86b48
  int t; // $a1
  char KeyStat[24]; // stack offset -32
} // line 15, offset 0x86bf4
/*
 * Offset 0x86BF4, from D:\driver2\game\C\XMPLAY.C (lines 3091..3094)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ StpCh(int Channel /*$a0*/)
{
}
/*
 * Offset 0x86C18, from D:\driver2\game\C\XMPLAY.C (lines 3115..3116)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetFrq(int Channel /*$a0*/, int Pitch /*$a1*/)
{
}
/*
 * Offset 0x86C38, from D:\driver2\game\C\XMPLAY.C (lines 3104..3105)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetVol(int Channel /*$a0*/, int LVol /*$a1*/, int RVol /*$a2*/)
{
}
/*
 * Offset 0x86C64, from D:\driver2\game\C\XMPLAY.C (lines 3003..3025)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ PlaySFX(int VBID /*$a0*/, int Channel /*$a1*/, int Inst /*$a2*/, int Pitch /*$a3*/, int LV /*stack 16*/, int RV /*stack 20*/, int LV /*$v0*/, int RV /*$t2*/)
{ // line 1, offset 0x86c64
} // line 23, offset 0x86cf8
/*
 * Offset 0x86CF8, from D:\driver2\game\C\XMPLAY.C (lines 3308..3322)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ClearSPU(int VBID /*$a0*/)
{ // line 1, offset 0x86cf8
  int i; // $s1
  int Amount; // $a1
} // line 15, offset 0x86d74
/*
 * Offset 0x86D74, from D:\driver2\game\C\XMPLAY.C (lines 3035..3057)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ InitSPUChannel(int Channel /*$a0*/)
{
}
/*
 * Offset 0x86DDC, from D:\driver2\game\C\XMPLAY.C (lines 3126..3150)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ SilenceXM(int Song_ID /*$a0*/)
{ // line 2, offset 0x86ddc
  int t; // $s0
  int i; // $s1
  int c; // $a0
  int pmsk; // $v0
} // line 25, offset 0x86ebc
/*
 * Offset 0x86EBC, from D:\driver2\game\C\XMPLAY.C (lines 2289..2312)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ UpdateEffs()
{ // line 2, offset 0x86ebc
  int t; // $s0
  int pmsk; // $v1
  unsigned char MaxChans; // $s1
} // line 24, offset 0x86f54
/*
 * Offset 0x86F70, from D:\driver2\game\C\XMPLAY.C (lines 2516..2526)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ IntVols(int Vol1 /*$a0*/, int Vol2 /*$a1*/)
{ // line 1, offset 0x86f70
  int a; // $v1
} // line 11, offset 0x86fa0
/*
 * Offset 0x86FA0, from D:\driver2\game\C\XMPLAY.C (lines 3337..3348)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetFreeSongID()
{ // line 2, offset 0x86fa0
  int i; // $v1
} // line 12, offset 0x86ff0
/*
 * Offset 0x86FF0, from D:\driver2\game\C\XMPLAY.C (lines 3359..3367)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ JPClearSPUFlags(int SongID /*$a0*/)
{ // line 1, offset 0x86ff0
  int i; // $a1
} // line 9, offset 0x87024
/*
 * Offset 0x87024, from D:\driver2\game\C\XMPLAY.C (lines 2099..2113)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ CalcPlayPos(int StartPos /*$s4*/)
{ // line 1, offset 0x87024
  int SP; // $s1
  int t; // $s0
  int i; // $a1
} // line 15, offset 0x870dc
/*
 * Offset 0x870DC, from D:\driver2\game\C\XMPLAY.C (lines 2143..2186)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ JCalcPat(unsigned char *j /*$a0*/)
{ // line 2, offset 0x870dc
  unsigned char b; // $v1
  int ret; // $a1
} // line 44, offset 0x8714c
/*
 * Offset 0x8714C, from D:\driver2\game\C\XMPLAY.C (lines 2116..2138)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ PACKEDCalcPlayPos(int StartPos /*$s3*/)
{ // line 1, offset 0x8714c
  int SP; // $s0
  int i; // $a1
  unsigned char *pataddr; // $a0
  unsigned char patdat; // $v1
} // line 23, offset 0x87228
/*
 * Offset 0x87228, from D:\driver2\game\C\XMPLAY.C (lines 2368..2395)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetEmpty(int old /*$t1*/)
{ // line 1, offset 0x87228
  int i; // $a3
  struct XMCHANNEL *j; // $a0
} // line 28, offset 0x872f0
Source file(s) D:\driver2\game\FEMAIN.C+D:\driver2\game\FRONTEND\FEMAIN.C, object file obj\femain.obj overlay id <none>

// 77 complex types
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct MATRIX {
  short m[3][3]; // size=18, offset=0
  long t[3]; // size=12, offset=20
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_FT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct DR_MOVE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[5]; // size=20, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct SVECTOR_NOPAD {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct XYPAIR {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct SXYPAIR {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct PSXSCREEN {
  char index; // size=0, offset=0
  unsigned char numButtons; // size=0, offset=1
  char userFunctionNum; // size=0, offset=2
  struct PSXBUTTON buttons[8]; // size=480, offset=4
};
struct PADRECORD {
  unsigned char pad; // size=0, offset=0
  char analogue; // size=0, offset=1
  unsigned char run; // size=0, offset=2
};
enum PAUSEMODE : char {
  PAUSEMODE_PAUSE = 0,
  PAUSEMODE_PAUSEP1 = 1,
  PAUSEMODE_PAUSEP2 = 2,
  PAUSEMODE_GAMEOVER = 3,
  PAUSEMODE_COMPLETE = 4,
  PAUSEMODE_PADERROR = 5,
};
struct DRAW_MODE {
  short x1; // size=0, offset=0
  short y1; // size=0, offset=2
  short x2; // size=0, offset=4
  short y2; // size=0, offset=6
  short width; // size=0, offset=8
  short height; // size=0, offset=10
  short framex; // size=0, offset=12
  short framey; // size=0, offset=14
};
struct DB {
  char *primptr; // size=0, offset=0
  unsigned long *ot; // size=0, offset=4
  char *primtab; // size=0, offset=8
  int id; // size=0, offset=12
  struct DRAWENV draw; // size=92, offset=16
  struct DISPENV disp; // size=20, offset=108
};
struct UV {
  unsigned char u0; // size=0, offset=0
  unsigned char v0; // size=0, offset=1
  unsigned char u1; // size=0, offset=2
  unsigned char v1; // size=0, offset=3
  unsigned char u2; // size=0, offset=4
  unsigned char v2; // size=0, offset=5
  unsigned char u3; // size=0, offset=6
  unsigned char v3; // size=0, offset=7
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct ARC_ENTRY {
  short offset; // size=0, offset=0
  short length; // size=0, offset=2
};
struct USVECTOR_NOPAD {
  unsigned short vx; // size=0, offset=0
  unsigned short vy; // size=0, offset=2
  unsigned short vz; // size=0, offset=4
};
struct _COP_DATA {
  int speed; // size=0, offset=0
  int power; // size=0, offset=4
  int min; // size=0, offset=8
  int max; // size=0, offset=12
};
struct _TARGET {
  int data[16]; // size=64, offset=0
};
struct LEAD_PARAMETERS {
  int tEnd; // size=0, offset=0
  int tAvelLimit; // size=0, offset=4
  int tDist; // size=0, offset=8
  int tDistMul; // size=0, offset=12
  int tWidth; // size=0, offset=16
  int tWidthMul; // size=0, offset=20
  int tWidth80; // size=0, offset=24
  int tWidth80Mul; // size=0, offset=28
  int hEnd; // size=0, offset=32
  int dEnd; // size=0, offset=36
  int hDist; // size=0, offset=40
  int hDistMul; // size=0, offset=44
  int hWidth; // size=0, offset=48
  int hWidthMul; // size=0, offset=52
  int hWidth80; // size=0, offset=56
  int hWidth80Mul; // size=0, offset=60
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct STREAM_SOURCE {
  unsigned char type; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  char controlType; // size=0, offset=3
  unsigned short flags; // size=0, offset=4
  unsigned short rotation; // size=0, offset=6
  struct VECTOR_NOPAD position; // size=12, offset=8
  int totaldamage; // size=0, offset=20
  int damage[6]; // size=24, offset=24
};
struct MR_TIMER {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  unsigned char flags; // size=0, offset=4
  unsigned char min; // size=0, offset=5
  unsigned char sec; // size=0, offset=6
  unsigned char frac; // size=0, offset=7
  long count; // size=0, offset=8
};
struct _CAR_DATA {
  struct _HANDLING_DATA hd; // size=240, offset=0
  union RigidBodyState st; // size=52, offset=240
  struct _APPEARANCE_DATA ap; // size=100, offset=292
  unsigned char hndType; // size=0, offset=392
  unsigned char controlType; // size=0, offset=393
  unsigned char controlFlags; // size=0, offset=394
  char id; // size=0, offset=395
  union {
    char *padid; // size=0, offset=0
    struct CIV_STATE c; // size=252, offset=0
    struct COP p; // size=40, offset=0
    struct LEAD_CAR l; // size=104, offset=0
  } ai; // size=252, offset=396
  int *inform; // size=0, offset=648
  short thrust; // size=0, offset=652
  short felonyRating; // size=0, offset=654
  char handbrake; // size=0, offset=656
  char wheelspin; // size=0, offset=657
  char wasOnGround; // size=0, offset=658
  char lowDetail; // size=0, offset=659
  short wheel_angle; // size=0, offset=660
  unsigned short totalDamage; // size=0, offset=662
  long lastPad; // size=0, offset=664
};
struct CIV_ROUTE_ENTRY {
  short dir; // size=0, offset=0
  unsigned short pathType; // size=0, offset=2
  int distAlongSegment; // size=0, offset=4
  int x; // size=0, offset=8
  int z; // size=0, offset=12
};
struct CIV_STATE {
  int currentRoad; // size=0, offset=0
  int currentNode; // size=0, offset=4
  struct CIV_ROUTE_ENTRY *ctrlNode; // size=16, offset=8
  unsigned char ctrlState; // size=0, offset=12
  unsigned char trafficLightPhaseId; // size=0, offset=13
  unsigned char changeLane; // size=0, offset=14
  unsigned char turnDir; // size=0, offset=15
  char brakeLight; // size=0, offset=16
  unsigned char oldLane; // size=0, offset=17
  unsigned char changeLaneCount; // size=0, offset=18
  unsigned char pad3; // size=0, offset=19
  int turnNode; // size=0, offset=20
  int changeLaneIndicateCount; // size=0, offset=24
  int carPauseCnt; // size=0, offset=28
  int velRatio; // size=0, offset=32
  struct CIV_ROUTE_ENTRY targetRoute[13]; // size=208, offset=36
  struct CIV_ROUTE_ENTRY *pnode; // size=16, offset=244
  unsigned char maxSpeed; // size=0, offset=248
  unsigned char thrustState; // size=0, offset=249
  unsigned char carMustDie; // size=0, offset=250
  unsigned char currentLane; // size=0, offset=251
};
struct CAR_COSMETICS {
  struct SVECTOR headLight; // size=8, offset=0
  struct SVECTOR frontInd; // size=8, offset=8
  struct SVECTOR backInd; // size=8, offset=16
  struct SVECTOR brakeLight; // size=8, offset=24
  struct SVECTOR revLight; // size=8, offset=32
  struct SVECTOR policeLight; // size=8, offset=40
  struct SVECTOR exhaust; // size=8, offset=48
  struct SVECTOR smoke; // size=8, offset=56
  struct SVECTOR fire; // size=8, offset=64
  struct SVECTOR wheelDisp[4]; // size=32, offset=72
  short extraInfo; // size=0, offset=104
  short powerRatio; // size=0, offset=106
  short cbYoffset; // size=0, offset=108
  short susCoeff; // size=0, offset=110
  short traction; // size=0, offset=112
  short wheelSize; // size=0, offset=114
  struct SVECTOR cPoints[12]; // size=96, offset=116
  struct SVECTOR colBox; // size=8, offset=212
  struct SVECTOR cog; // size=8, offset=220
  short twistRateX; // size=0, offset=228
  short twistRateY; // size=0, offset=230
  short twistRateZ; // size=0, offset=232
  short mass; // size=0, offset=234
};
struct VECTOR2 {
  int vx; // size=0, offset=0
  int vz; // size=0, offset=4
};
struct COP {
  struct VECTOR2 targetHistory[2]; // size=16, offset=0
  char routeInMemory; // size=0, offset=16
  char justPinged; // size=0, offset=17
  char close_pursuit; // size=0, offset=18
  char dying; // size=0, offset=19
  unsigned short DistanceToPlayer; // size=0, offset=20
  short desiredSpeed; // size=0, offset=22
  short recalcTimer; // size=0, offset=24
  short stuckTimer; // size=0, offset=26
  short lastRecoverStrategy; // size=0, offset=28
  short recoveryTimer; // size=0, offset=30
  short hiddenTimer; // size=0, offset=32
  short frontLClear; // size=0, offset=34
  short frontRClear; // size=0, offset=36
};
struct LEAD_CAR {
  char dstate; // size=0, offset=0
  char ctt; // size=0, offset=1
  short targetDir; // size=0, offset=2
  int targetX; // size=0, offset=4
  int targetZ; // size=0, offset=8
  int currentRoad; // size=0, offset=12
  int lastRoad; // size=0, offset=16
  int nextJunction; // size=0, offset=20
  int nextTurn; // size=0, offset=24
  int nextExit; // size=0, offset=28
  int stuckCount; // size=0, offset=32
  int panicCount; // size=0, offset=36
  int recoverTime; // size=0, offset=40
  int roadPosition; // size=0, offset=44
  int roadForward; // size=0, offset=48
  int boringness; // size=0, offset=52
  int avoid; // size=0, offset=56
  int lastTarget; // size=0, offset=60
  int offRoad; // size=0, offset=64
  int width; // size=0, offset=68
  int d; // size=0, offset=72
  int base_Normal; // size=0, offset=76
  int base_Angle; // size=0, offset=80
  int base_Dir; // size=0, offset=84
  int outsideSpoolRegion; // size=0, offset=88
  int direction; // size=0, offset=92
  int lastDirection; // size=0, offset=96
  char takeDamage; // size=0, offset=100
};
union RigidBodyState {
  long v[13]; // size=52, offset=0
  struct {
    long fposition[3]; // size=12, offset=0
    long orientation[4]; // size=16, offset=12
    long linearVelocity[3]; // size=12, offset=28
    long angularVelocity[3]; // size=12, offset=40
  } n; // size=52, offset=0
};
struct WHEEL {
  char susCompression; // size=0, offset=0
  char locked; // size=0, offset=1
  char onGrass; // size=0, offset=2
  unsigned char surface; // size=0, offset=3
};
struct OrientedBox {
  struct VECTOR_NOPAD location; // size=12, offset=0
  struct SVECTOR_NOPAD radii[3]; // size=18, offset=12
  short length[3]; // size=6, offset=30
};
struct _HANDLING_DATA {
  struct MATRIX where; // size=32, offset=0
  struct MATRIX drawCarMat; // size=32, offset=32
  long acc[4]; // size=16, offset=64
  long aacc[4]; // size=16, offset=80
  int wheel_speed; // size=0, offset=96
  int speed; // size=0, offset=100
  int direction; // size=0, offset=104
  char gear; // size=0, offset=108
  char changingGear; // size=0, offset=109
  char mayBeColliding; // size=0, offset=110
  char autoBrake; // size=0, offset=111
  struct WHEEL wheel[4]; // size=16, offset=112
  short revs; // size=0, offset=128
  struct VECTOR shadowPoints[4]; // size=64, offset=132
  int front_vel; // size=0, offset=196
  int rear_vel; // size=0, offset=200
  struct OrientedBox oBox; // size=36, offset=204
};
struct _APPEARANCE_DATA {
  struct SXYPAIR light_trails[4][4]; // size=64, offset=0
  struct CAR_COSMETICS *carCos; // size=236, offset=64
  short old_clock[4]; // size=8, offset=68
  char life; // size=0, offset=76
  char coplife; // size=0, offset=77
  short qy; // size=0, offset=78
  short qw; // size=0, offset=80
  char life2; // size=0, offset=82
  char model; // size=0, offset=83
  char palette; // size=0, offset=84
  char needsDenting; // size=0, offset=85
  short damage[6]; // size=12, offset=86
};
struct PEDESTRIAN {
  struct PEDESTRIAN *pNext; // size=92, offset=0
  struct PEDESTRIAN *pPrev; // size=92, offset=4
  void *fpRestState(); // size=0, offset=8
  void *fpAgitatedState(); // size=0, offset=12
  char padId; // size=0, offset=16
  enum PED_MODEL_TYPES pedType; // size=1, offset=17
  struct VECTOR_NOPAD position; // size=12, offset=20
  struct SVECTOR dir; // size=8, offset=32
  struct SVECTOR velocity; // size=8, offset=40
  struct VECTOR target; // size=16, offset=48
  int flags; // size=0, offset=64
  short head_pos; // size=0, offset=68
  short head_rot; // size=0, offset=70
  short index; // size=0, offset=72
  short last_dir; // size=0, offset=74
  short interest; // size=0, offset=76
  char frame1; // size=0, offset=78
  char *motion; // size=0, offset=80
  char speed; // size=0, offset=84
  char doing_turn; // size=0, offset=85
  char finished_turn; // size=0, offset=86
  char seat_index; // size=0, offset=87
  unsigned char pallet; // size=0, offset=88
  enum PED_ACTION_TYPE type; // size=1, offset=89
};
enum PED_ACTION_TYPE : char {
  PED_ACTION_WALK = 0,
  PED_ACTION_RUN = 1,
  PED_ACTION_BACK = 2,
  PED_ACTION_GETINCAR = 3,
  PED_ACTION_GETOUTCAR = 4,
  PED_ACTION_TIME = 5,
  PED_ACTION_PRESSBUTTON = 6,
  PED_ACTION_SIT = 7,
  PED_ACTION_CIVWALK = 8,
  PED_ACTION_CIVRUN = 9,
  PED_ACTION_JUMP = 10,
  PED_ACTION_CIVSIT = 11,
  PED_ACTION_COPSTAND = 12,
  PED_ACTION_COPCROUCH = 13,
  PED_ACTION_TALK = 14,
  PED_ACTION_STOPPING = 15,
};
enum PED_MODEL_TYPES : char {
  TANNER_MODEL = 0,
  OTHER_MODEL = 1,
  OTHER_SPRITE = 2,
  CIVILIAN = 3,
};
struct __skidinfo {
  char chan; // size=0, offset=0
  char sound; // size=0, offset=1
};
struct __horninfo {
  char on; // size=0, offset=0
  char time; // size=0, offset=1
  char request; // size=0, offset=2
};
struct RENDER_ARG {
  unsigned char render; // size=0, offset=0
  unsigned char credits; // size=0, offset=1
  unsigned short recap; // size=0, offset=2
};
struct RENDER_ARGS {
  unsigned char nRenders; // size=0, offset=0
  unsigned char subtitle; // size=0, offset=1
  char screenx; // size=0, offset=2
  char screeny; // size=0, offset=3
  struct RENDER_ARG Args[4]; // size=16, offset=4
};
struct FE_CHARDATA {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
  unsigned char w; // size=0, offset=2
  unsigned char h; // size=0, offset=3
};
struct FE_FONT {
  int NumFonts; // size=0, offset=0
  struct FE_CHARDATA CharInfo[256]; // size=1024, offset=4
};
struct SCREEN_LIMITS {
  short minx; // size=0, offset=0
  short miny; // size=0, offset=2
  short maxx; // size=0, offset=4
  short maxy; // size=0, offset=6
};
struct BOTCH {
  int missNum; // size=0, offset=0
  char **name; // size=0, offset=4
};

// 111 typedefs
typedef struct CdlLOC CdlLOC;
typedef struct MATRIX MATRIX;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_FT3 POLY_FT3;
typedef struct POLY_FT4 POLY_FT4;
typedef struct SPRT SPRT;
typedef struct DR_MOVE DR_MOVE;
typedef struct SndVolume2 SndVolume2;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct SVECTOR_NOPAD SVECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct XYPAIR XYPAIR;
typedef struct SXYPAIR SXYPAIR;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct PSXSCREEN PSXSCREEN;
typedef struct PADRECORD PADRECORD;
typedef enum PAUSEMODE PAUSEMODE;
typedef struct DRAW_MODE DRAW_MODE;
typedef struct DB DB;
typedef struct UV UV;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct ARC_ENTRY ARC_ENTRY;
typedef struct USVECTOR_NOPAD USVECTOR_NOPAD;
typedef struct _COP_DATA MS_COP_DATA;
typedef struct _TARGET MS_TARGET;
typedef struct LEAD_PARAMETERS LEAD_PARAMETERS;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct STREAM_SOURCE STREAM_SOURCE;
typedef struct MR_TIMER MR_TIMER;
typedef struct _CAR_DATA CAR_DATA;
typedef struct CIV_ROUTE_ENTRY CIV_ROUTE_ENTRY;
typedef struct CIV_STATE CIV_STATE;
typedef struct CAR_COSMETICS CAR_COSMETICS;
typedef struct VECTOR2 VECTOR2;
typedef struct COP COP;
typedef struct LEAD_CAR LEAD_CAR;
typedef union RigidBodyState RigidBodyState;
typedef struct WHEEL WHEEL;
typedef struct OrientedBox OrientedBox;
typedef struct _HANDLING_DATA HANDLING_DATA;
typedef struct _APPEARANCE_DATA APPEARANCE_DATA;
typedef struct PEDESTRIAN PEDESTRIAN;
typedef enum PED_ACTION_TYPE PED_ACTION_TYPE;
typedef enum PED_MODEL_TYPES PED_MODEL_TYPES;
typedef struct __skidinfo skidinfo;
typedef struct __horninfo horninfo;
typedef struct RENDER_ARG RENDER_ARG;
typedef struct RENDER_ARGS RENDER_ARGS;
typedef struct FE_CHARDATA FE_CHARDATA;
typedef struct FE_FONT FE_FONT;
typedef struct SCREEN_LIMITS SCREEN_LIMITS;
typedef struct BOTCH BOTCH;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *CdlCB();
typedef void *SsMarkCallbackProc();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;
typedef long LONGQUATERNION[4];
typedef unsigned long ulong;
typedef struct PEDESTRIAN *LPPEDESTRIAN;
typedef struct SEATED_PEDESTRIANS *SEATEDPTR;
typedef struct PEDESTRIAN_ROADS *LPPEDESTRIAN_ROADS;

// 0 labels

// 71 external declarations
extern int bRedrawFrontend; // offset 0x001c6aa0
static char *carSelectPlayerText[2]; // offset 0x001c676c
static char *gameNames[64]; // offset 0x001c6774
static char *cheatText[5]; // offset 0x001c6874
static char *CutSceneNames[28]; // offset 0x001c6888
static char *MissionName[37]; // offset 0x001c68f8
extern struct SCREEN_LIMITS screen_limits[2]; // offset 0x001c698c
extern int bDoingScores; // offset 0x001c699c
extern int cutSelection; // offset 0x001c69a0
extern int bDoingCutSelect; // offset 0x001c69a4
extern char *cutGfxNames[4]; // offset 0x001c69a8
extern int CutAmounts[5]; // offset 0x001c69b8
extern int CutAmountsTotal[5]; // offset 0x001c69cc
extern char cutUnlock[41]; // offset 0x001c69e0
extern int carSelection; // offset 0x001c6a0c
extern char *gfxNames[4]; // offset 0x001c6a10
extern int currCity; // offset 0x001c6a70
extern int missionSetup; // offset 0x001c6a74
extern char loaded[3]; // offset 0x001c6a78
extern char lastCity; // offset 0x001c6a7b
extern char lastCutCity; // offset 0x001c6a7c
extern int bInCutSelect; // offset 0x001c6a80
extern int currPlayer; // offset 0x001c6a84
extern int bDoingCarSelect; // offset 0x001c6a88
extern int currSelIndex; // offset 0x001c6a8c
extern int bDrawExtra; // offset 0x001c6a90
extern int bScreenSetup; // offset 0x001c6a94
extern struct RECT storeRect; // offset 0x001c6a98
extern int bWantCDReset; // offset 0x001c6aa4
extern int bRequestedKey; // offset 0x001c6aa8
extern int bDoneAllready; // offset 0x001c6aac
extern int bMissionSelect; // offset 0x001c6ab0
extern int allowVibration; // offset 0x001c6ab4
extern int numPadsConnected; // offset 0x001c6ab8
extern int padsConnected[2]; // offset 0x001c6abc
extern int mainScreenLoaded; // offset 0x001c6ac4
extern int bCdIconSetup; // offset 0x001c6ac8
extern char carNumLookup[4][10]; // offset 0x001c6acc
extern int CarAvailability[4][10]; // offset 0x001c6af4
extern int oldActionSet; // offset 0x001c6b94
extern int minmaxSelections[4][2]; // offset 0x001c6b98
extern struct BOTCH botch[38]; // offset 0x001c6bb8
extern int GameNum; // offset 0x001c6ce8
extern char *CityNames[4]; // offset 0x001c6cec
extern struct CVECTOR scoreCol; // offset 0x001c6cfc
extern struct CVECTOR otherCol; // offset 0x001c6d00
extern char *contNames[2]; // offset 0x001c6d04
extern short fePad; // offset 0x001cc5dc
extern int currMission; // offset 0x001cc54c
extern struct SPRT extraSprt; // offset 0x001cc5c8
extern struct POLY_FT3 extraDummy; // offset 0x001cbdb8
extern struct FE_FONT feFont; // offset 0x001cbdd8
extern struct DR_MOVE In; // offset 0x001cc550
extern struct DR_MOVE Out; // offset 0x001cc570
extern int idle_timer; // offset 0x001cbdb0
extern struct PSXSCREEN PsxScreens[42]; // offset 0x001c6d50
extern struct PSXSCREEN *pCurrScreen; // offset 0x001cc264
extern struct PSXBUTTON *pCurrButton; // offset 0x001cc548
extern struct PSXSCREEN *pNewScreen; // offset 0x001c6d48
extern struct PSXBUTTON *pNewButton; // offset 0x001cbcb8
extern struct POLY_FT4 ScreenPolys[8]; // offset 0x001cc368
extern struct POLY_FT4 BackgroundPolys[6]; // offset 0x001cbcc0
extern struct SPRT HighlightSprt; // offset 0x001cc590
extern struct POLY_FT3 HighlightDummy; // offset 0x001cc5a8
extern struct SPRT ScreenSprts[8]; // offset 0x001cc4a8
extern struct POLY_FT3 ScreenDummy[8]; // offset 0x001cc268
extern char ScreenTitle[128]; // offset 0x001cc1e0
extern int oldActionVal; // offset 0x001cc568
extern int oldSfxLevel; // offset 0x001cc260
extern int oldMusicLevel; // offset 0x001cc588
static struct POLY_FT4 cd_sprite; // offset 0x001c6d20

// 40 functions
/*
 * Offset 0x1C0974, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1205..1361)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ SetVariable(int var /*$a0*/)
{ // line 1, offset 0x1c0974
  int code; // $v1
  int value; // $a2
} // line 157, offset 0x1c0c1c
/*
 * Offset 0x1C0C1C, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1371..1453)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ LoadFrontendScreens()
{ // line 2, offset 0x1c0c1c
  int iTpage; // $s0
  int iNumScreens; // $t6
  int i; // $t0
  int j; // $a3
  struct RECT rect; // stack offset -40
  char *ptr; // $a2
} // line 83, offset 0x1c0f24
/*
 * Offset 0x1C0F24, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1461..1508)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ LoadBackgroundFile(char *name /*$s4*/)
{ // line 1, offset 0x1c0f24
  int iTpage; // $s2
  struct RECT rect; // stack offset -72
  int p; // $s0
  int pages[7]; // stack offset -64
} // line 48, offset 0x1c10f4
/*
 * Offset 0x1C10F4, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1516..1579)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetupBackgroundPolys()
{ // line 2, offset 0x1c10f4
  int i; // $v1
  int tpage; // $t3
} // line 64, offset 0x1c132c
/*
 * Offset 0x1C132C, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1588..1649)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SetupScreenSprts(struct PSXSCREEN *pScr /*$a0*/)
{ // line 1, offset 0x1c132c
  int tpage; // $a1
  struct POLY_FT3 *null; // $v0
} // line 62, offset 0x1c147c
/*
 * Offset 0x1C147C, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1658..1759)
 * Stack frame base $sp, size 120
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawScreen(struct PSXSCREEN *pScr /*stack 0*/)
{ // line 1, offset 0x1c147c
  int i; // $s1
  char version_info[32]; // stack offset -88
  int numBtnsToDraw; // stack offset -56
} // line 102, offset 0x1c18b4
/*
 * Offset 0x1C18E4, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1769..1846)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ DisplayOnScreenText()
{ // line 2, offset 0x1c18e4
  int i; // $s0
  char text[32]; // stack offset -64
  { // line 26, offset 0x1c19dc
    { // line 28, offset 0x1c19e4
    } // line 29, offset 0x1c19ec
  } // line 30, offset 0x1c19ec
  { // line 38, offset 0x1c1a4c
    int extraVal; // $t1
  } // line 41, offset 0x1c1aac
} // line 78, offset 0x1c1ad0
/*
 * Offset 0x1C1AD0, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1855..1915)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ SetupExtraPoly(char *fileName /*$s5*/, int offset /*$s1*/, int offset2 /*$s0*/)
{ // line 1, offset 0x1c1ad0
  int i; // $s0
  int tpage; // $v1
  struct RECT rect; // stack offset -40
} // line 61, offset 0x1c1cf4
/*
 * Offset 0x1C1CF4, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1941..1979)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ReInitScreens()
{
}
/*
 * Offset 0x1C1E18, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 1991..2084)
 * Stack frame base $sp, size 80
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ NewSelection(short dir /*$s3*/)
{ // line 1, offset 0x1c1e18
  struct RECT rect; // stack offset -48
  struct PSXBUTTON *pNewB; // $s2
} // line 94, offset 0x1c227c
/*
 * Offset 0x1C22A8, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2093..2231)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ HandleKeyPress()
{ // line 2, offset 0x1c22a8
  { // line 19, offset 0x1c2340
    int action; // $s0
    { // line 48, offset 0x1c244c
    } // line 73, offset 0x1c2510
  } // line 93, offset 0x1c2564
} // line 139, offset 0x1c2668
/*
 * Offset 0x1C2668, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2300..2416)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ PadChecks()
{ // line 2, offset 0x1c2668
  int i; // $a2
  int oldnum; // $s2
} // line 117, offset 0x1c296c
/*
 * Offset 0x1C296C, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2423..2587)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DoFrontEnd()
{ // line 2, offset 0x1c296c
  static unsigned char result[8]; // offset 0x0
} // line 165, offset 0x1c2c2c
/*
 * Offset 0x1C2C2C, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2630..2686)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ SetFEDrawMode()
{ // line 2, offset 0x1c2c2c
  struct DRAW_MODE *dm; // $s3
} // line 57, offset 0x1c2d90
/*
 * Offset 0x1C2D90, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2745..2808)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: s0 s1 s2 s3 s4
 */
int /*$ra*/ FEPrintString(char *string /*$t1*/, int x /*$t2*/, int y /*$s4*/, int justification /*$a3*/, int r /*stack 16*/, int g /*stack 20*/, int b /*stack 24*/, unsigned char r /*$t9*/, unsigned char g /*$t8*/, unsigned char b /*$t7*/)
{ // line 1, offset 0x1c2d90
  struct FE_CHARDATA *pFontInfo; // $a0
  struct SPRT *font; // $t0
  unsigned char let; // $a0
  int counter; // $t4
  { // line 1, offset 0x1c2dec
    char *pString; // $a1
    { // line 1, offset 0x1c2dec
      char let; // $v1
      int w; // $a2
    } // line 1, offset 0x1c2e38
  } // line 1, offset 0x1c2e38
  { // line 47, offset 0x1c2f28
    int tpage; // $v1
  } // line 47, offset 0x1c2f28
} // line 64, offset 0x1c2fd8
/*
 * Offset 0x1C2FD8, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2817..2879)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: s0 s1 s2 s3 s4
 */
int /*$ra*/ FEPrintStringSized(char *string /*$t2*/, int x /*$t1*/, int y /*$t7*/, int scale /*$a3*/, int transparent /*stack 16*/, int r /*stack 20*/, int g /*stack 24*/, int b /*stack 28*/, int transparent /*$s4*/, unsigned char r /*$s2*/, unsigned char g /*$s1*/, unsigned char b /*$s0*/)
{ // line 1, offset 0x1c2fd8
  struct POLY_FT4 *font; // $t0
  struct FE_CHARDATA *pFontInfo; // $a2
  char let; // $v1
  int tpage; // $v0
  int w; // $t3
  int h; // $t4
} // line 63, offset 0x1c31fc
/*
 * Offset 0x1C31FC, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2894..2986)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ CentreScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C3430, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 3029..3211)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ CarSelectScreen(int bSetup /*$a0*/)
{ // line 2, offset 0x1c3430
  int i; // $a0
  struct RECT rect; // stack offset -32
  { // line 116, offset 0x1c373c
    int lastVal; // $a3
    { // line 1, offset 0x1c37bc
      { // line 1, offset 0x1c37bc
        struct RECT rect; // stack offset -24
      } // line 1, offset 0x1c37bc
    } // line 1, offset 0x1c37bc
  } // line 1, offset 0x1c37bc
  { // line 135, offset 0x1c37d0
    int lastVal; // $a3
    { // line 1, offset 0x1c3858
      { // line 1, offset 0x1c3858
        struct RECT rect; // stack offset -24
      } // line 1, offset 0x1c3858
    } // line 1, offset 0x1c3858
  } // line 1, offset 0x1c3858
} // line 183, offset 0x1c3a60
/*
 * Offset 0x1C3A60, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 3256..3303)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ VibroOnOffScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C3B1C, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 3394..3624)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ MissionSelectScreen(int bSetup /*$a0*/)
{ // line 2, offset 0x1c3b1c
  int i; // $a1
  { // line 29, offset 0x1c3bdc
    int usedB; // $s2
    int done; // $t0
    int bP; // $a3
    int bN; // $s5
    int shift; // $a3
  } // line 158, offset 0x1c40d8
} // line 231, offset 0x1c4338
/*
 * Offset 0x1C4338, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 3632..3719)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
int /*$ra*/ MissionCityScreen(int bSetup /*$a0*/)
{ // line 6, offset 0x1c4338
  { // line 71, offset 0x1c449c
    { // line 71, offset 0x1c449c
      struct RECT rect; // stack offset -16
    } // line 71, offset 0x1c449c
  } // line 71, offset 0x1c449c
  { // line 77, offset 0x1c44c4
    { // line 77, offset 0x1c44c4
      struct RECT rect; // stack offset -16
    } // line 77, offset 0x1c44c4
  } // line 77, offset 0x1c44c4
} // line 88, offset 0x1c4600
/*
 * Offset 0x1C4600, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 3728..3846)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: ra
 */
int /*$ra*/ CutSceneSelectScreen(int bSetup /*$a0*/)
{ // line 2, offset 0x1c4600
  struct RENDER_ARGS renderArgs; // stack offset -48
  int extraVal; // $a0
  struct RECT rect; // stack offset -24
  { // line 61, offset 0x1c4798
    { // line 61, offset 0x1c4798
      struct RECT rect; // stack offset -16
    } // line 61, offset 0x1c4798
  } // line 61, offset 0x1c4798
  { // line 1, offset 0x1c4844
    int offset; // $a1
    { // line 1, offset 0x1c4844
      struct RECT rect; // stack offset -16
    } // line 1, offset 0x1c4844
  } // line 1, offset 0x1c4844
  { // line 80, offset 0x1c4900
    { // line 80, offset 0x1c4900
      struct RECT rect; // stack offset -16
    } // line 80, offset 0x1c4900
  } // line 80, offset 0x1c4900
  { // line 85, offset 0x1c4940
    { // line 85, offset 0x1c4940
      struct RECT rect; // stack offset -16
    } // line 85, offset 0x1c4940
  } // line 85, offset 0x1c4940
} // line 119, offset 0x1c4b30
/*
 * Offset 0x1C4B30, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 3855..3994)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: ra
 */
int /*$ra*/ CutSceneCitySelectScreen(int bSetup /*$a0*/)
{ // line 2, offset 0x1c4b30
  struct RECT rect; // stack offset -24
  { // line 1, offset 0x1c4e6c
    { // line 1, offset 0x1c4e6c
      struct RECT rect; // stack offset -16
    } // line 1, offset 0x1c4e6c
  } // line 1, offset 0x1c4e6c
  { // line 1, offset 0x1c4e6c
    { // line 1, offset 0x1c4e6c
      struct RECT rect; // stack offset -16
    } // line 1, offset 0x1c4e6c
  } // line 1, offset 0x1c4e6c
  { // line 1, offset 0x1c4eb4
    { // line 1, offset 0x1c4eb4
      struct RECT rect; // stack offset -16
    } // line 1, offset 0x1c4eb4
  } // line 1, offset 0x1c4eb4
  { // line 1, offset 0x1c4fac
    { // line 1, offset 0x1c4fac
      struct RECT rect; // stack offset -16
    } // line 1, offset 0x1c50a0
  } // line 1, offset 0x1c50a0
} // line 140, offset 0x1c50b0
/*
 * Offset 0x1C50B0, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4005..4147)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ SetVolumeScreen(int bSetup /*$a0*/)
{ // line 2, offset 0x1c50b0
  int last; // $s2
  char text[4]; // stack offset -48
  int ypos[2]; // stack offset -40
  struct RECT rect; // stack offset -32
  { // line 43, offset 0x1c5254
    { // line 43, offset 0x1c5254
      struct DB *db_hold; // $a1
    } // line 43, offset 0x1c5254
  } // line 43, offset 0x1c5254
  { // line 65, offset 0x1c5284
    { // line 65, offset 0x1c5284
      struct DB *db_hold; // $a1
    } // line 65, offset 0x1c5284
  } // line 65, offset 0x1c5284
  { // line 92, offset 0x1c52cc
    { // line 92, offset 0x1c52cc
      struct DB *db_hold; // $a1
    } // line 92, offset 0x1c52cc
  } // line 92, offset 0x1c52cc
  { // line 114, offset 0x1c5420
    { // line 114, offset 0x1c5420
      struct DB *db_hold; // $a1
    } // line 117, offset 0x1c5530
  } // line 117, offset 0x1c5530
} // line 143, offset 0x1c55f8
/*
 * Offset 0x1C55F8, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4165..4220)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DisplayScoreTable()
{ // line 2, offset 0x1c55f8
  int offset; // $a2
  int i; // $s4
  char text[32]; // stack offset -80
  struct SCORE_ENTRY *pSE; // stack offset -48
  int min; // $v1
  int frac; // $t0
} // line 56, offset 0x1c59a0
/*
 * Offset 0x1C59A0, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4227..4313)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ ScoreScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C5B4C, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4434..4567)
 * Stack frame base $sp, size 120
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CheatScreen(int bSetup /*$a0*/)
{ // line 2, offset 0x1c5b4c
  int numOpen; // $s5
  int i; // $s1
  int k; // $s6
  int *uc; // $s2
  unsigned char cheatOn[12]; // stack offset -104
  int hackLookup1[4]; // stack offset -88
  int hackLookup2[4]; // stack offset -72
  { // line 39, offset 0x1c5c6c
    int evilRuss[4]; // stack offset -56
  } // line 126, offset 0x1c606c
} // line 134, offset 0x1c60a0
/*
 * Offset 0x1C60A0, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4642..4655)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ GameNameScreen(int bSetup /*$a0*/)
{ // line 2, offset 0x1c60a0
  int offset; // $s3
} // line 14, offset 0x1c61ac
/*
 * Offset 0x1C61AC, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4671..4708)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ FEInitCdIcon()
{ // line 2, offset 0x1c61ac
  int i; // $a0
  struct RECT dest; // stack offset -24
  unsigned short *palette; // $a2
} // line 38, offset 0x1c62f8
/*
 * Offset 0x1C62F8, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4716..4734)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: ra
 */
void /*$ra*/ FEDrawCDicon()
{ // line 2, offset 0x1c62f8
  unsigned short *palette; // $a1
  int temp; // $a2
  int i; // $a0
  struct RECT dest; // stack offset -16
} // line 19, offset 0x1c6378
/*
 * Offset 0x1C6378, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 2695..2715)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ EndFrame()
{ // line 2, offset 0x1c6378
  struct DB *db_hold; // $a1
} // line 21, offset 0x1c6404
/*
 * Offset 0x1C6404, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 3220..3243)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CopDiffLevelScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C64B0, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4322..4335)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ SubtitlesOnOffScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C64FC, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4345..4363)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CityCutOffScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C6548, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4378..4402)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ ControllerScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C6614, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4412..4425)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ MainScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C6654, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4575..4588)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ ImmunityOnOffScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C66A0, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4597..4610)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ InvincibleOnOffScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C66EC, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4619..4633)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GamePlayScreen(int bSetup /*$a0*/)
{
}
/*
 * Offset 0x1C6724, from D:\driver2\game\FRONTEND\FEMAIN.C (lines 4742..4756)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ CheatNumlayerSelect(int bSetup /*$a0*/)
{
}
Source file(s) D:\driver2\game\MAIN.C+D:\driver2\game\MEMCARD\MAIN.C, object file memcard\obj\main.obj overlay id <none>

// 38 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct FILEFORMAT {
  char blockSize; // size=0, offset=0
  char asciiTitle[32]; // size=32, offset=1
  short kanjiTitle[32]; // size=64, offset=34
  char sonyProductCode[13]; // size=13, offset=98
  char blockType; // size=0, offset=111
  short blockIconClut[16]; // size=32, offset=112
  int blockIconData[32]; // size=128, offset=144
  int sliceByteSize; // size=0, offset=272
  long *sliceIconTimPtrs[16]; // size=64, offset=276
};
struct SLICE {
  char title[20]; // size=20, offset=0
  char sliceIconRefs[3]; // size=3, offset=20
  char *sliceData; // size=0, offset=24
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct SpuVolume {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct SpuVoiceAttr {
  unsigned long voice; // size=0, offset=0
  unsigned long mask; // size=0, offset=4
  struct SpuVolume volume; // size=4, offset=8
  struct SpuVolume volmode; // size=4, offset=12
  struct SpuVolume volumex; // size=4, offset=16
  unsigned short pitch; // size=0, offset=20
  unsigned short note; // size=0, offset=22
  unsigned short sample_note; // size=0, offset=24
  short envx; // size=0, offset=26
  unsigned long addr; // size=0, offset=28
  unsigned long loop_addr; // size=0, offset=32
  long a_mode; // size=0, offset=36
  long s_mode; // size=0, offset=40
  long r_mode; // size=0, offset=44
  unsigned short ar; // size=0, offset=48
  unsigned short dr; // size=0, offset=50
  unsigned short sr; // size=0, offset=52
  unsigned short rr; // size=0, offset=54
  unsigned short sl; // size=0, offset=56
  unsigned short adsr1; // size=0, offset=58
  unsigned short adsr2; // size=0, offset=60
};
struct SpuExtAttr {
  struct SpuVolume volume; // size=4, offset=0
  long reverb; // size=0, offset=4
  long mix; // size=0, offset=8
};
struct SpuStVoiceAttr {
  char status; // size=0, offset=0
  char pad1; // size=0, offset=1
  char pad2; // size=0, offset=2
  char pad3; // size=0, offset=3
  long last_size; // size=0, offset=4
  unsigned long buf_addr; // size=0, offset=8
  unsigned long data_addr; // size=0, offset=12
};
struct MAPPING {
  unsigned short button_lookup[16]; // size=32, offset=0
  unsigned short swap_analog; // size=0, offset=32
  unsigned short reserved1; // size=0, offset=34
};
struct SAVED_PLAYER_POS {
  unsigned short type; // size=0, offset=0
  short direction; // size=0, offset=2
  long vx; // size=0, offset=4
  long vy; // size=0, offset=8
  long vz; // size=0, offset=12
  unsigned long felony; // size=0, offset=16
  unsigned short totaldamage; // size=0, offset=20
  short damage[6]; // size=12, offset=22
};
struct SAVED_CAR_POS {
  char active; // size=0, offset=0
  unsigned char model; // size=0, offset=1
  unsigned char palette; // size=0, offset=2
  unsigned short totaldamage; // size=0, offset=4
  unsigned short damage[6]; // size=12, offset=6
  short direction; // size=0, offset=18
  long vx; // size=0, offset=20
  long vy; // size=0, offset=24
  long vz; // size=0, offset=28
};
struct MISSION_DATA {
  struct SAVED_PLAYER_POS PlayerPos; // size=36, offset=0
  struct SAVED_CAR_POS CarPos[6]; // size=192, offset=36
};
struct SCORE_ENTRY {
  int time; // size=0, offset=0
  short items; // size=0, offset=4
  char name[6]; // size=6, offset=6
};
struct SCORE_TABLES {
  struct SCORE_ENTRY GetawayTable[4][2][5]; // size=480, offset=0
  struct SCORE_ENTRY GateRaceTable[4][2][5]; // size=480, offset=480
  struct SCORE_ENTRY CheckpointTable[4][2][5]; // size=480, offset=960
  struct SCORE_ENTRY TrailblazerTable[4][2][5]; // size=480, offset=1440
  struct SCORE_ENTRY SurvivalTable[4][1][5]; // size=240, offset=1920
};
struct ACTIVE_CHEATS {
  unsigned char cheat1 : 1; // offset=0.0
  unsigned char cheat2 : 1; // offset=0.1
  unsigned char cheat3 : 1; // offset=0.2
  unsigned char cheat4 : 1; // offset=0.3
  unsigned char cheat5 : 1; // offset=0.4
  unsigned char cheat6 : 1; // offset=0.5
  unsigned char cheat7 : 1; // offset=0.6
  unsigned char cheat8 : 1; // offset=0.7
  unsigned char cheat9 : 1; // offset=1.0
  unsigned char cheat10 : 1; // offset=1.1
  unsigned char cheat11 : 1; // offset=1.2
  unsigned char reserved1 : 5; // offset=1.3
  unsigned char reserved2; // size=0, offset=2
  unsigned char reserved3; // size=0, offset=3
};
struct REPLAY_SAVE_HEADER {
  unsigned long magic; // size=0, offset=0
  unsigned char GameLevel; // size=0, offset=4
  unsigned char GameType; // size=0, offset=5
  unsigned char reserved1; // size=0, offset=6
  unsigned char NumReplayStreams; // size=0, offset=7
  unsigned char NumPlayers; // size=0, offset=8
  unsigned char RandomChase; // size=0, offset=9
  unsigned char CutsceneEvent; // size=0, offset=10
  unsigned char gCopDifficultyLevel; // size=0, offset=11
  struct MISSION_DATA SavedData; // size=228, offset=12
  struct ACTIVE_CHEATS ActiveCheats; // size=4, offset=240
  int wantedCar[2]; // size=8, offset=244
  int MissionNumber; // size=0, offset=252
  int HaveStoredData; // size=0, offset=256
  int reserved2[6]; // size=24, offset=260
};
struct GAME_SAVE_HEADER {
  unsigned long magic; // size=0, offset=0
  unsigned char gMissionLadderPos; // size=0, offset=4
  unsigned char pad1; // size=0, offset=5
  unsigned char pad2; // size=0, offset=6
  unsigned char pad3; // size=0, offset=7
  struct MISSION_DATA SavedData; // size=228, offset=8
  int reserved[8]; // size=32, offset=236
};
struct CONFIG_SAVE_HEADER {
  unsigned long magic; // size=0, offset=0
  int gMasterVolume; // size=0, offset=4
  int gMusicVolume; // size=0, offset=8
  int gSoundMode; // size=0, offset=12
  int gVibration; // size=0, offset=16
  int gCopDifficultyLevel; // size=0, offset=20
  int gFurthestMission; // size=0, offset=24
  struct MAPPING PadMapping[2]; // size=72, offset=28
  struct SCORE_TABLES ScoreTables; // size=2160, offset=100
  int PALAdjustX; // size=0, offset=2260
  int PALAdjustY; // size=0, offset=2264
  int NTSCAdjustX; // size=0, offset=2268
  int NTSCAdjustY; // size=0, offset=2272
  int gSubtitles; // size=0, offset=2276
  struct ACTIVE_CHEATS AvailableCheats; // size=4, offset=2280
  int reserved[6]; // size=24, offset=2284
};

// 67 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct FILEFORMAT FILEFORMAT;
typedef struct SLICE SLICE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct SpuVolume SpuVolume;
typedef struct SpuVoiceAttr SpuVoiceAttr;
typedef struct SpuExtAttr SpuExtAttr;
typedef struct SpuStVoiceAttr SpuStVoiceAttr;
typedef struct MAPPING MAPPING;
typedef struct SAVED_PLAYER_POS SAVED_PLAYER_POS;
typedef struct SAVED_CAR_POS SAVED_CAR_POS;
typedef struct MISSION_DATA MISSION_DATA;
typedef struct SCORE_ENTRY SCORE_ENTRY;
typedef struct SCORE_TABLES SCORE_TABLES;
typedef struct ACTIVE_CHEATS ACTIVE_CHEATS;
typedef struct REPLAY_SAVE_HEADER REPLAY_SAVE_HEADER;
typedef struct GAME_SAVE_HEADER GAME_SAVE_HEADER;
typedef struct CONFIG_SAVE_HEADER CONFIG_SAVE_HEADER;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef void *SpuIRQCallbackProc();
typedef void *SpuTransferCallbackProc();
typedef void *SpuStCallbackProc();
typedef unsigned char uchar;
typedef char schar;
typedef unsigned int uint;
typedef void envsoundfunc();
typedef unsigned long wchar_t;
typedef struct PADRAW *LPPADRAW;
typedef struct MAPPING *LPMAPPING;
typedef struct PAD *LPPAD;

// 0 labels

// 9 external declarations
static struct FILEFORMAT fileFormat; // offset 0x000a2690
static struct SLICE slice; // offset 0x000a27e4
extern unsigned short gMemCardMode; // offset 0x000ab394
static char *MCbuffer128K; // offset 0x000ab37c
static char *MClanguageBuffer; // offset 0x000ab380
static char *MCsaveBuffer; // offset 0x000ab384
static char *MCfilename; // offset 0x000ab388
static int MCoptions; // offset 0x000ab38c
static unsigned long MCsp; // offset 0x000ab390

// 13 functions
/*
 * Offset 0x872F0, from D:\driver2\game\MEMCARD\MAIN.C (lines 120..267)
 * Stack frame base $fp, size 56
 * Saved registers at offset -8: s0 fp ra
 */
int /*$ra*/ CallMemoryCard(int flags /*stack 0*/, int ingame /*stack 4*/)
{ // line 3, offset 0x8730c
  struct REPLAY_SAVE_HEADER *rheader; // stack offset -40
  struct GAME_SAVE_HEADER *gheader; // stack offset -36
  struct CONFIG_SAVE_HEADER *cheader; // stack offset -32
  char *pt; // stack offset -28
  int ret; // stack offset -24
  int size; // stack offset -20
  { // line 21, offset 0x87368
  } // line 23, offset 0x8737c
  { // line 129, offset 0x8783c
  } // line 135, offset 0x87868
} // line 148, offset 0x878b8
/*
 * Offset 0x878D4, from D:\driver2\game\MEMCARD\MAIN.C (lines 270..272)
 * Stack frame base $fp, size 24
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ libcman_SelectSound()
{
}
/*
 * Offset 0x87908, from D:\driver2\game\MEMCARD\MAIN.C (lines 275..277)
 * Stack frame base $fp, size 24
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ libcman_ConfirmSound()
{
}
/*
 * Offset 0x8793C, from D:\driver2\game\MEMCARD\MAIN.C (lines 280..282)
 * Stack frame base $fp, size 24
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ libcman_CancelSound()
{
}
/*
 * Offset 0x87970, from D:\driver2\game\MEMCARD\MAIN.C (lines 285..287)
 * Stack frame base $fp, size 24
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ libcman_ErrorSound()
{
}
/*
 * Offset 0x879A4, from D:\driver2\game\MEMCARD\MAIN.C (lines 290..293)
 * Stack frame base $fp, size 24
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ libcman_InitControllerLibrary(char *a /*stack 0*/, int b /*stack 4*/, char *c /*stack 8*/, int d /*stack 12*/)
{
}
/*
 * Offset 0x879F4, from D:\driver2\game\MEMCARD\MAIN.C (lines 296..299)
 * Stack frame base $fp, size 24
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ libcman_DeInitControllerLibrary()
{
}
/*
 * Offset 0x87A34, from D:\driver2\game\MEMCARD\MAIN.C (lines 302..304)
 * Stack frame base $fp, size 24
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ libcman_ReadControllers()
{
}
/*
 * Offset 0x87A64, from D:\driver2\game\MEMCARD\MAIN.C (lines 371..441)
 * Stack frame base $fp, size 88
 * Saved registers at offset -4: fp ra
 */
int /*$ra*/ DoMemoryCard()
{ // line 2, offset 0x87a74
  struct RECT rect; // stack offset -56
  char filename[32]; // stack offset -48
  char l; // stack offset -16
  int options; // stack offset -12
  static int ret; // offset 0x0
} // line 71, offset 0x87ccc
/*
 * Offset 0x87CE4, from D:\driver2\game\MEMCARD\MAIN.C (lines 444..459)
 * Stack frame base $fp, size 32
 * Saved registers at offset -4: fp ra
 */
char * /*$ra*/ LoadMemCardOverlay()
{ // line 2, offset 0x87cf4
  char *pt; // stack offset -16
  int ovsize; // stack offset -12
} // line 16, offset 0x87d50
/*
 * Offset 0x87D68, from D:\driver2\game\MEMCARD\MAIN.C (lines 462..469)
 * Stack frame base $fp, size 40
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ StorePermanentTPage()
{ // line 2, offset 0x87d78
  struct RECT rect; // stack offset -24
  unsigned long *buffer; // stack offset -16
} // line 8, offset 0x87dc4
/*
 * Offset 0x87DDC, from D:\driver2\game\MEMCARD\MAIN.C (lines 472..479)
 * Stack frame base $fp, size 40
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ RestorePermanentTPage()
{ // line 2, offset 0x87dec
  struct RECT rect; // stack offset -24
  unsigned long *buffer; // stack offset -16
} // line 8, offset 0x87e38
/*
 * Offset 0x87E50, from D:\driver2\game\MEMCARD\MAIN.C (lines 482..505)
 * Stack frame base $fp, size 32
 * Saved registers at offset -4: fp ra
 */
void /*$ra*/ PutCorrectIcon(int which /*stack 0*/)
{ // line 2, offset 0x87e64
  unsigned char *clut; // stack offset -16
  unsigned char *icon; // stack offset -12
} // line 24, offset 0x87f38
Source file(s) D:\DRIVER2\GAME\MEMCARD\MAINASM.S, object file memcard\obj\mainasm.obj overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) D:\driver2\game\MEMCARD\SLOT.CPP+D:\driver2\game\SLOT.CPP, object file memcard\obj\slot.obj overlay id <none>

// 47 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct DR_AREA {
  unsigned long tag; // size=0, offset=0
  unsigned long code[2]; // size=8, offset=4
};
struct DR_MOVE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[5]; // size=20, offset=4
};
struct DR_TPAGE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[1]; // size=4, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct MouseData {
  unsigned short buttons; // size=0, offset=0
  char xOffset; // size=0, offset=2
  char yOffset; // size=0, offset=3
};
struct NegconData {
  unsigned short digitalButtons; // size=0, offset=0
  char centralTwist; // size=0, offset=2
  char buttonI; // size=0, offset=3
  char buttonII; // size=0, offset=4
  char topLeft; // size=0, offset=5
};
struct AnalogjoyData {
  unsigned short digitalButtons; // size=0, offset=0
  unsigned char right_x; // size=0, offset=2
  unsigned char right_y; // size=0, offset=3
  unsigned char left_x; // size=0, offset=4
  unsigned char left_y; // size=0, offset=5
};
union ._122 {
  unsigned short pad; // size=0, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct MouseData mouse; // size=4, offset=0
};
struct TapCtrllerData {
  unsigned char transStatus; // size=0, offset=0
  unsigned char dataFormat; // size=0, offset=1
  union ._122 data; // size=6, offset=2
};
struct MultiTapData {
  struct TapCtrllerData ctrllers[4]; // size=32, offset=0
};
union ._125 {
  unsigned short pad; // size=0, offset=0
  struct MouseData mouse; // size=4, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct AnalogjoyData joystick; // size=6, offset=0
  struct MultiTapData tap; // size=32, offset=0
};
struct _CARD {
  char Magic[2]; // size=2, offset=0
  char Type; // size=0, offset=2
  char BlockEntry; // size=0, offset=3
  char Title[64]; // size=64, offset=4
  char reserve[28]; // size=28, offset=68
  char Clut[32]; // size=32, offset=96
  char Icon[3][128]; // size=384, offset=128
};
struct TIMSTRUCT {
  unsigned short clut; // size=0, offset=0
  unsigned short tpage; // size=0, offset=2
  unsigned short x; // size=0, offset=4
  unsigned short y; // size=0, offset=6
  unsigned short w; // size=0, offset=8
  unsigned short h; // size=0, offset=10
};
struct FONTTABSTRUCT {
  struct TIMSTRUCT timStruct; // size=12, offset=0
  short width; // size=0, offset=12
  short height; // size=0, offset=14
};
struct KANJILOOKUP {
  short sjisCode; // size=0, offset=0
  unsigned int used; // size=0, offset=4
  struct TIMSTRUCT timStruct; // size=12, offset=8
};
struct SLICEHEADER {
  int size; // size=0, offset=0
  char title[20]; // size=20, offset=4
  char iconRef[3]; // size=3, offset=24
  char used; // size=0, offset=27
  short checksum; // size=0, offset=28
  short pad; // size=0, offset=30
};
struct BLOCKINFO {
  unsigned int infoOK; // size=0, offset=0
  int id; // size=0, offset=4
  int size; // size=0, offset=8
  int freeBytes; // size=0, offset=12
  struct DIRENTRY dirEntry; // size=40, offset=16
  struct _CARD header; // size=512, offset=56
  struct TIMSTRUCT iconTim; // size=12, offset=568
  unsigned int gremBlock; // size=0, offset=580
  int sliceCount; // size=0, offset=584
  int usedSlices; // size=0, offset=588
  struct SLICEHEADER sliceHeader[16]; // size=512, offset=592
};
struct CARDINFO {
  int usedBlocks; // size=0, offset=0
  struct BLOCKINFO blockInfo[15]; // size=16560, offset=4
  unsigned int dirOK; // size=0, offset=16564
  unsigned int infoOK; // size=0, offset=16568
};
struct FILEFORMAT {
  char blockSize; // size=0, offset=0
  char asciiTitle[32]; // size=32, offset=1
  short kanjiTitle[32]; // size=64, offset=34
  char sonyProductCode[13]; // size=13, offset=98
  char blockType; // size=0, offset=111
  short blockIconClut[16]; // size=32, offset=112
  int blockIconData[32]; // size=128, offset=144
  int sliceByteSize; // size=0, offset=272
  long *sliceIconTimPtrs[16]; // size=64, offset=276
};
struct SLICE {
  char title[20]; // size=20, offset=0
  char sliceIconRefs[3]; // size=3, offset=20
  char *sliceData; // size=0, offset=24
};
struct MCSLOT {
  struct CARDINFO m_cardInfo; // size=16572, offset=0
  int m_port; // size=0, offset=16572
  int m_card; // size=0, offset=16576
  int m_chan; // size=0, offset=16580
  char m_device[6]; // size=6, offset=16584
  int m_blocksRead; // size=0, offset=16592
  int m_readFilePtr; // size=0, offset=16596
  int m_readBytes; // size=0, offset=16600
  int m_fromReadBytes; // size=0, offset=16604
  int m_toReadBytes; // size=0, offset=16608
  int m_writeFilePtr; // size=0, offset=16612
  int m_writeBytes; // size=0, offset=16616
  int m_fromWriteBytes; // size=0, offset=16620
  int m_toWriteBytes; // size=0, offset=16624
  int m_iconX; // size=0, offset=16628
  int m_iconY; // size=0, offset=16632
  int m_clutX; // size=0, offset=16636
  int m_clutY; // size=0, offset=16640
  unsigned int m_doCheckSum; // size=0, offset=16644
  short m_checkSumWork; // size=0, offset=16648
  short m_checkSum; // size=0, offset=16650
};
struct PAD {
  struct MCSLOT m_mcSlot0; // size=16652, offset=0
  struct MCSLOT m_mcSlot1; // size=16652, offset=16652
  int m_mouseX; // size=0, offset=33304
  int m_mouseY; // size=0, offset=33308
  int m_scanPort; // size=0, offset=33312
  unsigned int m_cardChanged[2]; // size=8, offset=33316
  unsigned int m_bControllerChanged; // size=0, offset=33324
  unsigned int m_bMouseTested; // size=0, offset=33328
  unsigned int m_bUsingMouse; // size=0, offset=33332
  unsigned int m_bUsingNegCon; // size=0, offset=33336
  unsigned int m_bControllerInserted; // size=0, offset=33340
  int m_nLastControllerType; // size=0, offset=33344
  char slotString[3]; // size=3, offset=33348
  struct MCSLOT *m_slotObjPtrs[2]; // size=8, offset=33352
  int m_slotObjPorts[2]; // size=8, offset=33360
  int m_currSlotObj; // size=0, offset=33368
  int m_portStatus[8]; // size=32, offset=33372
};

// 67 typedefs
typedef struct TCB TCB;
typedef struct EXEC EXEC;
typedef struct DIRENTRY DIRENTRY;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct SPRT SPRT;
typedef struct DR_AREA DR_AREA;
typedef struct DR_MOVE DR_MOVE;
typedef struct DR_TPAGE DR_TPAGE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct MouseData MouseData;
typedef struct NegconData NegconData;
typedef struct AnalogjoyData AnalogjoyData;
typedef struct TapCtrllerData TapCtrllerData;
typedef struct MultiTapData MultiTapData;
typedef struct _CARD _CARD;
typedef struct TIMSTRUCT TIMSTRUCT;
typedef struct FONTTABSTRUCT FONTTABSTRUCT;
typedef struct KANJILOOKUP KANJILOOKUP;
typedef struct SLICEHEADER SLICEHEADER;
typedef struct BLOCKINFO BLOCKINFO;
typedef struct CARDINFO CARDINFO;
typedef struct FILEFORMAT FILEFORMAT;
typedef struct SLICE SLICE;
typedef struct MCSLOT MCSLOT;
typedef struct PAD PAD;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned short PadData;

// 0 labels

// 1 external declarations
extern struct BLOCKINFO _6MCSLOT.s_copyBlockInfo; // offset 0x0010ee38

// 43 functions
/*
 * Offset 0xF3644, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 99..137)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ card_start__6MCSLOT(struct MCSLOT *this /*$a0*/)
{ // line 1, offset 0xf3644
} // line 39, offset 0xf3828
/*
 * Offset 0xF3828, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 383..406)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
unsigned int /*$ra*/ CardRemoved__6MCSLOT(struct MCSLOT *this /*$s6*/)
{ // line 1, offset 0xf3828
  int card_status; // $v0
  { // line 1, offset 0xf3828
    struct MCSLOT *this; // $s6
    int timeout; // $s0
    { // line 1, offset 0xf3828
      { // line 1, offset 0xf387c
        { // line 1, offset 0xf387c
        } // line 1, offset 0xf3890
        { // line 1, offset 0xf3890
        } // line 1, offset 0xf38a4
        { // line 1, offset 0xf38a4
        } // line 1, offset 0xf38b8
        { // line 1, offset 0xf38b8
        } // line 1, offset 0xf38cc
      } // line 1, offset 0xf38cc
    } // line 1, offset 0xf38d4
  } // line 1, offset 0xf38d4
  { // line 11, offset 0xf38d4
    { // line 11, offset 0xf38e4
      { // line 11, offset 0xf38e4
        struct MCSLOT *this; // $s6
        { // line 11, offset 0xf38e4
        } // line 11, offset 0xf38e4
      } // line 11, offset 0xf38e4
    } // line 24, offset 0xf3924
  } // line 24, offset 0xf3924
  { // line 24, offset 0xf3924
    struct MCSLOT *this; // $s6
    { // line 24, offset 0xf3924
    } // line 24, offset 0xf3924
  } // line 24, offset 0xf3924
} // line 24, offset 0xf3994
/*
 * Offset 0xF3994, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 418..441)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
unsigned int /*$ra*/ CardInserted__6MCSLOT(struct MCSLOT *this /*$s6*/)
{ // line 1, offset 0xf3994
  int card_status; // $v1
  { // line 1, offset 0xf3994
    struct MCSLOT *this; // $s6
    int timeout; // $s0
    { // line 1, offset 0xf3994
      { // line 1, offset 0xf39e8
        { // line 1, offset 0xf39e8
        } // line 1, offset 0xf39fc
        { // line 1, offset 0xf39fc
        } // line 1, offset 0xf3a10
        { // line 1, offset 0xf3a10
        } // line 1, offset 0xf3a24
        { // line 1, offset 0xf3a24
        } // line 1, offset 0xf3a38
      } // line 1, offset 0xf3a38
    } // line 1, offset 0xf3a40
  } // line 1, offset 0xf3a40
  { // line 11, offset 0xf3a40
    { // line 12, offset 0xf3a54
      { // line 1, offset 0xf3a54
        struct MCSLOT *this; // $s6
        { // line 1, offset 0xf3a54
        } // line 1, offset 0xf3a54
      } // line 1, offset 0xf3a54
    } // line 19, offset 0xf3aa8
  } // line 19, offset 0xf3aa8
  { // line 1, offset 0xf3aa8
    struct MCSLOT *this; // $s6
    { // line 1, offset 0xf3aa8
    } // line 1, offset 0xf3aa8
  } // line 1, offset 0xf3aa8
} // line 24, offset 0xf3b04
/*
 * Offset 0xF3B04, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 489..508)
 * Stack frame base $sp, size 176
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
int /*$ra*/ FormatCard__6MCSLOT(struct MCSLOT *this /*$s2*/)
{ // line 1, offset 0xf3b04
  char buffer[128]; // stack offset -160
  { // line 1, offset 0xf3b04
    struct MCSLOT *this; // $s2
    { // line 1, offset 0xf3b04
    } // line 1, offset 0xf3b04
  } // line 1, offset 0xf3b04
  { // line 1, offset 0xf3b04
    { // line 1, offset 0xf3b04
      struct MCSLOT *this; // $s2
      int timeout; // $s3
      { // line 1, offset 0xf3b04
        { // line 1, offset 0xf3bb4
          { // line 1, offset 0xf3bb4
          } // line 1, offset 0xf3bc8
          { // line 1, offset 0xf3bc8
          } // line 1, offset 0xf3bdc
          { // line 1, offset 0xf3bdc
          } // line 1, offset 0xf3bf0
          { // line 1, offset 0xf3bf0
          } // line 1, offset 0xf3c04
        } // line 1, offset 0xf3c04
      } // line 1, offset 0xf3c0c
    } // line 1, offset 0xf3c0c
  } // line 15, offset 0xf3c28
} // line 20, offset 0xf3c74
/*
 * Offset 0xF3C74, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 520..570)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ ReadCardDir__6MCSLOT(struct MCSLOT *this /*$s3*/)
{ // line 1, offset 0xf3c74
  long size; // $a1
  char path[7]; // stack offset -48
  struct DIRENTRY *entryPtr; // $s0
  { // line 17, offset 0xf3cf4
  } // line 40, offset 0xf3d6c
} // line 49, offset 0xf3d8c
/*
 * Offset 0xF3DB8, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 618..699)
 * Stack frame base $sp, size 96
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ ReadCardInfo__6MCSLOTPc(struct MCSLOT *this /*$s1*/, char *managerFilename /*$s0*/)
{ // line 1, offset 0xf3db8
  int i; // $a2
  int n; // $s0
  char filename[32]; // stack offset -64
  int filePtr; // $s2
  { // line 11, offset 0xf3df4
    { // line 12, offset 0xf3e0c
      { // line 13, offset 0xf3e0c
        { // line 14, offset 0xf3e38
          { // line 16, offset 0xf3e38
            { // line 21, offset 0xf3e70
            } // line 24, offset 0xf3eb0
          } // line 26, offset 0xf3eb0
          { // line 30, offset 0xf3eb0
            { // line 31, offset 0xf3ed4
              { // line 32, offset 0xf3ed4
                { // line 35, offset 0xf3f4c
                  { // line 37, offset 0xf3f4c
                  } // line 37, offset 0xf3f88
                } // line 54, offset 0xf4060
              } // line 55, offset 0xf4094
            } // line 57, offset 0xf4094
          } // line 61, offset 0xf40e4
        } // line 68, offset 0xf4130
      } // line 68, offset 0xf4130
    } // line 73, offset 0xf4130
  } // line 79, offset 0xf4168
} // line 82, offset 0xf41a0
/*
 * Offset 0xF41A0, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 912..939)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ ReadSlice__6MCSLOTiiP5SLICEP10FILEFORMAT(struct MCSLOT *this /*$t0*/, int block /*$a1*/, int slice /*$a2*/, struct SLICE *slicePtr /*$a3*/, struct FILEFORMAT *fileFormatPtr /*stack 16*/, struct FILEFORMAT *fileFormatPtr /*$t5*/)
{ // line 1, offset 0xf41a0
} // line 28, offset 0xf43a0
/*
 * Offset 0xF43A0, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 950..1116)
 * Stack frame base $sp, size 216
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ read_block__6MCSLOTiPcR9BLOCKINFO(struct MCSLOT *this /*$s1*/, int block /*$a1*/, char *bufferPtr /*$fp*/, struct BLOCKINFO *blockInfo /*$s7*/)
{ // line 1, offset 0xf43a0
  int n; // $s5
  char verifyBuffer[128]; // stack offset -200
  char filename[32]; // stack offset -72
  long bytesRead; // $v0
  unsigned int verifyFailed; // $v0
  int retry; // $s0
  { // line 1, offset 0xf43a0
    { // line 12, offset 0xf43e4
    } // line 39, offset 0xf44a0
  } // line 39, offset 0xf44a0
  { // line 44, offset 0xf44a0
    { // line 45, offset 0xf44b8
      { // line 48, offset 0xf44b8
        { // line 48, offset 0xf44c0
          { // line 50, offset 0xf44c0
            { // line 55, offset 0xf44ec
              { // line 58, offset 0xf44f4
                { // line 61, offset 0xf44f4
                  { // line 62, offset 0xf44f4
                    { // line 67, offset 0xf4524
                    } // line 67, offset 0xf4524
                  } // line 67, offset 0xf4524
                } // line 67, offset 0xf4524
                { // line 85, offset 0xf4530
                  { // line 86, offset 0xf4530
                    { // line 91, offset 0xf455c
                    } // line 91, offset 0xf455c
                  } // line 91, offset 0xf455c
                } // line 91, offset 0xf455c
                { // line 106, offset 0xf4564
                  { // line 109, offset 0xf4584
                  } // line 109, offset 0xf4584
                } // line 109, offset 0xf4584
              } // line 109, offset 0xf4584
            } // line 121, offset 0xf458c
          } // line 121, offset 0xf458c
        } // line 126, offset 0xf458c
      } // line 127, offset 0xf45b4
    } // line 130, offset 0xf45dc
    { // line 132, offset 0xf45dc
      { // line 134, offset 0xf45dc
        { // line 142, offset 0xf4608
          { // line 143, offset 0xf4608
            int check; // $a1
          } // line 146, offset 0xf4640
        } // line 158, offset 0xf4678
      } // line 158, offset 0xf4678
    } // line 167, offset 0xf46b4
  } // line 167, offset 0xf46b4
} // line 167, offset 0xf46b4
/*
 * Offset 0xF46B4, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1261..1464)
 * Stack frame base $sp, size 216
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ write_block__6MCSLOTR9BLOCKINFOPc(struct MCSLOT *this /*$s1*/, struct BLOCKINFO *blockInfo /*$s7*/, char *bufferPtr /*$fp*/)
{ // line 1, offset 0xf46b4
  int n; // $s5
  char verifyBuffer[128]; // stack offset -200
  char filename[32]; // stack offset -72
  int filePtr; // $v0
  long bytes; // $v0
  unsigned int verifyFailed; // $v0
  int retry; // $s0
  { // line 1, offset 0xf46b4
    { // line 12, offset 0xf46f8
    } // line 47, offset 0xf478c
  } // line 47, offset 0xf478c
  { // line 51, offset 0xf478c
    { // line 54, offset 0xf47c0
      { // line 56, offset 0xf47c0
        { // line 56, offset 0xf47cc
          { // line 58, offset 0xf47cc
            { // line 64, offset 0xf4814
              { // line 66, offset 0xf481c
                { // line 69, offset 0xf481c
                  { // line 71, offset 0xf481c
                    { // line 76, offset 0xf484c
                    } // line 76, offset 0xf484c
                  } // line 76, offset 0xf484c
                } // line 76, offset 0xf484c
                { // line 94, offset 0xf4858
                  { // line 95, offset 0xf4858
                    { // line 100, offset 0xf4884
                    } // line 100, offset 0xf4884
                  } // line 100, offset 0xf4884
                } // line 100, offset 0xf4884
                { // line 117, offset 0xf488c
                  { // line 120, offset 0xf48ac
                  } // line 120, offset 0xf48ac
                } // line 120, offset 0xf48ac
              } // line 120, offset 0xf48ac
            } // line 134, offset 0xf48b4
          } // line 134, offset 0xf48b4
        } // line 139, offset 0xf48b4
      } // line 140, offset 0xf48dc
    } // line 143, offset 0xf4924
    { // line 145, offset 0xf4924
      { // line 148, offset 0xf4924
        struct MCSLOT *this; // $s1
        { // line 148, offset 0xf4924
          { // line 148, offset 0xf4924
            int n; // $a1
          } // line 150, offset 0xf496c
          { // line 1, offset 0xf496c
            { // line 1, offset 0xf497c
            } // line 1, offset 0xf498c
          } // line 1, offset 0xf498c
          { // line 1, offset 0xf498c
            { // line 1, offset 0xf499c
            } // line 1, offset 0xf49ac
          } // line 1, offset 0xf49ac
        } // line 1, offset 0xf49ac
      } // line 1, offset 0xf49ac
    } // line 204, offset 0xf49e8
  } // line 204, offset 0xf49e8
} // line 204, offset 0xf49e8
/*
 * Offset 0xF49E8, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1473..1629)
 * Stack frame base $sp, size 704
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ CreateBlock__6MCSLOTP10FILEFORMATP5SLICE(struct MCSLOT *this /*$s5*/, struct FILEFORMAT *fileFormatPtr /*$s4*/, struct SLICE *slicePtr /*stack 8*/)
{ // line 1, offset 0xf49e8
  int i; // $a1
  int n; // $s0
  struct _CARD header; // stack offset -680
  char filename[32]; // stack offset -168
  int filePtr; // $s1
  int bytes; // $s3
  int blockNum; // $fp
  char charBuffer[64]; // stack offset -136
  struct SLICEHEADER emptySlice; // stack offset -72
  char *charPtr; // $a2
  { // line 94, offset 0xf4d98
    { // line 97, offset 0xf4db0
    } // line 104, offset 0xf4ddc
  } // line 107, offset 0xf4ddc
  { // line 111, offset 0xf4ddc
    { // line 112, offset 0xf4df0
      { // line 113, offset 0xf4df0
        { // line 121, offset 0xf4e28
        } // line 141, offset 0xf4f28
      } // line 142, offset 0xf4f4c
    } // line 147, offset 0xf4f74
  } // line 147, offset 0xf4f74
  { // line 152, offset 0xf4f74
    struct MCSLOT *this; // $s5
    { // line 152, offset 0xf4f74
      { // line 152, offset 0xf4f74
        int n; // $a1
      } // line 152, offset 0xf4fb8
      { // line 1, offset 0xf4fb8
        { // line 1, offset 0xf4fc8
        } // line 1, offset 0xf4fd8
      } // line 1, offset 0xf4fd8
      { // line 1, offset 0xf4fd8
        { // line 1, offset 0xf4fe8
        } // line 1, offset 0xf4ff8
      } // line 1, offset 0xf4ff8
    } // line 1, offset 0xf4ff8
  } // line 1, offset 0xf4ff8
} // line 157, offset 0xf502c
/*
 * Offset 0xF502C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1640..1667)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ DeleteBlock__6MCSLOTi(struct MCSLOT *this /*$s1*/, int block /*$a1*/)
{ // line 1, offset 0xf502c
  char filename[32]; // stack offset -48
  { // line 1, offset 0xf502c
    { // line 7, offset 0xf506c
      { // line 9, offset 0xf506c
        struct MCSLOT *this; // $s1
        { // line 9, offset 0xf506c
          { // line 9, offset 0xf506c
            int n; // $a1
          } // line 11, offset 0xf50cc
          { // line 1, offset 0xf50cc
            { // line 1, offset 0xf50dc
            } // line 1, offset 0xf50ec
          } // line 1, offset 0xf50ec
          { // line 1, offset 0xf50ec
            { // line 1, offset 0xf50fc
            } // line 1, offset 0xf510c
          } // line 1, offset 0xf510c
        } // line 1, offset 0xf510c
      } // line 1, offset 0xf510c
    } // line 26, offset 0xf5114
  } // line 28, offset 0xf512c
} // line 28, offset 0xf512c
/*
 * Offset 0xF512C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 2067..2115)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ Ascii2ShiftJis__FPsPc(short *dest /*$a0*/, char *source /*$a1*/)
{ // line 1, offset 0xf512c
  char a; // $a2
  short scode; // $v1
} // line 49, offset 0xf523c
/*
 * Offset 0xF523C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 58..86)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
struct MCSLOT * /*$ra*/ __6MCSLOTiiiiiiPc(struct MCSLOT *this /*$s0*/, int port /*$a1*/, int card /*$a2*/, int iconX /*$a3*/, int iconY /*stack 16*/, int clutX /*stack 20*/, int clutY /*stack 24*/, char *bufferPtr /*stack 28*/, int iconY /*$a1*/, int clutX /*$a2*/, int clutY /*$t1*/, char *bufferPtr /*$s1*/)
{ // line 1, offset 0xf523c
} // line 29, offset 0xf52d8
/*
 * Offset 0xF52F0, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 159..169)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ _._6MCSLOT(struct MCSLOT *this /*$s0*/, int __in_chrg /*$s1*/)
{ // line 1, offset 0xf52f0
} // line 11, offset 0xf5324
/*
 * Offset 0xF534C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 193..217)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ card_stop__6MCSLOT(struct MCSLOT *this /*$a0*/)
{ // line 1, offset 0xf534c
} // line 25, offset 0xf5474
/*
 * Offset 0xF5474, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 235..298)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ CheckCard__6MCSLOT(struct MCSLOT *this /*$s0*/)
{ // line 1, offset 0xf5474
  int card_status; // $v1
  { // line 1, offset 0xf5474
    { // line 13, offset 0xf54c0
    } // line 64, offset 0xf555c
  } // line 64, offset 0xf555c
} // line 64, offset 0xf555c
/*
 * Offset 0xF555C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 311..326)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ card_event__6MCSLOTi(struct MCSLOT *this /*$a0*/, int timeout /*$s0*/)
{ // line 1, offset 0xf555c
  { // line 5, offset 0xf5584
    { // line 7, offset 0xf5584
    } // line 7, offset 0xf55a4
    { // line 9, offset 0xf55a4
    } // line 9, offset 0xf55c0
    { // line 11, offset 0xf55c0
    } // line 11, offset 0xf55d4
    { // line 13, offset 0xf55d4
    } // line 13, offset 0xf55f0
  } // line 13, offset 0xf55f0
} // line 16, offset 0xf5610
/*
 * Offset 0xF5610, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 332..336)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ clear_event__6MCSLOT(struct MCSLOT *this /*$a0*/)
{ // line 1, offset 0xf5610
} // line 5, offset 0xf5668
/*
 * Offset 0xF5668, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 579..601)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ invalidate_info__6MCSLOT(struct MCSLOT *this /*$s0*/)
{ // line 1, offset 0xf5668
  { // line 1, offset 0xf5668
    int n; // $v1
  } // line 11, offset 0xf56a8
  { // line 14, offset 0xf56a8
    { // line 15, offset 0xf56b8
    } // line 17, offset 0xf56c8
  } // line 17, offset 0xf56c8
  { // line 20, offset 0xf56c8
    { // line 21, offset 0xf56d8
    } // line 23, offset 0xf56e8
  } // line 23, offset 0xf56e8
} // line 23, offset 0xf56e8
/*
 * Offset 0xF56FC, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 712..753)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
void /*$ra*/ download_icon__6MCSLOTR9BLOCKINFOiiiii(struct MCSLOT *this /*$a0*/, struct BLOCKINFO *blockInfo /*$s2*/, int iconX /*$s3*/, int iconY /*$s4*/, int clutX /*stack 16*/, int clutY /*stack 20*/, int icon /*stack 24*/, int clutX /*$v1*/, int clutY /*$v0*/, int icon /*$s1*/)
{ // line 1, offset 0xf56fc
  struct RECT rect; // stack offset -32
  struct TIMSTRUCT *timPtr; // $s0
  { // line 1, offset 0xf56fc
    int n; // $a0
  } // line 22, offset 0xf5790
} // line 42, offset 0xf5860
/*
 * Offset 0xF5860, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 764..778)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ CopyBlock__6MCSLOTi(struct MCSLOT *this /*$a0*/, int block /*$a1*/)
{ // line 1, offset 0xf5860
} // line 15, offset 0xf5918
/*
 * Offset 0xF5918, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1130..1136)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ PasteBlock__6MCSLOT(struct MCSLOT *this /*$a0*/)
{ // line 1, offset 0xf5918
} // line 7, offset 0xf5968
/*
 * Offset 0xF5968, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1146..1163)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ ReadHeader__6MCSLOTii(struct MCSLOT *this /*$a0*/, int block /*$a1*/, int slice /*$a2*/)
{ // line 1, offset 0xf5968
} // line 18, offset 0xf5a60
/*
 * Offset 0xF5A60, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1173..1178)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ RenameCopyBlock__6MCSLOTP10FILEFORMAT(struct MCSLOT *this /*$a0*/, struct FILEFORMAT *fileFormatPtr /*$s1*/)
{ // line 1, offset 0xf5a60
  struct _CARD *headerptr; // $s0
} // line 6, offset 0xf5b24
/*
 * Offset 0xF5B38, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1187..1248)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ WriteSlice__6MCSLOTiiP5SLICEP10FILEFORMATPc(struct MCSLOT *this /*$s0*/, int block /*$s4*/, int slice /*$s1*/, struct SLICE *slicePtr /*$a2*/, struct FILEFORMAT *fileFormatPtr /*stack 16*/, char *bufferPtr /*stack 20*/, struct FILEFORMAT *fileFormatPtr /*$s3*/)
{ // line 1, offset 0xf5b38
} // line 62, offset 0xf5c70
/*
 * Offset 0xF5C70, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1675..1683)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ SetPort__6MCSLOTii(struct MCSLOT *this /*$s0*/, int port /*$a1*/, int card /*$a2*/)
{ // line 1, offset 0xf5c70
  { // line 1, offset 0xf5c70
    struct MCSLOT *this; // $s0
    { // line 1, offset 0xf5c70
      { // line 1, offset 0xf5c70
        int n; // $v1
      } // line 7, offset 0xf5cdc
      { // line 1, offset 0xf5cdc
        { // line 1, offset 0xf5cec
        } // line 1, offset 0xf5cfc
      } // line 1, offset 0xf5cfc
      { // line 1, offset 0xf5cfc
        { // line 1, offset 0xf5d0c
        } // line 1, offset 0xf5d1c
      } // line 1, offset 0xf5d1c
    } // line 1, offset 0xf5d1c
  } // line 1, offset 0xf5d30
} // line 9, offset 0xf5d30
/*
 * Offset 0xF5D30, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1710..1720)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ BlocksShared__6MCSLOTii(struct MCSLOT *this /*$t0*/, int block1 /*$a1*/, int block2 /*$a2*/)
{ // line 1, offset 0xf5d30
} // line 9, offset 0xf5dc0
/*
 * Offset 0xF5DC8, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1723..1726)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetBlockSize__6MCSLOTi(struct MCSLOT *this /*$a0*/, int block /*$a1*/)
{ // line 1, offset 0xf5dc8
} // line 4, offset 0xf5dfc
/*
 * Offset 0xF5DFC, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1731..1732)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ CardInfoRead__6MCSLOT(struct MCSLOT *this /*$a0*/)
{ // line 1, offset 0xf5dfc
} // line 2, offset 0xf5e08
/*
 * Offset 0xF5E08, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1755..1762)
 * Stack frame base $sp, size 0
 */
struct TIMSTRUCT * /*$ra*/ GetBlockIconPtr__6MCSLOTi(struct MCSLOT *this /*$a0*/, int block /*$a1*/)
{ // line 1, offset 0xf5e08
} // line 8, offset 0xf5e84
/*
 * Offset 0xF5E84, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1788..1793)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetNoUsedBlocks__6MCSLOT(struct MCSLOT *this /*$a0*/)
{ // line 1, offset 0xf5e84
} // line 6, offset 0xf5ea0
/*
 * Offset 0xF5EA0, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1806..1812)
 * Stack frame base $sp, size 0
 */
short * /*$ra*/ GetBlockTitlePtr__6MCSLOTi(struct MCSLOT *this /*$a0*/, int block /*$a1*/)
{ // line 1, offset 0xf5ea0
} // line 7, offset 0xf5ee4
/*
 * Offset 0xF5EE4, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1822..1829)
 * Stack frame base $sp, size 0
 */
char * /*$ra*/ GetBlockFilenamePtr__6MCSLOTi(struct MCSLOT *this /*$a0*/, int block /*$a1*/)
{ // line 1, offset 0xf5ee4
} // line 8, offset 0xf5f1c
/*
 * Offset 0xF5F1C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1836..1850)
 * Stack frame base $sp, size 40
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
int /*$ra*/ FilenameUsed__6MCSLOTPc(struct MCSLOT *this /*$s3*/, char *filename /*$s4*/)
{ // line 1, offset 0xf5f1c
  int n; // $s0
} // line 15, offset 0xf5fbc
/*
 * Offset 0xF5FBC, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1872..1887)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
int /*$ra*/ GetNumGremBlocks__6MCSLOTPc(struct MCSLOT *this /*$s3*/, char *filename /*$s5*/)
{ // line 1, offset 0xf5fbc
  int n; // $s2
  int files; // $s4
  { // line 7, offset 0xf5ffc
    { // line 7, offset 0xf6014
      { // line 9, offset 0xf6014
      } // line 12, offset 0xf6048
    } // line 12, offset 0xf6048
  } // line 14, offset 0xf6060
} // line 16, offset 0xf6088
/*
 * Offset 0xF6088, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1896..1950)
 * Stack frame base $sp, size 88
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ InsertSliceIntoCopyBuffer__6MCSLOTiPccccT2(struct MCSLOT *this /*$a0*/, int slice /*$s4*/, char *sliceName /*$a2*/, char icon0 /*$s7*/, int icon1 /*stack 16*/, int icon2 /*stack 20*/, char *dataPtr /*stack 24*/, char icon1 /*$s5*/, char icon2 /*$s6*/, char *dataPtr /*$s2*/)
{ // line 1, offset 0xf6088
  struct SLICEHEADER *sliceHeaderPtr; // $s1
  char *sliceDataPtr; // $a3
  int sliceSize; // $a2
  struct SLICEHEADER dummySlice; // stack offset -72
  int check; // $a1
} // line 55, offset 0xf61f0
/*
 * Offset 0xF61F0, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1955..1977)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ ExtractSliceFromCopyBuffer__6MCSLOTiPc(struct MCSLOT *this /*$a0*/, int slice /*$a1*/, char *bufferPtr /*$a0*/)
{ // line 1, offset 0xf61f0
  struct SLICEHEADER *sliceHeaderPtr; // $a2
  char *sliceDataPtr; // $a1
} // line 23, offset 0xf628c
/*
 * Offset 0xF628C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 1982..1996)
 * Stack frame base $sp, size 0
 */
char * /*$ra*/ GetSliceFilenamePtr__6MCSLOTii(struct MCSLOT *this /*$a0*/, int block /*$a1*/, int slice /*$a2*/)
{ // line 1, offset 0xf628c
} // line 15, offset 0xf633c
/*
 * Offset 0xF633C, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 2001..2015)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ SliceUsed__6MCSLOTii(struct MCSLOT *this /*$a0*/, int block /*$a1*/, int slice /*$a2*/)
{ // line 1, offset 0xf633c
} // line 15, offset 0xf63e4
/*
 * Offset 0xF63EC, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 2019..2026)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetNoUsedSlices__6MCSLOTi(struct MCSLOT *this /*$a2*/, int block /*$a1*/)
{ // line 1, offset 0xf63ec
} // line 8, offset 0xf6448
/*
 * Offset 0xF6448, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 2030..2040)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetSliceIconRef__6MCSLOTiii(struct MCSLOT *this /*$a0*/, int block /*$a1*/, int slice /*$a2*/, int ref /*$a3*/)
{ // line 1, offset 0xf6448
} // line 11, offset 0xf64f4
/*
 * Offset 0xF64F4, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 2044..2051)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetNoSlices__6MCSLOTi(struct MCSLOT *this /*$a2*/, int block /*$a1*/)
{ // line 1, offset 0xf64f4
} // line 8, offset 0xf6550
/*
 * Offset 0xF6550, from D:\driver2\game\MEMCARD\SLOT.CPP (lines 2055..2058)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ GremlinBlock__6MCSLOTi(struct MCSLOT *this /*$a2*/, int block /*$a1*/)
{ // line 1, offset 0xf6550
} // line 4, offset 0xf6588
Source file(s) D:\driver2\game\MEMCARD\DELETE.C, object file memcard\obj\delete.obj overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 1 functions
/*
 * Offset 0xF6588, from D:\driver2\game\MEMCARD\DELETE.C (lines 10..16)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
long /*$ra*/ delete_file(char *filename /*$a0*/)
{ // line 5, offset 0xf6588
} // line 7, offset 0xf65a8
Source file(s) D:\driver2\game\DISPLAY.CPP+D:\driver2\game\MEMCARD\DISPLAY.CPP, object file memcard\obj\display.obj overlay id <none>

// 53 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct POLY_G4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char r3; // size=0, offset=28
  unsigned char g3; // size=0, offset=29
  unsigned char b3; // size=0, offset=30
  unsigned char pad3; // size=0, offset=31
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
};
struct POLY_GT3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  unsigned char r1; // size=0, offset=16
  unsigned char g1; // size=0, offset=17
  unsigned char b1; // size=0, offset=18
  unsigned char p1; // size=0, offset=19
  short x1; // size=0, offset=20
  short y1; // size=0, offset=22
  unsigned char u1; // size=0, offset=24
  unsigned char v1; // size=0, offset=25
  unsigned short tpage; // size=0, offset=26
  unsigned char r2; // size=0, offset=28
  unsigned char g2; // size=0, offset=29
  unsigned char b2; // size=0, offset=30
  unsigned char p2; // size=0, offset=31
  short x2; // size=0, offset=32
  short y2; // size=0, offset=34
  unsigned char u2; // size=0, offset=36
  unsigned char v2; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct LINE_F2 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
};
struct LINE_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
  unsigned long pad; // size=0, offset=24
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct DR_AREA {
  unsigned long tag; // size=0, offset=0
  unsigned long code[2]; // size=8, offset=4
};
struct DR_MOVE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[5]; // size=20, offset=4
};
struct DR_LOAD {
  unsigned long tag; // size=0, offset=0
  unsigned long code[3]; // size=12, offset=4
  unsigned long p[13]; // size=52, offset=16
};
struct DR_TPAGE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[1]; // size=4, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct MouseData {
  unsigned short buttons; // size=0, offset=0
  char xOffset; // size=0, offset=2
  char yOffset; // size=0, offset=3
};
struct NegconData {
  unsigned short digitalButtons; // size=0, offset=0
  char centralTwist; // size=0, offset=2
  char buttonI; // size=0, offset=3
  char buttonII; // size=0, offset=4
  char topLeft; // size=0, offset=5
};
struct AnalogjoyData {
  unsigned short digitalButtons; // size=0, offset=0
  unsigned char right_x; // size=0, offset=2
  unsigned char right_y; // size=0, offset=3
  unsigned char left_x; // size=0, offset=4
  unsigned char left_y; // size=0, offset=5
};
union ._122 {
  unsigned short pad; // size=0, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct MouseData mouse; // size=4, offset=0
};
struct TapCtrllerData {
  unsigned char transStatus; // size=0, offset=0
  unsigned char dataFormat; // size=0, offset=1
  union ._122 data; // size=6, offset=2
};
struct MultiTapData {
  struct TapCtrllerData ctrllers[4]; // size=32, offset=0
};
union ._125 {
  unsigned short pad; // size=0, offset=0
  struct MouseData mouse; // size=4, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct AnalogjoyData joystick; // size=6, offset=0
  struct MultiTapData tap; // size=32, offset=0
};
struct _CARD {
  char Magic[2]; // size=2, offset=0
  char Type; // size=0, offset=2
  char BlockEntry; // size=0, offset=3
  char Title[64]; // size=64, offset=4
  char reserve[28]; // size=28, offset=68
  char Clut[32]; // size=32, offset=96
  char Icon[3][128]; // size=384, offset=128
};
struct POINT {
  int x; // size=0, offset=0
  int y; // size=0, offset=4
};
struct TIMSTRUCT {
  unsigned short clut; // size=0, offset=0
  unsigned short tpage; // size=0, offset=2
  unsigned short x; // size=0, offset=4
  unsigned short y; // size=0, offset=6
  unsigned short w; // size=0, offset=8
  unsigned short h; // size=0, offset=10
};
struct FONTTABSTRUCT {
  struct TIMSTRUCT timStruct; // size=12, offset=0
  short width; // size=0, offset=12
  short height; // size=0, offset=14
};
struct KANJILOOKUP {
  short sjisCode; // size=0, offset=0
  unsigned int used; // size=0, offset=4
  struct TIMSTRUCT timStruct; // size=12, offset=8
};
struct SLICEHEADER {
  int size; // size=0, offset=0
  char title[20]; // size=20, offset=4
  char iconRef[3]; // size=3, offset=24
  char used; // size=0, offset=27
  short checksum; // size=0, offset=28
  short pad; // size=0, offset=30
};
struct BLOCKINFO {
  unsigned int infoOK; // size=0, offset=0
  int id; // size=0, offset=4
  int size; // size=0, offset=8
  int freeBytes; // size=0, offset=12
  struct DIRENTRY dirEntry; // size=40, offset=16
  struct _CARD header; // size=512, offset=56
  struct TIMSTRUCT iconTim; // size=12, offset=568
  unsigned int gremBlock; // size=0, offset=580
  int sliceCount; // size=0, offset=584
  int usedSlices; // size=0, offset=588
  struct SLICEHEADER sliceHeader[16]; // size=512, offset=592
};
struct CARDINFO {
  int usedBlocks; // size=0, offset=0
  struct BLOCKINFO blockInfo[15]; // size=16560, offset=4
  unsigned int dirOK; // size=0, offset=16564
  unsigned int infoOK; // size=0, offset=16568
};
struct FILEFORMAT {
  char blockSize; // size=0, offset=0
  char asciiTitle[32]; // size=32, offset=1
  short kanjiTitle[32]; // size=64, offset=34
  char sonyProductCode[13]; // size=13, offset=98
  char blockType; // size=0, offset=111
  short blockIconClut[16]; // size=32, offset=112
  int blockIconData[32]; // size=128, offset=144
  int sliceByteSize; // size=0, offset=272
  long *sliceIconTimPtrs[16]; // size=64, offset=276
};
struct MCSLOT {
  struct CARDINFO m_cardInfo; // size=16572, offset=0
  int m_port; // size=0, offset=16572
  int m_card; // size=0, offset=16576
  int m_chan; // size=0, offset=16580
  char m_device[6]; // size=6, offset=16584
  int m_blocksRead; // size=0, offset=16592
  int m_readFilePtr; // size=0, offset=16596
  int m_readBytes; // size=0, offset=16600
  int m_fromReadBytes; // size=0, offset=16604
  int m_toReadBytes; // size=0, offset=16608
  int m_writeFilePtr; // size=0, offset=16612
  int m_writeBytes; // size=0, offset=16616
  int m_fromWriteBytes; // size=0, offset=16620
  int m_toWriteBytes; // size=0, offset=16624
  int m_iconX; // size=0, offset=16628
  int m_iconY; // size=0, offset=16632
  int m_clutX; // size=0, offset=16636
  int m_clutY; // size=0, offset=16640
  unsigned int m_doCheckSum; // size=0, offset=16644
  short m_checkSumWork; // size=0, offset=16648
  short m_checkSum; // size=0, offset=16650
};
struct PAD {
  struct MCSLOT m_mcSlot0; // size=16652, offset=0
  struct MCSLOT m_mcSlot1; // size=16652, offset=16652
  int m_mouseX; // size=0, offset=33304
  int m_mouseY; // size=0, offset=33308
  int m_scanPort; // size=0, offset=33312
  unsigned int m_cardChanged[2]; // size=8, offset=33316
  unsigned int m_bControllerChanged; // size=0, offset=33324
  unsigned int m_bMouseTested; // size=0, offset=33328
  unsigned int m_bUsingMouse; // size=0, offset=33332
  unsigned int m_bUsingNegCon; // size=0, offset=33336
  unsigned int m_bControllerInserted; // size=0, offset=33340
  int m_nLastControllerType; // size=0, offset=33344
  char slotString[3]; // size=3, offset=33348
  struct MCSLOT *m_slotObjPtrs[2]; // size=8, offset=33352
  int m_slotObjPorts[2]; // size=8, offset=33360
  int m_currSlotObj; // size=0, offset=33368
  int m_portStatus[8]; // size=32, offset=33372
};
struct DISPMAN {
  unsigned int m_displayingMessage; // size=0, offset=0
  int m_language; // size=0, offset=4
  char m_textBuffer[256]; // size=256, offset=8
  struct DR_AREA m_sliceClipArea; // size=12, offset=264
  struct DR_AREA m_screenClipArea; // size=12, offset=276
  struct RECT m_backRect[7]; // size=56, offset=288
  struct RECT m_srcRect[7]; // size=56, offset=344
  int s_screenMode; // size=0, offset=400
  int dispWidth; // size=0, offset=404
  int dispHeight; // size=0, offset=408
  int dispXOffset; // size=0, offset=412
  int dispYOffset; // size=0, offset=416
  struct DRAWENV m_drawEnv; // size=92, offset=420
  struct DISPENV m_dispEnv; // size=20, offset=512
  struct DRAWENV m_oldDrawEnv; // size=92, offset=532
  struct DISPENV m_oldDispEnv; // size=20, offset=624
  int spriteCount; // size=0, offset=644
  int polyCountFT4; // size=0, offset=648
  int polyCountG3; // size=0, offset=652
  int polyCountF4; // size=0, offset=656
  int moveCount; // size=0, offset=660
  int m_dirtyMouseX; // size=0, offset=664
  int m_dirtyMouseY; // size=0, offset=668
  unsigned short m_dirtyMouseBuffer[256]; // size=512, offset=672
  char m_kanjiTimBuffer[350]; // size=350, offset=1184
  struct SPRT sprites[200]; // size=4000, offset=1536
  struct DR_TPAGE tpages[200]; // size=1600, offset=5536
  struct POLY_FT4 polysFT4[25]; // size=1000, offset=7136
  struct POLY_F4 polysF4[0]; // size=0, offset=8136
  struct POLY_G3 polysG3[20]; // size=560, offset=8136
  struct DR_MOVE moves[2]; // size=48, offset=8696
  int m_dispX; // size=0, offset=8744
  int m_dispY; // size=0, offset=8748
  int m_flashCount; // size=0, offset=8752
  int m_flash; // size=0, offset=8756
  unsigned int m_flashOn; // size=0, offset=8760
  unsigned int m_invalidArea[7]; // size=28, offset=8764
  int m_addingBlock; // size=0, offset=8792
  int m_deletingBlock; // size=0, offset=8796
  struct FONTTABSTRUCT m_fontTable[3][76]; // size=3648, offset=8800
  struct KANJILOOKUP m_kanjiFontTable[256]; // size=5120, offset=12448
  struct TIMSTRUCT m_darkTimStruct; // size=12, offset=17568
  struct TIMSTRUCT m_pointerTimStruct; // size=12, offset=17580
  struct TIMSTRUCT m_lightTimStruct; // size=12, offset=17592
  struct TIMSTRUCT m_cardTimStruct; // size=12, offset=17604
  struct TIMSTRUCT m_buttonTimStructs[4]; // size=48, offset=17616
  struct TIMSTRUCT m_arrowTimStruct[2]; // size=24, offset=17664
  struct TIMSTRUCT m_sliceIconTimStructs[16]; // size=192, offset=17688
  struct TIMSTRUCT m_createBlockTimStruct; // size=12, offset=17880
  struct PAD *m_padPtr; // size=33404, offset=17892
  long *m_backImagePtr; // size=0, offset=17896
  int m_updateQueue[7]; // size=28, offset=17900
  int m_kanjiChars; // size=0, offset=17928
  int m_activeArea; // size=0, offset=17932
  int m_menuSelect; // size=0, offset=17936
  int m_blockSelect; // size=0, offset=17940
  int m_sliceSelect; // size=0, offset=17944
  int m_sliceMenuOffset; // size=0, offset=17948
  int m_sliceMenuRem; // size=0, offset=17952
  int m_sliceMenuInc; // size=0, offset=17956
  int m_activeFunction; // size=0, offset=17960
  int m_mainFunction; // size=0, offset=17964
  int m_maxKanji; // size=0, offset=17968
  unsigned int m_menuActive[4]; // size=16, offset=17972
  char *m_menuText[4]; // size=16, offset=17988
  char *m_infoText[3]; // size=12, offset=18004
  char *m_titleText; // size=0, offset=18016
  char *m_blockNameText; // size=0, offset=18020
  char m_saveFilename[32]; // size=32, offset=18024
  struct FILEFORMAT *m_fileFormatPtr; // size=340, offset=18056
};

// 73 typedefs
typedef struct TCB TCB;
typedef struct EXEC EXEC;
typedef struct DIRENTRY DIRENTRY;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct POLY_G4 POLY_G4;
typedef struct POLY_GT3 POLY_GT3;
typedef struct LINE_F2 LINE_F2;
typedef struct LINE_F4 LINE_F4;
typedef struct SPRT SPRT;
typedef struct DR_AREA DR_AREA;
typedef struct DR_MOVE DR_MOVE;
typedef struct DR_LOAD DR_LOAD;
typedef struct DR_TPAGE DR_TPAGE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct MouseData MouseData;
typedef struct NegconData NegconData;
typedef struct AnalogjoyData AnalogjoyData;
typedef struct TapCtrllerData TapCtrllerData;
typedef struct MultiTapData MultiTapData;
typedef struct _CARD _CARD;
typedef struct POINT POINT;
typedef struct TIMSTRUCT TIMSTRUCT;
typedef struct FONTTABSTRUCT FONTTABSTRUCT;
typedef struct KANJILOOKUP KANJILOOKUP;
typedef struct SLICEHEADER SLICEHEADER;
typedef struct BLOCKINFO BLOCKINFO;
typedef struct CARDINFO CARDINFO;
typedef struct FILEFORMAT FILEFORMAT;
typedef struct MCSLOT MCSLOT;
typedef struct PAD PAD;
typedef struct DISPMAN DISPMAN;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned short PadData;

// 0 labels

// 3 external declarations
extern unsigned long *oTablePtr; // offset 0x0010ec74
extern struct RECT g_strActiveMouseArea; // offset 0x0010ec78
extern int DM_CIRCLE[16][2][2]; // offset 0x0010eb70

// 58 functions
/*
 * Offset 0xF65A8, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 49..388)
 * Stack frame base $sp, size 152
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
struct DISPMAN * /*$ra*/ __7DISPMANPlPPlP3PADP10FILEFORMATib(struct DISPMAN *this /*$s2*/, long *imagePtr /*$a1*/, long **sliceIconPtrs /*stack 8*/, struct PAD *pad /*$a3*/, struct FILEFORMAT *fileFormatPtr /*stack 16*/, int language /*stack 20*/, unsigned int save /*stack 24*/, struct FILEFORMAT *fileFormatPtr /*$v0*/, int language /*$s0*/)
{ // line 1, offset 0xf65a8
  int n; // $s1
  struct RECT rect; // stack offset -112
} // line 340, offset 0xf727c
/*
 * Offset 0xF72B8, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 472..550)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawTitleBar__7DISPMAN(struct DISPMAN *this /*$s3*/)
{ // line 1, offset 0xf72b8
  char *titleText; // $s2
  { // line 1, offset 0xf72b8
    { // line 6, offset 0xf72e4
      { // line 56, offset 0xf740c
        { // line 58, offset 0xf742c
          char *titleText2; // $s0
          int i; // $t0
        } // line 72, offset 0xf7454
      } // line 76, offset 0xf74e8
    } // line 79, offset 0xf74ec
  } // line 79, offset 0xf74ec
} // line 79, offset 0xf74ec
/*
 * Offset 0xF7508, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 555..589)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ DrawCards__7DISPMAN(struct DISPMAN *this /*$s0*/)
{ // line 1, offset 0xf7508
} // line 35, offset 0xf7670
/*
 * Offset 0xF7688, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 602..693)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawMenu__7DISPMAN(struct DISPMAN *this /*$s0*/)
{ // line 1, offset 0xf7688
} // line 92, offset 0xf79ac
/*
 * Offset 0xF79C8, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 701..741)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ DrawKeyInfo__7DISPMAN(struct DISPMAN *this /*$s3*/)
{ // line 1, offset 0xf79c8
} // line 41, offset 0xf7c30
/*
 * Offset 0xF7C4C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 747..833)
 * Stack frame base $sp, size 96
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawBlocks__7DISPMAN(struct DISPMAN *this /*$s1*/)
{ // line 1, offset 0xf7c4c
  int x; // $s6
  int y; // $s2
} // line 87, offset 0xf816c
/*
 * Offset 0xF819C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 839..1027)
 * Stack frame base $sp, size 144
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ DrawSlices__7DISPMAN(struct DISPMAN *this /*$s2*/)
{ // line 1, offset 0xf819c
  int n; // $s3
  char textBuffer[50]; // stack offset -104
  int iconRef; // $v1
  int maxIcons; // $s1
  { // line 29, offset 0xf82bc
    { // line 30, offset 0xf82cc
      { // line 31, offset 0xf82cc
        { // line 35, offset 0xf8304
          { // line 38, offset 0xf8304
            { // line 48, offset 0xf83bc
              { // line 48, offset 0xf83bc
                { // line 57, offset 0xf8404
                  { // line 57, offset 0xf8404
                    { // line 57, offset 0xf841c
                      { // line 59, offset 0xf841c
                        { // line 59, offset 0xf8460
                          { // line 61, offset 0xf8460
                            { // line 63, offset 0xf847c
                              { // line 64, offset 0xf847c
                                { // line 65, offset 0xf8484
                                  { // line 66, offset 0xf8484
                                    { // line 67, offset 0xf84a8
                                    } // line 68, offset 0xf84a8
                                  } // line 80, offset 0xf8574
                                } // line 80, offset 0xf8574
                              } // line 116, offset 0xf8770
                            } // line 116, offset 0xf8770
                          } // line 116, offset 0xf8770
                        } // line 116, offset 0xf8770
                      } // line 122, offset 0xf8784
                    } // line 122, offset 0xf8784
                  } // line 122, offset 0xf8784
                } // line 122, offset 0xf8784
              } // line 122, offset 0xf8784
            } // line 122, offset 0xf8784
          } // line 122, offset 0xf8784
        } // line 122, offset 0xf8784
      } // line 122, offset 0xf8784
    } // line 136, offset 0xf87d4
  } // line 183, offset 0xf8ae8
} // line 189, offset 0xf8b28
/*
 * Offset 0xF8B28, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1031..1055)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
void /*$ra*/ write_mess_in_box__7DISPMANG4RECTPciiii(struct DISPMAN *this /*$s5*/, struct RECT box /*stack 4*/, char *text /*$fp*/, int font /*stack 16*/, int r /*stack 20*/, int g /*stack 24*/, int b /*stack 28*/, int font /*$s3*/)
{ // line 1, offset 0xf8b28
  int n; // $s1
  int textY; // $s2
  int messCount; // $s6
  int lineCount; // $s0
} // line 25, offset 0xf8d24
/*
 * Offset 0xF8D24, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1060..1099)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawBlockName__7DISPMAN(struct DISPMAN *this /*$s0*/)
{ // line 1, offset 0xf8d24
} // line 40, offset 0xf8ed4
/*
 * Offset 0xF8EE4, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1327..1369)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ActiveAreaLeft__7DISPMAN(struct DISPMAN *this /*$s0*/)
{ // line 1, offset 0xf8ee4
  int start; // $s1
} // line 43, offset 0xf9018
/*
 * Offset 0xF902C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1375..1431)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ ActiveAreaRight__7DISPMAN(struct DISPMAN *this /*$s1*/)
{ // line 1, offset 0xf902c
  int start; // $s2
} // line 57, offset 0xf9258
/*
 * Offset 0xF9270, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1437..1487)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ ActiveAreaUp__7DISPMAN(struct DISPMAN *this /*$s0*/)
{ // line 1, offset 0xf9270
} // line 51, offset 0xf940c
/*
 * Offset 0xF941C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1493..1563)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ ActiveAreaDown__7DISPMAN(struct DISPMAN *this /*$s0*/)
{ // line 1, offset 0xf941c
  int start; // $s1
} // line 71, offset 0xf96dc
/*
 * Offset 0xF96F0, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1568..1705)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ ActiveAreaSelect__7DISPMANii(struct DISPMAN *this /*$s1*/, int x /*$s2*/, int y /*$s0*/)
{ // line 1, offset 0xf96f0
  int selected; // $s0
  int newArea; // $a0
} // line 138, offset 0xf9bac
/*
 * Offset 0xF9BAC, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1728..1957)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
int /*$ra*/ ActiveAreaConfirm__7DISPMAN(struct DISPMAN *this /*$s1*/)
{ // line 1, offset 0xf9bac
} // line 230, offset 0xf9fac
/*
 * Offset 0xF9FAC, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2044..2077)
 * Stack frame base $sp, size 40
 */
unsigned int /*$ra*/ intersect__7DISPMANG4RECTT1(struct DISPMAN *this /*$a0*/, struct RECT rect1 /*stack 4*/, struct RECT rect2 /*stack 12*/)
{ // line 1, offset 0xf9fac
  int n; // $t0
  struct POINT p[4]; // stack offset -40
  char bitPattern[2]; // stack offset -8
} // line 34, offset 0xfa174
/*
 * Offset 0xFA174, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2139..2265)
 * Stack frame base $sp, size 64
 * Saved registers at offset -4: s0 s1 s2 s3 s4 ra
 */
unsigned int /*$ra*/ Update__7DISPMAN(struct DISPMAN *this /*$s1*/)
{ // line 1, offset 0xfa174
  int n; // $s0
  struct RECT rect; // stack offset -32
  { // line 28, offset 0xfa238
    { // line 29, offset 0xfa260
      { // line 1, offset 0xfa260
        struct DISPMAN *this; // $s1
        { // line 1, offset 0xfa260
          int i; // $a0
        } // line 1, offset 0xfa2a4
      } // line 1, offset 0xfa2a4
      { // line 1, offset 0xfa2a4
        struct DISPMAN *this; // $s1
        { // line 1, offset 0xfa2a4
          int i; // $a0
        } // line 1, offset 0xfa2ec
      } // line 1, offset 0xfa2ec
      { // line 1, offset 0xfa2ec
        struct DISPMAN *this; // $s1
        { // line 1, offset 0xfa2ec
          int i; // $a0
        } // line 1, offset 0xfa334
      } // line 1, offset 0xfa334
      { // line 1, offset 0xfa334
        struct DISPMAN *this; // $s1
        { // line 1, offset 0xfa334
          int i; // $a0
        } // line 1, offset 0xfa37c
      } // line 1, offset 0xfa37c
      { // line 1, offset 0xfa37c
        struct DISPMAN *this; // $s1
        { // line 1, offset 0xfa37c
        } // line 1, offset 0xfa39c
      } // line 1, offset 0xfa39c
    } // line 38, offset 0xfa39c
  } // line 38, offset 0xfa39c
  { // line 49, offset 0xfa3d8
    { // line 52, offset 0xfa3e8
      { // line 53, offset 0xfa3e8
        { // line 53, offset 0xfa3ec
          { // line 1, offset 0xfa3ec
            struct DISPMAN *this; // $s1
            int n; // $s0
            { // line 1, offset 0xfa3ec
            } // line 1, offset 0xfa47c
          } // line 1, offset 0xfa47c
        } // line 53, offset 0xfa47c
      } // line 53, offset 0xfa488
    } // line 53, offset 0xfa488
  } // line 53, offset 0xfa488
} // line 127, offset 0xfa684
/*
 * Offset 0xFA684, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2271..2349)
 * Stack frame base $sp, size 352
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ PrintKanji__7DISPMANPsiiiiii(struct DISPMAN *this /*$s1*/, short *string /*$s0*/, int x /*$s4*/, int y /*$fp*/, int maxChars /*stack 16*/, int r /*stack 20*/, int g /*stack 24*/, int b /*stack 28*/, int maxChars /*$s5*/)
{ // line 1, offset 0xfa684
  char textBuffer[256]; // stack offset -312
  int lookup; // $a1
  int n; // stack offset -48
  short *sjisPtr; // $s0
  short sjisCode[3]; // stack offset -56
  int chars; // $v1
} // line 79, offset 0xfa97c
/*
 * Offset 0xFA97C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2402..2434)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ darken__7DISPMANG4RECT(struct DISPMAN *this /*$s0*/, struct RECT rect /*stack 4*/)
{ // line 1, offset 0xfa97c
} // line 31, offset 0xfacc4
/*
 * Offset 0xFACD4, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2670..2694)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
int /*$ra*/ DrawSprite__7DISPMANP9TIMSTRUCTiiiiii(struct DISPMAN *this /*$s0*/, struct TIMSTRUCT *tim /*$s1*/, int x /*$s2*/, int y /*$s3*/, int r /*stack 16*/, int g /*stack 20*/, int b /*stack 24*/, int trans /*stack 28*/, int r /*$v1*/, int g /*$v1*/, int b /*$v1*/)
{ // line 1, offset 0xfacd4
} // line 25, offset 0xfaed0
/*
 * Offset 0xFAED0, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2743..2773)
 * Stack frame base $sp, size 56
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ AddCircleG16__7DISPMANiiiiiiii(struct DISPMAN *this /*$s0*/, int x /*stack 4*/, int y /*stack 8*/, int diameter /*$a3*/, int complete /*stack 16*/, int r /*stack 20*/, int g /*stack 24*/, int b /*stack 28*/, int divisor /*stack 32*/, int complete /*$s7*/, int b /*$fp*/, int divisor /*$s1*/)
{ // line 1, offset 0xfaed0
  int modX; // $s6
  int modY; // $s5
  { // line 10, offset 0xfaf54
    int n; // $s3
  } // line 31, offset 0xfb304
} // line 31, offset 0xfb304
/*
 * Offset 0xFB304, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2786..3106)
 * Stack frame base $sp, size 344
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
short /*$ra*/ MessageBox__7DISPMANiPcbT3(struct DISPMAN *this /*$s5*/, int type /*stack 4*/, char *text /*stack 8*/, unsigned int bIgnoreEvents /*stack 12*/, unsigned int bSwapKeys /*stack 16*/)
{ // line 1, offset 0xfb304
  int boxHeight; // $s6
  int boxTop; // stack offset -72
  int maxTextLen; // stack offset -68
  int textLen; // $s0
  int textY; // $s3
  int lineCount; // $s1
  struct RECT darkRect; // stack offset -304
  struct RECT rect; // stack offset -296
  char textBuffer[128]; // stack offset -288
  int sel; // $fp
  unsigned int cardState; // stack offset -64
  unsigned int bInBox; // $s4
  int n; // $s2
  int messCount; // $s7
  short padData; // $s4
  { // line 102, offset 0xfb79c
    struct DISPMAN *this; // $s5
    struct RECT rect; // stack offset -148
    { // line 102, offset 0xfb79c
      int n; // $s2
    } // line 113, offset 0xfb8d0
  } // line 113, offset 0xfb8d0
  { // line 117, offset 0xfb8d0
    { // line 120, offset 0xfb8fc
      { // line 124, offset 0xfb954
        { // line 127, offset 0xfb984
          { // line 129, offset 0xfb9a8
            struct DISPMAN *this; // $s5
            int y; // $s3
            { // line 129, offset 0xfb9a8
              struct LINE_F2 strF2; // stack offset -88
              struct LINE_F4 strF4; // stack offset -120
            } // line 129, offset 0xfb9a8
          } // line 129, offset 0xfb9a8
          { // line 130, offset 0xfba68
            struct DISPMAN *this; // $s5
            int y; // $s3
            { // line 130, offset 0xfba68
              struct LINE_F2 strF2; // stack offset -128
              struct LINE_F4 strF4; // stack offset -160
            } // line 130, offset 0xfba68
          } // line 130, offset 0xfba68
          { // line 133, offset 0xfbb2c
            struct DISPMAN *this; // $s5
            int y; // $s3
            { // line 133, offset 0xfbb2c
              struct LINE_F2 strF2; // stack offset -128
              struct LINE_F4 strF4; // stack offset -160
            } // line 133, offset 0xfbbc8
          } // line 133, offset 0xfbbc8
        } // line 136, offset 0xfbbc8
      } // line 136, offset 0xfbbc8
      { // line 141, offset 0xfbc34
        { // line 176, offset 0xfbd50
          { // line 179, offset 0xfbd80
            { // line 1, offset 0xfbdd4
              struct DISPMAN *this; // $s5
              int y; // $s3
              int r; // $s2
              int g; // $s1
              int b; // $s0
              { // line 1, offset 0xfbdd4
                struct LINE_F2 strF2; // stack offset -128
                struct LINE_F4 strF4; // stack offset -160
              } // line 1, offset 0xfbdd4
            } // line 1, offset 0xfbdd4
            { // line 1, offset 0xfbefc
              struct DISPMAN *this; // $s5
              int y; // $s3
              int r; // $s2
              int g; // $s1
              int b; // $s0
              { // line 1, offset 0xfbefc
                struct LINE_F2 strF2; // stack offset -128
                struct LINE_F4 strF4; // stack offset -160
              } // line 1, offset 0xfbefc
            } // line 1, offset 0xfbefc
            { // line 188, offset 0xfc01c
              struct DISPMAN *this; // $s5
              int y; // $s3
              int r; // $s1
              { // line 188, offset 0xfc01c
                struct LINE_F2 strF2; // stack offset -128
                struct LINE_F4 strF4; // stack offset -160
              } // line 188, offset 0xfc0cc
            } // line 188, offset 0xfc0cc
          } // line 191, offset 0xfc0cc
        } // line 191, offset 0xfc0cc
      } // line 207, offset 0xfc138
    } // line 233, offset 0xfc278
    { // line 236, offset 0xfc280
      { // line 240, offset 0xfc2b0
        { // line 241, offset 0xfc2f0
          { // line 244, offset 0xfc2fc
            { // line 1, offset 0xfc390
              struct DISPMAN *this; // $s5
              int y; // $s3
              { // line 1, offset 0xfc390
                struct LINE_F2 strF2; // stack offset -128
                struct LINE_F4 strF4; // stack offset -160
              } // line 1, offset 0xfc390
            } // line 1, offset 0xfc390
            { // line 1, offset 0xfc474
              struct DISPMAN *this; // $s5
              int y; // $s3
              { // line 1, offset 0xfc474
                struct LINE_F2 strF2; // stack offset -128
                struct LINE_F4 strF4; // stack offset -160
              } // line 1, offset 0xfc474
            } // line 1, offset 0xfc474
          } // line 266, offset 0xfc540
          { // line 283, offset 0xfc650
            struct DISPMAN *this; // $s5
            int y; // $s3
            int w; // $v0
            { // line 283, offset 0xfc650
              struct LINE_F2 strF2; // stack offset -128
              struct LINE_F4 strF4; // stack offset -160
            } // line 283, offset 0xfc650
          } // line 283, offset 0xfc650
          { // line 308, offset 0xfc848
            struct DISPMAN *this; // $s5
            int y; // $s3
            int w; // $v0
            { // line 308, offset 0xfc848
              struct LINE_F2 strF2; // stack offset -128
              struct LINE_F4 strF4; // stack offset -160
            } // line 308, offset 0xfc8e8
          } // line 308, offset 0xfc8e8
        } // line 313, offset 0xfc8f0
      } // line 313, offset 0xfc8f0
    } // line 313, offset 0xfc8f0
  } // line 313, offset 0xfc8f0
} // line 321, offset 0xfc950
/*
 * Offset 0xFC950, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3112..3167)
 * Stack frame base $sp, size 232
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
struct RECT /*$ra*/ ProgressBox__7DISPMANPci(struct DISPMAN *this /*$s3*/, char *text /*$fp*/, int progress /*stack 12*/)
{ // line 1, offset 0xfc950
  int boxHeight; // $s4
  int boxTop; // stack offset -48
  int maxTextLen; // $s7
  int textLen; // $v1
  int textY; // $s1
  int lineCount; // $s0
  struct RECT darkRect; // stack offset -192
  char textBuffer[128]; // stack offset -184
  int n; // $s2
  int messCount; // $s6
} // line 39, offset 0xfcb08
/*
 * Offset 0xFCC54, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3182..3208)
 * Stack frame base $sp, size 312
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ message_width__7DISPMANPcii(struct DISPMAN *this /*$s3*/, char *mesPtr /*$s1*/, int font /*$a2*/, int maxChars /*$s6*/)
{ // line 1, offset 0xfcc54
  char c; // $a1
  int fRef; // $s0
  int w; // $s2
  int n; // $s5
  { // line 1, offset 0xfcc54
    { // line 7, offset 0xfcc98
      { // line 1, offset 0xfcc98
        short *kanjiStringPtr; // $s1
        int maxChars; // $s6
        { // line 1, offset 0xfcc98
          int totalLen; // $a1
          short textBuffer[128]; // stack offset -296
        } // line 1, offset 0xfcd04
      } // line 1, offset 0xfcd04
    } // line 8, offset 0xfcd0c
  } // line 27, offset 0xfce00
} // line 27, offset 0xfce00
/*
 * Offset 0xFCE00, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3214..3330)
 * Stack frame base $sp, size 184
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ justify_mess__7DISPMANPcii(struct DISPMAN *this /*$fp*/, char *messPtr /*$s3*/, int font /*stack 8*/, int maxLineLength /*$s7*/)
{ // line 1, offset 0xfce00
  char c; // $s0
  short kanji; // $s0
  char word[128]; // stack offset -168
  int wordCount; // $s1
  int lineLength; // $s6
  int lineCount; // $s4
} // line 117, offset 0xfd000
/*
 * Offset 0xFD000, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3337..3385)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ write_mess__7DISPMANPciiiiiiii(struct DISPMAN *this /*$s2*/, char *mesPtr /*$s6*/, int x /*$s3*/, int y /*stack 12*/, int font /*stack 16*/, int maxChars /*stack 20*/, int r /*stack 24*/, int g /*stack 28*/, int b /*stack 32*/, int trans /*stack 36*/, int font /*$a0*/, int r /*$t1*/, int g /*$t0*/, int b /*$a3*/, int trans /*$v0*/)
{ // line 1, offset 0xfd000
  int fRef; // $s1
  int n; // stack offset -56
  char c; // $s0
  { // line 1, offset 0xfd000
    { // line 9, offset 0xfd080
      { // line 11, offset 0xfd0f4
        { // line 20, offset 0xfd124
          { // line 21, offset 0xfd134
            { // line 22, offset 0xfd134
              struct DISPMAN *this; // $s2
              struct TIMSTRUCT *tim; // $a3
              int y; // stack offset 12
              int r; // $t1
              int g; // $t0
              int b; // $a3
              int trans; // $v0
              { // line 22, offset 0xfd134
                struct DR_TPAGE *tpagePtr; // $a2
                struct SPRT *spritePtr; // $a1
              } // line 29, offset 0xfd27c
            } // line 29, offset 0xfd27c
          } // line 29, offset 0xfd27c
        } // line 29, offset 0xfd27c
        { // line 39, offset 0xfd2a4
          { // line 40, offset 0xfd2b0
            { // line 1, offset 0xfd2b0
              struct DISPMAN *this; // $s2
              struct TIMSTRUCT *tim; // $a3
              int x; // $s3
              int y; // stack offset 12
              int r; // $t1
              int g; // $t0
              int b; // $a3
              int trans; // $v0
              { // line 1, offset 0xfd2b0
                struct DR_TPAGE *tpagePtr; // $a2
                struct SPRT *spritePtr; // $a1
              } // line 1, offset 0xfd2b0
            } // line 1, offset 0xfd2b0
          } // line 44, offset 0xfd3a4
        } // line 44, offset 0xfd3a4
      } // line 44, offset 0xfd3a4
    } // line 49, offset 0xfd410
  } // line 49, offset 0xfd410
} // line 49, offset 0xfd410
/*
 * Offset 0xFD410, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3392..3518)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ font_ref__7DISPMANcb(struct DISPMAN *this /*$a0*/, char c /*$a1*/, unsigned int accent /*$a2*/)
{ // line 1, offset 0xfd410
} // line 127, offset 0xfd650
/*
 * Offset 0xFD658, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3524..3610)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 ra
 */
void /*$ra*/ Tim2VRAM__7DISPMANPlP9TIMSTRUCTibiiii(struct DISPMAN *this /*$a0*/, long *timDataPtr /*$s0*/, struct TIMSTRUCT *destTimPtr /*$s2*/, int abr /*$s1*/, unsigned int setCoords /*stack 16*/, int clutX /*stack 20*/, int clutY /*stack 24*/, int iconX /*stack 28*/, int iconY /*stack 32*/, unsigned int setCoords /*$s6*/, int clutX /*$v0*/, int clutY /*$v1*/, int iconX /*$v0*/, int iconY /*$v1*/)
{ // line 1, offset 0xfd658
  long flag; // $a0
  struct RECT *timRect; // $a2
  { // line 19, offset 0xfd6a4
    { // line 25, offset 0xfd6b8
      { // line 34, offset 0xfd6d8
        { // line 39, offset 0xfd6f0
          { // line 40, offset 0xfd6f0
            int n; // $a0
          } // line 45, offset 0xfd718
        } // line 45, offset 0xfd718
      } // line 45, offset 0xfd718
    } // line 52, offset 0xfd740
  } // line 52, offset 0xfd740
} // line 87, offset 0xfd86c
/*
 * Offset 0xFD86C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3749..3805)
 * Stack frame base $sp, size 264
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ wipe_screen__7DISPMANii(struct DISPMAN *this /*$s1*/, int wt /*$s3*/, int step /*$s5*/)
{ // line 1, offset 0xfd86c
  int i; // $s2
  struct DRAWENV drawenv; // stack offset -248
  struct DISPENV de; // stack offset -152
  unsigned long fadeOt[3]; // stack offset -128
  struct POLY_GT3 FadeSetTp; // stack offset -112
  struct POLY_G4 FadePol; // stack offset -72
} // line 57, offset 0xfdad8
/*
 * Offset 0xFDAD8, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 392..421)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ _._7DISPMAN(struct DISPMAN *this /*$s2*/, int __in_chrg /*$s3*/)
{ // line 1, offset 0xfdad8
  struct RECT rect; // stack offset -32
} // line 14, offset 0xfdb38
/*
 * Offset 0xFDBEC, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1105..1110)
 * Stack frame base $sp, size 112
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ DrawEnterName__7DISPMANPc(struct DISPMAN *this /*$s0*/, char *ascii /*$a3*/)
{ // line 1, offset 0xfdbec
  char message[64]; // stack offset -72
} // line 6, offset 0xfdc6c
/*
 * Offset 0xFDC6C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1114..1120)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ SetMenuOption__7DISPMANi(struct DISPMAN *this /*$s0*/, int menuOption /*$s1*/)
{ // line 1, offset 0xfdc6c
} // line 7, offset 0xfdca8
/*
 * Offset 0xFDCBC, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1125..1126)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ SetActiveFunction__7DISPMANi(struct DISPMAN *this /*$a0*/, int menuOption /*$a1*/)
{ // line 1, offset 0xfdcbc
} // line 2, offset 0xfdcc4
/*
 * Offset 0xFDCC4, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1131..1135)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ MoveActiveAreaTo__7DISPMANi(struct DISPMAN *this /*$s0*/, int area /*$s1*/)
{ // line 1, offset 0xfdcc4
} // line 5, offset 0xfdd0c
/*
 * Offset 0xFDD0C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1249..1264)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
void /*$ra*/ SelectNewBlock__7DISPMANi(struct DISPMAN *this /*$s0*/, int newBlock /*$a1*/)
{ // line 1, offset 0xfdd0c
} // line 16, offset 0xfddc0
/*
 * Offset 0xFDDD0, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1710..1724)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetArea__7DISPMANii(struct DISPMAN *this /*$a0*/, int x /*$a1*/, int y /*$a2*/)
{ // line 1, offset 0xfddd0
  int n; // $a3
} // line 15, offset 0xfde48
/*
 * Offset 0xFDE50, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 1962..2014)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ ActiveAreaCancel__7DISPMAN(struct DISPMAN *this /*$s0*/)
{ // line 1, offset 0xfde50
} // line 53, offset 0xfdf58
/*
 * Offset 0xFDF58, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2028..2028)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ AddingBlock__7DISPMANi(struct DISPMAN *this /*$a0*/, int n /*$a1*/)
{ // line 1, offset 0xfdf58
} // line 1, offset 0xfdf60
/*
 * Offset 0xFDF60, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2030..2030)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ DeletingCurrBlock__7DISPMANi(struct DISPMAN *this /*$a0*/, int n /*$a1*/)
{ // line 1, offset 0xfdf60
} // line 1, offset 0xfdf68
/*
 * Offset 0xFDF68, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2033..2039)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ InvalidateArea__7DISPMANG4RECT(struct DISPMAN *this /*$s3*/, struct RECT rect /*stack 4*/)
{ // line 1, offset 0xfdf68
  int n; // $s2
} // line 7, offset 0xfe040
/*
 * Offset 0xFE040, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2081..2095)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ InvalidateArea__7DISPMANi(struct DISPMAN *this /*$a0*/, int n /*$a1*/)
{ // line 1, offset 0xfe040
  int i; // $a2
} // line 14, offset 0xfe090
/*
 * Offset 0xFE098, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2100..2125)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ DrawArea__7DISPMANi(struct DISPMAN *this /*$a2*/, int n /*$a1*/)
{ // line 1, offset 0xfe098
} // line 26, offset 0xfe134
/*
 * Offset 0xFE144, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2129..2129)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ FlashOn__7DISPMAN(struct DISPMAN *this /*$a0*/)
{ // line 1, offset 0xfe144
} // line 1, offset 0xfe150
/*
 * Offset 0xFE150, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2132..2134)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ FlashOff__7DISPMAN(struct DISPMAN *this /*$a0*/)
{ // line 1, offset 0xfe150
} // line 3, offset 0xfe160
/*
 * Offset 0xFE160, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2355..2366)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ FindKanji__7DISPMANs(struct DISPMAN *this /*$a0*/, short sjisCode /*$a1*/)
{ // line 1, offset 0xfe160
  int n; // $v1
} // line 12, offset 0xfe1a8
/*
 * Offset 0xFE1B0, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2371..2374)
 * Stack frame base $sp, size 72
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ CentrePrintKanji__7DISPMANPsiiiiii(struct DISPMAN *this /*$s5*/, short *string /*$s3*/, int x /*$s6*/, int y /*$s7*/, int maxChars /*stack 16*/, int r /*stack 20*/, int g /*stack 24*/, int b /*stack 28*/, int maxChars /*$s4*/, int r /*$s0*/, int g /*$s1*/, int b /*$s2*/)
{ // line 1, offset 0xfe1b0
} // line 4, offset 0xfe258
/*
 * Offset 0xFE258, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2379..2395)
 * Stack frame base $sp, size 288
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ KanjiStrLen__FPsi(short *kanjiStringPtr /*$s1*/, int maxChars /*$s0*/)
{ // line 1, offset 0xfe258
  short textBuffer[128]; // stack offset -272
  int totalLen; // $a1
} // line 17, offset 0xfe2f4
/*
 * Offset 0xFE2F4, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2474..2474)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetCurrBlock__7DISPMAN(struct DISPMAN *this /*$a0*/)
{ // line 1, offset 0xfe2f4
} // line 1, offset 0xfe300
/*
 * Offset 0xFE300, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2476..2476)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetCurrSlice__7DISPMAN(struct DISPMAN *this /*$a0*/)
{ // line 1, offset 0xfe300
} // line 1, offset 0xfe30c
/*
 * Offset 0xFE30C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2480..2494)
 * Stack frame base $sp, size 64
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ draw_card__7DISPMANiiPcb(struct DISPMAN *this /*$s1*/, int x /*$s2*/, int y /*$s3*/, char *text /*$a1*/, unsigned int selected /*stack 16*/, unsigned int selected /*$v0*/)
{ // line 1, offset 0xfe30c
} // line 15, offset 0xfe418
/*
 * Offset 0xFE434, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2515..2559)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AddIcon__7DISPMANP9TIMSTRUCTiiiiiib(struct DISPMAN *this /*$a0*/, struct TIMSTRUCT *tim /*$t2*/, int x /*$a2*/, int y /*$a1*/, int r /*stack 16*/, int g /*stack 20*/, int b /*stack 24*/, int trans /*stack 28*/, unsigned int scale /*stack 32*/, int r /*$v1*/, int g /*$v0*/, int b /*$v1*/, int trans /*$a0*/, unsigned int scale /*$a3*/)
{ // line 1, offset 0xfe434
  int XPlusW; // $t1
  int YPlusH; // $a0
  struct POLY_FT4 *polyFT4Ptr; // $t0
} // line 45, offset 0xfe590
/*
 * Offset 0xFE598, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2616..2624)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ AddMoveImage__7DISPMANP4RECTT1(struct DISPMAN *this /*$s0*/, struct RECT *srect /*$a1*/, struct RECT *drect /*$t0*/)
{ // line 1, offset 0xfe598
  struct DR_MOVE *movePtr; // $s0
} // line 9, offset 0xfe61c
/*
 * Offset 0xFE61C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2630..2665)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ AddSprite__7DISPMANP9TIMSTRUCTiiiiii(struct DISPMAN *this /*$a0*/, struct TIMSTRUCT *tim /*$a1*/, int x /*$a2*/, int y /*$a3*/, int r /*stack 16*/, int g /*stack 20*/, int b /*stack 24*/, int trans /*stack 28*/, int r /*$a2*/, int g /*$v0*/, int b /*$a2*/, int trans /*$v1*/)
{ // line 1, offset 0xfe61c
  struct SPRT *spritePtr; // $t0
  struct DR_TPAGE *tpagePtr; // $a0
} // line 36, offset 0xfe72c
/*
 * Offset 0xFE72C, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 2699..2730)
 * Stack frame base $sp, size 104
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
int /*$ra*/ DrawBox__7DISPMANiiiiiii(struct DISPMAN *this /*$a0*/, int x /*$s2*/, int y /*$s3*/, int w /*$s1*/, int h /*stack 16*/, int r /*stack 20*/, int g /*stack 24*/, int b /*stack 28*/, int h /*$s0*/, int r /*$s5*/, int g /*$s6*/, int b /*$s7*/)
{ // line 1, offset 0xfe72c
  struct LINE_F4 strF4; // stack offset -88
  struct LINE_F2 strF2; // stack offset -56
} // line 32, offset 0xfe834
/*
 * Offset 0xFE834, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3172..3177)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ write_mess_c__7DISPMANPciiiiiiii(struct DISPMAN *this /*$s0*/, char *mesPtr /*$s1*/, int x /*stack 8*/, int y /*$s4*/, int font /*stack 16*/, int maxChars /*stack 20*/, int r /*stack 24*/, int g /*stack 28*/, int b /*stack 32*/, int trans /*stack 36*/, int font /*$s3*/, int maxChars /*$s2*/, int r /*$s5*/, int g /*$s6*/, int b /*$s7*/, int trans /*$fp*/)
{ // line 1, offset 0xfe834
  int w; // $s0
} // line 6, offset 0xfe908
/*
 * Offset 0xFE908, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3615..3656)
 * Stack frame base $sp, size 48
 * Saved registers at offset -8: s0 s1 s2 s3 ra
 */
void /*$ra*/ download_block_icon__7DISPMANiiii(struct DISPMAN *this /*$s2*/, int iconX /*$s3*/, int iconY /*$s1*/, int clutX /*$a3*/, int clutY /*stack 16*/, int clutY /*$v0*/)
{ // line 1, offset 0xfe908
  struct RECT rect; // stack offset -32
  struct TIMSTRUCT *timPtr; // $s0
  unsigned short *clutWordPtr; // $v1
  { // line 1, offset 0xfe908
    int n; // $a0
  } // line 22, offset 0xfe998
} // line 42, offset 0xfea44
/*
 * Offset 0xFEA44, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3809..3834)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ move_screen__7DISPMANiii(struct DISPMAN *this /*$s0*/, int startY /*$a1*/, int finishY /*$s3*/, int steps /*$a3*/)
{ // line 1, offset 0xfea44
  int screenY; // $s1
} // line 26, offset 0xfeb00
/*
 * Offset 0xFEB24, from D:\driver2\game\MEMCARD\DISPLAY.CPP (lines 3840..3853)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetCyclesPerSecond__7DISPMAN(struct DISPMAN *this /*$a0*/)
{ // line 1, offset 0xfeb24
} // line 14, offset 0xfeb70
Source file(s) D:\driver2\game\MEMCARD\PAD.CPP+D:\driver2\game\PAD.CPP, object file memcard\obj\pad.obj overlay id <none>

// 47 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct DR_AREA {
  unsigned long tag; // size=0, offset=0
  unsigned long code[2]; // size=8, offset=4
};
struct DR_MOVE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[5]; // size=20, offset=4
};
struct DR_TPAGE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[1]; // size=4, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct MouseData {
  unsigned short buttons; // size=0, offset=0
  char xOffset; // size=0, offset=2
  char yOffset; // size=0, offset=3
};
struct NegconData {
  unsigned short digitalButtons; // size=0, offset=0
  char centralTwist; // size=0, offset=2
  char buttonI; // size=0, offset=3
  char buttonII; // size=0, offset=4
  char topLeft; // size=0, offset=5
};
struct AnalogjoyData {
  unsigned short digitalButtons; // size=0, offset=0
  unsigned char right_x; // size=0, offset=2
  unsigned char right_y; // size=0, offset=3
  unsigned char left_x; // size=0, offset=4
  unsigned char left_y; // size=0, offset=5
};
union ._122 {
  unsigned short pad; // size=0, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct MouseData mouse; // size=4, offset=0
};
struct TapCtrllerData {
  unsigned char transStatus; // size=0, offset=0
  unsigned char dataFormat; // size=0, offset=1
  union ._122 data; // size=6, offset=2
};
struct MultiTapData {
  struct TapCtrllerData ctrllers[4]; // size=32, offset=0
};
union ._125 {
  unsigned short pad; // size=0, offset=0
  struct MouseData mouse; // size=4, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct AnalogjoyData joystick; // size=6, offset=0
  struct MultiTapData tap; // size=32, offset=0
};
struct ControllerPacket {
  unsigned char transStatus; // size=0, offset=0
  unsigned char dataFormat; // size=0, offset=1
  union ._125 data; // size=32, offset=2
};
struct _CARD {
  char Magic[2]; // size=2, offset=0
  char Type; // size=0, offset=2
  char BlockEntry; // size=0, offset=3
  char Title[64]; // size=64, offset=4
  char reserve[28]; // size=28, offset=68
  char Clut[32]; // size=32, offset=96
  char Icon[3][128]; // size=384, offset=128
};
struct TIMSTRUCT {
  unsigned short clut; // size=0, offset=0
  unsigned short tpage; // size=0, offset=2
  unsigned short x; // size=0, offset=4
  unsigned short y; // size=0, offset=6
  unsigned short w; // size=0, offset=8
  unsigned short h; // size=0, offset=10
};
struct FONTTABSTRUCT {
  struct TIMSTRUCT timStruct; // size=12, offset=0
  short width; // size=0, offset=12
  short height; // size=0, offset=14
};
struct KANJILOOKUP {
  short sjisCode; // size=0, offset=0
  unsigned int used; // size=0, offset=4
  struct TIMSTRUCT timStruct; // size=12, offset=8
};
struct SLICEHEADER {
  int size; // size=0, offset=0
  char title[20]; // size=20, offset=4
  char iconRef[3]; // size=3, offset=24
  char used; // size=0, offset=27
  short checksum; // size=0, offset=28
  short pad; // size=0, offset=30
};
struct BLOCKINFO {
  unsigned int infoOK; // size=0, offset=0
  int id; // size=0, offset=4
  int size; // size=0, offset=8
  int freeBytes; // size=0, offset=12
  struct DIRENTRY dirEntry; // size=40, offset=16
  struct _CARD header; // size=512, offset=56
  struct TIMSTRUCT iconTim; // size=12, offset=568
  unsigned int gremBlock; // size=0, offset=580
  int sliceCount; // size=0, offset=584
  int usedSlices; // size=0, offset=588
  struct SLICEHEADER sliceHeader[16]; // size=512, offset=592
};
struct CARDINFO {
  int usedBlocks; // size=0, offset=0
  struct BLOCKINFO blockInfo[15]; // size=16560, offset=4
  unsigned int dirOK; // size=0, offset=16564
  unsigned int infoOK; // size=0, offset=16568
};
struct FILEFORMAT {
  char blockSize; // size=0, offset=0
  char asciiTitle[32]; // size=32, offset=1
  short kanjiTitle[32]; // size=64, offset=34
  char sonyProductCode[13]; // size=13, offset=98
  char blockType; // size=0, offset=111
  short blockIconClut[16]; // size=32, offset=112
  int blockIconData[32]; // size=128, offset=144
  int sliceByteSize; // size=0, offset=272
  long *sliceIconTimPtrs[16]; // size=64, offset=276
};
struct MCSLOT {
  struct CARDINFO m_cardInfo; // size=16572, offset=0
  int m_port; // size=0, offset=16572
  int m_card; // size=0, offset=16576
  int m_chan; // size=0, offset=16580
  char m_device[6]; // size=6, offset=16584
  int m_blocksRead; // size=0, offset=16592
  int m_readFilePtr; // size=0, offset=16596
  int m_readBytes; // size=0, offset=16600
  int m_fromReadBytes; // size=0, offset=16604
  int m_toReadBytes; // size=0, offset=16608
  int m_writeFilePtr; // size=0, offset=16612
  int m_writeBytes; // size=0, offset=16616
  int m_fromWriteBytes; // size=0, offset=16620
  int m_toWriteBytes; // size=0, offset=16624
  int m_iconX; // size=0, offset=16628
  int m_iconY; // size=0, offset=16632
  int m_clutX; // size=0, offset=16636
  int m_clutY; // size=0, offset=16640
  unsigned int m_doCheckSum; // size=0, offset=16644
  short m_checkSumWork; // size=0, offset=16648
  short m_checkSum; // size=0, offset=16650
};
struct PAD {
  struct MCSLOT m_mcSlot0; // size=16652, offset=0
  struct MCSLOT m_mcSlot1; // size=16652, offset=16652
  int m_mouseX; // size=0, offset=33304
  int m_mouseY; // size=0, offset=33308
  int m_scanPort; // size=0, offset=33312
  unsigned int m_cardChanged[2]; // size=8, offset=33316
  unsigned int m_bControllerChanged; // size=0, offset=33324
  unsigned int m_bMouseTested; // size=0, offset=33328
  unsigned int m_bUsingMouse; // size=0, offset=33332
  unsigned int m_bUsingNegCon; // size=0, offset=33336
  unsigned int m_bControllerInserted; // size=0, offset=33340
  int m_nLastControllerType; // size=0, offset=33344
  char slotString[3]; // size=3, offset=33348
  struct MCSLOT *m_slotObjPtrs[2]; // size=8, offset=33352
  int m_slotObjPorts[2]; // size=8, offset=33360
  int m_currSlotObj; // size=0, offset=33368
  int m_portStatus[8]; // size=32, offset=33372
};

// 67 typedefs
typedef struct TCB TCB;
typedef struct EXEC EXEC;
typedef struct DIRENTRY DIRENTRY;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct SPRT SPRT;
typedef struct DR_AREA DR_AREA;
typedef struct DR_MOVE DR_MOVE;
typedef struct DR_TPAGE DR_TPAGE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct MouseData MouseData;
typedef struct NegconData NegconData;
typedef struct AnalogjoyData AnalogjoyData;
typedef struct TapCtrllerData TapCtrllerData;
typedef struct MultiTapData MultiTapData;
typedef struct ControllerPacket ControllerPacket;
typedef struct _CARD _CARD;
typedef struct TIMSTRUCT TIMSTRUCT;
typedef struct FONTTABSTRUCT FONTTABSTRUCT;
typedef struct KANJILOOKUP KANJILOOKUP;
typedef struct SLICEHEADER SLICEHEADER;
typedef struct BLOCKINFO BLOCKINFO;
typedef struct CARDINFO CARDINFO;
typedef struct FILEFORMAT FILEFORMAT;
typedef struct MCSLOT MCSLOT;
typedef struct PAD PAD;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned short PadData;

// 0 labels

// 15 external declarations
extern struct ControllerPacket g_controllerData[2]; // offset 0x0010ec9c
extern unsigned short g_PAD_FRB; // offset 0x0010ec80
extern unsigned short g_PAD_FLB; // offset 0x0010ec82
extern unsigned short g_PAD_FRT; // offset 0x0010ec84
extern unsigned short g_PAD_FLT; // offset 0x0010ec86
extern unsigned short g_PAD_RU; // offset 0x0010ec88
extern unsigned short g_PAD_RD; // offset 0x0010ec8a
extern unsigned short g_PAD_RL; // offset 0x0010ec8c
extern unsigned short g_PAD_RR; // offset 0x0010ec8e
extern unsigned short g_PAD_LU; // offset 0x0010ec90
extern unsigned short g_PAD_LD; // offset 0x0010ec92
extern unsigned short g_PAD_LL; // offset 0x0010ec94
extern unsigned short g_PAD_LR; // offset 0x0010ec96
extern unsigned short g_PAD_SEL; // offset 0x0010ec98
extern unsigned short g_PAD_START; // offset 0x0010ec9a

// 32 functions
/*
 * Offset 0xFEB70, from D:\driver2\game\MEMCARD\PAD.CPP (lines 32..81)
 * Stack frame base $sp, size 48
 * Saved registers at offset -4: s0 s1 s2 ra
 */
struct PAD * /*$ra*/ __3PADPc(struct PAD *this /*$s1*/, char *bufferPtr /*$a1*/)
{ // line 1, offset 0xfeb70
} // line 28, offset 0xfec44
/*
 * Offset 0xFECC0, from D:\driver2\game\MEMCARD\PAD.CPP (lines 137..432)
 * Stack frame base $sp, size 72
 * Saved registers at offset -4: s0 s1 s2 ra
 */
unsigned short /*$ra*/ GetPadData__3PADi(struct PAD *this /*$s1*/, int pad /*$s0*/)
{ // line 1, offset 0xfecc0
  struct ControllerPacket cData; // stack offset -56
  unsigned short retVal; // $s2
} // line 296, offset 0xff2cc
/*
 * Offset 0xFF2CC, from D:\driver2\game\MEMCARD\PAD.CPP (lines 527..565)
 * Stack frame base $sp, size 0
 */
char * /*$ra*/ port_name__3PADi(struct PAD *this /*$a2*/, int port /*$a1*/)
{ // line 1, offset 0xff2cc
} // line 36, offset 0xff3b8
/*
 * Offset 0xFF3C0, from D:\driver2\game\MEMCARD\PAD.CPP (lines 569..632)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
unsigned int /*$ra*/ WaitUntilCardRemoved__3PADi(struct PAD *this /*$s3*/, int slot /*$a1*/)
{ // line 1, offset 0xff3c0
  struct RECT rect; // stack offset -48
  short padData; // $a0
  unsigned int bInBox; // $s2
  { // line 8, offset 0xff410
    { // line 14, offset 0xff448
      { // line 1, offset 0xff448
        struct PAD *this; // $s3
        { // line 1, offset 0xff448
        } // line 1, offset 0xff4bc
      } // line 1, offset 0xff4bc
      { // line 15, offset 0xff4c4
        { // line 16, offset 0xff4c4
          struct PAD *this; // $s3
          { // line 16, offset 0xff4c4
          } // line 16, offset 0xff4c4
        } // line 16, offset 0xff4c4
        { // line 16, offset 0xff4c4
          struct PAD *this; // $s3
          { // line 16, offset 0xff4c4
          } // line 16, offset 0xff4c4
        } // line 16, offset 0xff4c4
        { // line 16, offset 0xff4c4
          struct PAD *this; // $s3
          { // line 16, offset 0xff4c4
          } // line 16, offset 0xff4c4
        } // line 16, offset 0xff4c4
        { // line 1, offset 0xff564
          struct PAD *this; // $s3
          { // line 1, offset 0xff564
          } // line 1, offset 0xff564
        } // line 1, offset 0xff564
        { // line 1, offset 0xff57c
          struct PAD *this; // $s3
          { // line 1, offset 0xff57c
          } // line 1, offset 0xff57c
        } // line 1, offset 0xff57c
        { // line 1, offset 0xff594
          struct PAD *this; // $s3
          { // line 1, offset 0xff594
          } // line 1, offset 0xff594
        } // line 1, offset 0xff594
        { // line 45, offset 0xff5a4
          struct PAD *this; // $s3
          { // line 45, offset 0xff5a4
          } // line 45, offset 0xff5a4
        } // line 45, offset 0xff5a4
        { // line 45, offset 0xff5a4
          struct PAD *this; // $s3
          { // line 45, offset 0xff5a4
          } // line 45, offset 0xff5a4
        } // line 45, offset 0xff5a4
      } // line 56, offset 0xff664
    } // line 64, offset 0xff6b4
  } // line 64, offset 0xff6b4
} // line 64, offset 0xff6e4
/*
 * Offset 0xFF6E4, from D:\driver2\game\MEMCARD\PAD.CPP (lines 655..725)
 * Stack frame base $sp, size 80
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
unsigned int /*$ra*/ WaitUntilAnyCardInserted__3PAD(struct PAD *this /*$s3*/)
{ // line 1, offset 0xff6e4
  struct RECT rect; // stack offset -48
  unsigned int bInBox; // $s2
  { // line 8, offset 0xff730
    { // line 20, offset 0xff7a0
      { // line 1, offset 0xff7a0
        struct PAD *this; // $s3
        { // line 1, offset 0xff7a0
        } // line 1, offset 0xff814
      } // line 1, offset 0xff814
      { // line 21, offset 0xff81c
        { // line 22, offset 0xff81c
          struct PAD *this; // $s3
          { // line 22, offset 0xff81c
          } // line 22, offset 0xff81c
        } // line 22, offset 0xff81c
        { // line 22, offset 0xff81c
          struct PAD *this; // $s3
          { // line 22, offset 0xff81c
          } // line 22, offset 0xff81c
        } // line 22, offset 0xff81c
        { // line 22, offset 0xff81c
          struct PAD *this; // $s3
          { // line 22, offset 0xff81c
          } // line 22, offset 0xff81c
        } // line 22, offset 0xff81c
        { // line 1, offset 0xff8c0
          struct PAD *this; // $s3
          { // line 1, offset 0xff8c0
          } // line 1, offset 0xff8c0
        } // line 1, offset 0xff8c0
        { // line 1, offset 0xff8d8
          struct PAD *this; // $s3
          { // line 1, offset 0xff8d8
          } // line 1, offset 0xff8d8
        } // line 1, offset 0xff8d8
        { // line 1, offset 0xff8f0
          struct PAD *this; // $s3
          { // line 1, offset 0xff8f0
          } // line 1, offset 0xff8f0
        } // line 1, offset 0xff8f0
        { // line 53, offset 0xff900
          struct PAD *this; // $s3
          { // line 53, offset 0xff900
          } // line 53, offset 0xff900
        } // line 53, offset 0xff900
        { // line 53, offset 0xff900
          struct PAD *this; // $s3
          { // line 53, offset 0xff900
          } // line 53, offset 0xff900
        } // line 53, offset 0xff900
      } // line 63, offset 0xff9b0
    } // line 71, offset 0xff9ec
  } // line 71, offset 0xff9ec
} // line 71, offset 0xffa1c
/*
 * Offset 0xFFA1C, from D:\driver2\game\MEMCARD\PAD.CPP (lines 794..895)
 * Stack frame base $sp, size 32
 * Saved registers at offset -4: s0 s1 s2 ra
 */
void /*$ra*/ check_ports__3PAD(struct PAD *this /*$s1*/)
{ // line 1, offset 0xffa1c
} // line 102, offset 0xffc80
/*
 * Offset 0xFFC98, from D:\driver2\game\MEMCARD\PAD.CPP (lines 905..950)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 s6 s7 ra
 */
void /*$ra*/ search_ports__3PADib(struct PAD *this /*$s4*/, int slot /*$s0*/, unsigned int cycle /*$a2*/)
{ // line 1, offset 0xffc98
} // line 46, offset 0xffe18
/*
 * Offset 0xFFE44, from D:\driver2\game\MEMCARD\PAD.CPP (lines 89..94)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
void /*$ra*/ _._3PAD(struct PAD *this /*$s1*/, int __in_chrg /*$s0*/)
{ // line 1, offset 0xffe44
} // line 1, offset 0xffe44
/*
 * Offset 0xFFEA0, from D:\driver2\game\MEMCARD\PAD.CPP (lines 103..133)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
int /*$ra*/ UpdateSlots__3PAD(struct PAD *this /*$s0*/)
{ // line 1, offset 0xffea0
} // line 31, offset 0xffee0
/*
 * Offset 0xFFEE0, from D:\driver2\game\MEMCARD\PAD.CPP (lines 437..444)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ NegConInserted__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0xffee0
} // line 8, offset 0xfff10
/*
 * Offset 0xFFF10, from D:\driver2\game\MEMCARD\PAD.CPP (lines 448..459)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ ControllerInserted__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0xfff10
} // line 12, offset 0xfff48
/*
 * Offset 0xFFF48, from D:\driver2\game\MEMCARD\PAD.CPP (lines 463..464)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ ControllerChanged__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0xfff48
} // line 2, offset 0xfff5c
/*
 * Offset 0xFFF5C, from D:\driver2\game\MEMCARD\PAD.CPP (lines 468..486)
 * Stack frame base $sp, size 56
 */
unsigned int /*$ra*/ SetControllerType__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0xfff5c
  struct ControllerPacket cData; // stack offset -40
} // line 19, offset 0x1000d0
/*
 * Offset 0x1000D0, from D:\driver2\game\MEMCARD\PAD.CPP (lines 490..511)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ MouseInserted__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x1000d0
} // line 22, offset 0x100158
/*
 * Offset 0x100158, from D:\driver2\game\MEMCARD\PAD.CPP (lines 514..514)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetMouseX__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x100158
} // line 1, offset 0x10016c
/*
 * Offset 0x10016C, from D:\driver2\game\MEMCARD\PAD.CPP (lines 515..515)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetMouseY__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x10016c
} // line 1, offset 0x100180
/*
 * Offset 0x100180, from D:\driver2\game\MEMCARD\PAD.CPP (lines 519..520)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
void /*$ra*/ ResetPadData__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x100180
} // line 2, offset 0x1001ac
/*
 * Offset 0x1001AC, from D:\driver2\game\MEMCARD\PAD.CPP (lines 733..738)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
char * /*$ra*/ GetPortName__3PADi(struct PAD *this /*$s1*/, int slot /*$s0*/)
{ // line 1, offset 0x1001ac
} // line 6, offset 0x100214
/*
 * Offset 0x100214, from D:\driver2\game\MEMCARD\PAD.CPP (lines 757..760)
 * Stack frame base $sp, size 24
 * Saved registers at offset -4: s0 ra
 */
char * /*$ra*/ GetControllerPortName__3PAD(struct PAD *this /*$s0*/)
{ // line 1, offset 0x100214
} // line 4, offset 0x100244
/*
 * Offset 0x100244, from D:\driver2\game\MEMCARD\PAD.CPP (lines 778..779)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ CardSelected__3PADi(struct PAD *this /*$a0*/, int slot /*$a1*/)
{ // line 1, offset 0x100244
} // line 2, offset 0x100260
/*
 * Offset 0x100260, from D:\driver2\game\MEMCARD\PAD.CPP (lines 783..784)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
unsigned int /*$ra*/ CurrCardInfoRead__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x100260
} // line 2, offset 0x10029c
/*
 * Offset 0x10029C, from D:\driver2\game\MEMCARD\PAD.CPP (lines 956..972)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ next_port__3PADi(struct PAD *this /*$a0*/, int port /*$a1*/)
{ // line 1, offset 0x10029c
} // line 17, offset 0x1002a4
/*
 * Offset 0x1002A4, from D:\driver2\game\MEMCARD\PAD.CPP (lines 978..979)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
int /*$ra*/ GetCurrNoUsedBlocks__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x1002a4
} // line 2, offset 0x1002e0
/*
 * Offset 0x1002E0, from D:\driver2\game\MEMCARD\PAD.CPP (lines 984..985)
 * Stack frame base $sp, size 24
 * Saved registers at offset -8: ra
 */
unsigned int /*$ra*/ CurrSlotBlocksShared__3PADii(struct PAD *this /*$a0*/, int block1 /*$a1*/, int block2 /*$a2*/)
{ // line 1, offset 0x1002e0
} // line 2, offset 0x10031c
/*
 * Offset 0x10031C, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1001..1002)
 * Stack frame base $sp, size 0
 */
struct MCSLOT * /*$ra*/ GetCurrSlotPtr__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x10031c
} // line 2, offset 0x100340
/*
 * Offset 0x100340, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1006..1007)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ GetCurrSlot__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x100340
} // line 2, offset 0x100354
/*
 * Offset 0x100354, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1011..1012)
 * Stack frame base $sp, size 0
 */
struct MCSLOT * /*$ra*/ GetDestSlotPtr__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x100354
} // line 2, offset 0x10037c
/*
 * Offset 0x10037C, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1017..1021)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ CardChanged__3PADi(struct PAD *this /*$a0*/, int slot /*$a1*/)
{ // line 1, offset 0x10037c
} // line 5, offset 0x1003a8
/*
 * Offset 0x1003B0, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1029..1030)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ CardInserted__3PADi(struct PAD *this /*$a0*/, int slot /*$a1*/)
{ // line 1, offset 0x1003b0
} // line 2, offset 0x1003e4
/*
 * Offset 0x1003E4, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1035..1038)
 * Stack frame base $sp, size 0
 */
void /*$ra*/ CycleSelectedSlot__3PAD(struct PAD *this /*$a0*/)
{ // line 1, offset 0x1003e4
} // line 4, offset 0x10042c
/*
 * Offset 0x10042C, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1049..1050)
 * Stack frame base $sp, size 0
 */
unsigned int /*$ra*/ CardFormatted__3PADi(struct PAD *this /*$a0*/, int slot /*$a1*/)
{ // line 1, offset 0x10042c
} // line 2, offset 0x100460
/*
 * Offset 0x100460, from D:\driver2\game\MEMCARD\PAD.CPP (lines 1054..1058)
 * Stack frame base $sp, size 32
 * Saved registers at offset -8: s0 s1 ra
 */
int /*$ra*/ FormatCard__3PADi(struct PAD *this /*$a0*/, int slot /*$a1*/)
{ // line 1, offset 0x100460
} // line 5, offset 0x1004c8
Source file(s) D:\driver2\game\MEMCARD\TEXT.CPP+D:\driver2\game\TEXT.CPP, object file memcard\obj\text.obj overlay id <none>

// 46 complex types
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct DR_AREA {
  unsigned long tag; // size=0, offset=0
  unsigned long code[2]; // size=8, offset=4
};
struct DR_MOVE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[5]; // size=20, offset=4
};
struct DR_TPAGE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[1]; // size=4, offset=4
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct MouseData {
  unsigned short buttons; // size=0, offset=0
  char xOffset; // size=0, offset=2
  char yOffset; // size=0, offset=3
};
struct NegconData {
  unsigned short digitalButtons; // size=0, offset=0
  char centralTwist; // size=0, offset=2
  char buttonI; // size=0, offset=3
  char buttonII; // size=0, offset=4
  char topLeft; // size=0, offset=5
};
struct AnalogjoyData {
  unsigned short digitalButtons; // size=0, offset=0
  unsigned char right_x; // size=0, offset=2
  unsigned char right_y; // size=0, offset=3
  unsigned char left_x; // size=0, offset=4
  unsigned char left_y; // size=0, offset=5
};
union ._122 {
  unsigned short pad; // size=0, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct MouseData mouse; // size=4, offset=0
};
struct TapCtrllerData {
  unsigned char transStatus; // size=0, offset=0
  unsigned char dataFormat; // size=0, offset=1
  union ._122 data; // size=6, offset=2
};
struct MultiTapData {
  struct TapCtrllerData ctrllers[4]; // size=32, offset=0
};
union ._125 {
  unsigned short pad; // size=0, offset=0
  struct MouseData mouse; // size=4, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct AnalogjoyData joystick; // size=6, offset=0
  struct MultiTapData tap; // size=32, offset=0
};
struct _CARD {
  char Magic[2]; // size=2, offset=0
  char Type; // size=0, offset=2
  char BlockEntry; // size=0, offset=3
  char Title[64]; // size=64, offset=4
  char reserve[28]; // size=28, offset=68
  char Clut[32]; // size=32, offset=96
  char Icon[3][128]; // size=384, offset=128
};
struct TIMSTRUCT {
  unsigned short clut; // size=0, offset=0
  unsigned short tpage; // size=0, offset=2
  unsigned short x; // size=0, offset=4
  unsigned short y; // size=0, offset=6
  unsigned short w; // size=0, offset=8
  unsigned short h; // size=0, offset=10
};
struct FONTTABSTRUCT {
  struct TIMSTRUCT timStruct; // size=12, offset=0
  short width; // size=0, offset=12
  short height; // size=0, offset=14
};
struct KANJILOOKUP {
  short sjisCode; // size=0, offset=0
  unsigned int used; // size=0, offset=4
  struct TIMSTRUCT timStruct; // size=12, offset=8
};
struct SLICEHEADER {
  int size; // size=0, offset=0
  char title[20]; // size=20, offset=4
  char iconRef[3]; // size=3, offset=24
  char used; // size=0, offset=27
  short checksum; // size=0, offset=28
  short pad; // size=0, offset=30
};
struct BLOCKINFO {
  unsigned int infoOK; // size=0, offset=0
  int id; // size=0, offset=4
  int size; // size=0, offset=8
  int freeBytes; // size=0, offset=12
  struct DIRENTRY dirEntry; // size=40, offset=16
  struct _CARD header; // size=512, offset=56
  struct TIMSTRUCT iconTim; // size=12, offset=568
  unsigned int gremBlock; // size=0, offset=580
  int sliceCount; // size=0, offset=584
  int usedSlices; // size=0, offset=588
  struct SLICEHEADER sliceHeader[16]; // size=512, offset=592
};
struct CARDINFO {
  int usedBlocks; // size=0, offset=0
  struct BLOCKINFO blockInfo[15]; // size=16560, offset=4
  unsigned int dirOK; // size=0, offset=16564
  unsigned int infoOK; // size=0, offset=16568
};
struct FILEFORMAT {
  char blockSize; // size=0, offset=0
  char asciiTitle[32]; // size=32, offset=1
  short kanjiTitle[32]; // size=64, offset=34
  char sonyProductCode[13]; // size=13, offset=98
  char blockType; // size=0, offset=111
  short blockIconClut[16]; // size=32, offset=112
  int blockIconData[32]; // size=128, offset=144
  int sliceByteSize; // size=0, offset=272
  long *sliceIconTimPtrs[16]; // size=64, offset=276
};
struct MCSLOT {
  struct CARDINFO m_cardInfo; // size=16572, offset=0
  int m_port; // size=0, offset=16572
  int m_card; // size=0, offset=16576
  int m_chan; // size=0, offset=16580
  char m_device[6]; // size=6, offset=16584
  int m_blocksRead; // size=0, offset=16592
  int m_readFilePtr; // size=0, offset=16596
  int m_readBytes; // size=0, offset=16600
  int m_fromReadBytes; // size=0, offset=16604
  int m_toReadBytes; // size=0, offset=16608
  int m_writeFilePtr; // size=0, offset=16612
  int m_writeBytes; // size=0, offset=16616
  int m_fromWriteBytes; // size=0, offset=16620
  int m_toWriteBytes; // size=0, offset=16624
  int m_iconX; // size=0, offset=16628
  int m_iconY; // size=0, offset=16632
  int m_clutX; // size=0, offset=16636
  int m_clutY; // size=0, offset=16640
  unsigned int m_doCheckSum; // size=0, offset=16644
  short m_checkSumWork; // size=0, offset=16648
  short m_checkSum; // size=0, offset=16650
};
struct PAD {
  struct MCSLOT m_mcSlot0; // size=16652, offset=0
  struct MCSLOT m_mcSlot1; // size=16652, offset=16652
  int m_mouseX; // size=0, offset=33304
  int m_mouseY; // size=0, offset=33308
  int m_scanPort; // size=0, offset=33312
  unsigned int m_cardChanged[2]; // size=8, offset=33316
  unsigned int m_bControllerChanged; // size=0, offset=33324
  unsigned int m_bMouseTested; // size=0, offset=33328
  unsigned int m_bUsingMouse; // size=0, offset=33332
  unsigned int m_bUsingNegCon; // size=0, offset=33336
  unsigned int m_bControllerInserted; // size=0, offset=33340
  int m_nLastControllerType; // size=0, offset=33344
  char slotString[3]; // size=3, offset=33348
  struct MCSLOT *m_slotObjPtrs[2]; // size=8, offset=33352
  int m_slotObjPorts[2]; // size=8, offset=33360
  int m_currSlotObj; // size=0, offset=33368
  int m_portStatus[8]; // size=32, offset=33372
};

// 66 typedefs
typedef struct TCB TCB;
typedef struct EXEC EXEC;
typedef struct DIRENTRY DIRENTRY;
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct SPRT SPRT;
typedef struct DR_AREA DR_AREA;
typedef struct DR_MOVE DR_MOVE;
typedef struct DR_TPAGE DR_TPAGE;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct MouseData MouseData;
typedef struct NegconData NegconData;
typedef struct AnalogjoyData AnalogjoyData;
typedef struct TapCtrllerData TapCtrllerData;
typedef struct MultiTapData MultiTapData;
typedef struct _CARD _CARD;
typedef struct TIMSTRUCT TIMSTRUCT;
typedef struct FONTTABSTRUCT FONTTABSTRUCT;
typedef struct KANJILOOKUP KANJILOOKUP;
typedef struct SLICEHEADER SLICEHEADER;
typedef struct BLOCKINFO BLOCKINFO;
typedef struct CARDINFO CARDINFO;
typedef struct FILEFORMAT FILEFORMAT;
typedef struct MCSLOT MCSLOT;
typedef struct PAD PAD;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned short PadData;

// 0 labels

// 2 external declarations
extern char *g_msg[73]; // offset 0x0010ece0
extern char *g_textBuffer; // offset 0x0010ee04

// 1 functions
/*
 * Offset 0x1004C8, from D:\driver2\game\MEMCARD\TEXT.CPP (lines 16..171)
 * Stack frame base $sp, size 0
 */
int /*$ra*/ ParseLanguageFile__FPci(char *textBuffer /*$a0*/, int language /*$a1*/)
{ // line 1, offset 0x1004c8
  int m; // $t0
  char *textPtr; // $a0
} // line 156, offset 0x1005d8
Source file(s) D:\driver2\game\CMAN.CPP+D:\driver2\game\MEMCARD\CMAN.CPP, object file memcard\obj\cman.obj overlay id <none>

// 48 complex types
struct VECTOR {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
  long pad; // size=0, offset=12
};
struct SVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
  short vz; // size=0, offset=4
  short pad; // size=0, offset=6
};
struct CVECTOR {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char cd; // size=0, offset=3
};
struct DVECTOR {
  short vx; // size=0, offset=0
  short vy; // size=0, offset=2
};
struct RVECTOR {
  struct SVECTOR v; // size=8, offset=0
  unsigned char uv[2]; // size=2, offset=8
  unsigned short pad; // size=0, offset=10
  struct CVECTOR c; // size=4, offset=12
  struct DVECTOR sxy; // size=4, offset=16
  unsigned long sz; // size=0, offset=20
};
struct CRVECTOR3 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r12; // size=24, offset=24
  struct RVECTOR r20; // size=24, offset=48
  struct RVECTOR *r0; // size=24, offset=72
  struct RVECTOR *r1; // size=24, offset=76
  struct RVECTOR *r2; // size=24, offset=80
  unsigned long *rtn; // size=0, offset=84
};
struct CRVECTOR4 {
  struct RVECTOR r01; // size=24, offset=0
  struct RVECTOR r02; // size=24, offset=24
  struct RVECTOR r31; // size=24, offset=48
  struct RVECTOR r32; // size=24, offset=72
  struct RVECTOR rc; // size=24, offset=96
  struct RVECTOR *r0; // size=24, offset=120
  struct RVECTOR *r1; // size=24, offset=124
  struct RVECTOR *r2; // size=24, offset=128
  struct RVECTOR *r3; // size=24, offset=132
  unsigned long *rtn; // size=0, offset=136
};
struct RECT {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
};
struct DR_ENV {
  unsigned long tag; // size=0, offset=0
  unsigned long code[15]; // size=60, offset=4
};
struct DRAWENV {
  struct RECT clip; // size=8, offset=0
  short ofs[2]; // size=4, offset=8
  struct RECT tw; // size=8, offset=12
  unsigned short tpage; // size=0, offset=20
  unsigned char dtd; // size=0, offset=22
  unsigned char dfe; // size=0, offset=23
  unsigned char isbg; // size=0, offset=24
  unsigned char r0; // size=0, offset=25
  unsigned char g0; // size=0, offset=26
  unsigned char b0; // size=0, offset=27
  struct DR_ENV dr_env; // size=64, offset=28
};
struct DISPENV {
  struct RECT disp; // size=8, offset=0
  struct RECT screen; // size=8, offset=8
  unsigned char isinter; // size=0, offset=16
  unsigned char isrgb24; // size=0, offset=17
  unsigned char pad0; // size=0, offset=18
  unsigned char pad1; // size=0, offset=19
};
struct POLY_F4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  short x1; // size=0, offset=12
  short y1; // size=0, offset=14
  short x2; // size=0, offset=16
  short y2; // size=0, offset=18
  short x3; // size=0, offset=20
  short y3; // size=0, offset=22
};
struct POLY_FT4 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char u1; // size=0, offset=20
  unsigned char v1; // size=0, offset=21
  unsigned short tpage; // size=0, offset=22
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
  unsigned char u2; // size=0, offset=28
  unsigned char v2; // size=0, offset=29
  unsigned short pad1; // size=0, offset=30
  short x3; // size=0, offset=32
  short y3; // size=0, offset=34
  unsigned char u3; // size=0, offset=36
  unsigned char v3; // size=0, offset=37
  unsigned short pad2; // size=0, offset=38
};
struct POLY_G3 {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char r1; // size=0, offset=12
  unsigned char g1; // size=0, offset=13
  unsigned char b1; // size=0, offset=14
  unsigned char pad1; // size=0, offset=15
  short x1; // size=0, offset=16
  short y1; // size=0, offset=18
  unsigned char r2; // size=0, offset=20
  unsigned char g2; // size=0, offset=21
  unsigned char b2; // size=0, offset=22
  unsigned char pad2; // size=0, offset=23
  short x2; // size=0, offset=24
  short y2; // size=0, offset=26
};
struct SPRT {
  unsigned long tag; // size=0, offset=0
  unsigned char r0; // size=0, offset=4
  unsigned char g0; // size=0, offset=5
  unsigned char b0; // size=0, offset=6
  unsigned char code; // size=0, offset=7
  short x0; // size=0, offset=8
  short y0; // size=0, offset=10
  unsigned char u0; // size=0, offset=12
  unsigned char v0; // size=0, offset=13
  unsigned short clut; // size=0, offset=14
  short w; // size=0, offset=16
  short h; // size=0, offset=18
};
struct DR_AREA {
  unsigned long tag; // size=0, offset=0
  unsigned long code[2]; // size=8, offset=4
};
struct DR_MOVE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[5]; // size=20, offset=4
};
struct DR_TPAGE {
  unsigned long tag; // size=0, offset=0
  unsigned long code[1]; // size=4, offset=4
};
struct TCB {
  long status; // size=0, offset=0
  long mode; // size=0, offset=4
  unsigned long reg[40]; // size=160, offset=8
  long system[6]; // size=24, offset=168
};
struct EXEC {
  unsigned long pc0; // size=0, offset=0
  unsigned long gp0; // size=0, offset=4
  unsigned long t_addr; // size=0, offset=8
  unsigned long t_size; // size=0, offset=12
  unsigned long d_addr; // size=0, offset=16
  unsigned long d_size; // size=0, offset=20
  unsigned long b_addr; // size=0, offset=24
  unsigned long b_size; // size=0, offset=28
  unsigned long s_addr; // size=0, offset=32
  unsigned long s_size; // size=0, offset=36
  unsigned long sp; // size=0, offset=40
  unsigned long fp; // size=0, offset=44
  unsigned long gp; // size=0, offset=48
  unsigned long ret; // size=0, offset=52
  unsigned long base; // size=0, offset=56
};
struct DIRENTRY {
  char name[20]; // size=20, offset=0
  long attr; // size=0, offset=20
  long size; // size=0, offset=24
  struct DIRENTRY *next; // size=40, offset=28
  long head; // size=0, offset=32
  char system[4]; // size=4, offset=36
};
struct SndVolume2 {
  short left; // size=0, offset=0
  short right; // size=0, offset=2
};
struct CdlLOC {
  unsigned char minute; // size=0, offset=0
  unsigned char second; // size=0, offset=1
  unsigned char sector; // size=0, offset=2
  unsigned char track; // size=0, offset=3
};
struct VECTOR_NOPAD {
  long vx; // size=0, offset=0
  long vy; // size=0, offset=4
  long vz; // size=0, offset=8
};
struct BOX {
  float xmin; // size=0, offset=0
  float ymin; // size=0, offset=4
  float zmin; // size=0, offset=8
  float xmax; // size=0, offset=12
  float ymax; // size=0, offset=16
  float zmax; // size=0, offset=20
};
struct BSPHERE {
  struct VECTOR bounding_sphere_mid; // size=16, offset=0
  float bounding_sphere; // size=0, offset=16
};
struct RGB {
  unsigned char r; // size=0, offset=0
  unsigned char g; // size=0, offset=1
  unsigned char b; // size=0, offset=2
  unsigned char pad; // size=0, offset=3
};
struct UV_INFO {
  unsigned char u; // size=0, offset=0
  unsigned char v; // size=0, offset=1
};
struct PSXBUTTON {
  short x; // size=0, offset=0
  short y; // size=0, offset=2
  short w; // size=0, offset=4
  short h; // size=0, offset=6
  unsigned char l; // size=0, offset=8
  unsigned char r; // size=0, offset=9
  unsigned char u; // size=0, offset=10
  unsigned char d; // size=0, offset=11
  int userDrawFunctionNum; // size=0, offset=12
  short s_x; // size=0, offset=16
  short s_y; // size=0, offset=18
  int action; // size=0, offset=20
  int var; // size=0, offset=24
  char Name[32]; // size=32, offset=28
};
struct MouseData {
  unsigned short buttons; // size=0, offset=0
  char xOffset; // size=0, offset=2
  char yOffset; // size=0, offset=3
};
struct NegconData {
  unsigned short digitalButtons; // size=0, offset=0
  char centralTwist; // size=0, offset=2
  char buttonI; // size=0, offset=3
  char buttonII; // size=0, offset=4
  char topLeft; // size=0, offset=5
};
struct AnalogjoyData {
  unsigned short digitalButtons; // size=0, offset=0
  unsigned char right_x; // size=0, offset=2
  unsigned char right_y; // size=0, offset=3
  unsigned char left_x; // size=0, offset=4
  unsigned char left_y; // size=0, offset=5
};
union ._122 {
  unsigned short pad; // size=0, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct MouseData mouse; // size=4, offset=0
};
struct TapCtrllerData {
  unsigned char transStatus; // size=0, offset=0
  unsigned char dataFormat; // size=0, offset=1
  union ._122 data; // size=6, offset=2
};
struct MultiTapData {
  struct TapCtrllerData ctrllers[4]; // size=32, offset=0
};
union ._125 {
  unsigned short pad; // size=0, offset=0
  struct MouseData mouse; // size=4, offset=0
  struct NegconData negcon; // size=6, offset=0
  struct AnalogjoyData joystick; // size=6, offset=0
  struct MultiTapData tap; // size=32, offset=0
};
struct _CARD {
  char Magic[2]; // size=2, offset=0
  char Type; // size=0, offset=2
  char BlockEntry; // size=0, offset=3
  char Title[64]; // size=64, offset=4
  char reserve[28]; // size=28, offset=68
  char Clut[32]; // size=32, offset=96
  char Icon[3][128]; // size=384, offset=128
};
struct TIMSTRUCT {
  unsigned short clut; // size=0, offset=0
  unsigned short tpage; // size=0, offset=2
  unsigned short x; // size=0, offset=4
  unsigned short y; // size=0, offset=6
  unsigned short w; // size=0, offset=8
  unsigned short h; // size=0, offset=10
};
struct FONTTABSTRUCT {
  struct TIMSTRUCT timStruct; // size=12, offset=0
  short width; // size=0, offset=12
  short height; // size=0, offset=14
};
struct KANJILOOKUP {
  short sjisCode; // size=0, offset=0
  unsigned int used; // size=0, offset=4
  struct TIMSTRUCT timStruct; // size=12, offset=8
};
struct SLICEHEADER {
  int size; // size=0, offset=0
  char title[20]; // size=20, offset=4
  char iconRef[3]; // size=3, offset=24
  char used; // size=0, offset=27
  short checksum; // size=0, offset=28
  short pad; // size=0, offset=30
};
struct BLOCKINFO {
  unsigned int infoOK; // size=0, offset=0
  int id; // size=0, offset=4
  int size; // size=0, offset=8
  int freeBytes; // size=0, offset=12
  struct DIRENTRY dirEntry; // size=40, offset=16
  struct _CARD header; // size=512, offset=56
  struct TIMSTRUCT iconTim; // size=12, offset=568
  unsigned int gremBlock; // size=0, offset=580
  int sliceCount; // size=0, offset=584
  int usedSlices; // size=0, offset=588
  struct SLICEHEADER sliceHeader[16]; // size=512, offset=592
};
struct CARDINFO {
  int usedBlocks; // size=0, offset=0
  struct BLOCKINFO blockInfo[15]; // size=16560, offset=4
  unsigned int dirOK; // size=0, offset=16564
  unsigned int infoOK; // size=0, offset=16568
};
struct FILEFORMAT {
  char blockSize; // size=0, offset=0
  char asciiTitle[32]; // size=32, offset=1
  short kanjiTitle[32]; // size=64, offset=34
  char sonyProductCode[13]; // size=13, offset=98
  char blockType; // size=0, offset=111
  short blockIconClut[16]; // size=32, offset=112
  int blockIconData[32]; // size=128, offset=144
  int sliceByteSize; // size=0, offset=272
  long *sliceIconTimPtrs[16]; // size=64, offset=276
};
struct SLICE {
  char title[20]; // size=20, offset=0
  char sliceIconRefs[3]; // size=3, offset=20
  char *sliceData; // size=0, offset=24
};
struct MCSLOT {
  struct CARDINFO m_cardInfo; // size=16572, offset=0
  int m_port; // size=0, offset=16572
  int m_card; // size=0, offset=16576
  int m_chan; // size=0, offset=16580
  char m_device[6]; // size=6, offset=16584
  int m_blocksRead; // size=0, offset=16592
  int m_readFilePtr; // size=0, offset=16596
  int m_readBytes; // size=0, offset=16600
  int m_fromReadBytes; // size=0, offset=16604
  int m_toReadBytes; // size=0, offset=16608
  int m_writeFilePtr; // size=0, offset=16612
  int m_writeBytes; // size=0, offset=16616
  int m_fromWriteBytes; // size=0, offset=16620
  int m_toWriteBytes; // size=0, offset=16624
  int m_iconX; // size=0, offset=16628
  int m_iconY; // size=0, offset=16632
  int m_clutX; // size=0, offset=16636
  int m_clutY; // size=0, offset=16640
  unsigned int m_doCheckSum; // size=0, offset=16644
  short m_checkSumWork; // size=0, offset=16648
  short m_checkSum; // size=0, offset=16650
};
struct PAD {
  struct MCSLOT m_mcSlot0; // size=16652, offset=0
  struct MCSLOT m_mcSlot1; // size=16652, offset=16652
  int m_mouseX; // size=0, offset=33304
  int m_mouseY; // size=0, offset=33308
  int m_scanPort; // size=0, offset=33312
  unsigned int m_cardChanged[2]; // size=8, offset=33316
  unsigned int m_bControllerChanged; // size=0, offset=33324
  unsigned int m_bMouseTested; // size=0, offset=33328
  unsigned int m_bUsingMouse; // size=0, offset=33332
  unsigned int m_bUsingNegCon; // size=0, offset=33336
  unsigned int m_bControllerInserted; // size=0, offset=33340
  int m_nLastControllerType; // size=0, offset=33344
  char slotString[3]; // size=3, offset=33348
  struct MCSLOT *m_slotObjPtrs[2]; // size=8, offset=33352
  int m_slotObjPorts[2]; // size=8, offset=33360
  int m_currSlotObj; // size=0, offset=33368
  int m_portStatus[8]; // size=32, offset=33372
};
struct DISPMAN {
  unsigned int m_displayingMessage; // size=0, offset=0
  int m_language; // size=0, offset=4
  char m_textBuffer[256]; // size=256, offset=8
  struct DR_AREA m_sliceClipArea; // size=12, offset=264
  struct DR_AREA m_screenClipArea; // size=12, offset=276
  struct RECT m_backRect[7]; // size=56, offset=288
  struct RECT m_srcRect[7]; // size=56, offset=344
  int s_screenMode; // size=0, offset=400
  int dispWidth; // size=0, offset=404
  int dispHeight; // size=0, offset=408
  int dispXOffset; // size=0, offset=412
  int dispYOffset; // size=0, offset=416
  struct DRAWENV m_drawEnv; // size=92, offset=420
  struct DISPENV m_dispEnv; // size=20, offset=512
  struct DRAWENV m_oldDrawEnv; // size=92, offset=532
  struct DISPENV m_oldDispEnv; // size=20, offset=624
  int spriteCount; // size=0, offset=644
  int polyCountFT4; // size=0, offset=648
  int polyCountG3; // size=0, offset=652
  int polyCountF4; // size=0, offset=656
  int moveCount; // size=0, offset=660
  int m_dirtyMouseX; // size=0, offset=664
  int m_dirtyMouseY; // size=0, offset=668
  unsigned short m_dirtyMouseBuffer[256]; // size=512, offset=672
  char m_kanjiTimBuffer[350]; // size=350, offset=1184
  struct SPRT sprites[200]; // size=4000, offset=1536
  struct DR_TPAGE tpages[200]; // size=1600, offset=5536
  struct POLY_FT4 polysFT4[25]; // size=1000, offset=7136
  struct POLY_F4 polysF4[0]; // size=0, offset=8136
  struct POLY_G3 polysG3[20]; // size=560, offset=8136
  struct DR_MOVE moves[2]; // size=48, offset=8696
  int m_dispX; // size=0, offset=8744
  int m_dispY; // size=0, offset=8748
  int m_flashCount; // size=0, offset=8752
  int m_flash; // size=0, offset=8756
  unsigned int m_flashOn; // size=0, offset=8760
  unsigned int m_invalidArea[7]; // size=28, offset=8764
  int m_addingBlock; // size=0, offset=8792
  int m_deletingBlock; // size=0, offset=8796
  struct FONTTABSTRUCT m_fontTable[3][76]; // size=3648, offset=8800
  struct KANJILOOKUP m_kanjiFontTable[256]; // size=5120, offset=12448
  struct TIMSTRUCT m_darkTimStruct; // size=12, offset=17568
  struct TIMSTRUCT m_pointerTimStruct; // size=12, offset=17580
  struct TIMSTRUCT m_lightTimStruct; // size=12, offset=17592
  struct TIMSTRUCT m_cardTimStruct; // size=12, offset=17604
  struct TIMSTRUCT m_buttonTimStructs[4]; // size=48, offset=17616
  struct TIMSTRUCT m_arrowTimStruct[2]; // size=24, offset=17664
  struct TIMSTRUCT m_sliceIconTimStructs[16]; // size=192, offset=17688
  struct TIMSTRUCT m_createBlockTimStruct; // size=12, offset=17880
  struct PAD *m_padPtr; // size=33404, offset=17892
  long *m_backImagePtr; // size=0, offset=17896
  int m_updateQueue[7]; // size=28, offset=17900
  int m_kanjiChars; // size=0, offset=17928
  int m_activeArea; // size=0, offset=17932
  int m_menuSelect; // size=0, offset=17936
  int m_blockSelect; // size=0, offset=17940
  int m_sliceSelect; // size=0, offset=17944
  int m_sliceMenuOffset; // size=0, offset=17948
  int m_sliceMenuRem; // size=0, offset=17952
  int m_sliceMenuInc; // size=0, offset=17956
  int m_activeFunction; // size=0, offset=17960
  int m_mainFunction; // size=0, offset=17964
  int m_maxKanji; // size=0, offset=17968
  unsigned int m_menuActive[4]; // size=16, offset=17972
  char *m_menuText[4]; // size=16, offset=17988
  char *m_infoText[3]; // size=12, offset=18004
  char *m_titleText; // size=0, offset=18016
  char *m_blockNameText; // size=0, offset=18020
  char m_saveFilename[32]; // size=32, offset=18024
  struct FILEFORMAT *m_fileFormatPtr; // size=340, offset=18056
};

// 68 typedefs
typedef struct VECTOR VECTOR;
typedef struct SVECTOR SVECTOR;
typedef struct CVECTOR CVECTOR;
typedef struct DVECTOR DVECTOR;
typedef struct RVECTOR RVECTOR;
typedef struct CRVECTOR3 CRVECTOR3;
typedef struct CRVECTOR4 CRVECTOR4;
typedef struct RECT RECT;
typedef struct DR_ENV DR_ENV;
typedef struct DRAWENV DRAWENV;
typedef struct DISPENV DISPENV;
typedef struct POLY_F4 POLY_F4;
typedef struct POLY_FT4 POLY_FT4;
typedef struct POLY_G3 POLY_G3;
typedef struct SPRT SPRT;
typedef struct DR_AREA DR_AREA;
typedef struct DR_MOVE DR_MOVE;
typedef struct DR_TPAGE DR_TPAGE;
typedef struct TCB TCB;
typedef struct EXEC EXEC;
typedef struct DIRENTRY DIRENTRY;
typedef struct SndVolume2 SndVolume2;
typedef struct CdlLOC CdlLOC;
typedef struct VECTOR_NOPAD VECTOR_NOPAD;
typedef struct BOX BOX;
typedef struct BSPHERE BSPHERE;
typedef struct RGB RGB;
typedef struct UV_INFO UV_INFO;
typedef struct PSXBUTTON PSXBUTTON;
typedef struct MouseData MouseData;
typedef struct NegconData NegconData;
typedef struct AnalogjoyData AnalogjoyData;
typedef struct TapCtrllerData TapCtrllerData;
typedef struct MultiTapData MultiTapData;
typedef struct _CARD _CARD;
typedef struct TIMSTRUCT TIMSTRUCT;
typedef struct FONTTABSTRUCT FONTTABSTRUCT;
typedef struct KANJILOOKUP KANJILOOKUP;
typedef struct SLICEHEADER SLICEHEADER;
typedef struct BLOCKINFO BLOCKINFO;
typedef struct CARDINFO CARDINFO;
typedef struct FILEFORMAT FILEFORMAT;
typedef struct SLICE SLICE;
typedef struct MCSLOT MCSLOT;
typedef struct PAD PAD;
typedef struct DISPMAN DISPMAN;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef struct _physadr *physadr;
typedef long daddr_t;
typedef char *caddr_t;
typedef long *qaddr_t;
typedef unsigned long ino_t;
typedef long swblk_t;
typedef unsigned int size_t;
typedef long time_t;
typedef short dev_t;
typedef long off_t;
typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef void *SsMarkCallbackProc();
typedef void *CdlCB();
typedef long LONGVECTOR[4];
typedef short SHORTVECTOR[4];
typedef unsigned short PadData;

// 0 labels

// 2 external declarations
extern unsigned int g_nCManOptions; // offset 0x0010ee08
static char validchars[39]; // offset 0x0010ee0c

// 4 functions
/*
 * Offset 0x1005E0, from D:\driver2\game\MEMCARD\CMAN.CPP (lines 33..1029)
 * Stack frame base $sp, size 51872
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ cardman__FiiPcP10FILEFORMATP5SLICET2T2(int operation /*stack 0*/, int options /*$a1*/, char *textBuffer /*$s4*/, struct FILEFORMAT *fileFormatPtr /*stack 12*/, struct SLICE *slicePtr /*stack 16*/, char *backImageName /*stack 20*/, char *bufferPtr96K /*stack 24*/, char *bufferPtr96K /*$s2*/)
{ // line 1, offset 0x1005e0
  struct TIMSTRUCT tempTimStruct; // stack offset -51840
  struct RECT rect; // stack offset -51824
  int n; // $s0
  char charBuffer[250]; // stack offset -51816
  char kanjiFree[6]; // stack offset -51560
  char kanjiSize[6]; // stack offset -51552
  char kanjiDel[6]; // stack offset -51544
  int card_process; // $s3
  int padWait; // stack offset -56
  int dirCount; // $s0
  int delCount; // stack offset -52
  int copyStatus; // $s0
  int pasteStatus; // $a3
  int destFree; // $s6
  int sourceSize; // $s5
  int newBlock; // $s2
  int nMessage; // $s2
  int language; // stack offset -48
  short padData; // $s1
  struct PAD pad; // stack offset -51536
  struct DISPMAN dispMan; // stack offset -18128
  { // line 36, offset 0x10067c
    { // line 44, offset 0x1006c4
    } // line 47, offset 0x100708
  } // line 47, offset 0x100708
  { // line 51, offset 0x100708
    { // line 52, offset 0x100720
      struct _CARD *header; // $a1
    } // line 74, offset 0x100970
  } // line 74, offset 0x100970
  { // line 124, offset 0x100a14
    { // line 142, offset 0x100a14
      { // line 148, offset 0x100a58
        { // line 149, offset 0x100a58
          { // line 150, offset 0x100a68
          } // line 167, offset 0x100b40
        } // line 167, offset 0x100b40
      } // line 170, offset 0x100b48
    } // line 170, offset 0x100b48
    { // line 174, offset 0x100b48
      { // line 183, offset 0x100b64
        { // line 184, offset 0x100b64
          { // line 185, offset 0x100b74
            { // line 186, offset 0x100b74
              { // line 190, offset 0x100b94
              } // line 273, offset 0x100d8c
              { // line 278, offset 0x100d9c
              } // line 293, offset 0x100e08
            } // line 293, offset 0x100e08
          } // line 293, offset 0x100e08
        } // line 293, offset 0x100e08
      } // line 293, offset 0x100e08
    } // line 293, offset 0x100e08
    { // line 301, offset 0x100e08
      { // line 302, offset 0x100e30
      } // line 317, offset 0x100e94
    } // line 317, offset 0x100e94
    { // line 321, offset 0x100e94
      { // line 322, offset 0x100ebc
        { // line 325, offset 0x100ebc
          { // line 326, offset 0x100ecc
            { // line 327, offset 0x100ecc
            } // line 327, offset 0x100ecc
          } // line 333, offset 0x100ef4
        } // line 333, offset 0x100ef4
        { // line 391, offset 0x10108c
        } // line 391, offset 0x10108c
        { // line 437, offset 0x1011a8
        } // line 437, offset 0x1011a8
        { // line 445, offset 0x1011b0
          { // line 446, offset 0x1011d8
            { // line 466, offset 0x10126c
            } // line 466, offset 0x10126c
            { // line 489, offset 0x101354
            } // line 489, offset 0x101354
            { // line 499, offset 0x101364
            } // line 499, offset 0x101364
          } // line 499, offset 0x101364
        } // line 499, offset 0x101364
        { // line 499, offset 0x101364
        } // line 499, offset 0x101364
        { // line 532, offset 0x101448
        } // line 532, offset 0x101448
        { // line 540, offset 0x101460
          { // line 541, offset 0x1014a4
            { // line 542, offset 0x1014a4
            } // line 542, offset 0x1014a4
          } // line 544, offset 0x1014b8
        } // line 544, offset 0x1014b8
        { // line 547, offset 0x1014b8
          { // line 551, offset 0x101500
            { // line 552, offset 0x101500
            } // line 552, offset 0x101500
          } // line 556, offset 0x101548
        } // line 556, offset 0x101548
        { // line 560, offset 0x101548
          { // line 563, offset 0x101580
            { // line 564, offset 0x101580
            } // line 564, offset 0x101580
          } // line 566, offset 0x101590
        } // line 566, offset 0x101590
        { // line 579, offset 0x101650
          { // line 580, offset 0x101658
            { // line 581, offset 0x101658
            } // line 581, offset 0x101658
          } // line 583, offset 0x101670
        } // line 583, offset 0x101670
        { // line 594, offset 0x101714
          { // line 595, offset 0x10171c
            { // line 596, offset 0x10171c
            } // line 596, offset 0x10171c
          } // line 598, offset 0x101734
        } // line 598, offset 0x101734
        { // line 601, offset 0x101734
        } // line 601, offset 0x101734
        { // line 611, offset 0x10177c
          { // line 615, offset 0x1017b0
            { // line 675, offset 0x1019c8
            } // line 675, offset 0x1019c8
          } // line 678, offset 0x1019f4
        } // line 678, offset 0x1019f4
        { // line 681, offset 0x1019f4
          { // line 682, offset 0x101a14
            { // line 707, offset 0x101afc
              { // line 711, offset 0x101b1c
                { // line 712, offset 0x101b1c
                } // line 712, offset 0x101b1c
              } // line 714, offset 0x101b30
            } // line 714, offset 0x101b30
          } // line 717, offset 0x101b30
        } // line 732, offset 0x101b4c
        { // line 732, offset 0x101b4c
        } // line 732, offset 0x101b4c
        { // line 738, offset 0x101b4c
          { // line 742, offset 0x101b8c
            { // line 743, offset 0x101b8c
              { // line 749, offset 0x101bc0
                { // line 753, offset 0x101c04
                } // line 753, offset 0x101c04
              } // line 754, offset 0x101c0c
              { // line 758, offset 0x101c0c
                { // line 764, offset 0x101c50
                  { // line 768, offset 0x101cb4
                    { // line 770, offset 0x101cec
                    } // line 770, offset 0x101cec
                  } // line 771, offset 0x101cf4
                } // line 771, offset 0x101cf4
              } // line 771, offset 0x101cf4
            } // line 771, offset 0x101cf4
          } // line 771, offset 0x101cf4
        } // line 771, offset 0x101cf4
        { // line 804, offset 0x101d38
          { // line 805, offset 0x101d40
            { // line 808, offset 0x101d40
            } // line 808, offset 0x101d40
          } // line 810, offset 0x101d58
        } // line 810, offset 0x101d58
        { // line 839, offset 0x101e94
          { // line 840, offset 0x101e9c
            { // line 841, offset 0x101e9c
            } // line 841, offset 0x101e9c
          } // line 843, offset 0x101eb4
        } // line 843, offset 0x101eb4
        { // line 867, offset 0x101f98
        } // line 867, offset 0x101f98
        { // line 874, offset 0x101fb0
        } // line 874, offset 0x101fb0
        { // line 898, offset 0x102104
          { // line 899, offset 0x10210c
            { // line 904, offset 0x10210c
            } // line 904, offset 0x10210c
          } // line 907, offset 0x102124
          { // line 910, offset 0x102124
            { // line 910, offset 0x102124
              { // line 911, offset 0x10212c
                { // line 913, offset 0x10212c
                } // line 913, offset 0x10212c
              } // line 916, offset 0x102150
            } // line 922, offset 0x102150
          } // line 922, offset 0x102150
        } // line 922, offset 0x102150
        { // line 922, offset 0x102150
        } // line 922, offset 0x102150
        { // line 937, offset 0x1021b0
          { // line 938, offset 0x1021b0
            { // line 940, offset 0x1021b0
              { // line 941, offset 0x1021d8
                { // line 943, offset 0x1021d8
                } // line 943, offset 0x1021d8
                { // line 948, offset 0x10220c
                } // line 948, offset 0x10220c
              } // line 948, offset 0x10220c
            } // line 948, offset 0x10220c
          } // line 964, offset 0x1022a8
        } // line 964, offset 0x1022a8
        { // line 967, offset 0x1022a8
        } // line 967, offset 0x1022a8
      } // line 967, offset 0x1022a8
    } // line 967, offset 0x1022a8
  } // line 980, offset 0x1022ec
  { // line 997, offset 0x102304
  } // line 997, offset 0x102304
} // line 997, offset 0x102364
/*
 * Offset 0x102364, from D:\driver2\game\MEMCARD\CMAN.CPP (lines 1065..1221)
 * Stack frame base $sp, size 88
 * Saved registers at offset -4: s0 s1 s2 s3 s4 s5 s6 s7 fp ra
 */
int /*$ra*/ EnterName__FP3PADP7DISPMANPc(struct PAD *pad /*$fp*/, struct DISPMAN *disp /*stack 4*/, char *username /*stack 8*/)
{ // line 1, offset 0x102364
  char asciiname[20]; // stack offset -72
  int ret; // stack offset -48
  short padData; // $s5
  short prevData; // $s7
  int so; // $s2
  int co; // $s6
  int delay; // $s3
  char c; // $s1
  char toggle; // stack offset -44
} // line 157, offset 0x102710
/*
 * Offset 0x102710, from D:\driver2\game\MEMCARD\CMAN.CPP (lines 24..29)
 * Stack frame base $sp, size 40
 * Saved registers at offset -8: ra
 */
int /*$ra*/ card_manager(int operation /*$a0*/, int options /*$a1*/, char *textBuffer /*$a2*/, struct FILEFORMAT *fileFormatPtr /*$a3*/, struct SLICE *slicePtr /*stack 16*/, char *backImageName /*stack 20*/, char *bufferPtr96K /*stack 24*/, struct SLICE *slicePtr /*$v0*/, char *backImageName /*$v1*/, char *bufferPtr96K /*$t0*/)
{ // line 1, offset 0x102710
} // line 6, offset 0x102744
/*
 * Offset 0x102744, from D:\driver2\game\MEMCARD\CMAN.CPP (lines 1034..1045)
 * Stack frame base $sp, size 56
 * Saved registers at offset -8: s0 s1 s2 s3 s4 s5 ra
 */
void /*$ra*/ LoadBackground__FPcT0(char *filename /*$s5*/, char *buffer /*$s2*/)
{ // line 1, offset 0x102744
  struct RECT rect; // stack offset -40
  int i; // $s0
  { // line 1, offset 0x102744
    { // line 5, offset 0x10277c
    } // line 8, offset 0x10277c
  } // line 12, offset 0x1027e8
} // line 12, offset 0x1027e8
Source file(s) D:\DRIVER2\GAME\MEMCARD\CMANASM.S+D:\DRIVER2\GAME\MEMCARD\FONT0.S+D:\DRIVER2\GAME\MEMCARD\FONT1.S+D:\DRIVER2\GAME\MEMCARD\FONT2.S, object file memcard\obj\cmanasm.obj overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\2mbyte.obj overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(EVENT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(SYS.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(ISO9660.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(BIOS_1.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_002.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_015.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_016.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_021.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(BIOS_2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_023.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(CDR_1.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_003.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_004.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_006.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_008.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_013.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_014.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_022.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(BIOS_3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(S_024.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(TYPE_1.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(TYPE_2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCD.LIB(CRE_1.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(GEO_00.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(SINCOS.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(GEO_01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MSC00.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MSC01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(SQRTBL.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MTX_000.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MTX_001.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MTX_01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MTX_06.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MTX_07.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MTX_09.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(MTX_12.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(REG12.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(REG13.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(SMP_02.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(SMP_04.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(CSTBL.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(FGO_01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(FGO_02.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(FGO_04.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(FGO_05.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(FGO_06.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(RMAT_00.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(RATAN.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGTE.LIB(PATCHGTE.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(SYS.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(E01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(E02.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(E03.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(E04.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P00.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P10.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P14.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P17.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P18.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P26.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P27.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P31.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P33.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P34.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(P35.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(K01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(KT01.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBGPU.LIB(KT02.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(C57.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(C67.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(C68.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(C73.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(C112.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A07.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A08.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A09.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A11.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A12.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A13.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A36.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A37.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A39.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A50.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A51.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A52.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A53.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A54.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A65.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A67.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A69.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A81.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A95.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(FIRST.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A66.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBETC.LIB(VSYNC.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A91.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(L10.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBETC.LIB(INTR.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(C114.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A23.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A24.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A25.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBETC.LIB(INTR_VB.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBETC.LIB(INTR_DMA.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBETC.LIB(VMODE.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(BCOPY.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(BZERO.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(MEMCMP.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(MEMCPY.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(MEMMOVE.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(MEMSET.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(RAND.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(STRCAT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(STRCMP.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(STRCPY.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(STRLEN.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(STRNCMP.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(PRINTF.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(PRNT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(MEMCHR.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(PUTCHAR.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(SPRINTF.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(PUTS.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(SETJMP.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(EXIT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(CTYPE_0.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSN.LIB(SNDEF.OBJ) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSN.LIB(fixunssfsi.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSN.LIB(op_delete.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBC2.LIB(MALLOC.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSND.LIB(SSSV.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_I.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_INI.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(SPU.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_DCB.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_Q.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SM.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_M.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_M_INIT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_M_M.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_M_INT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_M_F.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_F.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SR.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_M_UTIL.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SRMP.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SRA.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_RRWA.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SRD.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SRV.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SAV.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_GRV.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_GAV.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_CRWA.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(A10.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(ZEROBUF.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SK.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_GKS.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_W.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_STSA.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_STM.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_ITC.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(SR_GAKS.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SVV.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SVP.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SVAR.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SVRR.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SVA.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_N2P.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_GVV.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_GVP.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_SCA.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_RMP0.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBSPU.LIB(S_RMP2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDCMD1.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDCMD2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDENT2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDENT3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDMAIINI.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(L02.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(L03.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDDIRINI.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDDIRRES.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBPAD.LIB(PDRESRES.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(C171.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(C172.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(A79.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(A80.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(A93.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(CARD.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(A78.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(INIT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(PAD.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(PATCH.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBAPI.LIB(CHCLRPAD.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(A74.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(A75.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(A76.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(PATCH.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBCARD.LIB(END.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMCRD.LIB(INIT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(ADDDF3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(ADDMANT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(ADDSF3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(DBSHIFT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(DIVDF3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(DBSHIFTU.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(DIVSF3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(EXTSFDF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(FIXSFSI.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(FLTSIDF.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(FLTSISF.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(GESF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(GTSF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(LTSF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(MAINASU.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(MULSF3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(NEGSF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(SUBSF3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(TRUDFSF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(FERR.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(SQRT.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(GTDF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(LTDF2.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
Source file(s) <none>, object file C:\PS\LIB\LIBMATH.LIB(MULDF3.obj) overlay id <none>

// 0 complex types

// 0 typedefs

// 0 labels

// 0 external declarations

// 0 functions
