dayz-motorbikes
Skill20 starsChanged 43 days agoMITView on GitHub
Author, import, configure and debug single-track vehicles (motorbikes / motorcycles) in DayZ 1.30 Experimental build 1.30.164014. Covers MotorbikeScript, simulation = "motorbike", 2-wheel physics (Wheels block without Axles, Brakes split Front/Rear, lean/steering/tipover), kickstand, kickstart actions, dedicated 3rd person camera (ID 32), and the DayZ 1.30 modular vehicle refactor (VehicleLightsComponent, VehicleHornComponent, VehicleVFXComponent). Use when creating a new motorbike, porting two-wheel assets (Jawa, dirt bikes, scooters), migrating existing vehicle mods from 1.29 to 1.30, or fixing get-in/fall-over bugs. Do NOT use for 4-wheel cars, trucks or quads (see dayz-vehicles), aircraft (see dayz-aviation), raw 3D mesh processing (see dayz-model-pipeline), or custom player animation authoring (see dayz-animation-pipeline).
In this repository47 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- 3d-generation-harnessSkill
- ai-3d-to-dayzSkill
- ardy-motion-generationSkill
- blender-animationSkill
- blender-assemblySkill
- blender-visual-reviewSkill
- dayz-3d-viewerSkill
- dayz-ai-patternsSkill
- dayz-animation-pipelineSkill
- dayz-aviationSkill
- dayz-basebuildingSkill
- dayz-charactersSkill
- dayz-clothingSkill
- dayz-doorsSkill
- dayz-environment-hazardsSkill
- dayz-feature-specSkill
- dayz-mcp-verifySkill
- dayz-model-pipelineSkill
- dayz-mod-workflowSkill
- dayz-p3d-auditSkill
- dayz-p3d-inspectorSkill
- dayz-particlesSkill
- dayz-pbo-buildSkill
- dayz-pbo-reverse-engineeringSkill
- dayz-persistenceSkill
- dayz-physics-engineSkill
- dayz-preflightSkill
- dayz-proxy-alignSkill
- dayz-realistic-animation-directorSkill
- dayz-sound-systemSkill
- dayz-test-ingameSkill
- dayz-texture-pipelineSkill
- dayz-ui-developmentSkill
- dayz-undergroundSkill
- dayz-vehiclesSkill
- dayz-weaponsSkill
- enforce-script-referenceSkill
- mixamo-retargetSkill
- ovh-cloudSkill
- rigorous-data-auditSkill
- rip-vehicle-importSkill
- systematic-debuggingSkill
- task-observerSkill
- uv-clean-atlasSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. About 0 are common, 3 are distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 40
All technical evidence in this skill comes from code and configuration extraction (source_verified) of Experimental 1.30.164014.
- Very specific: line 95
Remedy: Remove any Axles block from SimulationModule.
- Very specific: line 130
Cause: If inheriting from Motorbike_01_ColorBase, the script requires GetAnimationPhase("SeatDriver") == 0.0 (Motorbike_01.c:97).
- Very specific: line 150
Inside
DamageCrew: if crewDmgBase > 80 (MOTORBIKES_CONTACT_DMG_KILLCREW, strictly greater) it executes crew.SetHealth(0.0) (:1369, 1383). - Very specific: line 172
Remedy: Ensure the constructor maintains SetKickstand(1);.
- Very specific: line 196
Remedy: If your mod requires repairing with traditional hand tools, you must bind actions to items via modded class and insert them into …
- Very specific: line 225
Run the offline validator on your addon directory: python <KNOWLEDGE_PACK>/tools/dayz-script-validator/scripts/script_validator.py …
- Very specific: line 227
Check errors and warnings keys at the root of output JSON.
- Very specific: line 229
Always gate by len(errors) == 0.
- Very specific: line 230
Check that no broken references exist in Enforce .c, layouts, config.cpp, or .rvmat.
- Distinctive: line 231
Use delta comparison against the unchanged base tree to isolate errors introduced by your mod.
- Distinctive: line 234
Step 2 (Render): Check that wheels show their correct proxies, rvmat materials respond, and there are no grey panels or invisible meshes …
- Very specific: line 265
Every technical claim in this skill includes the source file path and exact line range relative to extraction root …
- Distinctive: line 266
If you need to verify a citation, open the corresponding file at that exact line and check the symbol.
- Very specific: line 286
Vanilla motorbike model.cfg file: Not included in plain text inside extracted Bohemia PBOs.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
DayZ Motorbikes (Single-Track Vehicles) & 1.30 Vehicle Refactor
Preflight: rider posture (added 2026-09-28, LFDucati T99; B1 measured on the same day) [EXACT except where marked]. Chosen solely by
GetAnimInstance()->SetVehicleType(exp\scripts\scripts\4_World\Classes\UserActionsComponent\Actions\Interact\ActionGetInTransport.c:104-107) -> fixed state and column inVehicles.agf(five nodes require literalVehicleType == 10 || VehicleType == 11::1429, 1474, 1529, 1570, 2806). Neither the model nor the config moves the hands: they are fixed by the handlebar pose clip, and there is no foot IK. GP clip-ons with MOTO1/MOTO2 leave the hands ~40 cm above: custom clips are required. Survivor Animations MOTORCYCLE (16) = car driver body (Offroad Hatchback) with IK hands, 1.29 format graph (crashes 1.30). Correctsreferences/rider-animation.md:77: 1.29 graphs are TEXT ($AnimGraph 7), not binary. Approach without touching the graph: registered child.asi+SetAnimationInstanceByName, like surrendering (PlayerBase.c:2087-2088,DayZPlayerCfgBase.c:1532-1537): works with the motorbike stopped on dedicated server and local client (measured 2026-09-28, LFDucati B1, LL-530), and stopped and moving with custom clips (LFRider on the H2R, same day, LL-533..535): a DayZATool (ANIMSET5) clip put the stopped rider within 0.4 mm of its FK in those runs (later first-person probe runs saw the stopped head move by several cm between runs and looks:dayz-test-ingamereferences/session-findings.md, "H2R import (2026-10)"); steering clips are distributed across ±45° of REAL wheel angle on all motorbikes (Vehicles.agf:50,:1466), not at the limit of each one; transitions are exported as full whole-body posture (as additive differences they collapse the skeleton). With observers and in edge cases, untested. Common mod and toolchain: LFRider (not published). Recipe, pitfalls, and the pose in four pieces:references/rider-animation.md§Per-bike pose. Detail: LFDucati research notes (not published).
DayZ 1.30 Experimental (build 1.30.164014) introduces full native engine support for single-track vehicles via the engine simulation type simulation = "motorbike" (exp\bin\bin\config.cpp:1059, in-game bin\config.cpp). At the class architecture level, class Motorbike: Transport is a direct sibling of Car and Boat in native C++ (exp\scripts\scripts\3_Game\Vehicles\Motorbike.c:30, in-game scripts\3_Game\Vehicles\Motorbike.c), not a child of Car. In the game script layer, MotorbikeScript inherits directly from Motorbike (exp\scripts\scripts\4_World\Entities\Vehicles\MotorbikeScript.c:53, in-game scripts\4_World\Entities\Vehicles\MotorbikeScript.c), NOT from CarScript.
Three-Layer Inheritance Hierarchy
- Engine Config Layer (
bin\config.cpp):Transport->Motorbike(exp\bin\bin\config.cpp:1054-1059, withsimulation = "motorbike"). - 3_Game Script Layer (
scripts\3_Game\Vehicles\):TransportType->MotorbikeType(exp\scripts\scripts\3_Game\Vehicles\Motorbike.c:16-18).TransportOwnerState->MotorbikeOwnerState(Motorbike.c:20-23).TransportMove->MotorbikeMove(Motorbike.c:25-27).Transport->Motorbike(Motorbike.c:30-370).
- 4_World Script Layer (
scripts\4_World\Entities\Vehicles\):MotorbikeOwnerState->MotorbikeScriptOwnerState(exp\scripts\scripts\4_World\Entities\Vehicles\MotorbikeScript.c:23-25).MotorbikeMove->MotorbikeScriptMove(MotorbikeScript.c:27-29).Motorbike->MotorbikeScript(MotorbikeScript.c:53-1765).MotorbikeScript->Motorbike_01_ColorBase(exp\scripts\scripts\4_World\Entities\Vehicles\InheritedMotorbikes\Motorbike_01.c:1-166).MotorbikeScript->Motorbike_02_ColorBase(exp\scripts\scripts\4_World\Entities\Vehicles\InheritedMotorbikes\Motorbike_02.c:1-140).
A motorcycle in DayZ 1.30 has no relationship to the traditional four-wheel subsystem: it completely lacks the Axles hierarchy, does not use doors (IsAreaAtDoorFree always returns true), does not require a radiator or vital coolant circuit (IsVitalRadiator() returns false, MotorbikeScript.c:321-324), and the two vanilla motorbikes dispense with a battery because they override NeedElectricitySourceDevice() to false (Motorbike_01.c:33-36, Motorbike_02.c:34-37); the default in Transport is true (Transport.c:821-824) and MotorbikeScript does not change it. In return, the Enfusion engine simulates a dynamic two-wheel balance model with gyroscopic lean (maxLeanAngle[]), decoupled lever and pedal brakes, kickstand (SetKickstand), fall and destabilization (FallOver), and mandatory driver ejection on tipover (CrewShouldEject).
All technical evidence in this skill comes from code and configuration extraction (source_verified) of Experimental 1.30.164014. No dynamic behavior is declared runtime tested (runtime_verified).
Family Selector
| Use case | Tool and skill path | Key files |
| New vanilla-like motorbike (created from scratch or derived from Motorbike_01 / Motorbike_02) | This skill (dayz-motorbikes) | references/forward-contract.md and references/config-contract.md |
| Motorbike imported from another game (ripped / asset store / Blender) | This skill + dayz-model-pipeline (mesh and LODs) | references/forward-contract.md and dayz-model-pipeline/SKILL.md |
| Traditional car, truck, quad, or boat | dayz-vehicles (sibling land vehicle skill) | dayz-vehicles/SKILL.md |
| Car mod migration from 1.29 to 1.30 (components, lights, horn, VFX) | references/vehicle-1.30-refactor.md | references/vehicle-1.30-refactor.md |
| Rider animations, handlebar poses, or .agf graph | references/rider-animation.md + dayz-animation-pipeline | references/rider-animation.md and dayz-animation-pipeline/SKILL.md |
| First-person view: a ViewPilot LOD (res 1100; none on the vanilla bikes) and closing the gaps the rider sees through the fairing | dayz-vehicles | dayz-vehicles/references/proxies-and-get-in.md §Closing first-person gaps (SP-469) |
Architecture recommendation: for a new motorbike, inherit in Enforce Script directly from MotorbikeScript and copy the structure of Motorbike_01_ColorBase in your config.cpp (see references/config-contract.md). Do not attempt to inherit from CarScript or adapt 4-wheel Axles blocks: simulation = "motorbike" does not use them (invariant 1; exact failure mode is not measured [UNVERIFIED]). If inheriting directly from MotorbikeScript, override NeedElectricitySourceDevice(): without override it returns true and the motorbike would require a battery (Transport.c:821-824).
Day-0 critical path for a new motorbike
Ordered checklist of minimum mandatory deliverables to have an operational motorbike:
- [EXACT] CfgPatches and CfgVehicles declaration: declare the addon with mandatory dependency on
"DZ_Vehicles_Singletrack"(exp\vehicles_singletrack\DZ\vehicles\singletrack\config.cpp:22-31, in-gameDZ\vehicles\singletrack\config.cpp). Inherit fromMotorbikeScriptwithsimulation = "motorbike".class CfgPatches { class MiMoto { units[] = {}; requiredAddons[] = {"DZ_Data", "DZ_Vehicles_Singletrack"}; }; }; - [EXACT]
class Crewblock: defineclass Driverandclass CoDriver: Driverpointing toactionSel = "seat_driver",proxyPos = "crewDriver",getInPos = "pos_driver",getInDir = "pos_driver_dir", and both withisDriver = 1;(config.cpp:67-85). - [EXACT]
class SimulationModuleblock: declareclass Wheelswithclass Frontandclass Rear(withoutAxles),class BrakeswithFront(input = 1) andRear(input = 0), and lean curves inclass Steering(config.cpp:228-343). - [EXACT] Animation sources (
AnimationSources): declare shock absorbersdamper_1,damper_2and wheel stateAnimHitWheel_1,AnimHitWheel_2(config.cpp:112-148, 344-364). If it has a flip-up seat, addSeatDriver. - [EXACT] Damage system (
DamageSystem): defineGlobalHealth(1000 HP) and the zones fromMotorbike_01:Chassis,Fender(transfer target forFront),Engine(inventorySlots[] = {"SparkPlug"}),Front,Reflector_1_1,Back, andFuelTank, plusGUIInventoryAttachmentsProps(config.cpp:365-515). A glass slot that should hide at 0.0, as inReflector_1_1, is a config shape the Pack has not seen work in game: seedayz-vehiclesreferences/vehicle-config-and-modelcfg.md, end of §6b (SP-483). - [EXACT] Wheels and Proxies: define classes derived from
MotorbikeWheelfor front and rear wheels with their_Ruinedversions inCfgVehicles(config.cpp:155-214), and proxies inCfgNonAIVehicles(config.cpp:1061-1083):class MiMoto_Wheel_1: MotorbikeWheel { scope = 2; radius = 0.29; width = 0.06; tyreLateralFriction = 3.0; }; - [EXACT] High-speed anti-snag geometry: define
speedGeomActivation = 0.29;andspeedGeoms[] = {"geotohide"};(config.cpp:226-227). - [EXACT] 4_World Script Class: create class derived from
MotorbikeScript(exp\scripts\scripts\4_World\Entities\Vehicles\InheritedMotorbikes\Motorbike_01.c:1-166). Configure in constructor impact damages (m_VehicleContactDamageCoef,m_CrewContactDamageCoef), engine and horn SoundSets, and register lights inm_LightsComponent:m_VehicleContactDamageCoef = 0.03; m_CrewContactDamageCoef = 0.018; - [EXACT] Mandatory script overrides: implement
GetAnimInstance()returningVehicleAnimInstances.MOTO1(10) orMOTO2(11),HasDirectionalInOutAction()(true),GetSeatAnimationTypeDirectional(),GetTransportCameraDistance(),GetTransportCameraOffset(), andNeedElectricitySourceDevice()(falseon magneto/kickstart bikes). - [DESIGN] Geometry and P3D model: ensure bone
"drivewheel"on the front fork, light memory points (light_1_1,light_1_2_reverse), smoke (ptcExhaust_start/end,ptcEnginePos), fuel cap (refill), and damage selections (dmgZone_*). Details in references/forward-contract.md. - [EXACT] Sounds: reference engine, exhaust, shock absorber, and horn SoundSets defined in
exp\sounds_hpp\DZ\sounds\hpp\config.cpp(motorbike SoundSets:98179-98909, SoundShaders:59253-59918):m_EngineStartOK = "Motorbike_01_engine_start_SoundSet"; m_HornComponent.RegisterSound(VehicleHornMode.SHORT, "Motorbike_01_Horn_Short_SoundSet"); - [DESIGN] Economy and Spawn: register in
types.xmlandcfgspawnabletypes.xmlwith spark plug (SparkPlug) and wheels installed. - [EXACT] Decide rider posture BEFORE modeling (added 2026-09-19, LFDucati): no runtime hand adjustment exists. Each vanilla motorbike has its own column in the animation set (
"Jawa_05","Jawa_Bitrak":exp\anims_workspaces\DZ\anims\workspaces\player\player_main\player_main.ast:1114-1121) with its own clip set (26 and 27 distinct.anmclips; e.g.Vehicle.Jawa_05.DriverSteeringMain→…/Jawa_05/p_motorbike_01_driver_steering_pose.anm,player_main.asi:5131;Vehicle.Jawa_Bitrak.DriverSteeringMain→…/Jawa_Bitrak/p_motorbike_02_driver_steering_pose.anm,player_main.asi:5179), and hand IK takes its targetsLHandIKTarget/RHandIKTargetfrom those clips (AnimNodeIK2Target0with childSteeringBlend,Vehicles.agf:17-46), not from the motorbike P3D. There are no Arma-style config keys (driverLeftHandAnimName: 0 occurrences invehicles_singletrack,vehicles_wheeled, andbinconfig.cpp). Consequence: either you fit the handlebar/footpegs/seat of YOUR model to the contact points of MOTO1 or MOTO2 (measure them in-game on the vanilla bike before touching ergonomics), or you add a column with custom clips, which means modifyingplayer_main(the single-animation-mod wall, see references/rider-animation.md §5). (corrected 2026-09-28) There is a third way without touchingplayer_main: a child.asiwith custom clips only on your bike class (preflight above; tested in-game stationary and moving on the H2R). A handlebar of a different width does NOT fix itself.
The ten invariants that break a motorbike
Each rule must be strictly followed to prevent critical failures in the entity:
1. Flat Wheels in config, NEVER Axles block
- Symptom [UNVERIFIED, expected and not measured in-game]: simulation initialization failure when spawning the entity; exact failure mode (RPT error, inert entity, or process crash) has not been measured.
- Cause: The
simulation = "motorbike"engine reads directlyclass Wheels { class Front; class Rear; }(exp\vehicles_singletrack\DZ\vehicles\singletrack\config.cpp:88-106). Theclass Axleshierarchy belongs exclusively tosimulation = "car"/"carx". - Citation:
exp\vehicles_singletrack\DZ\vehicles\singletrack\config.cpp:88-106, 305-342. - Remedy: Remove any
Axlesblock fromSimulationModule. DeclareFrontandReardirectly insideWheels: Wheels:class Wheels: Wheels { class Front: Front { inventorySlot = "MiMoto_Wheel_1"; animDamper = "damperfront"; }; class Rear: Rear { inventorySlot = "MiMoto_Wheel_2"; animDamper = "damperback"; }; };
2. Brakes Front input=1 / Rear input=0
- Symptom: The front brake lever does not respond, or the rear pedal blocks the front wheel unexpectedly.
- Cause: On motorbikes, the front brake is bound to the handbrake channel (
input = 1) and the rear to the regular pedal brake (input = 0). The API documents it:SetBrakeis the rear brake andSetHandbrakeis the front brake (exp\scripts\scripts\3_Game\Vehicles\Motorbike.c:129-139). - Citation:
exp\vehicles_singletrack\DZ\vehicles\singletrack\config.cpp:257, 266. - Remedy: In
SimulationModule -> Brakes, defineclass Front { input = 1; ... };andclass Rear { input = 0; ... };:
The rear pressure drops fromclass Brakes { class Front { input = 1; pressureBySpeed[] = {0,0.85,10,0.7,40,0.6,60,0.5,80,0.5}; }; class Rear { input = 0; pressureBySpeed[] = {0,0.95,10,0.1,20,0.1,40,0.1,50,0.1}; }; };0.95at standstill to0.1from point10on the curve (config.cpp:267); whether this serves to prevent rear axle skids is an interpretation [UNVERIFIED].
3. "drivewheel" bone in P3D for headlight
- Symptom: The headlight light cone remains pointed rigidly forward along the chassis and does not rotate when turning the handlebars.
- Cause:
MotorbikeScript.c:1107-1109looks up the"drivewheel"bone in a hardcoded manner viaGetBoneIndex("drivewheel")to align the light cone with the front fork. - Citation:
exp\scripts\scripts\4_World\Entities\Vehicles\MotorbikeScript.c:1107-1109. - Remedy: Name the front fork and handlebar selection
"drivewheel"in the P3D geometry and inskeletonBones[]of yourmodel.cfg:int driveWheelIndex = GetBoneIndex("drivewheel"); m_LightsComponent.AttachLightOnObject("Front", GetMemoryPointPos(m_HeadLightPoint), vector.Zero, VehicleLightMode.SEGREGATED, driveWheelIndex);
4. SeatDriver and CanGetIn entry condition
- Symptom: The player receives no prompt to get on the bike (
CanGetIn()returnsfalse). - Cause: If inheriting from
Motorbike_01_ColorBase, the script requiresGetAnimationPhase("SeatDriver") == 0.0(Motorbike_01.c:97). If your model lacks the"SeatDriver"animation, the condition permanently fails. - Citation:
exp\scripts\scripts\4_World\Entities\Vehicles\InheritedMotorbikes\Motorbike_01.c:92-98. - Remedy: For motorbikes without a flip-up seat, inherit directly from
MotorbikeScriptor overrideCanGetIn()without evaluating"SeatDriver". If keeping the seat, declareSeatDriverinAnimationSourceswith initial phase0.0:class AnimationSources: AnimationSources { class SeatDriver { source = "user"; initPhase = 0.0; animPeriod = 1.0; }; };
5. Contact damage coefficients and instant death
- Symptom: The rider dies instantly upon grazing a minor obstacle at low speed.
- Cause: Each contact produces two quantities on the server (
CheckContactCache,MotorbikeScript.c:1252-1357, called insideif (g_Game.IsServer())at:743-758): vehicle damagedmg = |impulso × m_VehicleContactDamageCoef|(:1263) and the crew damage basecrewDmgBase = |impulso / masa × 500 × m_CrewContactDamageCoef|(:1264, calculates as if the motorbike weighed 500 kg). Threshold tiers are decided withdmg; only the last damages the crew, and there death depends oncrewDmgBase(DamageCrew,:1360-1412). - Citation:
exp\scripts\scripts\4_World\Entities\Vehicles\MotorbikeScript.c:1263-1264, 1301-1350, 1369-1383andexp\scripts\scripts\3_Game\constants.c:898-901. - Tiers according to vehicle
dmg(constants.c:898-901):dmg < 10(MOTORBIKES_CONTACT_DMG_MIN): ignored (:1301-1302).10 ≤ dmg < 25(MOTORBIKES_CONTACT_DMG_THRESHOLD_SMALL): damage to zone without transfer (NO_TRANSFER) and light crash sound (:1310-1320).25 ≤ dmg < 40(MOTORBIKES_CONTACT_DMG_THRESHOLD_MID):FallOver()and light sound; crew takes no damage (:1321-1331).dmg ≥ 40:DamageCrew(crewDmgBase),FallOver()and heavy sound (:1332-1344).- From
dmg ≥ 10,ProcessDirectDamageappliesdmgto the impacted zone (:1350).
- Inside
DamageCrew: ifcrewDmgBase > 80(MOTORBIKES_CONTACT_DMG_KILLCREW, strictly greater) it executescrew.SetHealth(0.0)(:1369, 1383); otherwise, it subtracts shock from 50 to 150 and health from 2 to 100, interpolated between 25 and 80 (:1387-1409). - Remedy:
m_VehicleContactDamageCoefdecides when the motorbike falls (dmg ≥ 25) and when the crew is damaged (dmg ≥ 40);m_CrewContactDamageCoefdecides if that damage kills (crewDmgBase > 80). Vanilla values:0.03/0.018(Motorbike_01.c:5-6) and0.035/0.012(Motorbike_02.c:5-6).
6. Lean angles (maxLeanAngle) and tipover (tipoverAngle)
- Symptom [UNVERIFIED, expected and not measured in-game]: the motorbike falls over on its own when accelerating or stays vertical without leaning in turns.
- Cause:
Steeringdeclares lean curves and thresholdtipoverAngle = 50.0; both are consumed by native simulation (simulation = "motorbike"), not script, so their exact effect above the threshold cannot be verified in text [UNVERIFIED]. - Citation:
exp\vehicles_singletrack\DZ\vehicles\singletrack\config.cpp:231-243. - Remedy: Copy the validated table from
Motorbike_01:class Steering { tipoverAngle = 50.0; maxLeanAngle[] = {1,0,5,8,15,10,30,17,40,22,80,30}; maxSteeringAngle[] = {1,40,5,40,15,20,30,5,40,3,80,1}; directControl[] = {0.0,1.0,5.0,1.0,30.0,0.6,60.0,0.2,80.0,0.0}; };
7. Kickstand (Kickstand) in lifecycle
- Symptom [UNVERIFIED, expected and not measured in-game]: the motorbike collapses sideways upon spawning on the ground.
- Cause: the vanilla constructor deploys the kickstand using native method
SetKickstand(1); what native physics specifically does with that value is an assumption (see digest A, SUPOSICIONES 2) [UNVERIFIED]. - Citation:
exp\scripts\scripts\4_World\Entities\Vehicles\MotorbikeScript.c:141. - Remedy: Ensure the constructor maintains
SetKickstand(1);. No retail script retracts the kickstand: the onlySetKickstand(0.0)is inOnInputwithin#ifdef DIAG_DEVELOPERand only runs with debug mode active (MotorbikeScript.c:841-843, 915). If it retracts while riding, native simulation does it [UNVERIFIED].
8. Hidden geometry at speed (speedGeomActivation / speedGeoms)
- Symptom: The motorbike collides with invisible terrain micro-bumps or is flung into the air at high speed.
- Cause: The support stand geometry collides with ground unevenness if not disabled when moving at high speed. In
Motorbike_01it activates at0.29and inMotorbike_02at0.27. - Citation:
exp\vehicles_singletrack\DZ\vehicles\singletrack\config.cpp:226-227, 729-730. - Remedy: Define in config
speedGeomActivation = 0.29;andspeedGeoms[] = {"geotohide"};, isolating kickstand geometry into the"geotohide"component of LOD Geometry.
9. Mandatory modular components (Lights, Horn, VFX)
- Symptom [UNVERIFIED, expected and not measured in-game]: failure when accessing an uninstantiated component in the lighting code path, or horn without sound and without noise for infected.
- Cause: In DayZ 1.30, lights no longer reside in
m_Headlightnor the horn inm_CarHornState; they operate in independent components. - Citation:
exp\scripts\scripts\4_World\Entities\Vehicles\MotorbikeScript.c:113, 127, 139. - Remedy: Instantiate
VehicleLightsComponent,VehicleHornComponent, andVehicleVFXComponentin the constructor, registering their corresponding profiles and SoundSets:m_LightsComponent = VehicleLightsComponent(this); m_HornComponent = VehicleHornComponent(this); InitializeParticles(); // Instancia m_VFXComponent - [EXACT] Vehicle lights are toggled with
UAToggleVehicleLightsviaToggleVehicleLightsActionInput(exp\scripts\scripts\4_World\Classes\UserActionsComponent\ActionInput.c:849-855);ActionSwitchLights.GetInputType()returns that class (ActionSwitchLights.c:16-19).UAToggleHeadlightis the headtorch (ToggleLightsActionInput,ActionInput.c:776-782). Both names exist inexp\bin\bin\constants.xml:90-91. Detail: references/actions-hud-lights-sounds.md §5.
10. Blowtorch-exclusive repair actions in build 1.30.164014
- Symptom: The player receives no action to repair engine or chassis when aiming with a wrench or epoxy putty.
- Cause: In this Experimental build, motorbike repair actions are assigned only to the blowtorch (
Blowtorch.c). Additionally,ActionRepairMotorbikeEnginewas not registered inActionConstructor.c. - Citation:
exp\scripts\scripts\4_World\Entities\ItemBase\Blowtorch.c:109, 111, 113(the only motorbike repairAddActionin all ofscripts) andexp\scripts\scripts\4_World\Classes\UserActionsComponent\ActionConstructor.c:252-260(registration of motorbike actions, withoutActionRepairMotorbikeEngine). - Remedy: If your mod requires repairing with traditional hand tools, you must bind actions to items via
modded classand insert them intoActionConstructor:modded class ActionConstructor { override void RegisterActions(TTypenameArray actions) { super.RegisterActions(actions); actions.Insert(ActionRepairMotorbikeEngine); } }
Measured lessons from LFDucati (1.30.164014, September 2026)
Measured in-game with a 157 kg Desmosedici GP16 inherited from Motorbike_02_ColorBase (DayZDiag, dedicated server and client). Each rule cites its lesson from the vault (AI/20_Knowledge/lessons-learned.md), which stores the narrative and numbers.
- Overall first gear must be short. [EXACT] With the automatic clutch, first ×
driveRatiobetween 20 and 26 starts (Motorbike_02: 25.7; LFDucati settled on 20); 6.77, that of a real MotoGP, does not move the bike: 0.05-0.1 km/h wide open and rpm stuck at two values. Decide it with a session A/B using the vanilla drivetrain as control, and measure the ratio applied by the engine (rpm·π/30 ÷ ω of the drive wheel) to confirm config loaded. On 1.30 motorbikesw0is the front: distinguish wheels by rolling radius (ω·r = v), not byWheelGetPositionLS(LL-506). - Suspension is sized to the load of each wheel. [INFERRED] The model fitting measurements is F = k (u + travelMaxDown), with the wheel hanging from the modeled axle and u linear in the damper phase (phase 0 = -travelMaxDown, phase 1 = +travelMaxUp). [EXACT] With it, in the variant resting solely on the springs the sum of forces / g yielded 157.1 kg for a 157.0 kg bike; in the product red variant the springs only carried 132.7 kg and the rest rested on the Engine box against the ground. For it to rest on the axle, travelMaxDown = F / k on each wheel (or increase k and scale damping with √(k·m)). A motorbike inheriting suspension from a lighter one inherits its sag; if the sum does not match the mass, look for what else is resting on the ground (LL-512).
- No Geometry box can touch the ground at full suspension compression. [EXACT] Each hit is a contact: damage deciding the tier is
Math.AbsInt(data[0].m_Impulse * m_VehicleContactDamageCoef)(MotorbikeScript.c:1263) and, from 25 upwards, the branches callFallOver()(:1310-1342), throwing the rider off (invariant 5). Gate before testing: lowest point of each component, minus remaining compression from rest, ≥ 5 mm; andm_VehicleContactDamageCoefscaled by mass (× m_vanilla / m_propia) so the same hit counts equally (LL-507).- (LL-507 details) [EXACT] If a
..._damper_landbox is lowered to seat the physical wheel, shrink it keeping the SAME centre - the physical wheel does not move; and log contacts server-side (Transport.OnContact: zone, point, impulse change) before tuning coefficients. (Measured in game, DayZ 1.30.164014 Exp.)
- (LL-507 details) [EXACT] If a
- The rider proxy only positions and yaws around the vertical. [EXACT] The engine applies the crew proxy frame but keeps the player vertical: a proxy tilted 20 degrees forward resulted in yaw of about 17 degrees and zero lean; a rolled proxy produced a player standing 30 cm off the bike. Crouching or leaning the rider requires animation (preflight above and
references/rider-animation.md) (LL-511, LL-509). - A hidden selection only changes material if
model.cfglists it insections[]. [EXACT] Config alone is not enough and the failure is silent: check it in the ODOL (sectional selection), not in config. Lights render by index inhiddenSelections: headlight 0, brake 1, tail light 2, and dashboard 3 (MotorbikeScript.c:114-122), and Motorbike_02 moves brake to 2 of the tail light (Motorbike_02.c:20-21); in a custom model those positions might fall onto livery sections (LL-508).
How to verify
- Offline linter before opening the game:
Run the offline validator on your addon directory:
python <KNOWLEDGE_PACK>/tools/dayz-script-validator/scripts/script_validator.py <addon_root>- Check
errorsandwarningskeys at the root of output JSON. - Return code is 0 (PASS), 1 (FAIL), or 2 (WARN).
- Always gate by
len(errors) == 0; a clean tree with minor warnings returns 2 and is valid. - Check that no broken references exist in Enforce
.c, layouts,config.cpp, or.rvmat. - Use delta comparison against the unchanged base tree to isolate errors introduced by your mod.
- Check
- In-game verification ladder (via DayZ-MCP or local Diag server):
- Step 1 (Spawn): Spawn the bike using the
world_spawntool on a local server run with-filePatching. Confirm it stays upright on the kickstand without endless oscillations or sinking into the ground. - Step 2 (Render): Check that wheels show their correct proxies, rvmat materials respond, and there are no grey panels or invisible meshes due to incorrect selection names.
- Step 3 (Get-In): Trigger
vehicle_get_in_clientapproaching from the left flank and then from the right; verify thatActionGetInTransportactivates directional animationsGetIn_LandGetIn_R. - Step 4 (Starting and Driving): Trigger
ActionStartEngineMotorbikeor theengine_settool. Listen for kickstart lever sound, verify front headlight rotates together with handlebars (drivewheel), and check that the 3rd person camera follows steering with spring damping. - Step 5 (Driving Telemetry): Monitor RPM, speed, and gear via
vehicle_telemetryortelemetry_readto verifySimulationModuleresponse. - Step 6 (Fall and Recovery): Cause a side collision or sharp turn to induce a forced tipover. Check that the player is ejected to the ground (
CrewShouldEject) and thatActionPickUpMotorbikeallows picking it up viaaction_use.
Measured correction (2026-09-19, LFDucati; citations re-read in
DayZ_MCP_devon that date): this ladder CANNOT be run today with DayZ-MCP on Experimental 1.30. (a) The approved launcher only starts Stable: the executable is hardcoded intools\native-launchers\dayz-test-v1\worker-runtime.json(all 10 projects point to...\common\DayZ\DayZDiag_x64.exe) and the daemon only accepts<DAYZ_GAME_PATH>\DayZDiag_x64.exe, a global setting (tools\dayz_mcp\daemon.py:552-557,process_lifecycle.py:1782-1793). (b) The@DayZ_MCPaddon is unaware ofMotorbike(0 occurrences inaddon\): control and telemetry cast toCarScript(addon\scripts\5_Mission\MCPClientBridge.c:1191, 2812-2826), soengine_set,vehicle_control, and the engine portion ofvehicle_telemetrydo not see a motorbike, which in 1.30 inherits fromTransportand not fromCarScript. (c) There is no verb to read player bones (rider pose). Approach used while 1.30 is Experimental: custom diagnostic addon with scenario in amodded MissionServerbehind a command line parameter,LFD_…output inscript_*.log, two.batfiles pointing toDayZ Exp\DayZDiag_x64.exelaunched viacmd /c startand a Python driver awaiting log markers (kit: LFDucati probe kit, not published). Seating the player from the server produces crew withoutHumanCommandVehicleon client (skilldayz-test-ingame§SP-295): serves to measure pose on server, not to validate actions or HUD. - Step 1 (Spawn): Spawn the bike using the
- What to look for in the RPT file (
server-profiles/orclient-profiles/) [UNVERIFIED: message texts are illustrative, not measured; search by symbol]:Cannot load surface infoorUndefined sound shader: missing SoundSets or particles inCfgSurfaces.AnimationSource ... not found: missing source registration in configAnimationSources.Bone 'drivewheel' not found: missing bone in front fork of P3D model.- Spawn failure with uninitialized simulation: check if an
Axlesblock was configured instead ofWheels(exact failure mode not measured).
Status of this build (WIP Experimental 1.30.164014)
Work-in-progress aspects detected in Bohemia code that could change before Stable:
- Provisional unconsciousness ejection: In
exp\scripts\scripts\4_World\Entities\DayZPlayerImplement.c:2452-2458, motorbike tipover triggerseModifiers.MDF_UNCONSCIOUSNESSbecause the native ragdoll command was not finished in time. Bohemia is expected to replace this with a dedicated ragdoll command. - Orphaned engine repair action:
ActionRepairMotorbikeEngine.cexists on disk, but is not inserted intoActionConstructor.c:252-260nor bound to hand tools. OnlyActionRepairMotorbikeEngineWithBlowtorchoperates via blowtorch. - Undefined rvmat material properties:
MotorbikeScript.c:114-122registers selections whose material is read withConfigGetString(VehicleLightsComponent.c:77) from properties such asfrontReflectorMatOn, whichvehicles_singletrack\config.cppdoes not declare (cars do, e.g.vehicles_wheeled\DZ\vehicles\wheeled\config.cpp:895). - Displaced audio definitions:
exp\sounds_vehicles\DZ\sounds\vehicles\config.cppcontains onlyCfgPatches. All motorbike SoundSets reside inexp\sounds_hpp\DZ\sounds\hpp\config.cpp:98179-98909, and their SoundShaders in:59253-59918. - Alignment with 1.29 community guides: Many vehicle modding guides assumed methods such as
CreateFrontLight,CarPartsHealthCheck, or variables such asdata[0].impulse. In 1.30 these signatures have been completely replaced or encapsulated (see references/vehicle-1.30-refactor.md). - Vehicle lights input vs headtorch:
ActionSwitchLightsbindsUAToggleVehicleLights, notUAToggleHeadlight. Aninputs.xmldeclaring onlyUAToggleHeadlightwill not switch off the headlight. See references/actions-hud-lights-sounds.md §5.
Cite-then-verify
Every technical claim in this skill includes the source file path and exact line range relative to extraction root <extract-root>/1.30.164014/.
- If you need to verify a citation, open the corresponding file at that exact line and check the symbol.
- Last full audit: 2026-09-19. All
file:linecitations,[EXACT]blocks (byte-for-byte identical), andreferences/sources.mdcounts were verified against the extraction; displaced citations and claims regarding contact damage, kickstand (DIAG only), default battery,Jawa_05clips, and sound ranges were corrected. Previous copies:*.bak-20260919-pre-audit. Still unverified: anything depending on native simulation (curve units, effect oftipoverAngle). - When Bohemia publishes a new Experimental build or Stable version of DayZ 1.30, DO NOT overwrite the current extraction directory. Extract the new version into a sibling directory identified by its build number (for example
<extract-root>/1.30.XXXXXX/), run a textual diff against1.30.164014, and update shifted line numbers.
References Index
- references/config-contract.md: Open to copy literal [EXACT]
config.cppblocks (Crew, SimulationModule, DamageSystem, Wheels, AnimationSources, speedGeoms) and view the complete motorbike parameter table. - references/script-api.md: Open to view
proto nativesignatures fromMotorbike.c, stability callbacks,MotorbikeScriptlifecycle, and differences fromCarScript. - references/actions-hud-lights-sounds.md: Open to implement or fix kickstart actions, ground pickup,
MotorBikeHudinstrumentation, light/horn components, and exactsounds_hppSoundSets. Includes §5:UAToggleVehicleLightsvsUAToggleHeadlight. - references/rider-animation.md: Open when configuring rider poses, handlebar IK,
Vehicles.agfgraph nodes (MotorBikeSTM), directional animations, or 3rd person camera. - references/vehicle-1.30-refactor.md: Open when migrating a car mod from 1.29 to 1.30; contains deprecated method list, component migration, and 1.29 guide myth table.
- references/forward-contract.md: Open for the full production checklist before packaging a new motorbike and to know what to measure on the P3D model.
- references/sources.md: Open to audit extracted sources, verify total line count of each cited file, and understand audio PBO layout.
- references/vanilla-p3d-anatomy.md (added 2026-09-19): Open for the REAL P3D/model.cfg anatomy of
Motorbike_01andMotorbike_02read from ODOL v56 binaries — mass and center of mass, LODs with resolution and faces, skeleton with parents, all 44/60 animations with their source, angles and axes, LOD Memory points with coordinates, proxies, selections, and named properties. It is the parity benchmark for a new motorbike.parsedstate: read its header before citing any number.
WHAT THIS SKILL COULD NOT VERIFY
- Binary 3D models (
.p3d): Exact face selections, memory points not cited in script, and collision LODs ofmotorbike_01.p3dandmotorbike_02.p3dcannot be inspected in text; they must be measured withdayz-p3d-auditor P3D analysis tools.- (added 2026-09-19, LFDucati) 1.30 P3Ds are ODOL v56 (1.29 = v54) and the external ODOL->MLOD converter only reads v54: today they CANNOT be measured without patching the reader; see the §Preflight of that skill (an unpublished reader patch is in progress). Verified via binary search in
Motorbike_01.p3d:drivewheel,damper_1,damperfront,kickstand,geotohide,pos_driver,light_1_1,refill, and 49proxy:names exist. - (added 2026-09-19; corrected 2026-09-19) Corrected errata: the Motorbike_02 column in table §6 of references/config-contract.md (lines 512-535) had incorrect values (tipover, steering/lean tables, torque curve, idle, redline, ratios); it now matches
exp\vehicles_singletrack\DZ\vehicles\singletrack\config.cpp:736-738, 786, 791, 794, 806. Motorbike_01 values were correct, but there were shifted line citations in both columns (Steering, torque, ratios, caster, and scripts), also corrected. Previous copy:references/config-contract.md.bak-20260919.
- (added 2026-09-19, LFDucati) 1.30 P3Ds are ODOL v56 (1.29 = v54) and the external ODOL->MLOD converter only reads v54: today they CANNOT be measured without patching the reader; see the §Preflight of that skill (an unpublished reader patch is in progress). Verified via binary search in
- Vanilla motorbike model.cfg file: Not included in plain text inside extracted Bohemia PBOs. Bone names are only known when explicitly referenced in script (
"drivewheel"). - Internal C++ physics calculations: The gyroscopic solver, internal stability algorithm, and Enfusion dynamic balance calculation reside compiled in
DayZDiag_x64.exeand are not accessible via Enforce Script. - In-game tuning of tyre lateral friction: Wheel friction tables (
tyreLateralFriction,tyreLongitudinalFriction) are verified in config, but grip feel on wet curves or gravel requires dynamic in-game testing.
FIN-SKILL-DRAFT
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

