@adatechnology/game-weapons 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/calibers.json","../src/data/weapons.json","../src/locale.ts","../src/rng.ts","../src/weapon.ts","../src/arsenal.ts"],"sourcesContent":["[\n {\n \"id\": \"22lr\",\n \"label\": \".22 LR\",\n \"diameter\": 5.7,\n \"bulletGrams\": 2.6,\n \"muzzleSpeed\": 350,\n \"dragPer100m\": 0.15,\n \"kind\": \"rimfire\"\n },\n {\n \"id\": \"9x19\",\n \"label\": \"9×19 mm\",\n \"diameter\": 9,\n \"bulletGrams\": 7.5,\n \"muzzleSpeed\": 365,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"38spl\",\n \"label\": \".38 Special\",\n \"diameter\": 9.1,\n \"bulletGrams\": 10.2,\n \"muzzleSpeed\": 247,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"357mag\",\n \"label\": \".357 Magnum\",\n \"diameter\": 9.1,\n \"bulletGrams\": 10.2,\n \"muzzleSpeed\": 396,\n \"dragPer100m\": 0.18,\n \"kind\": \"hp\"\n },\n {\n \"id\": \"40sw\",\n \"label\": \".40 S&W\",\n \"diameter\": 10.2,\n \"bulletGrams\": 11.7,\n \"muzzleSpeed\": 310,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"45acp\",\n \"label\": \".45 ACP\",\n \"diameter\": 11.5,\n \"bulletGrams\": 14.9,\n \"muzzleSpeed\": 254,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"380acp\",\n \"label\": \".380 ACP\",\n \"diameter\": 9,\n \"bulletGrams\": 6.2,\n \"muzzleSpeed\": 295,\n \"dragPer100m\": 0.22,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"5_56x45\",\n \"label\": \"5.56×45 mm\",\n \"diameter\": 5.7,\n \"bulletGrams\": 4,\n \"muzzleSpeed\": 935,\n \"dragPer100m\": 0.1,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"7_62x39\",\n \"label\": \"7.62×39 mm\",\n \"diameter\": 7.9,\n \"bulletGrams\": 8,\n \"muzzleSpeed\": 725,\n \"dragPer100m\": 0.1,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"7_62x51\",\n \"label\": \"7.62×51 mm (.308)\",\n \"diameter\": 7.8,\n \"bulletGrams\": 9.7,\n \"muzzleSpeed\": 850,\n \"dragPer100m\": 0.08,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"338lapua\",\n \"label\": \".338 Lapua Magnum\",\n \"diameter\": 8.6,\n \"bulletGrams\": 16.2,\n \"muzzleSpeed\": 903,\n \"dragPer100m\": 0.06,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"50bmg\",\n \"label\": \".50 BMG\",\n \"diameter\": 12.7,\n \"bulletGrams\": 42,\n \"muzzleSpeed\": 925,\n \"dragPer100m\": 0.05,\n \"kind\": \"ap\"\n },\n {\n \"id\": \"12ga_00buck\",\n \"label\": \"12 ga 00 buck\",\n \"diameter\": 8.4,\n \"bulletGrams\": 3.5,\n \"muzzleSpeed\": 414,\n \"pellets\": 9,\n \"dragPer100m\": 0.45,\n \"kind\": \"buck\"\n },\n {\n \"id\": \"12ga_slug\",\n \"label\": \"12 ga slug\",\n \"diameter\": 18.5,\n \"bulletGrams\": 28,\n \"muzzleSpeed\": 463,\n \"dragPer100m\": 0.3,\n \"kind\": \"slug\"\n },\n {\n \"id\": \"12ga_birdshot\",\n \"label\": \"12 ga birdshot\",\n \"diameter\": 2.4,\n \"bulletGrams\": 0.2,\n \"muzzleSpeed\": 400,\n \"pellets\": 90,\n \"dragPer100m\": 0.6,\n \"kind\": \"birdshot\"\n },\n {\n \"id\": \"20ga_buck\",\n \"label\": \"20 ga buck\",\n \"diameter\": 6.9,\n \"bulletGrams\": 1.3,\n \"muzzleSpeed\": 400,\n \"pellets\": 20,\n \"dragPer100m\": 0.5,\n \"kind\": \"buck\"\n },\n {\n \"id\": \"arrow\",\n \"label\": \"Arrow (compound bow)\",\n \"diameter\": 7,\n \"bulletGrams\": 25,\n \"muzzleSpeed\": 90,\n \"dragPer100m\": 0.12,\n \"kind\": \"arrow\"\n },\n {\n \"id\": \"crossbow_bolt\",\n \"label\": \"Crossbow bolt\",\n \"diameter\": 8,\n \"bulletGrams\": 20,\n \"muzzleSpeed\": 122,\n \"dragPer100m\": 0.12,\n \"kind\": \"bolt\"\n }\n]\n","[\n {\n \"id\": \"hand\",\n \"name\": \"Hand\",\n \"category\": \"hand\",\n \"action\": {\n \"kind\": \"hand\",\n \"reach\": 2\n },\n \"mass\": 0,\n \"tags\": [\n \"grab\"\n ]\n },\n {\n \"id\": \"kick\",\n \"name\": \"Kick\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 250,\n \"radius\": 0.08,\n \"reach\": 1.1,\n \"rpm\": 60,\n \"noise\": 8\n },\n \"mass\": 0\n },\n {\n \"id\": \"shove\",\n \"name\": \"Shove\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 80,\n \"radius\": 0.1,\n \"reach\": 1.5,\n \"rpm\": 90,\n \"noise\": 5\n },\n \"mass\": 0\n },\n {\n \"id\": \"pistol_9mm\",\n \"name\": \"9 mm service pistol\",\n \"category\": \"pistol\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"9x19\",\n \"rpm\": 300,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 15,\n \"reload\": 2,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.6,\n \"recoveryDegPerS\": 4,\n \"recoil\": [\n 1.2,\n 0.4\n ],\n \"range\": 50,\n \"noise\": 150\n },\n \"mass\": 0.9,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"pistol_45\",\n \"name\": \".45 ACP pistol\",\n \"category\": \"pistol\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"45acp\",\n \"rpm\": 280,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 8,\n \"reload\": 2.2,\n \"barrel\": 1,\n \"spreadDeg\": 1.1,\n \"bloomDeg\": 0.8,\n \"recoveryDegPerS\": 4,\n \"recoil\": [\n 1.8,\n 0.6\n ],\n \"range\": 50,\n \"noise\": 160\n },\n \"mass\": 1.1,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"pistol_22\",\n \"name\": \".22 LR pistol\",\n \"category\": \"pistol\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"22lr\",\n \"rpm\": 360,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 10,\n \"reload\": 1.8,\n \"barrel\": 1,\n \"spreadDeg\": 0.9,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 5,\n \"recoil\": [\n 0.5,\n 0.2\n ],\n \"range\": 40,\n \"noise\": 90\n },\n \"mass\": 0.7,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"revolver_357\",\n \"name\": \".357 Magnum revolver\",\n \"category\": \"revolver\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"357mag\",\n \"rpm\": 150,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 6,\n \"reload\": 4,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.8,\n \"bloomDeg\": 1,\n \"recoveryDegPerS\": 3,\n \"recoil\": [\n 3,\n 0.9\n ],\n \"range\": 60,\n \"noise\": 220\n },\n \"mass\": 1.2,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"revolver_38\",\n \"name\": \".38 Special revolver\",\n \"category\": \"revolver\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"38spl\",\n \"rpm\": 160,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 6,\n \"reload\": 3.8,\n \"barrel\": 0.95,\n \"spreadDeg\": 0.9,\n \"bloomDeg\": 0.7,\n \"recoveryDegPerS\": 3.5,\n \"recoil\": [\n 1.6,\n 0.5\n ],\n \"range\": 45,\n \"noise\": 170\n },\n \"mass\": 0.9,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"smg_9mm\",\n \"name\": \"9 mm submachine gun\",\n \"category\": \"smg\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"9x19\",\n \"rpm\": 800,\n \"modes\": [\n \"auto\",\n \"burst\",\n \"semi\"\n ],\n \"burst\": 3,\n \"magazine\": 30,\n \"reload\": 2.4,\n \"barrel\": 1.1,\n \"spreadDeg\": 1.5,\n \"bloomDeg\": 0.35,\n \"recoveryDegPerS\": 6,\n \"recoil\": [\n 0.9,\n 0.5\n ],\n \"range\": 80,\n \"noise\": 180\n },\n \"mass\": 2.6,\n \"tags\": [\n \"automatic\"\n ]\n },\n {\n \"id\": \"carbine_22\",\n \"name\": \".22 LR carbine\",\n \"category\": \"carbine\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"22lr\",\n \"rpm\": 300,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 10,\n \"reload\": 2.2,\n \"barrel\": 1.4,\n \"spreadDeg\": 0.5,\n \"bloomDeg\": 0.15,\n \"recoveryDegPerS\": 5,\n \"recoil\": [\n 0.4,\n 0.15\n ],\n \"range\": 80,\n \"noise\": 100\n },\n \"mass\": 2.4,\n \"tags\": [\n \"small_game\"\n ]\n },\n {\n \"id\": \"rifle_5_56\",\n \"name\": \"5.56 mm assault rifle\",\n \"category\": \"rifle\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"5_56x45\",\n \"rpm\": 750,\n \"modes\": [\n \"auto\",\n \"burst\",\n \"semi\"\n ],\n \"burst\": 3,\n \"magazine\": 30,\n \"reload\": 2.5,\n \"barrel\": 1,\n \"spreadDeg\": 0.6,\n \"bloomDeg\": 0.25,\n \"recoveryDegPerS\": 5,\n \"recoil\": [\n 1,\n 0.6\n ],\n \"range\": 400,\n \"noise\": 300\n },\n \"mass\": 3.4,\n \"tags\": [\n \"automatic\"\n ]\n },\n {\n \"id\": \"rifle_7_62x39\",\n \"name\": \"7.62×39 mm assault rifle\",\n \"category\": \"rifle\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"7_62x39\",\n \"rpm\": 600,\n \"modes\": [\n \"auto\",\n \"semi\"\n ],\n \"magazine\": 30,\n \"reload\": 2.8,\n \"barrel\": 1,\n \"spreadDeg\": 0.8,\n \"bloomDeg\": 0.35,\n \"recoveryDegPerS\": 4.5,\n \"recoil\": [\n 1.5,\n 0.8\n ],\n \"range\": 350,\n \"noise\": 320\n },\n \"mass\": 3.8,\n \"tags\": [\n \"automatic\"\n ]\n },\n {\n \"id\": \"rifle_bolt_308\",\n \"name\": \".308 bolt-action rifle\",\n \"category\": \"rifle\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"7_62x51\",\n \"rpm\": 40,\n \"modes\": [\n \"bolt\"\n ],\n \"magazine\": 5,\n \"reload\": 3.5,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.25,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 3,\n \"recoil\": [\n 3,\n 0.5\n ],\n \"range\": 800,\n \"noise\": 350\n },\n \"mass\": 4,\n \"tags\": [\n \"hunting\"\n ]\n },\n {\n \"id\": \"sniper_338\",\n \"name\": \".338 Lapua sniper rifle\",\n \"category\": \"sniper\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"338lapua\",\n \"rpm\": 35,\n \"modes\": [\n \"bolt\"\n ],\n \"magazine\": 5,\n \"reload\": 4,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.1,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 2.5,\n \"recoil\": [\n 4.5,\n 0.7\n ],\n \"range\": 1500,\n \"noise\": 450\n },\n \"mass\": 6.5,\n \"tags\": [\n \"long_range\"\n ]\n },\n {\n \"id\": \"anti_materiel_50\",\n \"name\": \".50 BMG anti-materiel rifle\",\n \"category\": \"sniper\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"50bmg\",\n \"rpm\": 30,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 10,\n \"reload\": 4.5,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.15,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 2,\n \"recoil\": [\n 7,\n 1.2\n ],\n \"range\": 1800,\n \"noise\": 600\n },\n \"mass\": 12.5,\n \"tags\": [\n \"long_range\",\n \"heavy\"\n ]\n },\n {\n \"id\": \"shotgun_pump_12\",\n \"name\": \"12 gauge pump-action shotgun\",\n \"category\": \"shotgun\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"12ga_00buck\",\n \"rpm\": 60,\n \"modes\": [\n \"pump\"\n ],\n \"magazine\": 6,\n \"reload\": 0.6,\n \"perRound\": true,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 3,\n \"pelletSpreadDeg\": 3,\n \"recoil\": [\n 4,\n 1\n ],\n \"range\": 40,\n \"noise\": 400\n },\n \"mass\": 3.2,\n \"tags\": [\n \"shotgun\"\n ]\n },\n {\n \"id\": \"shotgun_double_12\",\n \"name\": \"12 gauge double-barrel shotgun\",\n \"category\": \"shotgun\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"12ga_00buck\",\n \"rpm\": 120,\n \"modes\": [\n \"break\"\n ],\n \"magazine\": 2,\n \"reload\": 3.5,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 3,\n \"pelletSpreadDeg\": 3,\n \"recoil\": [\n 4.5,\n 1.2\n ],\n \"range\": 35,\n \"noise\": 400\n },\n \"mass\": 3,\n \"tags\": [\n \"shotgun\"\n ]\n },\n {\n \"id\": \"shotgun_semi_12\",\n \"name\": \"12 gauge semi-automatic shotgun\",\n \"category\": \"shotgun\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"12ga_00buck\",\n \"rpm\": 180,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 5,\n \"reload\": 0.7,\n \"perRound\": true,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 3,\n \"pelletSpreadDeg\": 3,\n \"recoil\": [\n 3.4,\n 1\n ],\n \"range\": 40,\n \"noise\": 400\n },\n \"mass\": 3.4,\n \"tags\": [\n \"shotgun\"\n ]\n },\n {\n \"id\": \"bow_compound\",\n \"name\": \"Compound bow\",\n \"category\": \"bow\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"arrow\",\n \"rpm\": 20,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 1,\n \"reload\": 1.5,\n \"barrel\": 1,\n \"spreadDeg\": 0.4,\n \"bloomDeg\": 0.4,\n \"recoveryDegPerS\": 2,\n \"recoil\": [\n 0.3,\n 0.1\n ],\n \"range\": 60,\n \"noise\": 20\n },\n \"mass\": 1.8,\n \"tags\": [\n \"silent\"\n ]\n },\n {\n \"id\": \"crossbow\",\n \"name\": \"Crossbow\",\n \"category\": \"crossbow\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"crossbow_bolt\",\n \"rpm\": 8,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 1,\n \"reload\": 4,\n \"barrel\": 1,\n \"spreadDeg\": 0.3,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 2,\n \"recoil\": [\n 0.5,\n 0.1\n ],\n \"range\": 70,\n \"noise\": 25\n },\n \"mass\": 3,\n \"tags\": [\n \"silent\"\n ]\n },\n {\n \"id\": \"hammer\",\n \"name\": \"Hammer\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 60,\n \"radius\": 0.08,\n \"reach\": 0.7,\n \"rpm\": 70,\n \"noise\": 6\n },\n \"mass\": 1\n },\n {\n \"id\": \"sledgehammer\",\n \"name\": \"Sledgehammer\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 300,\n \"radius\": 0.15,\n \"reach\": 1.1,\n \"rpm\": 30,\n \"noise\": 8\n },\n \"mass\": 5.5,\n \"tags\": [\n \"heavy\"\n ]\n },\n {\n \"id\": \"baseball_bat\",\n \"name\": \"Baseball bat\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 150,\n \"radius\": 0.1,\n \"reach\": 1,\n \"rpm\": 60,\n \"noise\": 7\n },\n \"mass\": 0.9\n },\n {\n \"id\": \"crowbar\",\n \"name\": \"Crowbar\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 120,\n \"radius\": 0.08,\n \"reach\": 0.9,\n \"rpm\": 60,\n \"noise\": 7\n },\n \"mass\": 2,\n \"tags\": [\n \"pry\"\n ]\n },\n {\n \"id\": \"machete\",\n \"name\": \"Machete\",\n \"category\": \"melee_blade\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"slash\",\n \"energy\": 140,\n \"radius\": 0.06,\n \"reach\": 0.8,\n \"rpm\": 80,\n \"noise\": 6\n },\n \"mass\": 0.8\n },\n {\n \"id\": \"axe\",\n \"name\": \"Axe\",\n \"category\": \"melee_blade\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"slash\",\n \"energy\": 250,\n \"radius\": 0.08,\n \"reach\": 0.9,\n \"rpm\": 45,\n \"noise\": 8\n },\n \"mass\": 1.6\n },\n {\n \"id\": \"knife\",\n \"name\": \"Knife\",\n \"category\": \"melee_blade\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"slash\",\n \"energy\": 40,\n \"radius\": 0.03,\n \"reach\": 0.4,\n \"rpm\": 100,\n \"noise\": 5\n },\n \"mass\": 0.2\n },\n {\n \"id\": \"fists\",\n \"name\": \"Fists\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 25,\n \"radius\": 0.1,\n \"reach\": 0.6,\n \"rpm\": 120,\n \"noise\": 5\n },\n \"mass\": 0\n },\n {\n \"id\": \"lighter\",\n \"name\": \"Lighter\",\n \"category\": \"flame\",\n \"action\": {\n \"kind\": \"flame\",\n \"temperature\": 400,\n \"radius\": 0.03,\n \"range\": 0.15,\n \"fuelPerSecond\": 0.02,\n \"fuel\": 60,\n \"noise\": 0\n },\n \"mass\": 0.05,\n \"tags\": [\n \"fire\"\n ]\n },\n {\n \"id\": \"flamethrower\",\n \"name\": \"Flamethrower\",\n \"category\": \"flame\",\n \"action\": {\n \"kind\": \"flame\",\n \"temperature\": 900,\n \"radius\": 0.6,\n \"range\": 6,\n \"fuelPerSecond\": 1,\n \"fuel\": 20,\n \"cone\": true,\n \"noise\": 20\n },\n \"mass\": 15,\n \"tags\": [\n \"fire\"\n ]\n },\n {\n \"id\": \"molotov\",\n \"name\": \"Molotov cocktail\",\n \"category\": \"throwable\",\n \"action\": {\n \"kind\": \"throwable\",\n \"energy\": 500,\n \"radius\": 1.5,\n \"fuse\": 0,\n \"throwSpeed\": 12,\n \"fire\": {\n \"temperature\": 700,\n \"radius\": 1.5,\n \"seconds\": 12\n },\n \"noise\": 60\n },\n \"mass\": 0.8,\n \"tags\": [\n \"fire\",\n \"improvised\"\n ]\n },\n {\n \"id\": \"cutting_torch\",\n \"name\": \"Oxy-fuel cutting torch\",\n \"category\": \"heat\",\n \"action\": {\n \"kind\": \"heat\",\n \"temperature\": 3000,\n \"radius\": 0.02,\n \"range\": 0.25,\n \"fuelPerSecond\": 0.05,\n \"fuel\": 30,\n \"noise\": 15\n },\n \"mass\": 4,\n \"tags\": [\n \"fire\",\n \"cutting\"\n ]\n },\n {\n \"id\": \"blowtorch\",\n \"name\": \"Blowtorch\",\n \"category\": \"heat\",\n \"action\": {\n \"kind\": \"heat\",\n \"temperature\": 1300,\n \"radius\": 0.04,\n \"range\": 0.3,\n \"fuelPerSecond\": 0.04,\n \"fuel\": 30,\n \"noise\": 10\n },\n \"mass\": 0.6,\n \"tags\": [\n \"fire\"\n ]\n },\n {\n \"id\": \"frag_grenade\",\n \"name\": \"Fragmentation grenade\",\n \"category\": \"throwable\",\n \"action\": {\n \"kind\": \"throwable\",\n \"energy\": 200000,\n \"radius\": 6,\n \"fuse\": 4,\n \"throwSpeed\": 15,\n \"noise\": 400\n },\n \"mass\": 0.45,\n \"tags\": [\n \"explosive\"\n ]\n },\n {\n \"id\": \"pipe_bomb\",\n \"name\": \"Pipe bomb\",\n \"category\": \"throwable\",\n \"action\": {\n \"kind\": \"throwable\",\n \"energy\": 100000,\n \"radius\": 4,\n \"fuse\": 3,\n \"throwSpeed\": 13,\n \"noise\": 350\n },\n \"mass\": 0.7,\n \"tags\": [\n \"explosive\",\n \"improvised\"\n ]\n },\n {\n \"id\": \"screwdriver\",\n \"name\": \"Screwdriver\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"screwdriver\",\n \"reach\": 0.5,\n \"noise\": 5\n },\n \"mass\": 0.15\n },\n {\n \"id\": \"wrench\",\n \"name\": \"Wrench\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"wrench\",\n \"reach\": 0.6,\n \"noise\": 6\n },\n \"mass\": 0.5\n },\n {\n \"id\": \"pry_bar\",\n \"name\": \"Pry bar\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"pry_bar\",\n \"reach\": 0.8,\n \"noise\": 8\n },\n \"mass\": 0.8\n },\n {\n \"id\": \"hacksaw\",\n \"name\": \"Hacksaw\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"saw\",\n \"reach\": 0.7,\n \"noise\": 10\n },\n \"mass\": 0.6\n },\n {\n \"id\": \"utility_knife\",\n \"name\": \"Utility knife\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"knife\",\n \"reach\": 0.3,\n \"noise\": 3\n },\n \"mass\": 0.1\n },\n {\n \"id\": \"claw_hammer\",\n \"name\": \"Claw hammer\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"hammer\",\n \"reach\": 0.5,\n \"noise\": 8\n },\n \"mass\": 0.7\n },\n {\n \"id\": \"extinguisher\",\n \"name\": \"Fire extinguisher\",\n \"category\": \"extinguisher\",\n \"action\": {\n \"kind\": \"extinguisher\",\n \"range\": 4,\n \"coolC\": 300,\n \"charge\": 12,\n \"noise\": 25\n },\n \"mass\": 5,\n \"tags\": [\n \"safety\"\n ]\n }\n]\n","/** Locales shipped with the package. Unknown locales fall back to `en`. */\nexport type WeaponsLocale = 'en' | 'pt-BR'\n\nexport interface WeaponsStrings {\n /** Display name of each weapon id. */\n weapons: Record<string, string>\n /** Display name of each fire mode. */\n modes: Record<string, string>\n /** Display name of each weapon category. */\n categories: Record<string, string>\n}\n\nconst modesEn = { single: 'single action', semi: 'semi-automatic', burst: 'burst', auto: 'automatic', pump: 'pump action', bolt: 'bolt action', lever: 'lever action', break: 'break action' }\nconst categoriesEn = {\n pistol: 'pistol', revolver: 'revolver', smg: 'submachine gun', rifle: 'rifle', carbine: 'carbine', sniper: 'sniper rifle', shotgun: 'shotgun',\n bow: 'bow', crossbow: 'crossbow', melee_blunt: 'blunt melee', melee_blade: 'bladed melee', flame: 'flame', heat: 'heat', throwable: 'throwable',\n tool: 'tool', extinguisher: 'extinguisher', hand: 'hand',\n}\n\nexport const locales: Record<WeaponsLocale, WeaponsStrings> = {\n en: {\n weapons: {\n hand: 'Hand', kick: 'Kick', shove: 'Shove', pistol_9mm: '9 mm service pistol', pistol_45: '.45 ACP pistol', pistol_22: '.22 LR pistol', revolver_357: '.357 Magnum revolver',\n revolver_38: '.38 Special revolver', smg_9mm: '9 mm submachine gun', carbine_22: '.22 LR carbine', rifle_5_56: '5.56 mm assault rifle',\n rifle_7_62x39: '7.62×39 mm assault rifle', rifle_bolt_308: '.308 bolt-action rifle', sniper_338: '.338 Lapua sniper rifle',\n anti_materiel_50: '.50 BMG anti-materiel rifle', shotgun_pump_12: '12 gauge pump-action shotgun', shotgun_double_12: '12 gauge double-barrel shotgun',\n shotgun_semi_12: '12 gauge semi-automatic shotgun', bow_compound: 'Compound bow', crossbow: 'Crossbow', hammer: 'Hammer', sledgehammer: 'Sledgehammer',\n baseball_bat: 'Baseball bat', crowbar: 'Crowbar', machete: 'Machete', axe: 'Axe', knife: 'Knife', fists: 'Fists', lighter: 'Lighter',\n flamethrower: 'Flamethrower', molotov: 'Molotov cocktail', cutting_torch: 'Oxy-fuel cutting torch', blowtorch: 'Blowtorch',\n frag_grenade: 'Fragmentation grenade', pipe_bomb: 'Pipe bomb', screwdriver: 'Screwdriver', wrench: 'Wrench', pry_bar: 'Pry bar', hacksaw: 'Hacksaw',\n utility_knife: 'Utility knife', claw_hammer: 'Claw hammer', extinguisher: 'Fire extinguisher',\n },\n modes: modesEn,\n categories: categoriesEn,\n },\n 'pt-BR': {\n weapons: {\n hand: 'mão', kick: 'chute', shove: 'empurrão', pistol_9mm: 'pistola 9 mm', pistol_45: 'pistola .45', pistol_22: 'pistola .22', revolver_357: 'revólver .357', revolver_38: 'revólver .38',\n smg_9mm: 'submetralhadora 9 mm', carbine_22: 'carabina .22', rifle_5_56: 'fuzil 5,56', rifle_7_62x39: 'fuzil 7,62×39', rifle_bolt_308: 'fuzil de ferrolho .308',\n sniper_338: 'fuzil de precisão .338', anti_materiel_50: 'fuzil antimaterial .50', shotgun_pump_12: 'espingarda de repetição calibre 12',\n shotgun_double_12: 'espingarda de dois canos calibre 12', shotgun_semi_12: 'espingarda semiautomática calibre 12', bow_compound: 'arco composto',\n crossbow: 'besta', hammer: 'martelo', sledgehammer: 'marreta', baseball_bat: 'taco de beisebol', crowbar: 'pé de cabra', machete: 'facão', axe: 'machado',\n knife: 'faca', fists: 'punhos', lighter: 'isqueiro', flamethrower: 'lança-chamas', molotov: 'coquetel molotov', cutting_torch: 'maçarico de corte',\n blowtorch: 'maçarico', frag_grenade: 'granada de fragmentação', pipe_bomb: 'bomba caseira', screwdriver: 'chave de fenda', wrench: 'chave inglesa',\n pry_bar: 'alavanca', hacksaw: 'serra de arco', utility_knife: 'estilete', claw_hammer: 'martelo de unha', extinguisher: 'extintor',\n },\n modes: { single: 'tiro único', semi: 'semiautomático', burst: 'rajada', auto: 'automático', pump: 'repetição', bolt: 'ferrolho', lever: 'alavanca', break: 'basculante' },\n categories: {\n pistol: 'pistola', revolver: 'revólver', smg: 'submetralhadora', rifle: 'fuzil', carbine: 'carabina', sniper: 'fuzil de precisão', shotgun: 'espingarda',\n bow: 'arco', crossbow: 'besta', melee_blunt: 'corpo a corpo contundente', melee_blade: 'corpo a corpo cortante', flame: 'chama', heat: 'calor',\n throwable: 'arremessável', tool: 'ferramenta', extinguisher: 'extintor', hand: 'mão',\n },\n },\n}\n\nexport const resolveStrings = (locale: string | undefined): WeaponsStrings => locales[(locale as WeaponsLocale) ?? 'en'] ?? locales.en\n","import type { Vec3 } from './types'\n\n/** Deterministic mulberry32 generator; returns floats in [0, 1). */\nexport const createRng = (seed: number): (() => number) => {\n let a = seed >>> 0\n return () => {\n a = (a + 0x6d2b79f5) >>> 0\n let t = a\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n }\n}\n\nexport const normalize = (v: Vec3): Vec3 => {\n const l = Math.hypot(v[0], v[1], v[2])\n return l > 1e-12 ? [v[0] / l, v[1] / l, v[2] / l] : [0, 0, -1]\n}\n\nconst cross = (a: Vec3, b: Vec3): Vec3 => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]\n\n/** Uniform direction inside a cone of half-angle `deg` around the unit vector `dir` (uniform over the solid angle). */\nexport const sampleCone = (dir: Vec3, deg: number, rng: () => number): Vec3 => {\n if (deg <= 0) return dir\n const cosMax = Math.cos((deg * Math.PI) / 180)\n const cosT = 1 - rng() * (1 - cosMax)\n const sinT = Math.sqrt(Math.max(0, 1 - cosT * cosT))\n const phi = rng() * Math.PI * 2\n const helper: Vec3 = Math.abs(dir[1]) < 0.9 ? [0, 1, 0] : [1, 0, 0]\n const u = normalize(cross(helper, dir))\n const v = cross(dir, u)\n const cx = Math.cos(phi) * sinT\n const cy = Math.sin(phi) * sinT\n return normalize([\n u[0] * cx + v[0] * cy + dir[0] * cosT,\n u[1] * cx + v[1] * cy + dir[1] * cosT,\n u[2] * cx + v[2] * cy + dir[2] * cosT,\n ])\n}\n","import { createRng, normalize, sampleCone } from './rng'\nimport type {\n CaliberDef,\n FireMode,\n Shot,\n TriggerResult,\n Use,\n Vec3,\n WeaponAction,\n WeaponDef,\n WeaponState,\n} from './types'\n\nconst EPS = 1e-9\nconst DEFAULT_THROWABLES = 3\n/** Total spread (base + bloom) never exceeds this many times the base spread. */\nexport const BLOOM_CAP = 4\n/** Fraction of the throw speed added upwards so a throw arcs. */\nconst THROW_LIFT = 0.15\n\n/** Muzzle energy in joules of ONE projectile (a bullet, or one pellet): 0.5 × mass × speed², speed scaled by the barrel factor. */\nexport const muzzleEnergy = (caliber: CaliberDef, barrel = 1): number => {\n const v = caliber.muzzleSpeed * barrel\n return 0.5 * (caliber.bulletGrams / 1000) * v * v\n}\n\nexport interface WeaponStateInit {\n def: WeaponDef\n caliber: CaliberDef | null\n seed: number\n reserve?: number\n}\n\nconst result = (status: TriggerResult['status'], extra: Partial<TriggerResult> = {}): TriggerResult => ({\n shots: [],\n uses: [],\n status,\n recoil: [0, 0],\n noise: 0,\n ...extra,\n})\n\n/** Runtime of one weapon. See `WeaponState` for the contract. */\nexport class WeaponRuntime implements WeaponState {\n readonly def: WeaponDef\n readonly caliber: CaliberDef | null\n reserve: number\n mode: FireMode\n private _ammo: number\n private readonly _capacity: number\n private readonly action: WeaponAction\n private readonly rng: () => number\n private readonly initialReserve: number\n\n private clock = 0\n /** Time already advanced by the other of update / trigger in the same frame (so calling both does not count `dt` twice). */\n private pend: { src: 'update' | 'trigger'; amt: number } | null = null\n private readyAt = 0\n private latched = false\n\n private _reloading = false\n private reloadEnd = 0\n\n /** Bloom degrees at `extraClock`. */\n private extra = 0\n private extraClock = 0\n\n constructor(init: WeaponStateInit) {\n this.def = init.def\n this.caliber = init.caliber\n this.action = init.def.action\n this.rng = createRng(init.seed)\n const a = this.action\n this.mode = a.kind === 'firearm' ? a.modes[0] ?? 'single' : 'single'\n switch (a.kind) {\n case 'firearm':\n this._capacity = a.magazine\n break\n case 'flame':\n case 'heat':\n this._capacity = a.fuel\n break\n case 'extinguisher':\n this._capacity = a.charge\n break\n case 'throwable':\n this._capacity = a.count ?? DEFAULT_THROWABLES\n break\n default:\n this._capacity = 0\n }\n this._ammo = this._capacity\n this.initialReserve = init.reserve ?? (a.kind === 'firearm' ? a.magazine * 3 : 0)\n this.reserve = this.initialReserve\n }\n\n get ammo(): number {\n return this._ammo\n }\n get capacity(): number {\n return this._capacity\n }\n get reloading(): boolean {\n return this._reloading\n }\n get spread(): number {\n if (this.action.kind !== 'firearm') return 0\n return this.action.spreadDeg + this.extraAt(this.clock)\n }\n\n private extraAt(t: number): number {\n if (this.action.kind !== 'firearm') return 0\n const rec = this.action.recoveryDegPerS ?? 4\n return Math.max(0, this.extra - rec * Math.max(0, t - this.extraClock))\n }\n\n // --- time -----------------------------------------------------------------------------------------------------------------------\n\n update(dt: number): void {\n const d = Math.max(0, dt)\n let eff = d\n if (this.pend && this.pend.src === 'trigger') {\n eff = Math.max(0, d - this.pend.amt)\n this.pend = null\n } else {\n this.pend = { src: 'update', amt: d }\n }\n this.clock += eff\n this.settle(this.clock)\n }\n\n /** Complete the reload steps that finish at or before `t`. */\n private settle(t: number): void {\n const a = this.action\n if (a.kind !== 'firearm') return\n while (this._reloading && this.reloadEnd <= t + EPS) {\n if (a.perRound) {\n if (this.reserve > 0 && this._ammo < this._capacity) {\n this._ammo += 1\n this.reserve -= 1\n }\n if (this._ammo >= this._capacity || this.reserve <= 0) this._reloading = false\n else this.reloadEnd += a.reload\n } else {\n const take = Math.min(this._capacity - this._ammo, this.reserve)\n this._ammo += take\n this.reserve -= take\n this._reloading = false\n }\n }\n }\n\n // --- commands -------------------------------------------------------------------------------------------------------------------\n\n release(): void {\n this.latched = false\n }\n\n reload(): boolean {\n const a = this.action\n if (a.kind === 'throwable') {\n if (this._ammo >= this._capacity || this.reserve <= 0) return false\n this._ammo += 1\n this.reserve -= 1\n return true\n }\n if (a.kind !== 'firearm' || this._reloading) return false\n if (this._ammo >= this._capacity || this.reserve <= 0) return false\n this._reloading = true\n this.reloadEnd = this.clock + a.reload\n return true\n }\n\n cycleMode(): FireMode {\n if (this.action.kind !== 'firearm') return this.mode\n const modes = this.action.modes\n const i = modes.indexOf(this.mode)\n this.mode = modes[(i + 1) % modes.length] ?? this.mode\n return this.mode\n }\n\n refill(): void {\n this._ammo = this._capacity\n this.reserve = this.initialReserve\n this._reloading = false\n this.readyAt = this.clock\n this.latched = false\n this.extra = 0\n }\n\n // --- trigger --------------------------------------------------------------------------------------------------------------------\n\n trigger(origin: Vec3, direction: Vec3, dt: number, held = false, source?: string): TriggerResult {\n const d = Math.max(0, dt)\n let overlap = 0\n if (this.pend && this.pend.src === 'update') {\n overlap = Math.min(this.pend.amt, d)\n this.pend = null\n } else {\n this.pend = { src: 'trigger', amt: d }\n }\n const start = this.clock - overlap\n const end = start + d\n this.settle(start)\n\n const dir = normalize(direction)\n let res: TriggerResult\n const a = this.action\n switch (a.kind) {\n case 'firearm':\n res = this.fireFirearm(a, origin, dir, start, end, held, source)\n break\n case 'melee':\n res = this.fireMelee(a, origin, dir, start, end)\n break\n case 'flame':\n case 'heat':\n res = this.fireFuel(a, origin, dir, d)\n break\n case 'extinguisher':\n res = this.fireExtinguisher(a, origin, dir, d)\n break\n case 'throwable':\n res = this.fireThrowable(a, origin, dir, held)\n break\n case 'tool':\n res = d > 0 ? result('ok', { uses: [{ kind: 'tool', tool: a.tool, reach: a.reach, duration: d, origin, direction: dir }], noise: a.noise }) : result('ok')\n break\n case 'hand':\n res = this.oncePerPull(held)\n ? result('ok', { uses: [{ kind: 'hand', reach: a.reach, origin, direction: dir }] })\n : result('cooldown')\n break\n }\n this.clock = Math.max(this.clock, end)\n this.settle(this.clock)\n return res\n }\n\n /** Semi-style gating: a held trigger that already fired does nothing until `release()` or a new pull (`held` false). */\n private oncePerPull(held: boolean): boolean {\n if (!held) this.latched = false\n if (this.latched) return false\n this.latched = true\n return true\n }\n\n private fireFirearm(a: Extract<WeaponAction, { kind: 'firearm' }>, origin: Vec3, dir: Vec3, start: number, end: number, held: boolean, source?: string): TriggerResult {\n if (this._reloading) {\n if (a.perRound && this._ammo > 0) this._reloading = false // a tube reload is interrupted by the trigger\n else return result('reloading')\n }\n const auto = this.mode === 'auto'\n if (!auto && !this.oncePerPull(held)) return result('cooldown')\n if (this._ammo <= 0) return result('empty')\n\n const iv = 60 / a.rpm\n const t0 = Math.max(start, this.readyAt)\n if (t0 > end + EPS) return result('cooldown')\n\n const res = result('ok')\n const fire = (t: number): void => {\n this.fireOne(a, origin, dir, t, res, source)\n }\n if (auto) {\n for (let t = t0, n = 0; this._ammo > 0 && (n === 0 ? t <= end + EPS : t < end - EPS); t += iv, n++) fire(t)\n } else if (this.mode === 'burst') {\n const count = Math.min(a.burst ?? 3, this._ammo)\n for (let k = 0; k < count; k++) fire(t0 + k * iv)\n } else {\n fire(t0)\n }\n return res\n }\n\n private fireOne(a: Extract<WeaponAction, { kind: 'firearm' }>, origin: Vec3, dir: Vec3, t: number, res: TriggerResult, source?: string): void {\n const cal = this.caliber as CaliberDef\n const barrel = a.barrel ?? 1\n const speed = cal.muzzleSpeed * barrel\n const energy = muzzleEnergy(cal, barrel)\n const drag = cal.dragPer100m ?? 0.1\n const energyAt = (distance: number): number => {\n const f = Math.pow(1 - drag, Math.max(0, distance) / 100)\n return energy * f * f\n }\n const bloomNow = this.extraAt(t)\n const spread = a.spreadDeg + bloomNow\n const aim = sampleCone(dir, spread, this.rng)\n const pellets = cal.pellets ?? 1\n const pelletSpread = pellets > 1 ? a.pelletSpreadDeg ?? 3 : 0\n for (let p = 0; p < pellets; p++) {\n const shot: Shot = {\n origin: [origin[0], origin[1], origin[2]],\n direction: sampleCone(aim, pelletSpread, this.rng),\n energy,\n caliber: cal.diameter,\n caliberId: cal.id,\n speed,\n energyAt,\n pellet: p,\n weapon: this.def.id,\n }\n if (source !== undefined) shot.source = source\n res.shots.push(shot)\n }\n this._ammo -= 1\n this.readyAt = t + 60 / a.rpm\n this.extra = Math.min(bloomNow + (a.bloomDeg ?? 0), a.spreadDeg * (BLOOM_CAP - 1))\n this.extraClock = t\n res.recoil = [res.recoil[0] + a.recoil[0], res.recoil[1] + (this.rng() * 2 - 1) * a.recoil[1]]\n res.noise = a.noise\n }\n\n private fireMelee(a: Extract<WeaponAction, { kind: 'melee' }>, origin: Vec3, dir: Vec3, start: number, end: number): TriggerResult {\n const t0 = Math.max(start, this.readyAt)\n if (t0 > end + EPS) return result('cooldown')\n this.readyAt = t0 + 60 / a.rpm\n const use: Use = { kind: 'melee', damage: a.damage, energy: a.energy, radius: a.radius, reach: a.reach, origin, direction: dir }\n return result('ok', { uses: [use], noise: a.noise })\n }\n\n private fireFuel(a: Extract<WeaponAction, { kind: 'flame' | 'heat' }>, origin: Vec3, dir: Vec3, dt: number): TriggerResult {\n if (this._ammo <= EPS) return result('no_fuel')\n if (dt <= 0) return result('ok')\n const need = a.fuelPerSecond * dt\n let duration = dt\n if (need > this._ammo) {\n duration = dt * (this._ammo / need)\n this._ammo = 0\n } else {\n this._ammo -= need\n }\n const use: Use =\n a.kind === 'flame'\n ? { kind: 'flame', temperature: a.temperature, radius: a.radius, range: a.range, cone: a.cone ?? false, duration, origin, direction: dir }\n : { kind: 'heat', temperature: a.temperature, radius: a.radius, range: a.range, duration, origin, direction: dir }\n return result('ok', { uses: [use], noise: a.noise })\n }\n\n private fireExtinguisher(a: Extract<WeaponAction, { kind: 'extinguisher' }>, origin: Vec3, dir: Vec3, dt: number): TriggerResult {\n if (this._ammo <= EPS) return result('no_fuel')\n if (dt <= 0) return result('ok')\n const duration = Math.min(dt, this._ammo)\n this._ammo -= duration\n return result('ok', { uses: [{ kind: 'extinguish', range: a.range, coolC: a.coolC, duration, origin, direction: dir }], noise: a.noise })\n }\n\n private fireThrowable(a: Extract<WeaponAction, { kind: 'throwable' }>, origin: Vec3, dir: Vec3, held: boolean): TriggerResult {\n if (!this.oncePerPull(held)) return result('cooldown')\n if (this._ammo <= 0) return result('empty')\n this._ammo -= 1\n const velocity: Vec3 = [dir[0] * a.throwSpeed, dir[1] * a.throwSpeed + a.throwSpeed * THROW_LIFT, dir[2] * a.throwSpeed]\n const use: Use = { kind: 'throw', energy: a.energy, radius: a.radius, fuse: a.fuse, velocity, origin }\n if (a.fire) use.fire = { ...a.fire }\n return result('ok', { uses: [use], noise: a.noise })\n }\n}\n","import calibersJson from './data/calibers.json'\nimport weaponsJson from './data/weapons.json'\nimport { resolveStrings } from './locale'\nimport type { Arsenal, ArsenalOptions, CaliberDef, CaliberId, WeaponCategory, WeaponDef, WeaponId, WeaponState } from './types'\nimport { muzzleEnergy, WeaponRuntime } from './weapon'\n\nexport const CALIBERS = calibersJson as unknown as CaliberDef[]\nexport const WEAPONS = weaponsJson as unknown as WeaponDef[]\n\n/** A reasonable starting kit for a test room or a sandbox. */\nexport const DEFAULT_LOADOUT: WeaponId[] = [\n 'hand', 'kick', 'shove', 'pistol_9mm', 'revolver_357', 'shotgun_pump_12', 'rifle_5_56', 'rifle_bolt_308', 'hammer', 'axe', 'machete', 'utility_knife', 'crowbar', 'lighter', 'flamethrower',\n 'cutting_torch', 'molotov', 'frag_grenade', 'screwdriver', 'wrench', 'pry_bar', 'hacksaw', 'extinguisher',\n]\n\nexport { muzzleEnergy }\n\n/** Create an arsenal: the built-in calibres and weapons merged (by id) with the ones in `options`. */\nexport const createArsenal = (options: ArsenalOptions = {}): Arsenal => {\n const calibers = new Map<CaliberId, CaliberDef>()\n for (const c of [...CALIBERS, ...(options.calibers ?? [])]) calibers.set(c.id, c)\n const weapons = new Map<WeaponId, WeaponDef>()\n for (const w of [...WEAPONS, ...(options.weapons ?? [])]) weapons.set(w.id, w)\n const strings = resolveStrings(options.locale)\n const baseSeed = options.seed ?? 1\n let counter = 0\n\n const create = (id: WeaponId, opts: { seed?: number; reserve?: number } = {}): WeaponState => {\n const def = weapons.get(id)\n if (!def) throw new Error(`game-weapons: unknown weapon \"${id}\"`)\n let caliber: CaliberDef | null = null\n if (def.action.kind === 'firearm') {\n caliber = calibers.get(def.action.caliber) ?? null\n if (!caliber) throw new Error(`game-weapons: weapon \"${id}\" uses unknown calibre \"${def.action.caliber}\"`)\n }\n counter += 1\n const seed = opts.seed ?? (baseSeed + Math.imul(counter, 0x9e3779b1)) >>> 0\n return new WeaponRuntime({ def, caliber, seed, reserve: opts.reserve })\n }\n\n return {\n calibers,\n weapons,\n create,\n muzzleEnergy(caliber, barrel = 1) {\n const c = calibers.get(caliber)\n if (!c) throw new Error(`game-weapons: unknown calibre \"${caliber}\"`)\n return muzzleEnergy(c, barrel)\n },\n name(id) {\n const w = weapons.get(id)\n if (w) return strings.weapons[id] ?? w.name ?? id\n return strings.modes[id] ?? strings.categories[id] ?? calibers.get(id)?.label ?? id\n },\n list(category?: WeaponCategory) {\n const all = [...weapons.values()]\n return category ? all.filter((w) => w.category === category) : all\n },\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,54 @@
1
1
  {
2
2
  "name": "@adatechnology/game-weapons",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.1",
4
+ "license": "MIT",
5
+ "description": "Engine-agnostic weapons and ammunition: real calibres as data, magazines, fire modes, spread, recoil, pellets, melee, flame, heat, throwables and tools. Produces shots (energy, calibre, direction) any damage model can consume. Knows nothing about any game.",
6
+ "keywords": [
7
+ "game",
8
+ "weapons",
9
+ "firearms",
10
+ "ammunition",
11
+ "ballistics",
12
+ "melee",
13
+ "calibers"
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/Andersonfrfilho/adatechnology-game-kit.git",
18
+ "directory": "packages/game-weapons"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "type": "module",
24
+ "main": "dist/index.js",
25
+ "module": "dist/index.js",
26
+ "types": "dist/index.d.ts",
27
+ "unpkg": "dist/index.global.js",
28
+ "jsdelivr": "dist/index.global.js",
29
+ "sideEffects": false,
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ },
35
+ "./global": "./dist/index.global.js"
36
+ },
37
+ "files": [
38
+ "dist"
39
+ ],
40
+ "dependencies": {
41
+ "@adatechnology/game-contracts": "0.1.1"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^22.10.7",
45
+ "tsup": "^8.5.1",
46
+ "typescript": "^5.7.3",
47
+ "vitest": "^3.2.4"
48
+ },
49
+ "scripts": {
50
+ "build": "tsup",
51
+ "typecheck": "tsc -p tsconfig.json --noEmit",
52
+ "test": "vitest run"
53
+ }
6
54
  }