> For the complete documentation index, see [llms.txt](https://code-after-sex.gitbook.io/script-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-after-sex.gitbook.io/script-documentation/cas-fishing/configuration/the-fight.md).

# The fight

Tune the fishing minigame difficulty in CAS Fishing — line tension, runs, slack and how a player loses the fish.

The contest between hooking a fish and landing it. All of this is `Config.Fight`.

***

## How it works

One tension meter, and the player's whole job is to keep it off the stop.

* **Reeling** loads the line and makes ground
* **Letting go** relieves it
* **Pulling against a run** loads it at an **accelerating** rate

That acceleration is the point. A moment's slow reaction barely registers; hanging on through an entire run snaps the line.

***

## Losing the fish

| Cause            | Setting                          |
| ---------------- | -------------------------------- |
| Line snaps       | tension reaches `snapAt`         |
| Hook works loose | line left slack for `slackLimit` |
| It tears free    | `escapeChance`, rolled per run   |

***

## The numbers

```lua
Config.Fight = {
  runMin = 2000,  runMax = 3800,     -- how long a run lasts
  restMin = 1100, restMax = 1900,    -- and the rest between

  reelGain = 19.0,                   -- progress per second while reeling
  runGain  = 7.0,                    -- ...while pulling against a run
  idleDecay = 6.0,                   -- lost per second doing nothing

  tensionRest = 0.20,                -- load while reeling a resting fish
  tensionRun  = 0.26,                -- load while pulling against a run
  tensionRamp = 2.4,                 -- how fast that gets worse
  tensionFall = 0.46,                -- recovery when you let go
  snapAt      = 1.0,

  slackLimit  = 3.5,                 -- seconds before the hook works loose
  escapeChance = 0.02,               -- per run, scaled by size
}
```

***

## Tuning it

`tensionRamp` is the dial that matters. It decides how much a slow reaction costs.

| `tensionRamp` | A \~0.4s late release survives |
| ------------- | ------------------------------ |
| 1.6           | \~88% of the time              |
| **2.4**       | **\~74% — shipped default**    |
| 3.2           | \~62%                          |

For an easier fight, raise `reelGain` before you touch the tension — it shortens the fight without making mistakes cheaper.

{% hint style="warning" %}
Do not make pulling against a run a flat progress **loss**. That was tried: a run took back more than a rest could give, so the ring never filled and the fight could not be finished at all.
{% endhint %}

***

## How long a fight lasts

Played well, against played badly:

| Species         | Reading the fish | Reeling through runs |
| --------------- | ---------------- | -------------------- |
| Bluegill        | \~11s            | \~16s                |
| Smallmouth Bass | \~20s            | \~41s                |
| Lake Sturgeon   | \~25s            | \~69s                |

***

## The rod

The rod leans after the fish, driven through the task's own rod position, so the engine bends it rather than the script animating anything.

```lua
rodLean     = 0.42,   -- how far the tip goes over
rodLeanRate = 3.2,    -- how quickly it gets there
```

## Landing

Filling the ring does not land the fish. It is drawn in on the line and only lifted out once it is genuinely at the bank.

```lua
haulMs    = 1900,
haulSpeed = 2.4,
landDistance = 3.0,
```
