Skip to content

feat(fat-cow): a CH-47 that becomes a forward refuel and rearm point (FEAT-FAT-COW) - #273

Merged
davidp57 merged 37 commits into
developfrom
feature/fat-cow
Oct 27, 2026
Merged

davidp57 merged 37 commits into
developfrom
feature/fat-cow

Conversation

@davidp57

@davidp57 davidp57 commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

Summary

Lot FEAT-FAT-COW: a CH-47 that lands in the field and becomes a forward refuel and rearm point for other helicopters. ED announced a native Fat Cow on 2024-04-19 and 2024-08-23; DCS 2.9.30.28738 still has none.

DCS cannot transfer fuel between aircraft, so the cow lays out a FARP scene next to itself whose warehouse holds exactly what it carries, and DCS serves it until it runs out.

  • Spike first (ticket 01), measured in DCS with Zip: a runtime Invisible FARP has a warehouse (the countryside scene's comment saying otherwise is corrected), starts empty, serves a player already in game, enforces a finite stock set by script (partial service, then "Unable to comply"), and needs a supplier in range. The FARP Fuel Depot static alone supplies fuel and weapons: no vehicle, tent, ammo dump or bunker.
  • Piloted cow (CH-47F): F10 → CTLD → Fat Cow. Load a loadout (fatCowLoadouts: fuel kg + items, split into crates by content) or Request a crate one at a time. Default loadouts, all with two 800 gal tanks (4 800 kg): four Apache ones at the top (40 or 60 Hellfires, laser and radar AGM-114L, with 30 mm), four under Russian (Ka-50 Vikhr + 2A42, Mi-24P Ataka or Shturm + GSh-30), two under Mixed; 6 400 to 8 200 kg, what a CH-47F lifts with 80 % internal fuel. Deploy the FARP; the crates stay on board; packing (or taking off) puts what was not used back into them and lightens the hold. Cow crates never show in Request Equipment nor Unpack.
  • AI cow: always a CH-47, whatever the requester flies; requested from anywhere with a loadout picked in the same submenus, it comes airborne from the nearest friendly logistic zone on land, with a joining estimate. A player flight commands it from F10 only (Land here, Take off, Hold here, Join us, RTB); nothing automatic, after Zip's server test where it left whenever the leader hopped onto its FARP. Fat Cow status (phase, distance, bearing, ETA, stock) and FARP status (the Fat Cow FARP you are at).
  • VMCT contract: a late-activated helicopter group declared in fatCowAICows ({ group, escort, loadout }); with an AI flight it lands and takes off with the leader on its own. Documented in docs/mission-maker/fat-cow.md.
  • One FARP per cow (CTLD_FatCow_FARP_<n>), emptied on pack and added again at the next deployment, never destroyed: fixes the ghost FARPs and the AI cow blowing up on take-off (evening server run). Stock guard: every cow FARP re-synced every 10 s and on each birth; a count that went up (VMCT's GRASS refill) is put back, foreign weapons removed, FARPs of packed cows emptied.
  • Settings fatCow*, catalogue 2.3.0 (shape + oracle), EN/FR docs (pilot + mission maker), FR/ES/KO translations (proposal for review).
  • Small changes to the crate system: CTLDCrate.canBeUnpacked is false for a cow crate; getLoadedCrateWeight and _respawnStatic use metadata.massKg (a part-used cow crate weighs what it still holds); CTLDCrateManager:registerDescriptor and :loadIntoHold.

Test plan

  • busted (local runner): 1417 passing; the only failure is the local runner's missing assert.truthy, as on develop
  • ctld-tools pytest green; built CTLD.lua loads (smoke)
  • Live, single player: ticket 01 spike (Zip)
  • Live, Privé 1 (Zip as a client): piloted cow deployed near Akrotiri, Apache refuelled and rearmed
  • Live, Privé 1, evening run with the squadron (v3): findings 1-6 in ticket 06, fixed here
  • Live: ticket 06 part C (lot 1 fixes, Russian loadouts, warehouse item names to measure)
  • pr-code-review on this PR before merge

Backlog: .backlog/FEAT-FAT-COW/ (PRD, tickets 01-06).

🤖 Generated with Claude Code

davidp57 and others added 30 commits October 26, 2026 09:41
… its vehicles

Opens the FEAT-FAT-COW lot. Ticket 01 measures in DCS, before any Fat Cow
code, whether a FARP spawned mid-mission serves a player already in game,
whether a finite warehouse stock is enforced and seen alike by server and
client, and whether an Invisible FARP needs trucks in range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The spike needs no flying: both slots now start hot on the field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A runtime Invisible FARP serves a player already in game, enforces a
finite stock set by script, and serves nothing without trucks in range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…countryside warehouse comment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…of the rear rotor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…end to end

The ammo crates and barrels shared their DCS types with existing registry
entries, which made findByDCSType's answer depend on spec order. They are
spawned by a scene step, named CTLD_ so they are never loadable crates; the
FARP reuses the Invisible_FARP entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- packing while the scene lays out aborts it (no orphan objects)
- an AI cow whose flight is gone packs and goes home
- the Land task keeps the cow down for a day, not an hour
- cow crate descriptors go through CTLDCrateManager:registerDescriptor
- a part-used crate respawns on the ground at what it still weighs
- packing gives every crate the FARP opened with its share back
- a late-activated escort activates the mission cow only once it is active

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…test build)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…m anywhere

Land here, Take off, Hold here, Join us: nothing moves on its own for a
player flight (the cow left whenever the leader hopped onto its FARP).
An AI flight's cow keeps landing and taking off with its leader. The
cow comes airborne from the nearest friendly logistic zone on land, with
an estimated joining time. Fat Cow status (position, ETA, stock, also
before landing) and FARP status (the Fat Cow FARP you are at).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the CH-47 too

Load: Full fuel / 4 Hellfires + max fuel / Max weapons + max fuel
(fatCowLoadouts), Unload the Fat Cow crates. Mission FARP warehouses are
logged at start, a measurement before FARP status covers every FARP.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
davidp57 and others added 7 commits October 26, 2026 17:52
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Evening server run findings and Zip's loadout profiles (lot 1):
- one Invisible FARP per cow (CTLD_FatCow_FARP_<n>), emptied on pack and
  added again at the next deployment, never destroyed (ghost FARPs, AI cow
  blowing up on take-off); an AI cow's FARP is reused by the next one
- stock guard: counts that went up are put back, foreign weapons removed,
  every cow FARP re-synced every 10 s and on each birth (now and +2 s),
  FARPs of packed cows emptied
- loadouts list fuel kg and items and are split into crates by content,
  not by translated crate name (refused on the French server)
- four Hellfire + 30 mm profiles with two 800 gal tanks; crates of 20
  laser, 20 radar (AGM-114L), 1200 rounds
- AI cow: 80 % internal fuel, the requesting flight picks the loadout,
  mission cows take entry.loadout; fatCowAIFuelKg/fatCowAIItems removed
- F10 menus regrouped into submenus; docs, CHANGELOG, ticket 06, roadmap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lot 2 (Zip): the cow stays a CH-47 whatever the requester flies; Russian
and mixed loadouts are added in Russian and Mixed submenus of Load and
Request a Fat Cow (new optional `menu` field of a loadout).
- crates: 20 Vikhr, 16 Ataka, 16 Shturm, 460 rounds of 2A42 HE and AP,
  500 rounds of GSh-30 (names and missile masses from the DCS data mine)
- loadouts: Ka-50 (40 or 60 Vikhr with 2A42), Mi-24P (32 Ataka or 32
  Shturm with GSh-30), two Apache + Russian mixes; all with two 800 gal
  tanks, 6 400 to 8 200 kg, 5 to 8 crates
- labels for the new items; docs, CHANGELOG, ticket 06 step C6, roadmap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… a pilot

Review of PR #273:
- the fuel depot step is no longer `critical`: a depot that cannot be
  added stows the cow and tells its audience, instead of leaving it
  deploying in silence; onSceneFailed empties the FARP already added
- a pilot taking the slot of a piloted cow whose FARP was left open
  closes it, emptied, instead of "already deployed" and a pack that no
  longer finds the previous pilot's crates
- comments: what writeWarehouse can reach, deploy's "failed" reason, the
  module's dependencies; pilot docs and CHANGELOG

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@davidp57
davidp57 merged commit 20a0a00 into develop Oct 27, 2026
10 checks passed
davidp57 added a commit to VEAF/VEAF-Mission-Creation-Tools that referenced this pull request Oct 27, 2026
… (FIX-FATCOW-CTLD-FARPS) (#1202)

* fix(grass,csar): leave CTLD Fat Cow FARPs alone, give the CH-47F CSAR

From the CTLD Fat Cow server run of 2026-10-26 (VEAF/CTLD#273):
- veafGrass.fillAllFarpWarehouses refilled every FARP on each player
  birth, CTLD's Fat Cow FARPs included, so a cow came back full each time
  (packs read 50 035 kg from a cow that carried 7 200); airbases named
  CTLD_... are now skipped
- csar.aircraftType lists CH-47Fbl1 (24), a VEAF adaptation recorded in
  vendored.yaml, so the Chinook has the CSAR menu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(backlog): FIX-FATCOW-CTLD-FARPS ticket 02, the Fat Cow in the demo mission before the next release

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(backlog): active lot count after merging develop

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
davidp57 added a commit to VEAF/VEAF-Mission-Creation-Tools that referenced this pull request Oct 27, 2026
… the mission is missing, not removed (#1204)

* chore(vendored): take CTLD 2.0.0-rc15, the Fat Cow; a list newer than the mission is missing, not removed

rc15 ships the Fat Cow (VEAF/CTLD#273) and catalogue 2.3.0, and gives a
list newer than a mission's configuration its default (VEAF/CTLD#275):
in rc14 a 2.2.0 ctld-config.yaml had no Fat Cow aircraft, crate or
loadout. validate and ctld-upgrade read ctld.configListSince from the
vendored engine, so ctld-upgrade writes the Fat Cow lists in instead of
stamping 2.3.0 over their absence. Release asset, LF-normalised.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(backlog): CHORE-VENDOR-CTLD-RC15 is PR #1204

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(types): read_list_since takes the optional engine path

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant