CD Code Digest Hub /GTA V · v2

仓库物理地图

25 分钟阅读 8 个章节

本页说明 GTAV Source 快照的物理组织:有哪些顶层树、每棵树里是什么、规模多大、各目录由 Wiki 的哪一页负责。逻辑架构(层次、依赖方向、运行时拓扑)见 overview.md,构建系统见 build-and-config.md。

1. 快照性质#

  • 快照不是 Git 仓库,也没有提交号;目录时间戳是 2024-04-16。可识别的版本标识来自源码本身:
    • 项目名是 gta5,代码分支目录是 dev_ng,MSBuild 通过目录名推导分支和各根路径(RS_CODEBRANCH、RS_SCRIPTBRANCH、RS_TOOLSROOT、RAGE_DIR 等)src/dev_ng/Directory.Build.props:10-49。
    • forceinclude 配置头写死了 GTA_VERSION 501(例如 src/dev_ng/rage/base/src/forceinclude/orbis_master.h:488)和 RAGE 版本 RAGE_RELEASE 378、1.15 src/dev_ng/rage/base/src/forceinclude/win64_final.h:17-20。
  • 这是 NG(PS4/Xbox One/PC)代码线,并且带有部分 Gen9(PS5/Xbox Series)移植痕迹:
    • Gen9Settings.h 定义 RSG_GEN9(缺省 0)、IS_GEN9_PLATFORM、GEN9_STANDALONE_ENABLED 等开关 src/dev_ng/rage/framework/src/fwutil/Gen9Settings.h:7-34;入口文件也包含它 src/dev_ng/game/Core/main.cpp:7。
    • 构建属性在分支名包含 gen9 时改用 tools_ng/etc/projgen9,并引用 RageBuilderGen9 src/dev_ng/Directory.Build.props:53-54、src/dev_ng/Directory.Build.props:78;VS 用户设置里有 PS5 (ProsperoSKU) 选项 src/dev_ng/projgen/RSG.xml:24-34。
    • 但 forceinclude 目录中只有 win32*、win64*、durango*、orbis*、psn*、spu_psn*、xenon* 配置头,所有现存配置都把 RSG_PROSPERO/RSG_SCARLETT 定义为 0(例如 src/dev_ng/rage/base/src/forceinclude/win64_final.h:138-139、src/dev_ng/rage/base/src/forceinclude/durango_bankrelease.h:117-118)。游戏代码只在少数位置(如 network/Voice/NetworkVoice.cpp、script/commands_network.cpp)出现 RSG_PROSPERO/RSG_SCARLETT 分支。这表明 Gen9 平台的专有后端与配置不在本快照中;Wiki 中所有“平台差异”结论都以现存的 PC/Durango/Orbis/PS3/Xenon 代码为准。
  • 旧平台代码仍然大量存在:PS3(__PPU/__SPU、SPU 作业 .job/.frag、VS_Project_frags 等)和 Xbox 360(__XENON)分支散布在各处,例如入口文件中针对 PS3 的 SDK 版本检查与 title ID src/dev_ng/game/Core/main.cpp:256-289。

2. 顶层布局与规模#

规模由本次分析用脚本对快照逐文件统计得到(物理行数,含注释与空行),只用于说明量级,不是覆盖率指标。

顶层树文件数体积内容主要语言
src/dev_ng/约 7.6 万约 8.4 GB游戏 C++、RAGE 引擎、第三方库、代码工具、安装/启动器C++、C#、HLSL
script/dev_ng/约 4.5 千约 450 MB游戏逻辑脚本(单机任务、GTA Online)及脚本工具SanScript(.sc/.sch)
tools_ng/约 5.8 万约 7.1 GB资产流水线、DCC 插件、构建与自动化脚本、预编译工具Python、Ruby、C#、MaxScript

按代码量看(同一统计):

