Tactical FPS
Plays a native tactical first-person match: movement, hitscan weapons, teams, bots, an economy, plant and defuse, and round transitions.
Tactical FPS (fps.tactical) #
What it is for #
Plays a native tactical first-person match: movement, hitscan weapons, teams, bots, an economy, plant and defuse, and round transitions.
It needs runtime.core, 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):
gripforge_gamekit_install { project_id: "gkp_…", id: "fps.tactical" }
gripforge_gamekit_configure { project_id: "gkp_…", id: "fps.tactical",
config: { "rules": {}, "siteRadius": 3 } }
First example #
<!-- test: kits/game_engine/host/tests/fps_tactical.rs::presentation_getters_are_read_only_and_describe_the_match --> This is the body of the passing test presentation_getters_are_read_only_and_describe_the_match; the helper functions it calls are defined at the top of the same test file.
#[test]
fn presentation_getters_are_read_only_and_describe_the_match() {
let mut s = session(&[]);
let before = call(&mut s, "fps.match", "simInfo", json!([])).unwrap();
let plan = call(&mut s, "fps.match", "presentation", json!([])).unwrap();
let view = call(&mut s, "fps.match", "view", json!([])).unwrap();
assert!(plan["map"]["boxes"].as_array().unwrap().len() > 0);
assert_eq!(plan["local"], before["localActorId"]);
assert!(view["grenades"].is_array());
assert_eq!(
call(&mut s, "fps.match", "simInfo", json!([])).unwrap(),
before
);
}
Settings and defaults #
Descriptions come from the kit manifest and stay in English.
| Setting | Type | Default | Range or values | Meaning |
|---|---|---|---|---|
rules | object | {} | Bounded FpsRules overrides on top of the kit base rules (round buy 18 s, duration 100 s, target 5, start money 4000; bots normal,… | |
siteRadius | number | 3 | 0.5–20 | Radius of the bomb-site zones published for other kits, metres. |
eventBuffer | integer | 512 | 16–4096 | Match events kept between two drainEvents reads. |
map | string | "sunport_docks" | ||
team | string | "T" | T, CT | |
presentation | object | — |
Services, events, variables #
- Service
fps.match: - Service
movement.fps: - Service
camera.first_person: - Service
combat.hitscan: - Service
animation.viewmodel: - Service
grenades.tactical: - Service
ai.tactical: - Service
objective.bomb: - Events emitted:
fps.shot(type,actor,target,point,origin,normal,material,weapon)fps.damage(type,actor,target,point,origin,normal,material,weapon)fps.kill(type,actor,target,point,origin,normal,material,weapon)fps.round_start(type,actor,target,point,origin,normal,material,weapon)fps.round_end(type,actor,target,point,origin,normal,material,weapon)fps.bomb_plant(type,actor,target,point,origin,normal,material,weapon)fps.bomb_defuse(type,actor,target,point,origin,normal,material,weapon)fps.bomb_explode(type,actor,target,point,origin,normal,material,weapon)fps.match_start(type,actor,target,point,origin,normal,material,weapon)fps.match_end(type,actor,target,point,origin,normal,material,weapon)fps.respawn(type,actor,target,point,origin,normal,material,weapon)fps.objective_capture(type,actor,target,point,origin,normal,material,weapon)fps.loadout_selected(type,actor,target,point,origin,normal,material,weapon)fps.step(type,actor,target,point,origin,normal,material,weapon)fps.slide(type,actor,target,point,origin,normal,material,weapon)fps.vault(type,actor,target,point,origin,normal,material,weapon)fps.equip(type,actor,target,point,origin,normal,material,weapon)fps.fire_mode(type,actor,target,point,origin,normal,material,weapon)fps.reload_start(type,actor,target,point,origin,normal,material,weapon)fps.magazine_insert(type,actor,target,point,origin,normal,material,weapon)fps.reload_end(type,actor,target,point,origin,normal,material,weapon)fps.he(type,actor,target,point,origin,normal,material,weapon)fps.flash(type,actor,target,point,origin,normal,material,weapon)fps.smoke(type,actor,target,point,origin,normal,material,weapon)fps.stun(type,actor,target,point,origin,normal,material,weapon)fps.incendiary(type,actor,target,point,origin,normal,material,weapon)
- Variables:
fps.phase(string) — Round phasefps.mode(string) — Match modefps.round(number) — Roundplayer.health(number) — Healthplayer.respawn_remaining(number) — Respawn countdown
Hooks and modding #
- Hooks (a game or a mod can intercept them):
fps.round.start(fields a tap may change:buy) — A new round of a bomb match is about to start (the five seconds after a round are over; not the first round of a match).fps.round.end(fields a tap may change:team) — A round of a bomb match is won, before the score, the money and fps.round_end: team is the winner (a tap may give the round to the other team).fps.match.end(cancellable) — The match is about to end: the round target is reached (bomb mode, after fps.round_end), or the clock or the score limit of a deathmatch or domination match (team is empty on a draw).fps.bomb.plant(fields a tap may change:fuse; cancellable) — An attacker finished planting the bomb at a site: fuse is the time before it explodes, seconds.fps.bomb.defuse(cancellable) — A defender finished defusing the planted bomb (remaining: seconds left on the fuse).
- Moddable settings:
rules,siteRadius,map,team,presentation - Moddable collections:
tactical_maps
Engines #
Declared targets: web, godot, unity, unreal, rust. gripforge kit api fps.tactical lists the exact settings and services of your version.
Versions #
Kit version 1.16.0.