Protocol¶
本頁是所列 namespace 的內容權威;程式參數 只提供導覽。
2. protocol/physics(物理引擎)¶
Body 預算帳(最壞情況):8 車 × 12(chassis 組合體 1 + tire 4 + roller 6 + weapon 主體 1)= 96;武器內部驅動體(剛體轉子 + 鏈段)8 ×
MAX_WEAPON_DRIVEN_BODIES(16)= 128;bullet(飛行中 + 落地留場障礙物,同一批)8 ×LAUNCH_AMMO_COUNT_MAX(8)= 64;kinematic entity ≤TRACK_ENTITY_COUNT_MAX(100)→ 388 ≤ 512(餘量 124;此為保守上界——每車僅 1 weapon、鏈條 128 與 bullet 64 per car 互斥不會同時滿載,實際更低)。碎片一律純視覺,不占 body;fixed / static(場地本體、未破壞decoration)不計入。CI 不變式見 §19.2。
| 常數 | 值 | 說明 |
|---|---|---|
GRAVITY_X1000 |
-9810 | -9.81 m/s²(×1000 量化) |
FIXED_FRAMERATE_HZ |
60 | 固定 timestep |
MAX_SUBSTEPS |
4 | fixed timestep loop 每 render tick 的追趕步數上限;不是 Rapier CCD substep |
PHYSICS_HARD_CCD_ENABLED |
true | 所有 gameplay dynamic body 的 hard CCD 固定開關;physics-version-pinned,禁止依當幀速度動態切換 |
PHYSICS_CCD_MAX_SUBSTEPS |
2 | Rapier 每 fixed step 的 CCD 解算 substep 上限(初估、待最大拓撲 benchmark/playtest 校準);只可經集中參數與 physics major 調整 |
PHYSICS_SOFT_CCD_PREDICTION_M |
0 | soft CCD 預測距離(m);0=初版停用。soft CCD 是提前建立預測約束,不替代 hard CCD,非零值須另有接觸提前容差與效能證據 |
PROJECTILE_EXIT_CLEARANCE_M |
0.001 | projectile 完整 convex support 越過 LaunchExit 平面後的額外離膛間隙(m;初值 1 mm);只過濾 projectile ↔ source weapon pair,離膛後永久恢復 |
SOLVER_VELOCITY_ITERATIONS |
8 | Rapier 0.19 TGS 單一迭代軸 numSolverIterations=唯一 solver 迭代參數(初估;影響模擬結果 = protocol 級) |
INTEGER_SCALE |
1000 | 1mm 精度 |
MAX_RIGID_BODIES_PER_RACE |
512 | 動態 + kinematic body 計入;fixed / static(場地本體、未破壞 decoration)不計;最壞情況帳見下註 |
CHASSIS_SOLVER_SAFETY_LIMITS |
{ massMinGrams: 1, principalInertiaMinKgM2: 1e-9 } |
最終烘焙 chassis 的 solver 安全地板;asset/loadout admission 與損毀後重算只引用此組。不得藉此限制材質種類或另訂直接體積下限,也不得補幽靈質量 |
K_AERO_DRAG |
0.6 | 六軸相對氣流 drag 係數(synthetic 初值,待正式 body playtest) |
K_AERO_LIFT |
1 | 水平 drag 推導 lift/downforce 係數(synthetic 初值) |
K_AERO_MAX_WEIGHT_MULTIPLIER |
2 | aero 總力上限為車重的倍數,避免極端合法幾何瞬間失控 |
3. protocol/ugc(UGC 規格約束)¶
| 常數 | 值 | 說明 |
|---|---|---|
UGC_CONTENT_PROFILE_ID |
'open4wd-unixfs-1m-balanced-v1' |
client/pinning 共用的 canonical UnixFS profile id |
UGC_CONTENT_ROOT_CODECS |
['raw', 'dag-pb'] |
canonical root codec allowlist |
UGC_CONTENT_MULTIHASH |
'sha2-256' |
canonical內容 multihash |
UGC_CHUNK_BYTES |
1_048_576 | UnixFS 固定 chunk 大小(1 MiB) |
UGC_LOGICAL_MAX_BYTES |
83_886_080 | canonical UGC logical bytes 上限(80 MiB) |
UGC_MAX_BLOCKS |
81 | 80 個 data blocks + 1 root block |
UGC_MAX_UNIXFS_LINKS |
80 | canonical root links 上限 |
UGC_MAX_DAG_BYTES |
83_951_616 | logical bytes 加 64 KiB DAG overhead 上限 |
ASSET_SCHEMA_VERSION_CURRENT |
(九種 asset current version 全為 1) | per-type current schema object;完整 shape 由 pre-launch current authority gate 看守 |
VEHICLE_TOTAL_MASS_MIN_GRAMS |
50 | 整車最小總質量 |
VEHICLE_TOTAL_MASS_MAX_GRAMS |
500 | 整車最大總質量 |
VEHICLE_AABB_MAX_M |
[0.25, 0.13, 0.1] | 整車 [長, 寬, 高] 上限(m);軸對應定死(runtime GLB 框架):長 = Z(車頭 = −Z)、寬 = X、高 = Y(重力反向),見 零件與共用介面.md §5 軸向速查 |
PART_MATERIAL_DENSITY_RATIO_MAX |
50 | 單一零件內 最大/最小材質密度比(多材質零件;part-upload Stage 3 檢核) |
VEHICLE_PART_MASS_RATIO_MAX |
300 | 整車 最重/最輕零件質量比(loadout 組裝層檢核;依正式 canonical loadout 校準並保留設計餘裕) |
PART_VERTEX_COUNT_MAX |
100_000 | 單零件頂點上限 |
PART_TRIANGLE_COUNT_MAX |
100_000 | 單零件三角形上限 |
PART_COLLIDER_PROXY_COUNT_MAX |
32 | 單零件 deterministic convex collider proxy 上限 |
PART_COLLIDER_PROXY_POINT_MAX |
26 | 每個 convex proxy 固定方向 support point 上限 |
PART_AABB_MIN_M |
[0.001, 0.001, 0.001] | 單零件 AABB 下限(m) |
PART_AABB_MAX_M |
[1, 1, 1] | 單零件 AABB 上限(m;1m 立方) |
PART_DEGENERATE_TRIANGLE_AREA_MIN_M2 |
0.00000001 | 退化三角形面積偵測閾值(m²) |
TRACK_AABB_MAX_M |
[500, 500, 100] | 場地 [長, 寬, 高] 上限(m;500×500 占地 × 100 m 高;高 = Y 軸 = 重力反向) |
TRACK_GLB_SIZE_MAX_MB |
80 MiB(80 × 1024² bytes;常數名沿用 _MB) |
場地 GLB 檔案大小上限(強制 Draco + KTX2,未壓縮 Stage 3 拒收) |
TRACK_VISUAL_TRIANGLE_COUNT_MAX |
3_000_000 | 場地 visual 三角形上限 |
TRACK_COLLIDER_TRIANGLE_COUNT_MAX |
500_000 | 場地 collider 三角形上限 |
TRACK_COLLIDER_REGION_COUNT_MAX |
256 | 場地依材質/來源節點拆分的 solid collider region 上限 |
TRACK_TEXTURE_BUDGET_1K_MAX |
16 | 主場地貼圖預算(1024² 張數;與 4K 預算擇一) |
TRACK_TEXTURE_BUDGET_4K_MAX |
4 | 主場地貼圖預算(4096² 張數;與 1K 預算擇一) |
TRACK_ENTITY_COUNT_MAX |
100 | 場地 entity 總數上限 |
TRACK_DESTRUCTIBLE_ENTITY_COUNT_MAX |
50 | destructible entity 上限(進 savestate) |
WEATHER_PATCH_COUNT_MAX |
50 | 同場併存天氣 patch 上限 |
TRACK_MAX_PLAYERS_HARDCAP |
8 | 場地能容納最大玩家數 |
ROUTEPOINT_SURFACE_TOLERANCE_M |
0.005 | RoutePoint position 貼 mesh 表面容差(m;Stage 3 檢核) |
ROUTEPOINT_MIN_SPACING_M |
0.1 | 相鄰 RoutePoint 最小中心距(m;< 此值視為重合、spline 段退化拒收;fixed + loop 的 RP1 ↔ RPn 除外,見 場地.md §8.2) |
LAP_MODE_LOOP_DISTANCE_M |
1 | RP1 ↔ RPn 中心距低於此值(m;且 route ≥ 3 點)→ lap_mode: loop(場地.md §8.2) |
TRACK_CHECKPOINT_TRIGGER_MIN_M |
[0.1, 0.1, 1] | 賽道 Checkpoint trigger box 最小 scale(m;empty local [x, y, z],z = 行進向深度、防高速穿隧) |
TRACK_CHECKPOINT_TRIGGER_MAX_AABB_RATIO |
0.1 | 賽道 Checkpoint trigger box 最大 scale = 場地 AABB 各軸 × 此值 |
START_GRID_SAFETY_MARGIN_M |
0.05 | 玩家上限推導的起跑 safety margin(m;floor(RP1.width_m / (0.13 + 此值)),0.13 = 整車 AABB 寬上限) |
START_GRID_CELL_WIDTH_M |
0.18 | 可驗算起跑格中心距(m)=0.13m 整車 AABB 寬上限+0.05m safety margin;N 車需求寬度為 N × 此值 |
START_GRID_LIFT_M |
0.05 | 起跑 root 沿 RP1 surface-frame up 的抬升量(m;集中參數,runtime 不寫死) |
FINISH_GATE_PLANE_EPS_M / FINISH_GATE_LATERAL_EPS_M |
0.001 / 0.001 | chassis COM 正向 swept crossing 的終點平面前後容差/左右界線容差(m) |
CHASSIS_MOUNT_TEMPLATES |
單一 18-entry meter offset table | 96mm 軸距 chassis mount 模板:canonical 9 個(Body×4/Battery/Tire×4)鎖定,custom 9 個(Motor/Chip/Roller×6/Weapon)是可編輯初始值;不按 chassis 外形分 type。機器權威:src/editor/import/part-import-policy.ts |
MOUNT_AABB_WARN_M / MOUNT_AABB_REJECT_M |
0.01 / 0.03 | chassis mount 偏離 chassis AABB 的警告/拒收門檻(m);機器權威:src/editor/validation/part-rules.ts |
MOUNT_GAP_REJECT_M / MOUNT_GAP_WARN_M |
0.003 / 0.01 | mount center 彼此距離的重疊拒收/近距警告門檻(m);機器權威:src/editor/validation/part-rules.ts |
HINGE_AXIS_WARN_SIN / HINGE_AXIS_REJECT_SIN |
0.5 / √3÷2 | tire/roller hinge 軸偏離 chassis local X-Z 平面的 30° 警告/60° 拒收門檻,以 sin 值 deterministic 比較;機器權威:src/editor/validation/part-rules.ts |
CHIP_SLOT_VOLUME_THRESHOLDS_M3 |
[0.0000015, 0.000003, 0.000006] | chip volume_m3 → skill slot 數階梯,依序等同 1.5/3/6 cm³:< 0.0000015 → 1 槽、≥ 0.0000015 → 2、≥ 0.000003 → 3、≥ 0.000006 → 4(初估、待 playtest 校準;Stage 2 推導 + 編輯器升階提示用,見 零件與共用介面.md §3.6) |
NARROWEST_PATH_MARGIN_M |
0.05 | 最窄路寬相容性檢查 margin(m;車輛 AABB.x + 此值 ≤ auto_narrowest_path_m,警告不阻擋;與起跑 margin 同值、不同用途) |
MAX_WEAPON_DRIVEN_BODIES |
16 | 一把武器剛體轉子 + 所有鏈段總數上限(body 預算帳,見 §2 註;單鏈是其特例) |
MAX_WEAPON_DRIVEN_PIVOTS |
8 | 一把武器 weapon_actuators[] 獨立驅動 pivot 數上限(剛體轉子 + 鏈條基座一起算) |
LAUNCH_AMMO_COUNT_MAX |
8 | launch 武器 bullet 子節點數上限(body 預算帳,見 §2 註) |
VORONOI_FRAGMENT_COUNT_MAX |
8 | per object(零件 / destructible entity)Voronoi 碎片烘焙上限 |
WIND_SPEED_MPS_MAX |
30 | weather.wind_speed_mps 上限 |
MAGNET_SOURCE_STRENGTH_N_MAX |
10 | magnet_source_strength_n 上限(零件 / entity 共用) |
KINEMATIC_PERIOD_MS_MIN |
500 | kinematic_move 週期下限(防 sub-frame 瞬移牆;初估、待 playtest) |
KINEMATIC_AMPLITUDE_M_MAX |
20 | kinematic_move 位移向量長度上限(m;初估、待 playtest) |
CONVEYOR_VELOCITY_M_S_MAX |
10 | conveyor 表面速度絕對值上限(負值反向;初估、待 playtest) |
FORK_SIMILARITY_THRESHOLD_PERCENT |
10 | 修改幅度 < 10% 拒絕上傳 |
DEPRECATED_TO_UNUSABLE_THRESHOLD |
3 | per-type;鏈上「不同創作者」的升級件數達此值,動態最低支援版抬升、該版以下轉 unusable(數不同創作者非 CID,防 griefing) |
4. protocol/security(安全)¶
| 常數 | 值 | 說明 |
|---|---|---|
SANITIZE_TIMEOUT_MS |
5000 | UGC sanitize Web Worker 上限 |
SANITIZE_WORKER_VERSION |
'v1' |
JSON chunk/結構 admission schema;live 後 bump 即升 protocol |
SANITIZE_JSON_CHUNK_MAX_BYTES |
16_777_216 | GLB JSON chunk 在 TextDecoder/JSON.parse 前的 16 MiB 硬上限 |
SANITIZE_DOCUMENT_MAX_ENTRIES |
250_000 | GLB JSON 全文件可遍歷 entries 總上限 |
SANITIZE_DOCUMENT_MAX_DEPTH |
64 | GLB JSON 文件巢狀深度上限 |
SANITIZE_GLTF_COLLECTION_MAX |
nodes 50_000;meshes 10_000;accessors/bufferViews 100_000;buffers/scenes 64;images/textures/samplers/materials/skins/cameras 4096;animations 1024;extensions 128 | glTF 主要 collection 的逐類硬上限 |
SANITIZE_GLTF_PRIMITIVES_MAX |
50_000 | 全 meshes primitive 總上限 |
SOURCE_TEXTURE_EDGE_MAX_PX |
8192 | 首次 admission 的 encoded source image 最大邊;合法來源可在 Stage 3 等比降採樣,不得提前套用 canonical 成品上限 |
CANONICAL_TEXTURE_EDGE_MAX_PX |
4096 | Stage 3 finalizer 轉換、壓縮並重驗後的 canonical 成品最大邊 |
SANITIZE_DECODED_GEOMETRY_MAX_BYTES |
83_886_080 | accessor/index 在建立 typed array 前共用 reservation 的 decoded 幾何 byte 上限(80 MiB);重疊 bufferView storage slice 只計一次,獨立 index 配置逐筆計入 |
SANITIZE_DECODED_GEOMETRY_MAX_ELEMENTS |
20_971_520 | decoded 幾何元素的第二道硬上限(byte 上限 / 4),避免大量極小 component 放大配置/迴圈成本 |
SANITIZE_EXTRAS_MAX_BYTES |
16_777_216 | GLB extras(自訂 metadata JSON)總量上限(16 MiB;非 GLB 檔案大小——檔案天花板 = §3 TRACK_GLB_SIZE_MAX_MB)。防 junk-JSON 灌爆的絕對天花板、非設計預算——場地 extras 合法可大(route[] 間距下限 100mm、長賽道可累積數萬節點名 + ≤100 entity extras,極端估 5–10 MiB);初估;程式架構/security.md §1.2 |
SANITIZE_EXTRAS_MAX_DEPTH |
8 | GLB extras 巢狀深度上限(初估) |
ED25519_PUBLIC_KEY_BYTES |
32 | |
ED25519_SIGNATURE_BYTES |
64 | |
P2P_MESSAGE_TIMESTAMP_TOLERANCE_SEC |
30 | |
P2P_MESSAGE_NONCE_BYTES |
16 | |
P2P_MESSAGE_SIGNER_MAX_CHARS |
256 | 簽章 envelope signer 字串長度上限 |
P2P_NONCE_SET_MAX_ENTRIES |
8192 | 通用 NonceSet 單實例硬上限;GossipSub 不使用全域單例,改採 §10 每 authenticated source 64 nonce |
TEXT_BLACKLIST_VERSION |
'v1' |
DMCA 上傳 pre-check 與可選聊天 starter list 共用的條目格式版本;DMCA 逐筆支援 exact / substring / regex,聊天固定 normalized literal substring,沒有全域 mode;兩者資料皆隨 client minor 出貨、不 gate 配對,玩家聊天本機副本不隨版本覆寫(版權.md §7、程式架構/chat-system.md §7) |
5. protocol/ledger(鏈與多簽)¶
| 常數 | 值 | 說明 |
|---|---|---|
CONSENSUS_ANCHOR_FALLBACK_SLOT_MS |
2_000 | 回合終局 anchor proposer 逾時後,依 original roster 穩定順序切換下一位的 slot |
CONSENSUS_ANCHOR_COLLECTION_TIMEOUT_MS |
12_000 | 每回合唯一證書 bounded 收集總窗;到期未達嚴格多數則 MatchResultEvent.roundAnchors[roundIndex] 為 null、禁止鑄幣,不做單簽 fallback |
LEDGER_DB_ADDRESS |
(build 注入) | 官方 ledger OrbitDB 位址=鏈身分;exact shape 為 /orbitdb/<CIDv1-base58btc>,禁止尾接 /open4wd-ledger 或其他 segment(manifest CID、純內容派生不含域名——部署資訊.md §8.3 CI 不變式);換位址=鏈重生;空值只允許 development 或明確 genesis 指令以固定名稱 open4wd-ledger 建庫,private/public client 缺值必須拒絕啟動 |
LEDGER_EVENT_MAX_BYTES / LEDGER_EVENT_MAX_DEPTH / LEDGER_EVENT_MAX_ENTRIES |
65_536 / 16 / 2_048 | custom access-controller 在 OrbitDB persistence 前的 deterministic event admission |
LEDGER_EVENT_TYPES |
20 項 | persistence allowlist;另有未啟用 asset-version-upgrade 保留案不在此集合。unknown 與保留案在啟用前拒絕;新增事件須同步 deep schema/簽章驗證/pinning vendor/本表 |
LEDGER_ADMISSION_VERSION |
1 | 所有 20 種永久 Orbit entry 的頂層 proof scheme;event schema 本身不含 admission |
LEDGER_ADMISSION_BASE_BITS / LEDGER_ADMISSION_SIZE_UNIT_BYTES / LEDGER_ADMISSION_MAX_EXTRA_BITS |
18 / 4,096 / 4 | requiredBits = 18 + min(4, ceil(log2(max(1, ceil(baseEntryBytes/4096)))));完整已簽 BaseEntry 納入大小,固定 18–22 bits |
LEDGER_ADMISSION_NONCE_BYTES |
8 | workNonce 固定 unsigned big-endian 8 bytes;proof 綁定 canonical BaseEntry digest |
LEDGER_ADMISSION_WORK_TIMEOUT_MS / LEDGER_ADMISSION_INTENT_QUEUE_MAX |
30,000 / 8 | 單一身分一次一筆 Worker mining;FIFO pending intent 硬上限,timeout 不降難度、不 seal |
LEDGER_ADMISSION_OUTBOX_MAX_ENTRIES / LEDGER_ADMISSION_OUTBOX_MAX_BYTES |
32 / 2,097,152 | durable sealed final-entry outbox 雙硬上限;滿載 fail-closed,不淘汰舊 entry |
LEDGER_ENTRY_BLOCK_MAX_BYTES |
262_144 | Orbit entry block 與 remote sync head 單筆 decode 前硬上限 |
LEDGER_BLOCKSTORE_MAX_BYTES / LEDGER_BLOCKSTORE_MAX_ENTRIES |
134_217_728 / 10_000 | 本機 ledger entry blockstore 硬 quota;只淘汰 checkpoint-covered block,無安全 victim 時 fail-closed |
LEDGER_TRAVERSAL_MAX_BYTES / LEDGER_TRAVERSAL_MAX_ENTRIES |
67_108_864 / 2_048 | 單一 remote head 沿 next 因果鏈 join 的 aggregate quota |
LEDGER_ENTRY_MAX_NEXT_LINKS / LEDGER_ENTRY_MAX_REFERENCE_LINKS |
64 / 128 | entry link shape 上限;refs 僅驗證、不 traversal,不能繞 checkpoint boundary |
LEDGER_SYNC_PEER_WINDOW_MS |
60_000 | Orbit sync authenticated libp2p source 固定窗口 |
LEDGER_SYNC_PEER_MAX_BYTES_PER_WINDOW |
1_048_576 | 每 source 每窗口 raw head aggregate bytes |
LEDGER_SYNC_PEER_MAX_MESSAGES_PER_WINDOW |
256 | 每 source 每窗口 raw head 訊息數,阻擋極小畸形包 decode CPU 放大 |
LEDGER_SYNC_PEER_STATES_MAX |
4096 | sync source budget 狀態硬上限,LRU 淘汰 |
LEDGER_SYNC_GLOBAL_MAX_BYTES_PER_WINDOW / LEDGER_SYNC_GLOBAL_MAX_MESSAGES_PER_WINDOW |
16,777,216 / 4,096 | Orbit sync 全來源 aggregate 固定窗口;不隨 source LRU churn 重置 |
LEDGER_SYNC_QUEUE_MAX_BYTES / LEDGER_SYNC_QUEUE_MAX_MESSAGES |
4,194,304 / 64 | listener/stream 收到 raw bytes 時同步 reserve;滿額不把 payload 捕獲進 Promise queue |
LEDGER_SYNC_HEAD_STREAM_MAX / LEDGER_SYNC_ENTRY_FETCH_STREAM_MAX |
16 / 32 | bounded sync 同時處理的 head/entry-fetch stream pool;超額排隊受 queue cap |
LEDGER_SYNC_STREAM_TIMEOUT_MS |
30_000 | head/entry-fetch stream deadline;timeout 必 abort/close 並釋放 pool |
LEDGER_HEADS_VALUE_MAX_BYTES / LEDGER_HEADS_MAX |
65,536 / 64 | heads metadata 在 JSON parse 前的 byte cap 與解析後 head count cap |
LEDGER_CHECKPOINT_MAX_BYTES / LEDGER_CHECKPOINT_MAX_SIGNATURES |
32,768 / 64 | checkpoint v1 block decode 前上限;log_head_cids 與簽章數/治理 signer set 均最多 64 |
LEDGER_CHECKPOINT_CONFLICT_MAX_BYTES |
16,384 | durable sibling-equivocation evidence canonical CBOR 上限 |
LEDGER_SIGNER_SET_MAX_BYTES / LEDGER_DERIVED_STATE_MAX_BYTES |
16,384 / 16,777,216 | signer-set/derived-state content block per-call fetch 上限;exact CID+canonical decode-reencode |
LEDGER_COLD_PARTITION_MAX_BYTES / LEDGER_CONTENT_BLOCK_MAX_BYTES |
8,388,608 / 67,108,864 | cold partition per-call cap/所有 ledger content block put/get 絕對上限 |
CHECKPOINT_ADOPTION_MAX_PENDING / CHECKPOINT_ADOPTION_MAX_PENDING_BYTES |
64 / 262,144 | 遠端 checkpoint adoption pending+active 數與 pending bytes;獨立於 fold queue |
CHECKPOINT_ADOPTION_MAX_MESSAGE_BYTES / CHECKPOINT_ADOPTION_MAX_CONCURRENCY |
8,192 / 2 | 單 announcement 記帳上限/同時完整驗證數 |
CHECKPOINT_ADOPTION_MAX_RETRIES / CHECKPOINT_ADOPTION_NEGATIVE_CACHE_MAX |
1 / 256 | unavailable 只重試一次;僅 checkpoint block 本身 exact CID/canonical/shape 等 intrinsic-invalid 可進 bounded negative LRU。timeout、不可得、wrapper/context 不符、retry 耗盡都不得永久快取 |
STARTUP_CHECKPOINT_SCAN_TIMEOUT_MS |
30,000 | 啟動 durable announcement 掃描的前景等待上限;queue 滿時 backpressure、不得丟棄,逾時後背景續掃至完成 |
ARBITRATION_PANEL_SIZE |
7 | 每案隨機抽選仲裁者數(合格池 < 7 → 流局;人數依據見 流程/檢舉與仲裁.md §4.2) |
ARBITRATION_QUORUM_VOTES |
4 | 成案所需有效票(pass + reject,棄權不計) |
ARBITRATION_PASS_THRESHOLD_PCT |
60 | 加權 pass 必須嚴格大於 60%;恰 60% 仍 reject,使用整數交叉相乘 |
ARBITRATION_REDRAW_MAX |
1 | 有效票不足時重抽次數上限;仍不足 → 流局 |
ARBITRATION_DRAW_DELAY_HOURS |
24 | 抽籤點 = 檢舉後首個滿此時數的帳本檢查點;亦為撤回窗邊界 |
ARBITRATION_VOTE_WINDOW_HOURS |
72 | 投票期;期滿判定 = 抽籤點起首個滿此時數的帳本檢查點(重抽輪自重抽檢查點重新起算;待 playtest 校準,程式架構/moderation.md §5.3) |
ARBITRATION_WEIGHT_X100_TABLE |
預算表 | round(100 × log10(rep + 10))、離線一次性生成隨 client 出貨;共識計算禁浮點 log10(算式表.md §17) |
REPORT_EXPIRE_DAYS |
90 | 檢舉未結案自動過期(純 derive,程式架構/moderation.md §3) |
REPORT_OPEN_MAX_PER_REPORTER |
3 | 每檢舉者同時開放案上限(表單層拒收,防仲裁注意力洪水;結案 / 撤回 / 流局 / 過期即釋放額度,程式架構/moderation.md §4) |
UPLOAD_PENDING_MAX_PER_UPLOADER |
3 | 每上傳者同時 similarity-pending(灰區待審)上限——超限僅可 fork / 取消(防灰區量產燒仲裁注意力,與 REPORT_OPEN_MAX_PER_REPORTER 同構,程式架構/anti-piracy.md §5.1) |
UPLOAD_PENDING_SUSPEND_STRIKES |
3 | 安全港次數閘:rolling 窗內上傳期判抄達此數 → pending 通道暫停(斷「鹽化」變體鏈;純 derive、不動信譽、< 70% 原創上傳不受影響,程式架構/anti-piracy.md §5.1) |
UPLOAD_PENDING_SUSPEND_DAYS |
30 | 上述 rolling 窗 = 暫停時長 |
GLOBAL_PEER_BLACKLIST_STRIKES |
3 | 三振:同一責任人仲裁定罪達此數 → 全域玩家黑名單(純 derive,程式架構/moderation.md §5.5) |
REPUTATION_MATCH_GAIN_DAILY_MAX |
10 | 比賽來源加分(完賽 +1 + 連勝 +5 合計)rolling 24h 上限(逐筆檢查、超額不發;扣分不設上限;防合謀完賽農場,待 playtest 校準,信譽系統.md §2.2) |
REPUTATION_INITIAL / REPUTATION_MIN / REPUTATION_MAX |
500 / 0 / 1000 | 信譽 clamp 模型(算式表.md §16;protocol 常數、非治理 config——改值=全史分數重算,§17.3 治理可調鐵則) |
NEWCOMER_PROTECTION_DAYS |
7 | 新手保護期(唯一條款:信譽下限保護,信譽系統.md §4.1;protocol 常數——getEffectiveScore 烘進評分權重等累積 derive) |
NEWCOMER_REPUTATION_FLOOR |
400 | 保護期內信譽下限(同上) |
MALICIOUS_REPORTER_ACCURACY_MAX_PCT |
30 | 惡意檢舉判定:lifetime 通過率低於此值(pct 整數、整數交叉相乘評估,信譽系統.md §4.3) |
MALICIOUS_REPORTER_SAMPLE_MIN |
10 | 惡意檢舉判定:已結案樣本下限 |
MALICIOUS_REPORTER_COOLDOWN_DAYS |
30 | 惡意檢舉判定:前科保護 rolling 窗(lastMaliciousReporterAt 索引,程式架構/reputation.md §5.3) |
REPEAT_INFRINGER_THRESHOLD |
3 | pinning DMCA repeat-infringer 封鎖門檻;外部 owner open-4wd-pinning/dmca,主 corpus 各處只引用此名 |
RATING_NEUTRAL_X100 |
300 | 少量評分 Bayesian prior 的中性 3.00 |
BAYESIAN_PRIOR_SAMPLES |
5 | 少於 5 票時的 prior 樣本數 |
MATCH_HISTORY_DEFAULT_PAGE_SIZE |
20 | 玩家賽事歷史預設單頁筆數 |
MATCH_HISTORY_MAX_PAGE_SIZE |
50 | 玩家賽事歷史單頁 API 上限 |
MATCH_HISTORY_MAX_PARTITIONS_PER_PAGE |
4 | 單次請求最多延遲載入的 cold quarter 數 |
CHECKPOINT_PROPOSAL_EXPIRY_MS |
1_800_000 | checkpoint proposal 30 分鐘 expiry |
LEDGER_CHECKPOINT_INTERVAL_HOURS |
24 | 帳本檢查點提案間隔(signer 本地時鐘觸發、距上一檢查點未滿間隔的提案拒簽;仲裁抽籤 / 期滿掛在檢查點節奏上,程式架構/ledger-checkpoint.md §3) |
ECONOMY_MONTHLY_FLOW_RETENTION_MONTHS |
12 | 月流水衍生投影保留當月含前 11 個 UTC 月;累積型 derive 的 protocol 常數、非治理 config(程式架構/economy.md §6) |
ROOM_PINNED_CHECKPOINT_MAX_AGE_HOURS |
72 | 開房 pin 的帳本檢查點 staleness 上限(初估;isPinnedCheckpointFresh 拒絕過舊 pin、host 須先 sync——防惡意 host pin 遠古檢查點讓 unusable 資產復活,版本規範.md §20) |
6. protocol/matchmaking(配對)¶
| 常數 | 值 | 說明 |
|---|---|---|
PLAYERS_PER_RACE_MAX |
8 | FFA 最多 8 人 |
PLAYERS_PER_RACE_MIN |
2 | |
START_GRID_NONCE_BYTES |
32 | 每位 participant commitment/reveal nonce 固定長度 |
START_GRID_CEREMONY_PHASE_TIMEOUT_MS |
15000 | commitment 與 reveal 各自的有界逾時;逾時 fail closed 並列出缺席 PeerId |
READY_COUNTDOWN_SEC |
5 | ReadySet 全驗證完成後、進入 preloading 前的玩家反悔倒數 |
QUICK_MATCH_TIMEOUT_MS |
120_000 | quick match discovery 等待既有公開房出現的 client policy 上限 |
SPECTATOR_DEFAULT_MAX |
20 | 建房預設觀戰容量 |
SPECTATOR_MAX |
50 | 房間可設定的觀戰者硬上限 |
TRUESKILL_MU_INITIAL_X1000 |
25000 | TrueSkill 初始平均值(μ=X1000 整數定點,算式表.md §20) |
TRUESKILL_SIGMA_INITIAL_X1000 |
8333 | TrueSkill 初始標準差(X1000) |
MATCH_RATING_WINDOW_INITIAL |
5 | 初始 rating 配對窗口(displayRating ÷ 1000 整數分域) |
MATCH_RATING_WINDOW_GROWTH_PER_10SEC |
5 | 每 10 秒 +5 擴張 |
MATCH_RATING_WINDOW_MAX |
30 | 上限(見 賽內機制.md §1.2 / 程式架構/matchmaking.md) |
TRUESKILL_SIGMA_MIN_X1000 |
6000 | 頻繁斷線者 σ 不收斂下限(X1000;流程/比賽進行.md §12.3) |
FREQUENT_DISCONNECT_THRESHOLD |
5 | 累積斷線次數達此值壓 σ 權重 |
TRUESKILL_BETA_X1000 |
4166 | β = 25/6 ≈ 4.166(初估) |
TRUESKILL_TAU_X10000 |
833 | τ = 25/300 ≈ 0.0833(初估;尺度 X10000、公式使用處明確換算) |
TRUESKILL_V_TABLE_X1000 |
(1201 筆、離線生成) | v(t) 整數查表(t clamp ±TRUESKILL_VW_T_CLAMP_X1000、步長 TRUESKILL_VW_T_STEP_X1000、不插值);浮點 erf 禁入共識的查表替代——同仲裁權重表模式、隨 client 出貨(算式表.md §20) |
TRUESKILL_W_TABLE_X1000 |
(1201 筆、離線生成) | w(t) 整數查表(同上) |
TRUESKILL_VW_T_CLAMP_X1000 |
6000 | 查表 t 值 clamp 界(±6=X1000 尺度 ±6000) |
TRUESKILL_VW_T_STEP_X1000 |
10 | 查表步長(= 0.01) |
FFA 不平手 =draw margin 0,無平手機率常數;rating 屬共識 derive,整數定點權威見 算式表.md §20。
7. protocol/gameplay(比賽)¶
| 常數 | 值 | 說明 |
|---|---|---|
MATCH_ROUND_COUNT_DEFAULT |
3 | 一場比賽回合數,房間設定預設 |
MATCH_ROUND_COUNT_MIN |
1 | 房間可設下限 |
MATCH_ROUND_COUNT_MAX |
5 | 房間可設上限(暫定、待 playtest) |
RACE_DURATION_DEFAULT_SEC |
600 | 房間設定預設(10 分;per 回合) |
RACE_DURATION_MIN_SEC |
60 | 房間可設下限 |
RACE_DURATION_MAX_SEC |
1800 | 房間可設上限(30 分;clamp 天花板) |
RECONNECT_TIMEOUT_MS |
15_000 | 斷線重連等待窗(逾時視為異常斷線) |
LOADOUT_SUBMIT_WINDOW_SEC |
60 | 賽前 loadout 提交收集窗(preloading;窗內收件即驗、絕對 deadline 到即定案,timer 只喚醒、回前景立即重評;無獨立互驗窗;未提交=absent 落 disconnects、無參與證明不罰;初估、待 playtest,流程/比賽進行.md §1.1) |
SETTLEMENT_TIMEOUT_SEC |
30 | 賽後結算簽章收集總超時;達不到視為失敗、本場無經濟結算(consensus-critical 結算協議時序,流程/比賽結算.md §8.2) |
SETTLEMENT_TAKEOVER_WAIT_SEC |
5 | 主 peer 掉線後接手等候窗,蒐集合法 takeover、選 PeerId 最小者為新主 |
RACE_LAP_COUNT_DEFAULT |
3 | 房間設定預設(僅 lap_mode: loop;per 回合) |
RACE_LAP_COUNT_MIN |
1 | |
RACE_LAP_COUNT_MAX |
10 | |
STARTUP_COUNTDOWN_SEC |
3 | |
STARTUP_COUNTDOWN_TICK_MS |
1000 | 正式賽前倒數相鄰數字的單調時鐘間隔;屬 race/gameplay 行為,不是視覺動畫時長 |
RACE_READY_STALL_TIMEOUT_MS |
30_000 | GO 前 race-ready 屏障無嚴格 milestone 進度的絕對 deadline;timer 只喚醒、回前景立即重評,重送/倒退不重置,逾時取消且不產生結算或懲罰(流程/比賽進行.md §1.7) |
LAUNCH_FIRE_INTERVAL_MS |
250 | launch 武器 Hold 連發間隔(每 interval 依子節點序發 1 顆、打完即空;下一回合換新車即滿彈;初估、待 playtest) |
ROUND_ENDGAME_MAX_FRAMES |
120 | 場上已無未完賽存活車後,單一回合級失能滑行窗上限(2 秒;初估、待 playtest) |
ROUND_ENDGAME_SETTLED_FRAMES |
15 | 所有未完賽失能車同時低速時,提早結束所需連續幀數(0.25 秒;初估、待 playtest) |
ROUND_DISABLED_LINEAR_SPEED_MAX_MPS |
0.05 | 失能車低速判定的 chassis 線速度嚴格上限(初估、待 playtest) |
ROUND_DISABLED_ANGULAR_SPEED_MAX_RAD_S |
0.1 | 失能車低速判定的 chassis 角速度嚴格上限(初估、待 playtest) |
比賽 / 回合 / race 三層:一場比賽(match)含
MATCH_ROUND_COUNT個回合(round),每回合各自一軌、一份圈數(RACE_LAP_COUNT_*)、一份賽程時間上限(RACE_DURATION_*)—— 故圈數 / 時限為 per 回合 房間設定。RACE_*/PER_RACE常數界定「回合內即時 race(physics / netcode)」,沿用 race 命名;比賽層結算 / 帳本見 賽內機制.md §1.5 / §3 與 程式架構/ledger-settlement.md §5。