Ecosystem

Lets the player put living species on a world that then live by rules: each species has needs by biome, dependencies, growth and spread, and colonies grow toward the capacity of their biome.

Source: module-kits:kits/life_ecosystem/usage/en.mdView Markdown source

Also read offline — CLI: grip-forge docs life-ecosystemMCP tool: gripforge_docs { "topic": "life-ecosystem" }

Ecosystem (life.ecosystem) #

What it is for #

Lets the player put living species on a world that then live by rules: each species has needs by biome, dependencies, growth and spread, and colonies grow toward the capacity of their biome.

It needs world.biomes, 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: "life.ecosystem" }
gripforge_gamekit_configure { project_id: "gkp_…", id: "life.ecosystem",
                              config: { "tickSeconds": 1, "speed": 1 } }

First example #

<!-- test: kits/game_engine/host/tests/life_ecosystem.rs::the_colonies_survive_a_save --> This is the body of the passing test the_colonies_survive_a_save; the helper functions it calls are defined at the top of the same test file.

#[test]
fn the_colonies_survive_a_save() {
    let mut s = session();
    call(&mut s, L, "implant", json!(["algae", "sea", 40]));
    call(&mut s, L, "implant", json!(["moss", "plain", 12]));
    step(&mut s, 30);
    s.apply(&json!({ "op": "save" })).unwrap();
    assert_eq!(
        call(&mut s, L, "remove", json!(["moss", "plain"])),
        json!(true)
    );
    assert_eq!(
        call(&mut s, L, "population", json!(["moss", "plain"])),
        json!(0)
    );
    s.apply(&json!({ "op": "reload" })).unwrap();
    let moss = call(&mut s, L, "population", json!(["moss", "plain"]));
    assert!(moss.as_f64().unwrap() > 12.0, "{moss}");
    assert_eq!(
        call(&mut s, L, "viability", json!(["moss", "sea"]))["habitat"],
        json!(false)
    );
}

Settings and defaults #

Descriptions come from the kit manifest and stay in English.

SettingTypeDefaultRange or valuesMeaning
tickSecondsnumber10.05–60The simulation step: every colony grows, acts and may spread once per step.
speednumber10–1000A multiplier on growth, decay and spread, for pacing (0 freezes the populations).
maxVisibleinteger1500–2000Visible individuals in the whole world, all colonies together.
implantAmountnumber201–1000000Individuals put down by one use of a species item (and by implant() without an amount).
neighbourDistancenumber50–10000Two biomes are neighbours when their shapes overlap or lie within this distance.
plantLooksstring"genome"genome, modelHow a species that carries a genome is shown: genome (generated plants that grow, the bound model ignored) or model (its…
publisharray[]World counters SET every step to the total population of the matching species ({ "counter": "plants", "kinds": ["algae", "moss"]…

Services, events, variables #

  • Service life.ecosystem: species(), get(id), colonies(), population(species, biome?), viability(species, biome), implant(species, biomeOrPoint, amount?), remove(species, biome), unlock(id), unlocked(id), define(doc), total(filter?), neighbours(biome), open(), close(), isOpen(); scope(id), scopeId() — the colonies of one wor
  • Events emitted:
    • life.implanted (species, biome, population) — Individuals were put in a biome; population is the colony after it.
    • life.rejected (species, reason) — An implant was refused; reason: unknown, locked, no_biome, closed, habitat, refused (a tap of the hook life.implant cancelled it).
    • life.spread (species, from, to) — A settled colony seeded a neighbouring biome.
    • life.extinct (species, biome) — A colony fell under one individual and is gone.
    • life.thriving (species, biome) — A colony passed 90 % of the capacity of its biome (once per colony).
    • life.unlocked (species) — A locked species became available.
  • Events listened to: inventory.used, game.phase
  • Variables:
    • life.colonies (number) — Living colonies
    • life.population (number) — Living individuals
    • life.open (boolean) — Life screen open
  • Verbs of the scripting layer:
    • implant_species (action) — Put individuals of a species in a biome (refused when it is locked, the biome is closed or the habitat does not fit).
    • unlock_species (action) — Make a locked species available.
    • species_alive (condition) — The species lives — in that biome, or anywhere — with at least min individuals (default 1).
    • species_unlocked (condition) — The species is available to implant.
  • Input actions: life_menu

Hooks and modding #

  • Hooks (a game or a mod can intercept them):
    • life.implant (fields a tap may change: amount; cancellable) — Individuals of a species are about to be put in a biome (the species is known and unlocked, the biome open, the habitat fits).
    • life.colonize (fields a tap may change: seed; cancellable) — A settled colony is about to seed a neighbouring biome (a colony is born): asked after the draw of this step succeeded.
    • life.die (cancellable) — A colony is about to fall under one individual and die out.
    • life.unlock (cancellable) — A locked species is about to become available.
  • Moddable settings: tickSeconds, speed, maxVisible, implantAmount, neighbourDistance, plantLooks, publish
  • Moddable collections: species

Engines #

Declared targets: web, rust. gripforge kit api life.ecosystem lists the exact settings and services of your version.

Versions #

Kit version 1.6.0.