{
 "id": "weapon.firearm.launcher/riot-lbd-launcher",
 "version": 1,
 "name": "40 mm LBD less-lethal launcher",
 "summary": "40 mm LBD less-lethal launcher, 0.72 m long, held in the right hand.",
 "tags": [
  "40",
  "40mm",
  "firearm",
  "launcher",
  "lbd",
  "less",
  "lethal",
  "mm",
  "paves",
  "police",
  "riot",
  "sous-les-paves",
  "weapon"
 ],
 "style": "realistic",
 "status": "approved",
 "frame": {
  "contract": "weapon/grip-origin-muzzle-minus-z",
  "up": "+Y",
  "unit": "m",
  "front": "-Z (muzzle)"
 },
 "size": {
  "measured_m": {
   "w": 0.056,
   "l": 0.72,
   "h": 0.208
  },
  "source": "measured",
  "scale_to_class": 1.0
 },
 "bounds": {
  "geometry": {
   "min": [
    -0.028,
    -0.088,
    -0.5
   ],
   "max": [
    0.028,
    0.12,
    0.22
   ]
  },
  "footprint": {
   "kind": "rect",
   "minX": -0.028,
   "maxX": 0.028,
   "minZ": -0.5,
   "maxZ": 0.22,
   "source": "measured"
  },
  "collider": {
   "parts": [
    {
     "type": "box",
     "x": 0.0,
     "y": 0.016,
     "z": -0.14,
     "hx": 0.028,
     "hy": 0.104,
     "hz": 0.36
    }
   ],
   "source": "guessed"
  }
 },
 "placement": {
  "role": "cast-attachment",
  "notes": "Grip at origin, muzzle toward -Z (z down to -0.50 m); library copy turned 180 deg about Y from the game file.",
  "source": "authored"
 },
 "sockets": [
  {
   "name": "attach",
   "role": "attach",
   "parent": "hand_r",
   "pos": [
    0,
    0.09,
    0.04
   ],
   "rot": [
    0.707108,
    0.707105,
    0.0,
    0.0
   ],
   "manifest_euler_xyz": [
    0,
    0,
    -1.5708
   ],
   "skeleton": "ual",
   "source": "authored",
   "note": "SOUS LES PAVES (Paris riot game, genres/riot) cast/manifest.json gear.lbd: bone hand_r, offset and Euler XYZ rotation in bone space; rot = game rot composed with the 180 deg Y turn of the library copy (pose in the hand unchanged)"
  },
  {
   "name": "muzzle",
   "role": "muzzle",
   "parent": null,
   "pos": [
    0.0,
    0.016,
    -0.5
   ],
   "rot": null,
   "source": "measured",
   "note": "centre of the -Z end of the bounding box (no muzzle empty in the file)"
  }
 ],
 "nodes": {
  "all": [
   "lbd"
  ]
 },
 "paint": null,
 "render": {
  "tris": 108,
  "verts": 194,
  "materials": 1,
  "draw_calls": 1,
  "textures": [],
  "gpu_mb_decoded": 0.0,
  "bytes": 8732,
  "codec": "none",
  "extensions": []
 },
 "rig": null,
 "animations": [],
 "gameplay": null,
 "techniques": [
  "flat-colour"
 ],
 "provenance": {
  "author": "gemini-4-argon via Antigravity (Blender)",
  "source": "jobs/riot-lbd-launcher-v1",
  "kit": "riot-kit",
  "job": "riot-lbd-launcher-v1",
  "feedback": null,
  "imported": "2026-10-19",
  "file_origin": "~/forge-build/forge-assets-paves/jobs/riot-lbd-launcher-v1/riot-lbd-launcher.glb",
  "origin": "paves-root/genres/riot/assets/cast/gear/lbd.glb",
  "game": "sous-les-paves",
  "library_copy": "rotated 180 deg about Y (gltf-transform) from the game file so the muzzle points -Z"
 },
 "licence": {
  "kind": "owned",
  "game_use": true,
  "raw_redistribute": false,
  "evidence": "Original model drawn by Gemini 4 Argon in Blender via the Antigravity CLI on 18 Oct 2026 for SOUS LES PAVES (Paris riot game, genres/riot); owned by Forge. No image textures, no third-party artwork. Source: paves-root/genres/riot/assets/cast/gear/lbd.glb."
 },
 "quality": {
  "gates": "pass: 0 MB of 24 MB texture budget, 108 tris",
  "judge": null
 },
 "files": {
  "glb": "sha256:1ebd6adbf117e0df16db141b5b2b10d39b004f0411f37e814f86d9111029f9c2"
 },
 "deps": [],
 "release": "sha256:6ee573727d7aa80f9a9bfea8b848ae86a32970b7930b51e38edf7e700ea9e42b",
 "visual": {
  "n": 4,
  "description": "Small handheld weapon prop, blocky low-poly rifle or carbine with a dark grey receiver, barrel, pistol grip, top sight, and a tan/yellow rectangular buttstock.",
  "vision_model": "gemini-4 via agy4",
  "vision_batch_usage": {
   "prompt_tokens": 32241,
   "completion_tokens": 1178,
   "cache_read_tokens": 19866,
   "status": "SUCCESS"
  },
  "id": "weapon.firearm.launcher/riot-lbd-launcher",
  "release": "sha256:6ee573727d7aa80f9a9bfea8b848ae86a32970b7930b51e38edf7e700ea9e42b",
  "thumbnail_sha256": "c5caa61faf4073fa912777183afcd7b74f0c1d38247c58ffe09ef16eeeecbc0d",
  "safety": {
   "model": "jev",
   "probabilities": {
    "person": 0.01,
    "artwork": 0.04
   },
   "blocked": false,
   "threshold": 0.35,
   "source": "authored"
  }
 }
}