范围文件物理行数
src/dev_ng/game(.cpp/.h/.inl/.c,不含 shader_source)4,701约 367 万
src/dev_ng/game/shader_source(.fx/.fxh)452约 11.5 万
src/dev_ng/rage/base/src(C/C++)4,224约 178 万
src/dev_ng/rage/framework/src(C/C++)852约 33 万
src/dev_ng/rage/suite/src(C/C++)2,752约 82 万
src/dev_ng/rage/script/src(脚本 VM)43约 1.8 万
src/dev_ng/rage/naturalmotion(C/C++)707约 34 万
src/dev_ng/rage/scaleform(C/C++)477约 28 万
src/dev_ng/rage/3rdparty(C/C++)7,731约 378 万
src/dev_ng/rage/{base,framework,script,suite}/tools(主要为 C#)约 1.8 万约 288 万
script/dev_ng(.sc/.sch)4,053约 1009 万
tools_ng(.py/.rb/.cs/.ms/.cpp/.h,含大量第三方 Python 包)约 1.8 万约 599 万

3. src/dev_ng/ —— 代码分支根#

根目录只有少量批处理和 MSBuild 配置:setenv.bat 通过 tools_ng/bin/PropertySheetViewer.exe dumpenvironment 导出环境变量并打印各根路径 src/dev_ng/setenv.bat:1-77;BuildEmAll.bat 调用 %RS_TOOLSROOT%\script\util\projGen9\generate.bat 为整个游戏生成工程 src/dev_ng/BuildEmAll.bat:13-15;projgen.config 指向 %PROJGEN_DIR%\game.build。详见 build-and-config.md。

目录内容Wiki 页面
game/GTA V 游戏层 C++(约 60 个子目录,见 §4)01、05–23 各节
rage/RAGE 引擎(base/framework/suite/script)及第三方(见 §5)02–04、09–18 各节
tools/游戏专用离线工具(NavMeshGenerator、AudMeshGenerator、HeightMapGenerator、MemoryHasher、DllInject 等)standalone-tools-and-extra.md
extra/PC 启动器 launcher、安装器、补丁器、DLC/补丁打包(NSIS 脚本)、语言切换器、Windows 错误报告分析器、protectionstandalone-tools-and-extra.md
projgen/工程生成用的 MSBuild props/targets(cpp.props、psc.targets、unity.targets、RSG.xml)build-and-config.md
objects/只有一个 projgen.prune—

4. src/dev_ng/game/ —— 游戏层#

游戏层源码按功能分目录;根目录的 game_config.h 集中定义跨系统容量常量(物理请求列表、活动实体上限、场景点/路口/交通灯上限、目标帧率等),并按 XENON_OR_PS3 区分旧世代与 NG 的数值 src/dev_ng/game/game_config.h:27-59;例如 NG 上 MAX_ACTIVE_ENTITIES 为 61440,DESIRED_FRAME_RATE 在 PC 为 60、主机为 30 src/dev_ng/game/game_config.h:34-42。optimisations.h 提供按目录开关优化的宏(见 build-and-config.md)。

目录物理行数(C++)职责Wiki 页面
Core/约 1.1 万入口、CApp 状态机、CGame 系统装配、会话状态机、权利/加密狗01-runtime
system/约 4.3 万输入/控制映射、设置、平台服务、文件管理、任务调度、GPU 自动采集、反篡改动作22-input-platform、23-debug-security
scene/约 11.5 万世界与实体类层次、地图数据、LOD、室内/门户、场景流式、玩家切换05-world
modelinfo/约 3.4 万模型信息(archetype)类层次model-info.md
streaming/约 3.5 万游戏侧流式封装game-streaming-and-scene-streamer.md
Objects/约 2 万物件、门等world-and-entities.md
Peds/、PedGroup/约 21 万行人、玩家、人口、变体06-peds
task/约 70 万任务(AI 行为)系统,最大的单一目录07-ai-tasks
event/、ai/、pathserver/约 8.5 万事件、AI 辅助、导航网格寻路服务07-ai-tasks
Vehicles/、vehicleAi/约 29 万载具、操控、损坏、车辆 AI、路网08-vehicles
physics/、cloth/约 3.9 万游戏物理胶水、布料09-physics
animation/、ik/、Cutscene/约 12.5 万动画、IK、过场动画10-animation
renderer/、shaders/、shader_source/、timecycle/约 22 万 C++ + 11.5 万 HLSL渲染管线、着色器、时间周期11-rendering
vfx/约 12.6 万粒子、贴花、天空/云、各类视效系统12-vfx
audio/约 23 万游戏音频13-audio
script/、script_headers/约 20 万 C++ + 7.8 万 .sch脚本运行时、原生命令(natives)、脚本头14-script-runtime
network/约 34 万联机:会话、对象同步、事件、云服务、商城、语音16-network-online、17-network-sync
frontend/、text/约 23 万暂停菜单、HUD、落地页、商店、视频编辑器、文本18-frontend-ui
SaveLoad/、SaveMigration/、Stats/约 8.5 万存档、存档迁移、统计19-persistence-replay
control/、replaycoordinator/约 15 万回放系统、视频录制、游戏逻辑杂项(车库、重生、特技跳、交通灯、录像)replay-and-video.md、20-gameplay
game/约 4.5 万时钟、天气、风、区域、通缉、犯罪、目击、调度、作弊20-gameplay
pickups/、apps/约 1.5 万拾取物、手机应用数据pickups-cheats-misc.md
weapons/、camera/约 17 万武器、相机21-weapons-camera
debug/、performance/、tools/、security/约 12 万调试工具、性能、游戏内工具、安全(仅高层)23-debug-security
VS_Project*/、vs_project*_lib/、vs_project_lib_psc/—生成的 VS 工程、unity 构建单元、PS3 SPU 作业/片段工程build-and-config.md
templates/、utils/、test_ignore/< 0.2 万通用模板与零散工具代码—

多数游戏子目录带有 makefile.txt(RAGE 的工程生成输入)和 .psc(parser 反射模式,生成可序列化结构的元数据),见 parser-and-metadata.md。

5. src/dev_ng/rage/ —— RAGE 引擎#

RAGE 分为四个源码层和若干支持目录。包含方向基本是 base ← framework ← game(framework/src 中没有找到包含游戏目录的 #include),但 base 有少量反向依赖 framework 头的例外,例如 audiohardware/waveslot.cpp 包含 fwsys/timer.h src/dev_ng/rage/base/src/audiohardware/waveslot.cpp:11、paging/streamer.cpp 包含 fwmaths/random.h src/dev_ng/rage/base/src/paging/streamer.cpp:22、file/cachepartition.cpp 包含 fwutil/Gen9Settings.h src/dev_ng/rage/base/src/file/cachepartition.cpp:10,rline/durango/rlxbl_interface.h 包含 fwnet/nettypes.h src/dev_ng/rage/base/src/rline/durango/rlxbl_interface.h:14。因此 base 与 framework 实际上是一起编译链接的,而不是可独立发布的两层。

目录内容Wiki 页面
base/src/约 70 个模块:系统/诊断/参数(system、diag、bank、profile)、数据与反射(parser、parsercore、data、paging、file)、数学与容器(vectormath、math、atl)、图形(grcore、grmodel、rmcore、grpostfx、grshadowmap…)、物理(phcore、phbound、physics、pharticulated…)、动画(cranimation、crskeleton、creature…)、音频(audioengine、audiohardware、audiosynth…)、网络(net、rline)、输入、Scaleform 绑定、安全等02、03、09、10、13、16、22、23 各节
framework/src/fw* 中间层:实体/archetype、场景图与可见性、流式引擎、计时器/FSM/配置、池、AI 任务基类、事件、网络对象(fwnet)、脚本基类(fwscript)、渲染与 drawlist(fwrenderer、fwdrawlist)、动画导演(fwanimation)、timecycle、vfx 等04-rage-framework(并含归属索引)
suite/src/较高层的可复用组件:MoVE 动画网络(move、crmotiontree)、fragment 碎裂体、cloth、玻璃、绳索、粒子(rmptfx、gpuptfx)、草/树/光照、过场(cutscene、cutfile)、会话(snet)、Social Club(rgsc)、语音聊天(avchat)、遥测、bink 视频等各相关节
script/脚本虚拟机(src/script:program、thread、opcodes)、脚本 GUI/Scaleform 绑定,以及 SanScript 编译器与语言工具(tools/)14-script-runtime
naturalmotion/NaturalMotion Euphoria 行为物理(库源码、行为文档、资产)game-physics-and-ragdoll.md
scaleform/Scaleform GFx 源码(Include、Src)及 RAGE forceincludescaleform-integration.md
3rdparty/AMD、Arxan、breakpad/crashpad、curl、cyassl/wolfssl/OpenSSL、freetype、libjson、miniupnpc、NVidia、Oculus SDK、RenderDoc、Steam、Telemetry 等本页;不单独分析
stlport/STLport 标准库实现不单独分析
lib/预编译库(bink2、breakpad)不单独分析
base/tools、framework/tools、suite/tools引擎工具链(RAG 远程调试界面、资源/动画/音频工具等,大部分为 C#)rage-tools-and-rag.md
rockon/C# Web 服务与工具standalone-tools-and-extra.md
lint/、qa/、top/、contrib/PC-Lint 配置、QA 构建脚本与测试、引擎文档与样例入口、社区贡献代码本页;QA 见 debug-tools.md

各引擎层根目录下的 samples/、test/、doc//docs/ 是引擎自带样例与文档,不参与游戏构建;Wiki 只在需要佐证设计意图时引用。

6. script/dev_ng/ —— 游戏脚本#

目录内容Wiki 页面
singleplayer/单机脚本工程 GTA5_SP.scproj、scripts/(约 196 万行 .sc)与 include/(约 94 万行 .sch)singleplayer-flow.md
multiplayer/GTA Online 脚本:scripts/(约 151 万行 .sc + 179 万行 .sch)、include/(约 269 万行 .sch)、globals/multiplayer-freemode.md
core/、shared/公共脚本库、HUD/暂停菜单脚本shared-script-libraries.md
Code/程序员测试脚本(相机、战斗、载具、过场、物理性能等测试关卡)shared-script-libraries.md
BGNG/后台脚本(BGScript/BGScript.scproj、公共头 Common_Bg_Headers/)以及把它们打包成 RPF 的 tools/CreateRPF.batscript-tree-overview.md
Tools/脚本组的 C# 数据编辑工具(EmailStar、MarketStar、CarcolsEditor、mishstatstar 等)和编译批处理script-tree-overview.md
根目录编译器与辅助程序(sc.exe、scriptrc_x64.exe、scannative.exe、randomizenatives.exe)和枚举生成批处理script-compiler-and-toolchain.md

7. tools_ng/ —— 工具链根#

目录内容Wiki 页面
bin/预编译工具与运行时:RAG、RageBuilderGen9、RPFViewer、StreamingVisualize、RockyProfiler、MoVE、ParticleEditor、内置 Python/Ruby/IronRuby 等tools-ng-overview.md
etc/配置:projgen/projgen9 工程生成规则、内容树、处理器、自动化、RAG 配置、骨架 .skel 等tools-ng-overview.md、build-and-config.md
lib/Ruby 流水线库(pipeline、util、data)asset-pipeline.md
ironlib/IronRuby/.NET 流水线程序集(含 RSG.Pipeline.Convert.exe,见 src/dev_ng/Directory.Build.props:75)asset-pipeline.md
script/构建/编码/音频/网络/统计等批处理与脚本,含 util/projGen9tools-ng-overview.md
dcc/、wildwest/、techart/3ds Max/MotionBuilder 插件与脚本、技术美术工具dcc-and-techart.md
web/内部 Web 服务与站点(dev/staging/prod/release)dcc-and-techart.md
packages/、p4/、data/、tmp/安装包、Perforce 配置、少量数据与临时文件本页

8. 未纳入快照的内容#

构建属性引用的 assets*、build/dev*、titleupdate/ 等根(RS_ASSETS、RS_BUILDBRANCH、RS_TITLE_UPDATE)src/dev_ng/Directory.Build.props:45-61,以及 RAGE_3RDPARTY 指向的 X:\3rdparty\dev src/dev_ng/Directory.Build.props:72,都不在快照中。因此运行时数据文件(.meta、.ymt、RPF 包等)的具体内容只能从解析代码与 .psc 模式推断。