# FPS Team Deathmatch (fps.deathmatch) ## What it is for Provides team deathmatch rules on the shared first-person match: score or time victory, respawns chosen for cover and distance, spawn protection, free loadout and health recovery. It needs `fps.match`, `game.engine`; installing it brings them in. ## Turn it on Install the kit in a project, then change a setting (the values shown are its defaults): ```text gripforge_gamekit_install { project_id: "gkp_…", id: "fps.deathmatch" } gripforge_gamekit_configure { project_id: "gkp_…", id: "fps.deathmatch", config: { "duration": 300, "scoreLimit": 40 } } ``` ## First example This is the body of the passing test `the_default_options_are_the_deathmatch_defaults`; the helper functions it calls are defined at the top of the same test file. ```rust #[test] fn the_default_options_are_the_deathmatch_defaults() { let mut s = deathmatch(json!({})); let r = rules(&mut s); let m = &r["match"]; assert_eq!(m["duration"], 300); assert_eq!(m["scoreLimit"], 40); assert_eq!(m["respawnDelay"], 3); assert_eq!(m["spawnProtection"], 1.5); assert_eq!(m["spawnMinDistance"], 8); assert_eq!(m["healthRegenDelay"], 5); assert_eq!(m["healthRegenRate"], 20); assert_eq!(m["startingWeapon"], "rifle"); assert_eq!(m["loadout"], json!(["rifle", "smg", "pistol", "knife"])); let h = &r["handling"]; assert_eq!(h["ads"], true); assert_eq!(h["adsFov"], 60); assert_eq!(h["adsTime"], 0.16); assert_eq!(h["sprint"], true); assert_eq!(h["sprintMultiplier"], 1.45); assert_eq!(h["sprintToFire"], 0.18); } ``` ## Settings and defaults Descriptions come from the kit manifest and stay in English. | Setting | Type | Default | Range or values | Meaning | |---|---|---|---|---| | `duration` | number | `300` | 30–1800 | Match duration in seconds; tied scores produce a draw. | | `scoreLimit` | integer | `40` | 1–500 | Enemy eliminations required to win. | | `respawnDelay` | number | `3` | 0.5–30 | | | `spawnProtection` | number | `1.5` | 0–5 | Seconds of protection; firing or throwing a grenade cancels it. | | `spawnMinDistance` | number | `8` | 0–50 | Prefer spawns farther from opponents; cover and occupancy are checked too. | | `healthRegenDelay` | number | `5` | 0–60 | | | `healthRegenRate` | number | `20` | 0–100 | Health per second after the damage-free delay. | | `loadout` | array | `["rifle", "smg", "pistol", "knife"]` | | | | `startingWeapon` | string | `"rifle"` | `rifle`, `smg`, `pistol`, `knife` | | | `ads` | boolean | `true` | | | | `adsFov` | number | `60` | 35–100 | | | `adsTime` | number | `0.16` | 0.05–1 | | | `adsMoveMultiplier` | number | `0.65` | 0.2–1 | | | `adsSpreadMultiplier` | number | `0.25` | 0.05–1 | | | `sprint` | boolean | `true` | | | | `sprintMultiplier` | number | `1.45` | 1–2 | | | `sprintToFire` | number | `0.18` | 0–0.8 | Seconds before the weapon can fire after a sprint. | ## Services, events, variables - Service `fps.deathmatch`: Team scores, match limit, protected respawn and free starting loadout. - Events listened to: `fps.match_start`, `fps.match_end`, `fps.respawn` ## Hooks and modding - Moddable settings: `duration`, `scoreLimit`, `respawnDelay`, `spawnProtection`, `spawnMinDistance`, `healthRegenDelay`, `healthRegenRate`, `loadout`, `startingWeapon`, `ads`, `adsFov`, `adsTime`, `adsMoveMultiplier`, `adsSpreadMultiplier`, `sprint`, `sprintMultiplier`, `sprintToFire` ## Engines Declared targets: `web`, `rust`. `gripforge kit api fps.deathmatch` lists the exact settings and services of your version. ## Versions Kit version 1.1.0.