Compare commits
5 commits
d6ffad85cc
...
72a4a2e164
| Author | SHA1 | Date | |
|---|---|---|---|
| 72a4a2e164 | |||
| 76e91385f6 | |||
| 4b8deb012c | |||
| a91bff6110 | |||
| e1506d263b |
34 changed files with 2681 additions and 2001 deletions
|
|
@ -13,6 +13,15 @@ Always validate IdleSpectator changes with the in-game harness.
|
|||
Do not rely on OS mouse/keyboard automation (Wayland-flaky).
|
||||
Do not call `Application.Quit()` (can hang Steam on Linux).
|
||||
|
||||
## Sandbox / permissions (required)
|
||||
|
||||
**Never start, relaunch, or kill WorldBox / Steam from the Cursor sandbox.**
|
||||
|
||||
- `scripts/harness-run.sh` may launch the game when it is not already running.
|
||||
- `pkill`, Steam, and game process control also fail or misbehave under sandbox.
|
||||
- Always run harness commands (and any WorldBox process control) with **unrestricted / `all` permissions** so they execute outside the sandbox.
|
||||
- Prefer `--no-launch` only when WorldBox is already running *and* you still use unrestricted permissions for the runner itself (log tail, `.harness` I/O under the live mod path).
|
||||
|
||||
## WorldBox wiki (mechanics source of truth)
|
||||
|
||||
When deciding what is “interesting” for Spectator or Chronicle, **read the official wiki** before inventing behavior:
|
||||
|
|
|
|||
|
|
@ -24,9 +24,80 @@ public static class ActivityActionComposer
|
|||
verb = "work";
|
||||
}
|
||||
|
||||
string[] bag = ActivityActionLexicon.GetBag(voice, verb, hasTarget, ctx.Terrain);
|
||||
string[] bag = GetBag(voice, verb, hasTarget, ctx.Terrain);
|
||||
string phrase = Pick(bag, subjectId, lineIndex);
|
||||
return ActivityModifierVoiceOverlay.Apply(phrase, voice, verb, subjectId, lineIndex);
|
||||
phrase = ActivityModifierVoiceOverlay.Apply(phrase, voice, verb, subjectId, lineIndex);
|
||||
return EnsureUnloadTokens(key, phrase);
|
||||
}
|
||||
|
||||
private static string[] GetBag(
|
||||
ProseVoice voice,
|
||||
string verb,
|
||||
bool hasTarget,
|
||||
ActivityTerrain terrain)
|
||||
{
|
||||
voice ??= ProseVoice.Unknown();
|
||||
string v = string.IsNullOrEmpty(verb) ? "move" : verb;
|
||||
|
||||
if (voice.AssetKind == ActivityAssetKind.Vehicle)
|
||||
{
|
||||
return VehicleBag(v);
|
||||
}
|
||||
|
||||
string[] authored = ActivitySpeciesVoiceCatalog.GetBag(voice.BaseSpeciesId, v, terrain);
|
||||
if (authored != null && authored.Length > 0)
|
||||
{
|
||||
return authored;
|
||||
}
|
||||
|
||||
// Last resort for unknown future assets - not the normal prose path.
|
||||
return TinyFallback(v, hasTarget);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Haul-to-store keeps place and names cargo once (no trailing while-carrying needed).
|
||||
/// </summary>
|
||||
private static string EnsureUnloadTokens(string key, string phrase)
|
||||
{
|
||||
if (string.IsNullOrEmpty(phrase) || string.IsNullOrEmpty(key))
|
||||
{
|
||||
return phrase ?? "";
|
||||
}
|
||||
|
||||
if (!key.Equals("BehUnloadResources", StringComparison.OrdinalIgnoreCase)
|
||||
&& !key.Equals("BehThrowResources", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return phrase;
|
||||
}
|
||||
|
||||
string result = phrase;
|
||||
if (result.IndexOf("{carrying}", StringComparison.Ordinal) < 0)
|
||||
{
|
||||
result = "unloads {carrying}, " + LowerFirst(result);
|
||||
}
|
||||
|
||||
if (result.IndexOf("{place_at}", StringComparison.Ordinal) < 0
|
||||
&& result.IndexOf("{place}", StringComparison.Ordinal) < 0)
|
||||
{
|
||||
result += "{place_at}";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string LowerFirst(string s)
|
||||
{
|
||||
if (string.IsNullOrEmpty(s))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
if (s.Length == 1)
|
||||
{
|
||||
return s.ToLowerInvariant();
|
||||
}
|
||||
|
||||
return char.ToLowerInvariant(s[0]) + s.Substring(1);
|
||||
}
|
||||
|
||||
private static ProseVoice EnsureVoice(ActivityContext ctx)
|
||||
|
|
@ -56,7 +127,7 @@ public static class ActivityActionComposer
|
|||
{
|
||||
if (bag == null || bag.Length == 0)
|
||||
{
|
||||
return "moves along{place_at}{job_as}";
|
||||
return "moves along";
|
||||
}
|
||||
|
||||
if (bag.Length == 1)
|
||||
|
|
@ -68,4 +139,73 @@ public static class ActivityActionComposer
|
|||
int index = actorVariation % Math.Min(2, bag.Length);
|
||||
return bag[index];
|
||||
}
|
||||
|
||||
private static string[] VehicleBag(string verb)
|
||||
{
|
||||
return verb switch
|
||||
{
|
||||
"move" => new[] { "cuts steadily across the water", "sails onward with the current" },
|
||||
"wait" => new[] { "rides quietly at rest on the water", "holds position on the gentle swell" },
|
||||
"fish" => new[] { "works the water for fish", "casts for a catch from the deck" },
|
||||
"trade" => new[] { "carries trade across the water{place_at}", "makes a measured trading run{place_at}" },
|
||||
"haul" => new[] { "takes cargo aboard", "settles the load for passage" },
|
||||
"settle" => new[] { "holds at the quay{place_at}", "ties up for harbor business{place_at}" },
|
||||
"farm" => new[] { "works deck cargo from the fields{place_at}", "ferries produce to harbor{place_at}" },
|
||||
_ => new[] { "continues working on the water", "keeps steadily to its course" }
|
||||
};
|
||||
}
|
||||
|
||||
private static string[] TinyFallback(string verb, bool hasTarget)
|
||||
{
|
||||
string place = (verb == "settle" || verb == "trade" || verb == "farm") ? "{place_at}" : "";
|
||||
return verb switch
|
||||
{
|
||||
"farm" => new[] { "tends the fields with patient care" + place, "works the soil from row to row" + place },
|
||||
"haul" => new[] { "unloads {carrying} after a long haul", "delivers {carrying} into storage" },
|
||||
"pollinate" => new[] { "works carefully among the blossoms", "moves steadily from flower to flower" },
|
||||
"fish" => new[] { "works the water for fish", "waits patiently for a bite" },
|
||||
"heal" => hasTarget
|
||||
? new[] { "tends carefully to {target}", "works to heal {target}" }
|
||||
: new[] { "tends wounds with careful hands", "works patiently to recover" },
|
||||
"fire" => new[] { "fights the blaze with urgent care", "battles fire before it spreads" },
|
||||
"flee" => new[] { "bolts away from danger", "retreats before danger closes in" },
|
||||
"work" => new[] { "works steadily at the task", "labors through the task at hand" },
|
||||
"trade" => new[] { "trades and bargains" + place, "haggles through a careful deal" + place },
|
||||
"settle" => new[] { "handles civic business" + place, "sees to matters around the settlement" + place },
|
||||
"warrior" => hasTarget
|
||||
? new[] { "holds formation against {target}", "drills for war near {target}" }
|
||||
: new[] { "stands ready for battle", "keeps formation ready" },
|
||||
"read" => new[] { "reads with quiet attention", "studies the page" },
|
||||
"lover" => hasTarget
|
||||
? new[] { "draws close to {target}", "shares a tender moment with {target}" }
|
||||
: new[] { "follows the pull of kinship", "seeks companionship" },
|
||||
"gather_life" => new[] { "gathers with kin", "moves among the group" },
|
||||
"move" => new[] { "wanders without hurry", "roams nearby, looking around" },
|
||||
"wait" => new[] { "waits in watchful quiet", "stands still and watches" },
|
||||
"play" => new[] { "paces, turns, and doubles back", "moves in quick, restless bursts" },
|
||||
"eat" => new[] { "sits down to eat", "finishes a meal" },
|
||||
"sleep" => new[] { "settles into deep sleep", "rests after the day's demands" },
|
||||
"hunt" => hasTarget
|
||||
? new[] { "pursues {target}", "closes in on {target}" }
|
||||
: new[] { "searches for prey", "moves quietly on the hunt" },
|
||||
"fight" => hasTarget
|
||||
? new[] { "fights {target} in a fierce clash", "trades blows with {target}" }
|
||||
: new[] { "fights with fierce resolve", "clashes without giving ground" },
|
||||
"social" => hasTarget
|
||||
? new[] { "spends time with {target}", "talks and lingers with {target}" }
|
||||
: new[] { "looks for company", "lingers near others" },
|
||||
"laugh" => new[] { "laughs out loud", "breaks into bright laughter" },
|
||||
_ => hasTarget
|
||||
? new[]
|
||||
{
|
||||
"attends to " + verb.Replace('_', ' ') + " with {target}",
|
||||
"works on " + verb.Replace('_', ' ') + " near {target}"
|
||||
}
|
||||
: new[]
|
||||
{
|
||||
"attends to " + verb.Replace('_', ' '),
|
||||
"works through " + verb.Replace('_', ' ')
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,344 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace IdleSpectator;
|
||||
|
||||
/// <summary>Phrase fragments keyed by the already-resolved voice. No ActorAsset lookup.</summary>
|
||||
public static class ActivityActionLexicon
|
||||
{
|
||||
public static string[] GetBag(
|
||||
ProseVoice voice,
|
||||
string verb,
|
||||
bool hasTarget,
|
||||
ActivityTerrain terrain = ActivityTerrain.Unknown)
|
||||
{
|
||||
voice ??= ProseVoice.Unknown();
|
||||
string v = string.IsNullOrEmpty(verb) ? "move" : verb;
|
||||
|
||||
if (voice.AssetKind == ActivityAssetKind.Vehicle)
|
||||
{
|
||||
return VehicleBag(v);
|
||||
}
|
||||
|
||||
string[] authored = ActivitySpeciesVoiceCatalog.GetBag(voice.BaseSpeciesId, v, terrain);
|
||||
if (authored != null && authored.Length > 0)
|
||||
{
|
||||
return authored;
|
||||
}
|
||||
|
||||
// Safe fallback for unknown future assets that are not yet in the authored catalog.
|
||||
if (voice.Modifier != ActivityModifier.None)
|
||||
{
|
||||
string[] modifier = ModifierBag(voice, v, hasTarget);
|
||||
if (modifier != null) return modifier;
|
||||
}
|
||||
|
||||
string[] body = BodyBag(voice.BaseBodyTag, v, hasTarget, terrain);
|
||||
return body ?? GenericBag(v, hasTarget);
|
||||
}
|
||||
|
||||
private static string[] ModifierBag(ProseVoice voice, string verb, bool hasTarget)
|
||||
{
|
||||
switch (voice.Modifier)
|
||||
{
|
||||
case ActivityModifier.Undead:
|
||||
return UndeadBag(voice.BaseBodyTag, verb, hasTarget);
|
||||
case ActivityModifier.Elemental:
|
||||
return verb switch
|
||||
{
|
||||
"move" => new[] { "surges ahead in a trail of flame{place_at}", "flows forward in a rolling blaze{place_at}" },
|
||||
"wait" => new[] { "flickers in place{place_at}", "burns steadily while waiting{place_at}" },
|
||||
"play" => new[] { "flickers into quick spirals and sudden bursts{place_at}", "loops in bright arcs of flame{place_at}" },
|
||||
"eat" => new[] { "feeds the inner flame{place_at}", "draws fuel into the flames{place_at}" },
|
||||
"sleep" => new[] { "dims into a banked rest{place_at}", "settles into a low, steady glow{place_at}" },
|
||||
"hunt" => Targeted(hasTarget, "surges after {target}{place_at}", "hunts {target} in a trail of heat{place_at}", "searches for prey in flickering sweeps{place_at}", "hunts as flames flicker and rise{place_at}"),
|
||||
"fight" => Targeted(hasTarget, "crashes into {target} in a burst of flame{place_at}", "flares against {target}{place_at}", "fights in a storm of sparks{place_at}", "clashes amid sparks and flame{place_at}"),
|
||||
"laugh" => new[] { "crackles with bright laughter{place_at}", "flares in a laughing burst{place_at}" },
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
case ActivityModifier.Mush:
|
||||
return verb switch
|
||||
{
|
||||
"move" => new[] { "shuffles ahead in soft, uneven steps{place_at}", "creeps forward as spores drift{place_at}" },
|
||||
"wait" => new[] { "rests while spores drift around it{place_at}", "waits while faint spores drift{place_at}" },
|
||||
"play" => new[] { "bobs and puffs spores in short bursts{place_at}", "wobbles about, shedding little clouds of spores{place_at}" },
|
||||
"eat" => new[] { "feeds slowly on decaying matter{place_at}", "draws a slow meal from decay{place_at}" },
|
||||
"sleep" => new[] { "settles into a soft, quiet rest{place_at}", "folds down among drifting spores{place_at}" },
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
case ActivityModifier.Tumor:
|
||||
return verb switch
|
||||
{
|
||||
"move" => new[] { "pulses forward as its mass shifts{place_at}", "lurches ahead in uneven surges{place_at}" },
|
||||
"wait" => new[] { "throbs in unsettling stillness{place_at}", "quivers without moving on{place_at}" },
|
||||
"play" => new[] { "writhes and recoils in restless loops{place_at}", "pulses in an oddly buoyant rhythm{place_at}" },
|
||||
"eat" => new[] { "feeds with consuming hunger{place_at}", "absorbs food into the growing mass{place_at}" },
|
||||
"fight" => Targeted(hasTarget, "lashes into {target} with terrible force{place_at}", "surges against {target}{place_at}", "fights in a thrashing fury{place_at}", "clashes in a violent rush{place_at}"),
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
case ActivityModifier.Alien:
|
||||
return verb switch
|
||||
{
|
||||
"move" => new[] { "glides ahead without a sound{place_at}", "tracks a precise, unfamiliar course{place_at}" },
|
||||
"wait" => new[] { "observes in unreadable stillness{place_at}", "stands motionless and watches{place_at}" },
|
||||
"play" => new[] { "repeats curious patterns of motion{place_at}", "darts, pauses, and changes direction without warning{place_at}" },
|
||||
"hunt" => Targeted(hasTarget, "tracks {target} without a sound{place_at}", "closes on {target} in eerie silence{place_at}", "scans for prey{place_at}", "hunts by unfamiliar instinct{place_at}"),
|
||||
"fight" => Targeted(hasTarget, "strikes at {target} with uncanny precision{place_at}", "clashes with {target} in sudden bursts{place_at}", "fights with unreadable intent{place_at}", "attacks in a precise rush{place_at}"),
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
case ActivityModifier.Construct:
|
||||
return verb switch
|
||||
{
|
||||
"move" => new[] { "moves in measured, jointed steps{place_at}", "shifts forward with deliberate precision{place_at}" },
|
||||
"wait" => new[] { "idles in rigid watchfulness{place_at}", "stays motionless, mechanisms quiet{place_at}" },
|
||||
"play" => new[] { "repeats a sequence of precise motions{place_at}", "spins and resets with mechanical exactness{place_at}" },
|
||||
"eat" => new[] { "takes in fuel with mechanical care{place_at}", "replenishes what keeps it moving{place_at}" },
|
||||
"sleep" => new[] { "powers down into quiet rest{place_at}", "settles into a dormant stillness{place_at}" },
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static string[] UndeadBag(ActivityBodyTag body, string verb, bool hasTarget)
|
||||
{
|
||||
if (verb == "move")
|
||||
{
|
||||
return body switch
|
||||
{
|
||||
ActivityBodyTag.Canine => new[] { "pads ahead with a stiff, uneven gait{place_at}", "sniffs ahead and shambles on{place_at}" },
|
||||
ActivityBodyTag.Feline => new[] { "slinks ahead in eerie silence{place_at}", "pads forward with stiff precision{place_at}" },
|
||||
ActivityBodyTag.Insect => new[] { "skitters ahead on stiff little legs{place_at}", "crawls forward in twitching bursts{place_at}" },
|
||||
ActivityBodyTag.Plant => new[] { "creeps ahead in withered motion{place_at}", "drags dead growth behind it{place_at}" },
|
||||
ActivityBodyTag.Dragon => new[] { "lumbers ahead with the weight of a fallen giant{place_at}", "advances like ruin given motion{place_at}" },
|
||||
ActivityBodyTag.Bird => new[] { "flutters ahead on lifeless wings{place_at}", "hops forward in ragged, uneven motions{place_at}" },
|
||||
_ => new[] { "shambles forward in uneven steps{place_at}", "drifts along in restless undeath{place_at}" }
|
||||
};
|
||||
}
|
||||
|
||||
return verb switch
|
||||
{
|
||||
"wait" => new[] { "waits in hollow stillness{place_at}", "stands in restless silence{place_at}" },
|
||||
"play" => new[] { "lurches in clumsy circles{place_at}", "repeats jerking motions with eerie persistence{place_at}" },
|
||||
"eat" => new[] { "feeds with deathless hunger{place_at}", "tears into a meal with endless hunger{place_at}" },
|
||||
"sleep" => new[] { "slumps into a hollow rest{place_at}", "goes still in restless undeath{place_at}" },
|
||||
"hunt" => Targeted(hasTarget, "shambles after {target}{place_at}", "hunts {target} with hollow hunger{place_at}", "hunts with deathless hunger{place_at}", "searches for prey without rest{place_at}"),
|
||||
"fight" => Targeted(hasTarget, "lunges at {target} without fear{place_at}", "clashes with {target} in relentless fury{place_at}", "fights without fear or hesitation{place_at}", "presses on without giving ground{place_at}"),
|
||||
"laugh" => new[] { "groans in a broken laugh{place_at}", "makes a hollow sound of laughter{place_at}" },
|
||||
"social" => Targeted(hasTarget, "lingers near {target} in uneasy silence{place_at}", "stands beside {target} without a word{place_at}", "seeks company in deathly quiet{place_at}", "lingers among the living{place_at}"),
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
}
|
||||
|
||||
private static string[] BodyBag(
|
||||
ActivityBodyTag body,
|
||||
string verb,
|
||||
bool hasTarget,
|
||||
ActivityTerrain terrain)
|
||||
{
|
||||
if (verb == "move")
|
||||
{
|
||||
return body switch
|
||||
{
|
||||
ActivityBodyTag.Humanoid => new[] { "walks along, taking in the surroundings{place_at}", "wanders ahead at an easy pace{place_at}" },
|
||||
ActivityBodyTag.Canine => new[] { "trots along without hurry{place_at}", "roams ahead, following a scent{place_at}" },
|
||||
ActivityBodyTag.Feline => new[] { "pads softly along{place_at}", "slinks ahead at an easy pace{place_at}" },
|
||||
ActivityBodyTag.Bird => new[] { "flutters steadily onward{place_at}", "hops and flaps along nearby{place_at}" },
|
||||
ActivityBodyTag.Insect => new[] { "scuttles along without hurry{place_at}", "skitters quickly forward{place_at}" },
|
||||
ActivityBodyTag.Arachnid => new[] { "skitters onward on many legs{place_at}", "creeps ahead with careful steps{place_at}" },
|
||||
ActivityBodyTag.Amphibian => new[] { "hops from patch to patch{place_at}", "bounces along in springy steps{place_at}" },
|
||||
ActivityBodyTag.Aquatic => AquaticTerrainBag(
|
||||
terrain,
|
||||
"glides through the water{place_at}",
|
||||
"swims onward with easy strokes{place_at}",
|
||||
"moves forward in a smooth, winding motion{place_at}",
|
||||
"twists steadily onward{place_at}"),
|
||||
ActivityBodyTag.Reptile => new[] { "slides along without hurry{place_at}", "creeps forward in a low crawl{place_at}" },
|
||||
ActivityBodyTag.Livestock => new[] { "ambles along without hurry{place_at}", "wanders in slow, heavy steps{place_at}" },
|
||||
ActivityBodyTag.Plant => new[] { "creeps along as stems and leaves sway{place_at}", "eases forward in slow, leafy steps{place_at}" },
|
||||
ActivityBodyTag.Fungi => new[] { "drifts along in soft, uneven steps{place_at}", "spreads forward as spores trail behind{place_at}" },
|
||||
ActivityBodyTag.Protist => new[] { "oozes onward without hurry{place_at}", "pulses along in slow ripples{place_at}" },
|
||||
ActivityBodyTag.Machina => new[] { "moves ahead in measured steps{place_at}", "tracks a precise course{place_at}" },
|
||||
ActivityBodyTag.Mythic => new[] { "drifts forward without a sound{place_at}", "moves with an uncanny grace{place_at}" },
|
||||
ActivityBodyTag.Gregalia => new[] { "lopes onward with an uneven gait{place_at}", "wanders in twitchy, restless steps{place_at}" },
|
||||
ActivityBodyTag.Primate => new[] { "lopes onward with nimble curiosity{place_at}", "moves ahead in quick clever steps{place_at}" },
|
||||
ActivityBodyTag.Rodent => new[] { "scurries onward without hurry{place_at}", "pads ahead in quick little steps{place_at}" },
|
||||
ActivityBodyTag.Ursid => new[] { "lumbers onward with steady weight{place_at}", "pads ahead in heavy unhurried steps{place_at}" },
|
||||
ActivityBodyTag.Seal => new[] { "slides forward on its belly{place_at}", "bounds ahead with a sleek, rolling motion{place_at}" },
|
||||
ActivityBodyTag.Procyonid => new[] { "pads onward, nosing around{place_at}", "scampers ahead in nimble steps{place_at}" },
|
||||
ActivityBodyTag.Hyaenid => new[] { "lopes onward with rough confidence{place_at}", "trots ahead in rangy strides{place_at}" },
|
||||
ActivityBodyTag.Armadillo => new[] { "trundles onward with its body held low{place_at}", "scurries ahead in armored little steps{place_at}" },
|
||||
ActivityBodyTag.Crawler => new[] { "writhes steadily forward{place_at}", "crawls ahead without hurry{place_at}" },
|
||||
ActivityBodyTag.Cold => new[] { "moves onward in a breath of cold{place_at}", "drifts ahead with wintry calm{place_at}" },
|
||||
ActivityBodyTag.Crystal => new[] { "glides onward with crystalline precision{place_at}", "moves in stiff, glittering steps{place_at}" },
|
||||
ActivityBodyTag.Crab => new[] { "scuttles sideways{place_at}", "sidesteps onward behind a hard shell{place_at}" },
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
}
|
||||
|
||||
if (verb == "play")
|
||||
{
|
||||
return body switch
|
||||
{
|
||||
ActivityBodyTag.Canine => new[] { "tumbles, bounds, and wheels around{place_at}", "bounds, feints, and wrestles about{place_at}" },
|
||||
ActivityBodyTag.Feline => new[] { "bats, twists, and springs aside{place_at}", "pounces and leaps without warning{place_at}" },
|
||||
ActivityBodyTag.Bird => new[] { "flutters in looping arcs{place_at}", "hops and flaps about{place_at}" },
|
||||
ActivityBodyTag.Insect => new[] { "scuttles in quick zigzags{place_at}", "darts about in short bursts{place_at}" },
|
||||
ActivityBodyTag.Arachnid => new[] { "skitters in quick loops{place_at}", "darts about on many legs{place_at}" },
|
||||
ActivityBodyTag.Amphibian => new[] { "hops about in lively bursts{place_at}", "bounces back and forth{place_at}" },
|
||||
ActivityBodyTag.Aquatic => AquaticTerrainBag(
|
||||
terrain,
|
||||
"splashes and darts through the water{place_at}",
|
||||
"weaves quick circles through the water{place_at}",
|
||||
"twists and darts about{place_at}",
|
||||
"wriggles in quick loops{place_at}"),
|
||||
ActivityBodyTag.Crab => new[] { "scuttles in quick sideways loops{place_at}", "sidesteps and spins about{place_at}" },
|
||||
ActivityBodyTag.Reptile => new[] { "slides, coils, and doubles back{place_at}", "winds about in slow loops{place_at}" },
|
||||
ActivityBodyTag.Livestock => new[] { "stomps and bounds clumsily{place_at}", "frolics in heavy, eager bursts{place_at}" },
|
||||
ActivityBodyTag.Plant => new[] { "sways and twists in slow arcs{place_at}", "twists and rustles energetically{place_at}" },
|
||||
ActivityBodyTag.Primate => new[] { "clambers, swings, and doubles back{place_at}", "scrambles about with nimble mischief{place_at}" },
|
||||
ActivityBodyTag.Rodent => new[] { "scampers in tight circles{place_at}", "darts about in quick zigzags{place_at}" },
|
||||
ActivityBodyTag.Ursid => new[] { "rolls over and lumbers upright again{place_at}", "lumbers about with clumsy cheer{place_at}" },
|
||||
ActivityBodyTag.Crawler => new[] { "loops around and doubles back{place_at}", "writhes about in restless circles{place_at}" },
|
||||
_ => new[] { "paces, turns, and doubles back{place_at}", "moves in quick, restless bursts{place_at}" }
|
||||
};
|
||||
}
|
||||
|
||||
if (verb == "wait")
|
||||
{
|
||||
return body switch
|
||||
{
|
||||
ActivityBodyTag.Insect => new[] { "holds still with its antennae raised{place_at}", "waits while its antennae twitch{place_at}" },
|
||||
ActivityBodyTag.Amphibian => new[] { "crouches low and waits{place_at}", "sits still, ready to spring{place_at}" },
|
||||
ActivityBodyTag.Feline => new[] { "settles into a watchful crouch{place_at}", "waits without looking away{place_at}" },
|
||||
ActivityBodyTag.Canine => new[] { "waits with alert ears{place_at}", "holds a restless pause{place_at}" },
|
||||
ActivityBodyTag.Aquatic => AquaticTerrainBag(
|
||||
terrain,
|
||||
"hovers in the water and waits{place_at}",
|
||||
"drifts almost motionless in the water{place_at}",
|
||||
"rests almost motionless{place_at}",
|
||||
"waits with only a faint twitch{place_at}"),
|
||||
ActivityBodyTag.Bird => new[] { "perches and waits{place_at}", "holds a light watchful pause{place_at}" },
|
||||
ActivityBodyTag.Plant => new[] { "holds a rooted pause{place_at}", "stands still with leaves barely stirring{place_at}" },
|
||||
ActivityBodyTag.Machina => new[] { "idles in a watchful hold{place_at}", "stays still and scans the surroundings{place_at}" },
|
||||
_ => new[] { "waits in watchful quiet{place_at}", "stands quietly and watches{place_at}" }
|
||||
};
|
||||
}
|
||||
|
||||
if (verb == "hunt")
|
||||
{
|
||||
return body switch
|
||||
{
|
||||
ActivityBodyTag.Canine => Targeted(hasTarget, "hunts {target} by scent{place_at}", "follows {target}'s trail{place_at}", "follows the scent of prey{place_at}", "hunts by scent{place_at}"),
|
||||
ActivityBodyTag.Feline => Targeted(hasTarget, "hunts {target} in silence{place_at}", "stalks {target} without a sound{place_at}", "hunts without making a sound{place_at}", "stalks prey in silence{place_at}"),
|
||||
ActivityBodyTag.Bird => Targeted(hasTarget, "tracks {target} with sharp eyes{place_at}", "circles after {target}{place_at}", "searches keenly for prey{place_at}", "circles after prey{place_at}"),
|
||||
ActivityBodyTag.Insect => Targeted(hasTarget, "scuttles after {target}{place_at}", "darts toward {target}{place_at}", "searches for prey in quick bursts{place_at}", "scuttles after prey{place_at}"),
|
||||
ActivityBodyTag.Reptile => Targeted(hasTarget, "slides after {target}{place_at}", "creeps closer to {target}{place_at}", "waits low for prey to approach{place_at}", "stalks prey in a low crawl{place_at}"),
|
||||
_ => Targeted(hasTarget, "pursues {target}{place_at}", "closes in on {target}{place_at}", "searches for prey{place_at}", "moves quietly on the hunt{place_at}")
|
||||
};
|
||||
}
|
||||
|
||||
return verb switch
|
||||
{
|
||||
"fight" => Targeted(hasTarget, "fights {target} in a fierce clash{place_at}", "trades blows with {target}{place_at}", "fights with fierce resolve{place_at}", "clashes without giving ground{place_at}"),
|
||||
"eat" => body switch
|
||||
{
|
||||
ActivityBodyTag.Canine => new[] { "gulps down a meal{place_at}", "tears into a meal{place_at}" },
|
||||
ActivityBodyTag.Feline => new[] { "eats in small, careful bites{place_at}", "takes its time over a meal{place_at}" },
|
||||
ActivityBodyTag.Insect => new[] { "nibbles rapidly at a meal{place_at}", "eats in quick little bites{place_at}" },
|
||||
ActivityBodyTag.Plant => new[] { "draws nourishment slowly{place_at}", "feeds without moving from the spot{place_at}" },
|
||||
ActivityBodyTag.Livestock => new[] { "grazes with steady appetite{place_at}", "settles in to feed{place_at}" },
|
||||
_ => new[] { "sits down to eat{place_at}", "finishes a meal{place_at}" }
|
||||
},
|
||||
"sleep" => body switch
|
||||
{
|
||||
ActivityBodyTag.Canine => new[] { "curls into sleep{place_at}", "settles into deep rest{place_at}" },
|
||||
ActivityBodyTag.Feline => new[] { "curls into a neat sleep{place_at}", "settles into quiet rest{place_at}" },
|
||||
ActivityBodyTag.Bird => new[] { "tucks into sleep{place_at}", "roosts into rest{place_at}" },
|
||||
ActivityBodyTag.Aquatic => AquaticTerrainBag(
|
||||
terrain,
|
||||
"drifts into rest in the water{place_at}",
|
||||
"settles almost motionless in the water{place_at}",
|
||||
"goes still to rest{place_at}",
|
||||
"settles into a quiet sleep{place_at}"),
|
||||
ActivityBodyTag.Plant => new[] { "settles into leafy rest{place_at}", "goes completely still{place_at}" },
|
||||
_ => new[] { "settles into deep sleep{place_at}", "rests after the day's demands{place_at}" }
|
||||
},
|
||||
"social" => Targeted(hasTarget, "spends time with {target}{place_at}", "talks and lingers with {target}{place_at}", "looks for company{place_at}", "lingers near others{place_at}"),
|
||||
"laugh" => new[] { "laughs aloud and lets the mood carry{place_at}", "breaks into open laughter{place_at}" },
|
||||
"sing" => body == ActivityBodyTag.Bird
|
||||
? new[] { "sings out on light wings{place_at}", "fills the air with bright song{place_at}" }
|
||||
: new[] { "sings out for whoever will hear{place_at}", "raises a clear song{place_at}" },
|
||||
_ => GenericBag(verb, hasTarget)
|
||||
};
|
||||
}
|
||||
|
||||
private static string[] VehicleBag(string verb)
|
||||
{
|
||||
return verb switch
|
||||
{
|
||||
"move" => new[] { "cuts steadily across the water{place_at}", "sails onward with the current{place_at}" },
|
||||
"wait" => new[] { "rides quietly at rest on the water{place_at}", "holds position on the gentle swell{place_at}" },
|
||||
"fish" => new[] { "works the water for fish{place_at}", "casts for a catch from the deck{place_at}" },
|
||||
"trade" => new[] { "carries trade across the water{place_at}", "makes a measured trading run{place_at}" },
|
||||
"haul" => new[] { "takes cargo aboard{place_at}", "settles the load for passage{place_at}" },
|
||||
_ => new[] { "continues working on the water{place_at}", "keeps steadily to its course{place_at}" }
|
||||
};
|
||||
}
|
||||
|
||||
private static string[] GenericBag(string verb, bool hasTarget)
|
||||
{
|
||||
return verb switch
|
||||
{
|
||||
"farm" => new[] { "tends the fields with patient care{place_at}{job_as}", "works the soil from row to row{place_at}{job_as}" },
|
||||
"haul" => new[] { "unloads {carrying} after a long haul{place_at}{job_as}", "delivers {carrying} into storage{place_at}" },
|
||||
"pollinate" => new[] { "works carefully among the blossoms{place_at}", "moves steadily from flower to flower{place_at}" },
|
||||
"fish" => new[] { "works the water for fish{place_at}{job_as}", "waits patiently for a bite{place_at}" },
|
||||
"heal" => Targeted(hasTarget, "tends carefully to {target}{place_at}", "works to heal {target}{place_at}", "tends wounds with careful hands{place_at}", "works patiently to recover{place_at}"),
|
||||
"fire" => new[] { "fights the blaze with urgent care{place_at}", "battles fire before it spreads{place_at}" },
|
||||
"flee" => new[] { "bolts away from danger{place_at}", "retreats before danger closes in{place_at}" },
|
||||
"work" => new[] { "works steadily at the task{place_at}{job_as}", "labors through the task at hand{place_at}{job_as}" },
|
||||
"trade" => new[] { "trades and bargains{place_at}{job_as}", "haggles through a careful deal{place_at}" },
|
||||
"settle" => new[] { "handles civic business{place_at}{job_as}", "sees to matters around the settlement{place_at}" },
|
||||
"warrior" => Targeted(hasTarget, "holds formation against {target}{place_at}", "drills for war near {target}{place_at}", "stands ready for battle{place_at}", "keeps formation ready{place_at}"),
|
||||
"read" => new[] { "reads with quiet attention{place_at}", "studies the page{place_at}{job_as}" },
|
||||
"lover" => Targeted(hasTarget, "draws close to {target}{place_at}", "shares a tender moment with {target}{place_at}", "follows the pull of kinship{place_at}", "seeks companionship{place_at}"),
|
||||
"gather_life" => new[] { "gathers with kin{place_at}", "moves among the group{place_at}" },
|
||||
"move" => new[] { "wanders without hurry{place_at}", "roams nearby, looking around{place_at}" },
|
||||
"wait" => new[] { "waits in watchful quiet{place_at}", "stands still and watches{place_at}" },
|
||||
"play" => new[] { "paces, turns, and doubles back{place_at}", "moves in quick, restless bursts{place_at}" },
|
||||
"eat" => new[] { "sits down to eat{place_at}", "finishes a meal{place_at}" },
|
||||
"sleep" => new[] { "settles into deep sleep{place_at}", "rests after the day's demands{place_at}" },
|
||||
"hunt" => Targeted(hasTarget, "pursues {target}{place_at}", "closes in on {target}{place_at}", "searches for prey{place_at}", "moves quietly on the hunt{place_at}"),
|
||||
"fight" => Targeted(hasTarget, "fights {target} in a fierce clash{place_at}", "trades blows with {target}{place_at}", "fights with fierce resolve{place_at}", "clashes without giving ground{place_at}"),
|
||||
"social" => Targeted(hasTarget, "spends time with {target}{place_at}", "talks and lingers with {target}{place_at}", "looks for company{place_at}", "lingers near others{place_at}"),
|
||||
_ => hasTarget
|
||||
? new[] { "attends to " + verb.Replace('_', ' ') + " with {target}{place_at}", "works on " + verb.Replace('_', ' ') + " near {target}{place_at}" }
|
||||
: new[] { "attends to " + verb.Replace('_', ' ') + "{place_at}", "works through " + verb.Replace('_', ' ') + "{place_at}" }
|
||||
};
|
||||
}
|
||||
|
||||
private static string[] Targeted(
|
||||
bool hasTarget,
|
||||
string withTargetA,
|
||||
string withTargetB,
|
||||
string noTargetA,
|
||||
string noTargetB)
|
||||
{
|
||||
return hasTarget
|
||||
? new[] { withTargetA, withTargetB }
|
||||
: new[] { noTargetA, noTargetB };
|
||||
}
|
||||
|
||||
private static string[] AquaticTerrainBag(
|
||||
ActivityTerrain terrain,
|
||||
string liquidA,
|
||||
string liquidB,
|
||||
string nonLiquidA,
|
||||
string nonLiquidB)
|
||||
{
|
||||
return terrain == ActivityTerrain.Liquid
|
||||
? new[] { liquidA, liquidB }
|
||||
: new[] { nonLiquidA, nonLiquidB };
|
||||
}
|
||||
}
|
||||
|
|
@ -4,11 +4,20 @@ namespace IdleSpectator;
|
|||
|
||||
/// <summary>
|
||||
/// Assembles one alive activity sentence from observed <see cref="ActivityContext"/> clauses.
|
||||
/// Packs observed slots (life, identity, role/job, act, target, carrying, place, combat).
|
||||
/// Packs observed slots (life, identity, act, target, carrying, place, combat).
|
||||
/// Traits salt wording variety only - never named in the line (dossier already shows them).
|
||||
/// Job / role stay on the dossier reason row - never in Activity prose.
|
||||
/// </summary>
|
||||
public static class ActivityClauseAssembler
|
||||
{
|
||||
private static readonly string[] CargoImplicationWords =
|
||||
{
|
||||
"carrying", "haul", "hauls", "hauling", "load", "loads", "loading",
|
||||
"goods", "wheat", "berries", "spoils", "material", "cargo", "delivery",
|
||||
"unload", "unloads", "unloading", "store", "stores", "storage", "delivers",
|
||||
"weight", "bears", "heaves", "drags", "pulls", "draws", "packs", "carries"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Build a template still containing tokens for <see cref="ActivityProse.Apply"/>.
|
||||
/// Optional <paramref name="polishTemplate"/> is celebrity/family/beat flavor - still enriched.
|
||||
|
|
@ -34,38 +43,39 @@ public static class ActivityClauseAssembler
|
|||
subjectId,
|
||||
lineIndex);
|
||||
|
||||
bool placeInAppositive = false;
|
||||
string subject = BuildSubject(ctx, action, out placeInAppositive);
|
||||
// Strip any leftover job tokens - job belongs on the dossier, not Activity.
|
||||
action = StripToken(action, "{job_as}");
|
||||
action = StripToken(action, "{job}");
|
||||
|
||||
if (placeInAppositive)
|
||||
string subject = BuildSubject(ctx);
|
||||
string verb = ActivityVerbMap.Resolve(key);
|
||||
if (IsCompanionVerb(verb))
|
||||
{
|
||||
action = StripToken(action, "{place_at}");
|
||||
action = StripToken(action, "{job_as}");
|
||||
action = action.Replace(" at {place}", "");
|
||||
action = action.Replace(" into store{place}", " into store");
|
||||
action = StripToken(action, "{place}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Job already in appositive → drop trailing job_as; keep place_at on the verb.
|
||||
if (HasJobOrRole(ctx))
|
||||
{
|
||||
action = StripToken(action, "{job_as}");
|
||||
}
|
||||
action = BindSingletonCompanions(ctx, action);
|
||||
}
|
||||
|
||||
// Traits stay on the dossier chips - they only salt variety below, never named here.
|
||||
|
||||
string target = BuildObservedTargetClause(ctx, action);
|
||||
string target = BuildObservedTargetClause(ctx, action, verb);
|
||||
string carrying = BuildCarryingClause(ctx, action);
|
||||
string pressure = BuildPressureClause(ctx, action + target);
|
||||
string line = subject + " " + action + target + carrying + pressure;
|
||||
return CollapseSpaces(line).Trim();
|
||||
}
|
||||
|
||||
private static string BuildObservedTargetClause(ActivityContext ctx, string action)
|
||||
private static bool IsCompanionVerb(string verb)
|
||||
{
|
||||
return verb == "social"
|
||||
|| verb == "lover"
|
||||
|| verb == "cry"
|
||||
|| verb == "swear"
|
||||
|| verb == "group";
|
||||
}
|
||||
|
||||
private static string BuildObservedTargetClause(ActivityContext ctx, string action, string verb)
|
||||
{
|
||||
if (ctx == null
|
||||
|| !IsCompanionVerb(verb)
|
||||
|| !ctx.TargetIsActor
|
||||
|| string.IsNullOrEmpty(ctx.TargetName)
|
||||
|| ctx.InCombat
|
||||
|
|
@ -79,6 +89,73 @@ public static class ActivityClauseAssembler
|
|||
return " with {target}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rewrite singleton companion wording to the observed name; leave plural group wording alone.
|
||||
/// </summary>
|
||||
private static string BindSingletonCompanions(ActivityContext ctx, string action)
|
||||
{
|
||||
if (ctx == null
|
||||
|| !ctx.TargetIsActor
|
||||
|| string.IsNullOrEmpty(ctx.TargetName)
|
||||
|| string.IsNullOrEmpty(action)
|
||||
|| action.IndexOf("{target}", StringComparison.Ordinal) >= 0)
|
||||
{
|
||||
return action;
|
||||
}
|
||||
|
||||
string t = action;
|
||||
|
||||
// Longest / most specific first. Do not rewrite "among the others", "nearby family",
|
||||
// or "nearby group".
|
||||
t = ReplaceIgnoreCase(t, "another's", "{target}'s");
|
||||
t = ReplaceIgnoreCase(t, "another presence", "{target}");
|
||||
t = ReplaceIgnoreCase(t, "nearby company", "{target}");
|
||||
t = ReplaceIgnoreCase(t, "offers another", "offers {target}");
|
||||
t = ReplaceIgnoreCase(t, "with another", "with {target}");
|
||||
t = ReplaceIgnoreCase(t, "beside another", "beside {target}");
|
||||
t = ReplaceIgnoreCase(t, "against another", "against {target}");
|
||||
t = ReplaceIgnoreCase(t, "around another", "around {target}");
|
||||
t = ReplaceIgnoreCase(t, "facing another", "facing {target}");
|
||||
t = ReplaceIgnoreCase(t, "near another", "near {target}");
|
||||
t = ReplaceIgnoreCase(t, "from another", "from {target}");
|
||||
t = ReplaceIgnoreCase(t, " to another", " to {target}");
|
||||
t = ReplaceIgnoreCase(t, "greets another", "greets {target}");
|
||||
t = ReplaceIgnoreCase(t, "claps another", "claps {target}");
|
||||
t = ReplaceIgnoreCase(t, "nuzzles another", "nuzzles {target}");
|
||||
t = ReplaceIgnoreCase(t, "grooms another", "grooms {target}");
|
||||
t = ReplaceIgnoreCase(t, "circles another", "circles {target}");
|
||||
t = ReplaceIgnoreCase(t, "mirrors another", "mirrors {target}");
|
||||
t = ReplaceIgnoreCase(t, "answers another", "answers {target}");
|
||||
t = ReplaceIgnoreCase(t, "touches another", "touches {target}");
|
||||
t = ReplaceIgnoreCase(t, "joins another", "joins {target}");
|
||||
t = ReplaceIgnoreCase(t, "faces another", "faces {target}");
|
||||
t = ReplaceIgnoreCase(t, "sits beside another", "sits beside {target}");
|
||||
t = ReplaceIgnoreCase(t, "rests flank to flank beside another", "rests flank to flank beside {target}");
|
||||
t = ReplaceIgnoreCase(t, "winds around another", "winds around {target}");
|
||||
t = ReplaceIgnoreCase(t, "clucks back and forth with another", "clucks back and forth with {target}");
|
||||
t = ReplaceIgnoreCase(t, "rumbles a low greeting to another", "rumbles a low greeting to {target}");
|
||||
t = ReplaceIgnoreCase(t, "croaks a greeting to another", "croaks a greeting to {target}");
|
||||
t = ReplaceIgnoreCase(t, "shoulder-bumps another", "shoulder-bumps {target}");
|
||||
t = ReplaceIgnoreCase(t, "exchanges a sweeping bow with another", "exchanges a sweeping bow with {target}");
|
||||
t = ReplaceIgnoreCase(t, "bows stiffly to another", "bows stiffly to {target}");
|
||||
t = ReplaceIgnoreCase(t, "claps a loud welcome to another", "claps a loud welcome to {target}");
|
||||
t = ReplaceIgnoreCase(t, "shares low whispers with another", "shares low whispers with {target}");
|
||||
t = ReplaceIgnoreCase(t, "clasps forearms with another", "clasps forearms with {target}");
|
||||
t = ReplaceIgnoreCase(t, "exchanges brief greetings with another", "exchanges brief greetings with {target}");
|
||||
t = ReplaceIgnoreCase(t, "trades names and short updates with another", "trades names and short updates with {target}");
|
||||
t = ReplaceIgnoreCase(t, "greets another with", "greets {target} with");
|
||||
t = ReplaceIgnoreCase(t, " another a ", " {target} a ");
|
||||
t = ReplaceIgnoreCase(t, " another on ", " {target} on ");
|
||||
t = ReplaceIgnoreCase(t, " another with ", " {target} with ");
|
||||
t = ReplaceIgnoreCase(t, " another in ", " {target} in ");
|
||||
t = ReplaceIgnoreCase(t, " another during ", " {target} during ");
|
||||
t = ReplaceIgnoreCase(t, " another while ", " {target} while ");
|
||||
t = ReplaceIgnoreCase(t, " another between ", " {target} between ");
|
||||
t = ReplaceIgnoreCase(t, " another and ", " {target} and ");
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
private static string BuildCarryingClause(ActivityContext ctx, string action)
|
||||
{
|
||||
if (ctx == null
|
||||
|
|
@ -89,57 +166,37 @@ public static class ActivityClauseAssembler
|
|||
return "";
|
||||
}
|
||||
|
||||
if (ActionImpliesLoad(action))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
return " while carrying {carrying}";
|
||||
}
|
||||
|
||||
private static string BuildSubject(ActivityContext ctx, string action, out bool placeInAppositive)
|
||||
private static bool ActionImpliesLoad(string action)
|
||||
{
|
||||
placeInAppositive = false;
|
||||
string life = ctx.IsChild ? "young " : "";
|
||||
|
||||
// Species stays on the dossier nametag (Name (species)) - never "the angle" / "the dog" here.
|
||||
// Taxonomy still drives MannerTag variety in the action phrase.
|
||||
string identity = "{actor}";
|
||||
|
||||
string appositive = BuildAppositive(ctx, action, out placeInAppositive);
|
||||
if (string.IsNullOrEmpty(appositive))
|
||||
if (string.IsNullOrEmpty(action))
|
||||
{
|
||||
return life + identity;
|
||||
return false;
|
||||
}
|
||||
|
||||
return life + identity + ", " + appositive + ",";
|
||||
for (int i = 0; i < CargoImplicationWords.Length; i++)
|
||||
{
|
||||
if (action.IndexOf(CargoImplicationWords[i], StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static string BuildAppositive(ActivityContext ctx, string action, out bool placeInAppositive)
|
||||
private static string BuildSubject(ActivityContext ctx)
|
||||
{
|
||||
placeInAppositive = false;
|
||||
string roleOrJob = RoleOrJobNoun(ctx);
|
||||
string place = SafePlace(ctx);
|
||||
|
||||
// Traits are dossier chrome - never spell them in the activity line appositive.
|
||||
if (string.IsNullOrEmpty(roleOrJob))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
// Already named in the action (rare polish) - skip duplicate appositive.
|
||||
if (action.IndexOf(roleOrJob, StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
string head = "a " + roleOrJob;
|
||||
bool actionHasPlace = action.IndexOf("{place", StringComparison.Ordinal) >= 0
|
||||
|| (!string.IsNullOrEmpty(place)
|
||||
&& action.IndexOf(place, StringComparison.OrdinalIgnoreCase) >= 0);
|
||||
|
||||
if (!string.IsNullOrEmpty(place) && !actionHasPlace)
|
||||
{
|
||||
placeInAppositive = true;
|
||||
return head + " of " + place;
|
||||
}
|
||||
|
||||
return head;
|
||||
string life = ctx != null && ctx.IsChild ? "young " : "";
|
||||
// Species stays on the dossier nametag (Name (species)) - never "the angle" / "the dog" here.
|
||||
return life + "{actor}";
|
||||
}
|
||||
|
||||
private static string BuildPressureClause(ActivityContext ctx, string action)
|
||||
|
|
@ -172,29 +229,6 @@ public static class ActivityClauseAssembler
|
|||
return " while danger presses close";
|
||||
}
|
||||
|
||||
private static bool HasJobOrRole(ActivityContext ctx)
|
||||
{
|
||||
return !string.IsNullOrEmpty(RoleOrJobNoun(ctx));
|
||||
}
|
||||
|
||||
private static string StripUnusedTargetClauses(string action)
|
||||
{
|
||||
if (string.IsNullOrEmpty(action))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
string t = action;
|
||||
t = t.Replace(" with {target}", "");
|
||||
t = t.Replace(" on {target}", "");
|
||||
t = t.Replace(" toward {target}", "");
|
||||
t = t.Replace(" after {target}", "");
|
||||
t = t.Replace(" at {target}", "");
|
||||
t = t.Replace(" {target}", "");
|
||||
t = t.Replace("{target}", "");
|
||||
return t.Trim();
|
||||
}
|
||||
|
||||
/// <summary>Drop species tokens / "the dog" leftovers - dossier already shows species.</summary>
|
||||
private static string StripSpeciesTokens(string action, ActivityContext ctx)
|
||||
{
|
||||
|
|
@ -242,16 +276,6 @@ public static class ActivityClauseAssembler
|
|||
return hay.Substring(0, idx) + replacement + hay.Substring(idx + needle.Length);
|
||||
}
|
||||
|
||||
private static string RoleOrJobNoun(ActivityContext ctx)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(ctx.RoleLabel))
|
||||
{
|
||||
return ctx.RoleLabel.Trim().ToLowerInvariant();
|
||||
}
|
||||
|
||||
return ActivityProse.HumanizeJobPublic(ctx.JobId);
|
||||
}
|
||||
|
||||
/// <summary>Public salt so Format can mix trait into polish pick without naming the trait.</summary>
|
||||
public static long TraitVarietySaltPublic(ActivityContext ctx)
|
||||
{
|
||||
|
|
@ -279,22 +303,6 @@ public static class ActivityClauseAssembler
|
|||
return id.GetHashCode();
|
||||
}
|
||||
|
||||
private static string SafePlace(ActivityContext ctx)
|
||||
{
|
||||
string place = ctx.PlaceLabel ?? "";
|
||||
if (string.IsNullOrEmpty(place))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
if (ActivityInterestTable.LooksLikeSpeciesPublic(place, ctx.SpeciesId))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
return place.Trim();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Peel subject prefixes from celebrity/family templates so the assembler owns identity clauses.
|
||||
/// </summary>
|
||||
|
|
@ -336,50 +344,6 @@ public static class ActivityClauseAssembler
|
|||
return t.Trim();
|
||||
}
|
||||
|
||||
private static bool LooksLikeActionPhrase(string phrase)
|
||||
{
|
||||
if (string.IsNullOrEmpty(phrase))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Reject if it still looks like a full subject line.
|
||||
if (phrase.StartsWith("{actor}", StringComparison.Ordinal))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Measure substance without optional clause tokens - "{actor} plays{place_at}"
|
||||
// must not count as a living action once place is empty.
|
||||
string substance = phrase
|
||||
.Replace("{place_at}", "")
|
||||
.Replace("{job_as}", "")
|
||||
.Replace("{with}", "")
|
||||
.Replace("{place}", "")
|
||||
.Replace("{job}", "")
|
||||
.Replace("{target}", "")
|
||||
.Replace("{carrying}", "")
|
||||
.Replace("{species}", "")
|
||||
.Trim();
|
||||
while (substance.IndexOf(" ", StringComparison.Ordinal) >= 0)
|
||||
{
|
||||
substance = substance.Replace(" ", " ");
|
||||
}
|
||||
|
||||
if (substance.Length < 12)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Single-token leftovers like "plays" / "waits" are not alive enough.
|
||||
if (substance.IndexOf(' ') < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static string StripToken(string text, string token)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text) || string.IsNullOrEmpty(token))
|
||||
|
|
@ -406,19 +370,4 @@ public static class ActivityClauseAssembler
|
|||
t = t.Replace(",,", ",");
|
||||
return t;
|
||||
}
|
||||
|
||||
private static string LowerFirst(string s)
|
||||
{
|
||||
if (string.IsNullOrEmpty(s))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
if (s.Length == 1)
|
||||
{
|
||||
return s.ToLowerInvariant();
|
||||
}
|
||||
|
||||
return char.ToLowerInvariant(s[0]) + s.Substring(1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -218,6 +218,20 @@ public static class ActivityInterestTable
|
|||
return !string.IsNullOrEmpty(name) ? name : place;
|
||||
}
|
||||
|
||||
/// <summary>Living actor interactee name only - never a building/place label.</summary>
|
||||
public static string ActorTargetName(Actor actor)
|
||||
{
|
||||
ResolveTarget(actor, out string name, out bool isActor, out _);
|
||||
return isActor ? name : "";
|
||||
}
|
||||
|
||||
/// <summary>Building/tile/settlement label only - never an actor name.</summary>
|
||||
public static string PlaceOrObjectLabel(Actor actor)
|
||||
{
|
||||
ResolveTarget(actor, out _, out bool isActor, out string place);
|
||||
return isActor ? "" : (place ?? "");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Prefer live actor targets (by name). Places/buildings stay as type labels.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -237,7 +237,16 @@ public static class ActivityLog
|
|||
NoteTask(actor, taskId);
|
||||
}
|
||||
|
||||
public static void NoteActionBeat(Actor actor, string actionKey, string rawFact, string target)
|
||||
/// <summary>
|
||||
/// Curated behaviour beat. <paramref name="actorTarget"/> is a living unit name only;
|
||||
/// <paramref name="placeHint"/> is a building/place/object label and never becomes a companion.
|
||||
/// </summary>
|
||||
public static void NoteActionBeat(
|
||||
Actor actor,
|
||||
string actionKey,
|
||||
string rawFact,
|
||||
string actorTarget = "",
|
||||
string placeHint = "")
|
||||
{
|
||||
if (actor == null || !actor.isAlive() || string.IsNullOrEmpty(actionKey))
|
||||
{
|
||||
|
|
@ -267,14 +276,19 @@ public static class ActivityLog
|
|||
|
||||
LastBeatAt[id] = now;
|
||||
ActivityContext ctx = ActivityInterestTable.BuildContext(actor, actionKey);
|
||||
string taskId = ActivityInterestTable.SafeTaskId(actor);
|
||||
string jobId = ctx.JobId;
|
||||
if (string.IsNullOrEmpty(ctx.TargetName) && !string.IsNullOrEmpty(target))
|
||||
|
||||
if (string.IsNullOrEmpty(ctx.TargetName) && !string.IsNullOrEmpty(actorTarget))
|
||||
{
|
||||
ctx.TargetName = target;
|
||||
ctx.TargetName = actorTarget;
|
||||
ctx.TargetIsActor = true;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(ctx.PlaceLabel) && !string.IsNullOrEmpty(placeHint))
|
||||
{
|
||||
ctx.PlaceLabel = placeHint;
|
||||
}
|
||||
|
||||
if (actionKey == "BehUnloadResources" || actionKey == "BehThrowResources")
|
||||
{
|
||||
if (string.IsNullOrEmpty(ctx.CarryingLabel))
|
||||
|
|
@ -310,7 +324,7 @@ public static class ActivityLog
|
|||
CreatedAt = now,
|
||||
SubjectId = id,
|
||||
Kind = ActivityKind.ActionBeat,
|
||||
TaskId = string.IsNullOrEmpty(taskId) ? actionKey : taskId,
|
||||
TaskId = actionKey,
|
||||
JobId = jobId,
|
||||
TargetLabel = !string.IsNullOrEmpty(ctx.TargetName)
|
||||
? ctx.TargetName
|
||||
|
|
@ -321,6 +335,127 @@ public static class ActivityLog
|
|||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Life milestone mirrored into Activity (no beat cooldown). Death may use a dead actor.
|
||||
/// </summary>
|
||||
public static void NoteMilestone(Actor actor, string actionKey, string rawLine, string target = "")
|
||||
{
|
||||
if (actor == null || string.IsNullOrEmpty(actionKey) || string.IsNullOrEmpty(rawLine))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool allowDead = string.Equals(actionKey, "milestone_death", System.StringComparison.Ordinal);
|
||||
if (!allowDead)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!actor.isAlive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
long id;
|
||||
try
|
||||
{
|
||||
id = actor.getID();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (id == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string actorName;
|
||||
try
|
||||
{
|
||||
actorName = actor.getName();
|
||||
if (string.IsNullOrEmpty(actorName))
|
||||
{
|
||||
actorName = actor.asset != null ? actor.asset.id : "creature";
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
actorName = "creature";
|
||||
}
|
||||
|
||||
string targetName = target ?? "";
|
||||
string fact = rawLine;
|
||||
string clause = LowerFirst(fact);
|
||||
string display = string.IsNullOrEmpty(clause) ? actorName : actorName + " " + clause;
|
||||
string displayRich;
|
||||
if (string.IsNullOrEmpty(targetName))
|
||||
{
|
||||
displayRich = ActivityProse.ColorName(actorName) + (string.IsNullOrEmpty(clause) ? "" : " " + clause);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Prefer a clean subject + verb + colored target when the fact is a short Life line.
|
||||
string richTarget = ActivityProse.ColorName(targetName);
|
||||
if (string.Equals(actionKey, "milestone_kill", System.StringComparison.Ordinal))
|
||||
{
|
||||
display = actorName + " killed " + targetName;
|
||||
displayRich = ActivityProse.ColorName(actorName) + " killed " + richTarget;
|
||||
}
|
||||
else if (string.Equals(actionKey, "milestone_lover", System.StringComparison.Ordinal))
|
||||
{
|
||||
display = actorName + " became lovers with " + targetName;
|
||||
displayRich = ActivityProse.ColorName(actorName) + " became lovers with " + richTarget;
|
||||
}
|
||||
else if (string.Equals(actionKey, "milestone_friend", System.StringComparison.Ordinal))
|
||||
{
|
||||
display = actorName + " befriended " + targetName;
|
||||
displayRich = ActivityProse.ColorName(actorName) + " befriended " + richTarget;
|
||||
}
|
||||
else
|
||||
{
|
||||
displayRich = ActivityProse.ColorName(actorName)
|
||||
+ (string.IsNullOrEmpty(clause) ? "" : " " + clause);
|
||||
}
|
||||
}
|
||||
|
||||
float now = Time.unscaledTime;
|
||||
RecordSample(actionKey, isBeat: true);
|
||||
Append(id, new ActivityEntry
|
||||
{
|
||||
CreatedAt = now,
|
||||
SubjectId = id,
|
||||
Kind = ActivityKind.ActionBeat,
|
||||
TaskId = actionKey,
|
||||
JobId = "",
|
||||
TargetLabel = targetName,
|
||||
Line = fact,
|
||||
DisplayLine = display,
|
||||
DisplayLineRich = displayRich
|
||||
});
|
||||
}
|
||||
|
||||
private static string LowerFirst(string text)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
if (text.Length == 1)
|
||||
{
|
||||
return text.ToLowerInvariant();
|
||||
}
|
||||
|
||||
return char.ToLowerInvariant(text[0]) + text.Substring(1);
|
||||
}
|
||||
|
||||
/// <summary>Harness: inject activity without a live AI transition.</summary>
|
||||
public static bool ForceNote(
|
||||
long subjectId,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace IdleSpectator;
|
|||
/// </summary>
|
||||
public static class ActivityModifierVoiceOverlay
|
||||
{
|
||||
private const string ContextTokens = "{place_at}{job_as}";
|
||||
private const string PlaceToken = "{place_at}";
|
||||
|
||||
public static string Apply(
|
||||
string basePhrase,
|
||||
|
|
@ -32,10 +32,34 @@ public static class ActivityModifierVoiceOverlay
|
|||
}
|
||||
|
||||
int index = (int)((subjectId ^ (lineIndex * 397L)) & 1L) % bag.Length;
|
||||
string core = basePhrase.EndsWith(ContextTokens, StringComparison.Ordinal)
|
||||
? basePhrase.Substring(0, basePhrase.Length - ContextTokens.Length)
|
||||
: basePhrase;
|
||||
return core + bag[index] + ContextTokens;
|
||||
string core = basePhrase
|
||||
.Replace("{job_as}", "")
|
||||
.Replace("{job}", "");
|
||||
|
||||
bool restorePlace = false;
|
||||
if (WantsPlace(verb) && core.EndsWith(PlaceToken, StringComparison.Ordinal))
|
||||
{
|
||||
core = core.Substring(0, core.Length - PlaceToken.Length);
|
||||
restorePlace = true;
|
||||
}
|
||||
else if (core.EndsWith(PlaceToken, StringComparison.Ordinal))
|
||||
{
|
||||
// Never introduce or keep place on non-place-centric verbs via overlay.
|
||||
core = core.Substring(0, core.Length - PlaceToken.Length);
|
||||
}
|
||||
|
||||
string result = core + bag[index];
|
||||
if (restorePlace)
|
||||
{
|
||||
result += PlaceToken;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool WantsPlace(string verb)
|
||||
{
|
||||
return verb == "settle" || verb == "trade" || verb == "farm";
|
||||
}
|
||||
|
||||
private static string[] OverlayBag(
|
||||
|
|
|
|||
|
|
@ -190,22 +190,21 @@ public static class ActivityProse
|
|||
place = "";
|
||||
}
|
||||
|
||||
string job = HumanizeJob(ctx.JobId);
|
||||
string carrying = string.IsNullOrEmpty(ctx.CarryingLabel) ? "goods" : ctx.CarryingLabel;
|
||||
|
||||
string withClause = string.IsNullOrEmpty(target) ? "" : (" with " + target);
|
||||
// Empty place → empty clause (no forced "in town"). Job never appears in Activity.
|
||||
string placeAt = string.IsNullOrEmpty(place) ? "" : (" in " + place);
|
||||
string jobAs = string.IsNullOrEmpty(job) ? "" : (" as " + job);
|
||||
|
||||
string t = template;
|
||||
t = t.Replace("{actor}", actor);
|
||||
t = t.Replace("{species}", species);
|
||||
t = t.Replace("{with}", withClause);
|
||||
t = t.Replace("{place_at}", placeAt);
|
||||
t = t.Replace("{job_as}", jobAs);
|
||||
t = t.Replace("{job_as}", "");
|
||||
t = t.Replace("{job}", "");
|
||||
t = t.Replace("{carrying}", carrying);
|
||||
t = t.Replace("{place}", string.IsNullOrEmpty(place) ? "town" : place);
|
||||
t = t.Replace("{job}", string.IsNullOrEmpty(job) ? "their work" : job);
|
||||
|
||||
if (string.IsNullOrEmpty(target))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -74,16 +74,16 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
{
|
||||
var bags = new Dictionary<string, string[]>(StringComparer.Ordinal)
|
||||
{
|
||||
["move"] = Contextualize(move),
|
||||
["wait"] = Contextualize(wait),
|
||||
["play"] = Contextualize(play),
|
||||
["eat"] = Contextualize(eat),
|
||||
["sleep"] = Contextualize(sleep),
|
||||
["hunt"] = Contextualize(hunt),
|
||||
["fight"] = Contextualize(fight),
|
||||
["social"] = Contextualize(social),
|
||||
["laugh"] = Contextualize(laugh),
|
||||
["work"] = Contextualize(work)
|
||||
["move"] = Contextualize("move", move),
|
||||
["wait"] = Contextualize("wait", wait),
|
||||
["play"] = Contextualize("play", play),
|
||||
["eat"] = Contextualize("eat", eat),
|
||||
["sleep"] = Contextualize("sleep", sleep),
|
||||
["hunt"] = Contextualize("hunt", hunt),
|
||||
["fight"] = Contextualize("fight", fight),
|
||||
["social"] = Contextualize("social", social),
|
||||
["laugh"] = Contextualize("laugh", laugh),
|
||||
["work"] = Contextualize("work", work)
|
||||
};
|
||||
voices[id] = new ActivitySpeciesVoice(id, bags);
|
||||
}
|
||||
|
|
@ -97,7 +97,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
{
|
||||
if (voices.TryGetValue(id, out ActivitySpeciesVoice voice))
|
||||
{
|
||||
voice.SetLiquidBag(verb, Contextualize(V(first, second)));
|
||||
voice.SetLiquidBag(verb, Contextualize(verb, V(first, second)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -156,7 +156,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
private static void Set(ActivitySpeciesVoice voice, string verb, string[] phrases)
|
||||
{
|
||||
voice.SetBag(verb, Contextualize(phrases));
|
||||
voice.SetBag(verb, Contextualize(verb, phrases));
|
||||
}
|
||||
|
||||
private static void AddSpecialized(
|
||||
|
|
@ -189,19 +189,28 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
return new[] { first, second };
|
||||
}
|
||||
|
||||
private static string[] Contextualize(string[] phrases)
|
||||
/// <summary>
|
||||
/// Place only on settle / trade / farm. Never append job tokens.
|
||||
/// </summary>
|
||||
private static string[] Contextualize(string verb, string[] phrases)
|
||||
{
|
||||
if (phrases == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
string suffix = WantsPlace(verb) ? "{place_at}" : "";
|
||||
var result = new string[phrases.Length];
|
||||
for (int i = 0; i < phrases.Length; i++)
|
||||
{
|
||||
result[i] = (phrases[i] ?? "") + "{place_at}{job_as}";
|
||||
result[i] = (phrases[i] ?? "") + suffix;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool WantsPlace(string verb)
|
||||
{
|
||||
return verb == "settle" || verb == "trade" || verb == "farm";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,19 +9,19 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddExtended(
|
||||
voices,
|
||||
"chicken",
|
||||
V("lifts its beak through a bright clucking phrase", "pulses its throat while its comb bobs in rhythm"),
|
||||
V("lifts its beak through a run of sharp clucks", "pulses its throat while its comb bobs"),
|
||||
V("sidles close with one wing lowered", "touches beak tips through slow head bobs"),
|
||||
V("rakes backward with alternating clawed feet", "pecks in a measured row with tail raised"),
|
||||
V("rakes backward with alternating clawed feet", "pecks in a straight row with tail raised"),
|
||||
V("brushes its breast feathers through repeated crouches", "dips its beak while wing tips sweep past"),
|
||||
V("extends its neck and taps its beak twice", "steps beak-first through a deliberate exchange"),
|
||||
V("extends its neck and taps its beak twice", "bobs its beak forward and back in short turns"),
|
||||
V("cocks one eye before stabbing its beak downward", "holds a low crouch before a quick beak snap"),
|
||||
V("leans breast-first and drives with both feet", "hooks its beak forward while legs keep pushing"),
|
||||
V("preens along a wing with careful beak strokes", "parts breast feathers with short inspecting pecks"),
|
||||
V("preens along a wing with short beak strokes", "parts breast feathers with tiny pecks"),
|
||||
V("fans both wings through forceful downward beats", "stamps its feet while flight feathers flick rapidly"),
|
||||
V("hurries in high steps with wings spread wide", "ducks its comb and runs with tail feathers level"),
|
||||
V("circles twice before folding its legs beneath", "scrapes with both feet and lowers its feathered breast"),
|
||||
V("circles twice then folds its legs beneath", "scrapes with both feet and lowers its feathered breast"),
|
||||
V("raises its spurs while wings brace outward", "marches with comb high and beak held forward"),
|
||||
V("tracks side to side with one bright eye", "tilts its head between small beak-led nods"),
|
||||
V("turns its head side to side with one fixed eye", "tilts its head between small beak-led nods"),
|
||||
V("combs its beak through rapid low sweeps", "scratches once before pinching with its beak"),
|
||||
V("drops its tail and flexes beneath puffed feathers", "crouches low while its vent feathers lift"),
|
||||
V("turns its head in abrupt one-eyed checks", "crosses its feet while its comb swivels back"),
|
||||
|
|
@ -29,25 +29,25 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("jerks its beak sideways between uneven wing flicks", "pivots on one foot while its head bobs off-beat"),
|
||||
V("crouches behind spread wings and darts its beak", "tiptoes with neck tucked before a sudden peck"),
|
||||
V("paces in rigid steps with feathers standing out", "twists its neck while both wings twitch together"),
|
||||
V("tucks its beak beneath one wing as toes curl", "settles into feathered stillness with comb tilted"));
|
||||
V("tucks its beak beneath one wing as toes curl", "holds still with comb tilted"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"crab",
|
||||
V("clicks alternating pincers beneath pulsing mouthparts", "raises both claws through a clattering cadence"),
|
||||
V("clicks alternating pincers beneath pulsing mouthparts", "raises both claws through a clattering run"),
|
||||
V("crosses pincers gently beneath touching eyestalks", "sidesteps close with both claws folded inward"),
|
||||
V("rakes backward with alternating pointed walking legs", "clips repeatedly with one pincer while eyestalks track"),
|
||||
V("sweeps both antennae through precise brushing arcs", "opens its pincers around a series of delicate dabs"),
|
||||
V("presents one open claw then closes it slowly", "passes a measured pincer tap from side to side"),
|
||||
V("sweeps both antennae through precise brushing arcs", "opens its pincers around a series of light dabs"),
|
||||
V("presents one open claw then closes it slowly", "passes a pincer tap from side to side"),
|
||||
V("holds one claw poised before a sudden pinch", "probes in short arcs with both pincers parted"),
|
||||
V("grips forward and rows backward on six legs", "leans its shell rim ahead while pincers pull"),
|
||||
V("grooms a bent leg between careful pincers", "picks along its shell seam with the smaller claw"),
|
||||
V("fans its mouthparts while claws beat downward", "stamps its walking legs beneath a lifted shell"),
|
||||
V("scuttles crabwise with pincers guarding its face", "drops its shell low and pedals every leg rapidly"),
|
||||
V("tests a circle with antennae before folding its legs", "presses its shell down as pincers sweep outward"),
|
||||
V("sweeps its antennae in a full turn before folding its legs", "presses its shell down as pincers sweep outward"),
|
||||
V("brandishes the larger claw above a squared stance", "locks both pincers forward while legs spread wide"),
|
||||
V("tracks a line with independently turning eyestalks", "taps each pincer tip while mouthparts count"),
|
||||
V("clips in tiny bites with alternating claw tips", "rakes its walking legs as antennae inspect each pass"),
|
||||
V("turns each eyestalk on its own", "taps each pincer tip while mouthparts tick"),
|
||||
V("clips in tiny bites with alternating claw tips", "rakes its walking legs as antennae brush each pass"),
|
||||
V("lifts its shell rim while rear legs flex", "settles low as its abdominal flap tightens"),
|
||||
V("sidesteps twice then reverses with claws crossed", "aims its eyestalks apart while legs shuffle inward"),
|
||||
V("vibrates every walking leg beneath a rigid shell", "pumps its mouthparts as both claws slowly rise"),
|
||||
|
|
@ -63,7 +63,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("rests jaw-to-jaw with its tail curled", "rubs plated snouts through a slow sideward sweep"),
|
||||
V("pushes its snout forward while foreclaws rake", "presses its belly low and scrapes with splayed claws"),
|
||||
V("sweeps its broad muzzle through low brushing passes", "nudges forward as ridged scales skim repeatedly"),
|
||||
V("opens its jaws halfway then closes them with care", "angles its armored head through a measured jaw display"),
|
||||
V("opens its jaws halfway then closes them slowly", "angles its armored head while jaws part and shut"),
|
||||
V("holds only its eyes and nostrils high before snapping", "creeps belly-low with jaws poised for a sideways clamp"),
|
||||
V("drives its plated shoulders behind a steady shove", "backs with jaw muscles locked and tail braced"),
|
||||
V("scrapes its teeth gently along a foreleg scale", "rubs one plated flank with slow hind-claw strokes"),
|
||||
|
|
@ -71,57 +71,57 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("surges low with tail whipping behind its plates", "scrambles on spread legs with jaw clamped shut"),
|
||||
V("circles with snout lowered before flattening its belly", "slides its armored side through a full-length turn"),
|
||||
V("stands high on splayed legs with jaws agape", "sweeps its plated tail behind a forward-facing snout"),
|
||||
V("tracks side to side with one ridged eyelid narrowing", "tilts its long jaw between deliberate tooth-lined pauses"),
|
||||
V("turns its head side to side with one ridged eyelid narrowing", "tilts its long jaw between slow tooth-lined pauses"),
|
||||
V("rakes backward with foreclaws beside its muzzle", "roots with its snout through short armored thrusts"),
|
||||
V("raises its tail base while hind legs straighten", "arches its plated back above a low belly press"),
|
||||
V("turns in a tight arc around its planted forefeet", "halts mid-crawl as jaw and tail point opposite ways"),
|
||||
V("shudders along every dorsal ridge from snout to tail", "pumps its throat while all four claws grip"),
|
||||
V("rolls one shoulder as its jaws yaw sideways", "corkscrews its plated torso through a sudden half-turn"),
|
||||
V("slides its lower jaw forward beneath closed teeth", "hooks its snout aside while foreclaws conceal a motion"),
|
||||
V("stalks stiff-legged with tail twitching in sections", "snaps at empty space as armored eyelids flutter"),
|
||||
V("slides its lower jaw forward beneath closed teeth", "hooks its snout aside while foreclaws tuck close"),
|
||||
V("stalks stiff-legged with tail twitching in sections", "snaps its jaws shut as armored eyelids flutter"),
|
||||
V("rests chin-flat with teeth hidden and legs folded", "lies motionless while its heavy tail slowly curves"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"frog",
|
||||
V("inflates its throat sac through a rolling croak", "pulses its round throat beneath a chirping trill"),
|
||||
V("presses splayed forefeet close through matching blinks", "leans in with throat pulsing and hind legs folded"),
|
||||
V("presses splayed forefeet close while both blink together", "leans in with throat pulsing and hind legs folded"),
|
||||
V("scrapes backward with webbed hind toes", "plants its forefeet while long legs kick in alternation"),
|
||||
V("brushes its belly past with toes spread broadly", "dabs with forefeet between short throat pulses"),
|
||||
V("extends both forefeet then draws them to its chest", "bobs on folded legs through a deliberate toe display"),
|
||||
V("extends both forefeet then draws them to its chest", "bobs on folded legs while its toes splay and close"),
|
||||
V("aims both eyes before a lightning tongue flick", "compresses its hind legs beneath a still snout"),
|
||||
V("shoves from the hips in repeated squat-legged thrusts", "braces both forefeet while long hind legs drive"),
|
||||
V("wipes one round eye with a flexible forefoot", "rubs its mottled flank using a folded hind leg"),
|
||||
V("springs upright as forefeet pat rapidly downward", "puffs its throat while webbed toes slap in sequence"),
|
||||
V("springs upright as forefeet pat rapidly downward", "puffs its throat while webbed toes slap one after another"),
|
||||
V("bounds in low arcs with forelegs reaching ahead", "kicks backward in rapid leaps with eyes wide"),
|
||||
V("tests a small circle by hopping toe-first", "squats centrally with all four feet spread"),
|
||||
V("rises tall on hind legs with forefeet thrust forward", "crouches like a spring while throat sac stays taut"),
|
||||
V("follows marks with alternating eye swivels", "counts along with tiny foretoe taps and blinks"),
|
||||
V("snaps its tongue between careful forward hops", "parts with splayed fingers during short collecting dabs"),
|
||||
V("hops toe-first in a small loop then squats", "squats with all four feet spread wide"),
|
||||
V("rises tall on hind legs with forefeet thrust forward", "crouches coiled tight while throat sac stays taut"),
|
||||
V("swivels each eye in turn", "taps tiny foretoes while blinking in short pauses"),
|
||||
V("snaps its tongue between careful forward hops", "dabs with splayed fingers in short forward passes"),
|
||||
V("lifts its rump while forelegs hold a deep squat", "stretches both hind legs behind a lowered belly"),
|
||||
V("hops sideways then freezes with crossed forefeet", "swivels each eye separately while toes flex"),
|
||||
V("quivers through its thighs as throat sac pulses fast", "stiffens its forelegs while hind toes tremble"),
|
||||
V("jerks through crooked hops with tongue briefly extended", "twists its squat body between mismatched leg kicks"),
|
||||
V("crouches over its forefeet before a furtive tongue snap", "folds its hind legs tight while one foretoe hooks inward"),
|
||||
V("bounces without rhythm as both eyes roll", "puffs and collapses its throat through rigid little jumps"),
|
||||
V("crouches over its forefeet before a quick tongue snap", "folds its hind legs tight while one foretoe hooks inward"),
|
||||
V("bounces unevenly as both eyes roll", "puffs and collapses its throat through rigid little jumps"),
|
||||
V("draws every foot beneath its belly and blinks slowly", "rests squat with throat pulses becoming shallow"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"ostrich",
|
||||
V("stretches its long neck through a hollow booming call", "clacks its broad beak while throat feathers pulse"),
|
||||
V("weaves raised necks through mirrored curves", "fans short wings while lowering its beak close"),
|
||||
V("weaves raised necks in side-by-side curves", "fans short wings while lowering its beak close"),
|
||||
V("scrapes backward with alternating two-toed feet", "bends its tall neck through repeated beak dips"),
|
||||
V("sweeps breast feathers past in a low-necked pass", "brushes with short wing plumes while stepping precisely"),
|
||||
V("extends its flat beak then draws its neck upright", "bows on long legs through a measured wing display"),
|
||||
V("holds its neck rigid before a downward beak jab", "tracks intently then lunges on lengthening strides"),
|
||||
V("extends its flat beak then draws its neck upright", "bows on long legs while short wings open and shut"),
|
||||
V("holds its neck rigid before a downward beak jab", "fixes both eyes then lunges on lengthening strides"),
|
||||
V("leans its feathered breast into a long-legged drive", "hooks its beak as both two-toed feet push"),
|
||||
V("preens beneath one short wing with its flat beak", "combs shaggy breast feathers through quick beak pinches"),
|
||||
V("beats both short wings while stamping long feet", "fans loose plumes through forceful sideward sweeps"),
|
||||
V("runs with neck lowered and wing tips spread", "takes bounding strides while tail plumes flatten"),
|
||||
V("paces a broad circle before folding its knees", "scrapes twice and lowers its feathered body centrally"),
|
||||
V("paces a broad circle before folding its knees", "scrapes twice and lowers its feathered body"),
|
||||
V("stands neck-high with one long leg lifted", "drives a two-toed kick beneath spread wing plumes"),
|
||||
V("traces side to side with high-set eyes", "bobs its long neck through deliberate beak-led pauses"),
|
||||
V("turns its high-set eyes side to side", "bobs its long neck through slow beak-led pauses"),
|
||||
V("pinches repeatedly while striding in a straight line", "rakes with one two-toed foot before a deep beak dip"),
|
||||
V("raises its tail plumes as long knees bend", "squats with wings lifted from its feathered flanks"),
|
||||
V("crosses its long legs while neck looping backward", "stares past its own shoulder as wing tips twitch"),
|
||||
|
|
@ -134,19 +134,19 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddExtended(
|
||||
voices,
|
||||
"penguin",
|
||||
V("raises its narrow beak through a braying phrase", "pumps its chest beneath a chain of sharp honks"),
|
||||
V("taps beaks softly with both flippers lowered", "leans chest-close while matching slow head tilts"),
|
||||
V("raises its narrow beak through a chain of brays", "pumps its chest beneath a run of sharp honks"),
|
||||
V("taps beaks softly with both flippers lowered", "leans chest-close while both heads tilt slowly"),
|
||||
V("scrapes with broad webbed feet between beak dips", "patters in rows while flippers balance each bend"),
|
||||
V("brushes its white breast through low waddling passes", "sweeps stiff flipper edges with short side steps"),
|
||||
V("extends its beak and flares one flipper", "bows from the ankles through a deliberate beak tap"),
|
||||
V("leans beak-first before a sudden neck snap", "fixes both eyes while its webbed feet stop paddling"),
|
||||
V("extends its beak and flares one flipper", "bows from the ankles through a slow beak tap"),
|
||||
V("leans beak-first before a sudden neck snap", "fixes both eyes while its webbed feet stop moving"),
|
||||
V("shoves with its chest through heel-to-heel steps", "braces stiff flippers backward as broad feet drive"),
|
||||
V("preens its white breast with tiny beak pinches", "runs its narrow beak along one stiff flipper"),
|
||||
V("slaps both flippers in rapid downward strokes", "stamps webbed feet while its compact chest bucks"),
|
||||
V("waddles rapidly with flippers stretched sideways", "drops its belly low and paddles with both feet"),
|
||||
V("turns heel-to-heel before settling on its belly", "traces a compact circle with beak taps and steps"),
|
||||
V("waddles rapidly with flippers stretched sideways", "drops its belly low and drives with both feet"),
|
||||
V("turns heel-to-heel before settling on its belly", "steps in a compact loop with beak taps between"),
|
||||
V("squares its chest behind outstretched flippers", "marches upright with narrow beak leveled forward"),
|
||||
V("tracks a line through alternating head tilts", "touches its beak along a sequence of tiny nods"),
|
||||
V("tilts its head left then right", "touches its beak along a run of tiny nods"),
|
||||
V("picks in quick rows while flippers hold balance", "rakes backward with webbed feet before a beak pinch"),
|
||||
V("lifts its short tail above a deep ankle crouch", "rocks forward as belly feathers spread apart"),
|
||||
V("waddles sideways while looking straight behind", "crosses its webbed feet as both flippers point inward"),
|
||||
|
|
@ -159,25 +159,25 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddExtended(
|
||||
voices,
|
||||
"piranha",
|
||||
V("pulses its gill covers around a clicking jaw rhythm", "flares paired fins while teeth chatter in cadence"),
|
||||
V("aligns flank-close with fins beating in synchrony", "circles tightly through matched tail flicks"),
|
||||
V("pulses its gill covers around a clicking jaw beat", "flares paired fins while teeth chatter in short bursts"),
|
||||
V("aligns flank-close with fins beating together", "circles tightly while both tails flick together"),
|
||||
V("rakes with its lower jaw as paired fins brace", "nudges repeatedly with its blunt snout and folded fins"),
|
||||
V("brushes past with scales angled and fins extended", "fans its paired fins through a sequence of close passes"),
|
||||
V("opens its toothed jaw then folds both fins", "presents one scaled flank through a measured pivot"),
|
||||
V("brushes past with scales angled and fins extended", "fans its paired fins through a run of close passes"),
|
||||
V("opens its toothed jaw then folds both fins", "presents one scaled flank through a slow pivot"),
|
||||
V("fixes its round eye before a rapid tooth snap", "stills every fin before its compact body darts"),
|
||||
V("drives snout-first with strong lateral tail beats", "locks its jaws while paired fins reverse together"),
|
||||
V("scrapes one scaled flank with a fin ray", "works its lower jaw while gill covers open wide"),
|
||||
V("scrapes one scaled flank with a fin ray", "opens and closes its lower jaw while gill covers flare"),
|
||||
V("whips its tail as every fin beats rapidly", "bucks its compact body through forceful gill pulses"),
|
||||
V("darts in sharp angles with fins pinned close", "lashes its tail through a rapid zigzag retreat"),
|
||||
V("circles tightly with snout angled inward", "hovers centrally as paired fins make tiny corrections"),
|
||||
V("circles tightly with snout angled inward", "holds still as paired fins twitch in tiny beats"),
|
||||
V("flares every fin behind a fully opened jaw", "charges in a straight burst with teeth exposed"),
|
||||
V("tracks a sequence with one round eye", "ticks its jaw between deliberate paired-fin pauses"),
|
||||
V("holds one round eye fixed ahead", "ticks its jaw between slow paired-fin pauses"),
|
||||
V("nips in careful rows with tail held nearly still", "probes snout-first between short jaw closures"),
|
||||
V("arches its belly as the tail base rises", "angles its vent downward while paired fins spread"),
|
||||
V("faces backward through a tight tail-led pivot", "rolls half sideways as its fins oppose each other"),
|
||||
V("shivers from gill covers through the forked tail", "stiffens its fin rays while its jaw vibrates"),
|
||||
V("spirals unevenly with one paired fin folded", "jerks tail-first while the toothed mouth gapes"),
|
||||
V("nips furtively then hides its jaw beneath a turn", "slides flankwise with paired fins shielding its mouth"),
|
||||
V("nips once then hides its jaw beneath a turn", "slides flankwise with paired fins covering its mouth"),
|
||||
V("darts in rigid bursts as gill covers flutter", "snaps repeatedly while its forked tail twists"),
|
||||
V("hangs nearly still with fins tucked to scales", "slows its tail beats as the lower jaw settles"));
|
||||
|
||||
|
|
@ -185,75 +185,75 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"seal",
|
||||
V("raises its whiskered muzzle through a chesty bark", "pulses its throat beneath a run of blunt honks"),
|
||||
V("touches whiskers softly with foreflippers folded", "rests muzzle-close through matching head tilts"),
|
||||
V("touches whiskers softly with foreflippers folded", "rests muzzle-close while both heads tilt slowly"),
|
||||
V("rakes backward with broad foreflippers", "presses its chest low through repeated muzzle nudges"),
|
||||
V("sweeps whiskers through close side-to-side passes", "brushes with foreflipper edges while its muzzle dips"),
|
||||
V("extends its whiskered muzzle then folds one flipper", "rises chest-high through a measured foreflipper pat"),
|
||||
V("extends its whiskered muzzle then folds one flipper", "rises chest-high through a slow foreflipper pat"),
|
||||
V("aims its whiskers before a quick jaw clamp", "holds its hind flippers straight before surging snout-first"),
|
||||
V("drives its broad chest through foreflipper pulls", "hooks its teeth as hind flippers brace together"),
|
||||
V("combs its whiskers with one curled foreflipper", "scratches its thick flank using pointed hind claws"),
|
||||
V("slaps both foreflippers through heavy downward beats", "bucks its chest while hind flippers clap together"),
|
||||
V("lurches forward with foreflippers reaching fast", "bunches its thick body through rapid chest-first surges"),
|
||||
V("turns a full circle on alternating foreflippers", "presses its belly centrally with muzzle sweeping around"),
|
||||
V("turns a full circle on alternating foreflippers", "presses its belly down with muzzle sweeping around"),
|
||||
V("props its chest high above squared foreflippers", "bares pointed teeth while hind flippers stiffen"),
|
||||
V("follows a sequence with whiskers twitching", "nods its rounded head between deliberate flipper taps"),
|
||||
V("twitches its whiskers side to side", "nods its rounded head between slow flipper taps"),
|
||||
V("probes in rows with its whiskered muzzle", "scrapes lightly with one foreflipper before a tooth pinch"),
|
||||
V("raises its hind flippers above an arched rump", "flexes its thick belly behind planted foreflippers"),
|
||||
V("rolls sideways while its muzzle stays forward", "crosses foreflippers as hind flippers fan apart"),
|
||||
V("quivers from whiskered muzzle through thick shoulders", "stiffens both foreflippers while its chest trembles"),
|
||||
V("twists through a crooked roll with jaws ajar", "jerks its head between mismatched flipper sweeps"),
|
||||
V("hunches over folded foreflippers and snaps sideways", "inches backward with whiskers tucked against its muzzle"),
|
||||
V("lurches stiff-bodied as both flippers twitch", "bites at empty space while its thick torso rolls"),
|
||||
V("lurches stiff-bodied as both flippers twitch", "bites and rolls while its thick torso twists"),
|
||||
V("curls with foreflippers pressed against its chest", "rests its whiskered muzzle atop one broad flipper"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"snake",
|
||||
V("raises its head through a long pulsing hiss", "flicks its forked tongue between breathy scales of sound"),
|
||||
V("rests its jaw across a parallel coil", "matches slow tongue flicks with necks intertwined"),
|
||||
V("raises its head through a long pulsing hiss", "flicks its forked tongue while its throat vibrates"),
|
||||
V("rests its jaw across a parallel coil", "intertwines necks while both tongues flick slowly"),
|
||||
V("pushes its snout ahead while ribs ripple forward", "presses broad coils through repeated sideward bends"),
|
||||
V("brushes its scaled flanks through close looping passes", "sweeps its forked tongue along a winding route"),
|
||||
V("extends its head then loops its neck inward", "lifts one body coil through a measured tongue display"),
|
||||
V("extends its head then loops its neck inward", "lifts one body coil while its tongue flicks slowly"),
|
||||
V("holds its forked tongue still before striking", "compresses its front coils beneath an aligned jaw"),
|
||||
V("loops around and contracts in traveling bands", "braces its tail while rib waves pull forward"),
|
||||
V("loops around and contracts in rippling bands", "braces its tail while rib waves pull forward"),
|
||||
V("rubs its jaw along a smooth body coil", "scrapes between scales with a brief tail-tip stroke"),
|
||||
V("lashes its tail as rib muscles bunch rapidly", "rears its neck and pounds down through stacked coils"),
|
||||
V("streams forward in narrow bends with head lowered", "uncoils rapidly as its tail whips behind"),
|
||||
V("traces a tight circle before stacking its coils", "presses its belly scales into a compact spiral"),
|
||||
V("turns in a tight loop before stacking its coils", "presses its belly scales into a compact spiral"),
|
||||
V("raises a third of its body above braced loops", "flares its neck while jaws part around curved teeth"),
|
||||
V("tracks a sequence with forked tongue samples", "nods its narrow head between deliberate coil shifts"),
|
||||
V("flicks its forked tongue in short passes", "nods its narrow head between slow coil shifts"),
|
||||
V("probes in rows with snout and tongue together", "rakes belly scales backward through short rippling passes"),
|
||||
V("lifts its tail while the rear coils tighten", "arches its scaled body above a flattened belly section"),
|
||||
V("loops backward while its head keeps facing ahead", "knots its middle briefly as tail and neck cross"),
|
||||
V("shivers along every scale from jaw to tail tip", "stiffens into a curve while its ribs pulse rapidly"),
|
||||
V("corkscrews through uneven coils with tongue extended", "jerks its neck sideways as the tail circles opposite"),
|
||||
V("folds its head beneath an outer coil", "slides tail-first while its jaw remains hidden"),
|
||||
V("rears in rigid bends as its tongue flicks erratically", "snaps at empty space while body loops twitch"),
|
||||
V("rears in rigid bends as its tongue flicks erratically", "snaps its jaws while body loops twitch"),
|
||||
V("settles its jaw atop a tightly wound coil", "draws head and tail inward as rib waves slow"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"turtle",
|
||||
V("extends its neck through a throaty chirping phrase", "clicks its hard beak while throat folds pulse"),
|
||||
V("extends its neck through a throaty chirping run", "clicks its hard beak while throat folds pulse"),
|
||||
V("touches shell rims through slow neck stretches", "rests beak-close with foreclaws folded inward"),
|
||||
V("scrapes backward with alternating foreclaws", "bends its long neck through repeated beak dips"),
|
||||
V("brushes its shell edge through low deliberate passes", "sweeps with clawed forefeet while its beak points down"),
|
||||
V("extends its neck and opens its hard beak slowly", "raises one foreclaw through a measured shell-rock"),
|
||||
V("brushes its shell edge through low slow passes", "sweeps with clawed forefeet while its beak points down"),
|
||||
V("extends its neck and opens its hard beak slowly", "raises one foreclaw through a slow shell-rock"),
|
||||
V("holds its neck rigid before a sudden beak clip", "plants all four claws before thrusting shell and head"),
|
||||
V("drives shell-first as foreclaws pull in sequence", "hooks its beak forward while hind claws keep pushing"),
|
||||
V("drives shell-first as foreclaws pull one after another", "hooks its beak forward while hind claws keep pushing"),
|
||||
V("scrapes its beak gently along one foreleg scale", "rubs beneath its shell rim with a hooked hind claw"),
|
||||
V("pumps all four legs as its shell rocks sharply", "stamps foreclaws while neck and beak jab downward"),
|
||||
V("plods rapidly with neck stretched straight ahead", "pulls its shell in hurried alternating claw strokes"),
|
||||
V("walks a small circle before drawing its limbs close", "presses its shell centrally as neck sweeps around"),
|
||||
V("walks a small loop before drawing its limbs close", "presses its shell down as neck sweeps around"),
|
||||
V("stands high on straightened legs beneath its shell", "drives forward behind a hard open beak"),
|
||||
V("follows a sequence with slow sideward head turns", "taps one foreclaw between deliberate beak-led nods"),
|
||||
V("turns its head slowly side to side", "taps one foreclaw between slow beak-led nods"),
|
||||
V("clips in careful rows with its hard beak", "rakes backward with foreclaws before each neck reach"),
|
||||
V("lifts its tail while hind legs brace the shell", "raises the rear shell rim above bent forelegs"),
|
||||
V("turns backward while its neck stays extended ahead", "crosses its forefeet as head and tail angle sideways"),
|
||||
V("shudders beneath its shell from neck to hind claws", "stiffens all four legs while shell plates vibrate"),
|
||||
V("rocks unevenly as its neck loops to one side", "jerks its beak between mismatched foreclaw steps"),
|
||||
V("withdraws its head behind the shell rim and bites", "sidles with one foreclaw tucked beneath its shell"),
|
||||
V("plods rigidly as neck and tail twitch together", "snaps at empty space while its shell rocks backward"),
|
||||
V("plods rigidly as neck and tail twitch together", "snaps its beak while its shell rocks backward"),
|
||||
V("draws head and limbs beneath the shell rim", "rests its chin inside the shell as claws uncurl"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"chicken",
|
||||
V("fans a spark into flame with rapid wingbeats", "pecks a spark into flame beneath beating primaries"),
|
||||
V("beats flame low beneath overlapping wings", "smothers flame under spread breast feathers"),
|
||||
V("presses feathered flanks among gathering kin", "tucks wing-to-wing into a clustered flock"),
|
||||
V("draws visible essence through its pulsing throat", "pulls observed life-glow along raised neck feathers"),
|
||||
V("presses feathered flanks among the others", "tucks wing-to-wing into the nearby group"),
|
||||
V("draws life essence through its pulsing throat", "pulls glowing life essence along raised neck feathers"),
|
||||
V("searches with one bright eye and quick beak tilts", "reaches ahead with neck stretched and beak parted"),
|
||||
V("wails through a trembling comb and open beak", "keens in thin clucks as its throat quivers"),
|
||||
V("clacks its beak through a harsh squawk", "lashes both wings beneath a rasping cackle"));
|
||||
|
|
@ -22,8 +22,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"crab",
|
||||
V("clicks a spark into flame between closing pincers", "fans a spark into flame with beating mouthparts"),
|
||||
V("clamps flame low beneath its broad shell rim", "beats flame down with alternating flattened claws"),
|
||||
V("locks jointed legs beside gathering kin", "fits shell-to-shell into a clustered cast"),
|
||||
V("draws visible essence through pulsing mouthparts", "pulls observed life-glow between raised pincers"),
|
||||
V("locks jointed legs beside the others", "fits shell-to-shell into the nearby group"),
|
||||
V("draws life essence through pulsing mouthparts", "pulls glowing life essence between raised pincers"),
|
||||
V("searches with swiveling eyestalks and parted claws", "reaches ahead with one open pincer"),
|
||||
V("rasps through fluttering mouthparts and lowered eyestalks", "clatters both pincers beneath a quivering shell"),
|
||||
V("snaps raised pincers in a jagged clatter", "grinds its mouthparts under a rigid shell"));
|
||||
|
|
@ -33,8 +33,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"crocodile",
|
||||
V("breathes a spark into flame through parted jaws", "fans a spark into flame with a plated tail sweep"),
|
||||
V("presses flame low beneath its armored belly", "beats flame down with broad sweeps of its plated tail"),
|
||||
V("settles flank-to-flank among gathering kin", "fits its plated body into a jaw-aligned congregation"),
|
||||
V("draws visible essence through vibrating throat plates", "pulls observed life-glow between rows of exposed teeth"),
|
||||
V("settles flank-to-flank among the others", "presses its plated body jaw-to-jaw into the nearby group"),
|
||||
V("draws life essence through vibrating throat plates", "pulls glowing life essence between rows of exposed teeth"),
|
||||
V("searches with ridged eyes above a slowly opening jaw", "reaches forward with its long snout and spread foreclaws"),
|
||||
V("bellows through a heaving armored throat", "moans between slack jaws as its tail trembles"),
|
||||
V("claps its jaws around a gravelly roar", "lashes its plated tail beneath a guttural bark"));
|
||||
|
|
@ -44,8 +44,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"frog",
|
||||
V("puffs a spark into flame from its swelling throat sac", "fans a spark into flame with rapid webbed kicks"),
|
||||
V("presses flame low beneath its broad belly", "beats flame down with slapping webbed hind feet"),
|
||||
V("folds splayed feet among gathering kin", "presses squat flanks into a croaking cluster"),
|
||||
V("draws visible essence through its pulsing throat sac", "pulls observed life-glow along an unfurling tongue"),
|
||||
V("folds splayed feet among the others", "presses squat flanks into the nearby group"),
|
||||
V("draws life essence through its pulsing throat sac", "pulls glowing life essence along an unfurling tongue"),
|
||||
V("searches with separately swiveling round eyes", "reaches ahead with a flicking tongue and spread forefeet"),
|
||||
V("keens through a collapsed throat sac", "trills thinly as its webbed toes quiver"),
|
||||
V("blasts a raw croak through its swollen throat", "slaps both forefeet beneath a rasping chirr"));
|
||||
|
|
@ -55,8 +55,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"ostrich",
|
||||
V("fans a spark into flame with broad wing plumes", "puffs a spark into flame through its long feathered throat"),
|
||||
V("beats flame low beneath sweeping short wings", "presses flame down with broad two-toed feet"),
|
||||
V("weaves its raised neck among gathering kin", "presses feathered flanks into a long-legged cluster"),
|
||||
V("draws visible essence along its extended throat", "pulls observed life-glow through fanned breast plumes"),
|
||||
V("weaves its raised neck among the others", "presses feathered flanks into the nearby group"),
|
||||
V("draws life essence along its extended throat", "pulls glowing life essence through fanned breast plumes"),
|
||||
V("searches with high-set eyes and low beak sweeps", "reaches ahead on a fully extended neck"),
|
||||
V("booms through a sagging feathered throat", "keens with its broad beak agape and neck bowed"),
|
||||
V("clacks its broad beak beneath a harsh boom", "lashes short wings around a guttural hiss"));
|
||||
|
|
@ -66,8 +66,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"penguin",
|
||||
V("fans a spark into flame with rigid flipper strokes", "puffs a spark into flame through its narrow raised beak"),
|
||||
V("beats flame low beneath alternating stiff flippers", "presses flame down with its dense feathered belly"),
|
||||
V("fits shoulder-to-shoulder among gathering kin", "presses its white breast into a compact huddle"),
|
||||
V("draws visible essence through its pumping chest", "pulls observed life-glow along both rigid flippers"),
|
||||
V("fits shoulder-to-shoulder among the others", "presses its white breast into the nearby group"),
|
||||
V("draws life essence through its pumping chest", "pulls glowing life essence along both rigid flippers"),
|
||||
V("searches through sharp head tilts and beak dips", "reaches ahead with narrow beak and one flared flipper"),
|
||||
V("brays through a bowed head and shaking chest", "keens softly with its beak tucked against white breast feathers"),
|
||||
V("honks harshly through a thrust-up beak", "slaps both flippers beneath a grating bray"));
|
||||
|
|
@ -77,8 +77,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"piranha",
|
||||
V("fans a spark into flame with beating fin rays", "snaps a spark into flame between chattering teeth"),
|
||||
V("beats flame low with a whipping forked tail", "presses flame down beneath its compact scaled flank"),
|
||||
V("aligns fin-to-fin among gathering kin", "fits its scaled flank into a tight shoal"),
|
||||
V("draws visible essence through pulsing gill covers", "pulls observed life-glow between its parted teeth"),
|
||||
V("aligns fin-to-fin among the others", "fits its scaled flank into the nearby group"),
|
||||
V("draws life essence through pulsing gill covers", "pulls glowing life essence between its parted teeth"),
|
||||
V("searches with round eyes and sweeping paired fins", "reaches ahead with blunt snout and open toothed jaw"),
|
||||
V("chatters its teeth as both gill covers shudder", "rasps through pumping gills and folded fins"),
|
||||
V("gnashes exposed teeth behind flared gill covers", "whips its forked tail beneath a jagged jaw rattle"));
|
||||
|
|
@ -88,8 +88,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"seal",
|
||||
V("fans a spark into flame with broad foreflippers", "puffs a spark into flame past its whiskered muzzle"),
|
||||
V("beats flame low beneath alternating foreflippers", "presses flame down with its thick chest and folded flippers"),
|
||||
V("presses thick flanks among gathering kin", "fits whiskered muzzle to shoulder in a clustered rookery"),
|
||||
V("draws visible essence through its heaving chest", "pulls observed life-glow along trembling whiskers"),
|
||||
V("presses thick flanks among the others", "fits whiskered muzzle to shoulder in the nearby group"),
|
||||
V("draws life essence through its heaving chest", "pulls glowing life essence along trembling whiskers"),
|
||||
V("searches with sweeping whiskers and lifted muzzle", "reaches ahead with one broad foreflipper"),
|
||||
V("moans through a lowered whiskered muzzle", "keens as its thick chest and throat quiver"),
|
||||
V("barks harshly behind bared pointed teeth", "slaps both foreflippers beneath a guttural roar"));
|
||||
|
|
@ -99,8 +99,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"snake",
|
||||
V("breathes a spark into flame past its forked tongue", "fans a spark into flame with rapid rib pulses"),
|
||||
V("presses flame low beneath stacked muscular coils", "beats flame down with broad sweeps of its scaled body"),
|
||||
V("threads its coils among gathering kin", "stacks parallel loops into a clustered knot"),
|
||||
V("draws visible essence through flicking tongue tips", "pulls observed life-glow along rippling belly scales"),
|
||||
V("threads its coils among the others", "stacks parallel loops into the nearby group"),
|
||||
V("draws life essence through flicking tongue tips", "pulls glowing life essence along rippling belly scales"),
|
||||
V("searches with forked tongue and sideward jaw turns", "reaches ahead on a straightened neck coil"),
|
||||
V("hisses through a lowered jaw and slack coils", "keens in thin breath as its tail tip quivers"),
|
||||
V("spits a harsh hiss between exposed fangs", "lashes its tail beneath a rasping jaw gape"));
|
||||
|
|
@ -110,8 +110,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"turtle",
|
||||
V("puffs a spark into flame through its hard beak", "fans a spark into flame with alternating clawed forefeet"),
|
||||
V("presses flame low beneath its broad shell", "beats flame down with sweeping clawed forefeet"),
|
||||
V("fits shell rim to shell rim among gathering kin", "folds clawed feet into a close-shelled cluster"),
|
||||
V("draws visible essence through pulsing throat folds", "pulls observed life-glow along its patterned shell plates"),
|
||||
V("fits shell rim to shell rim among the others", "folds clawed feet into the nearby group"),
|
||||
V("draws life essence through pulsing throat folds", "pulls glowing life essence along its patterned shell plates"),
|
||||
V("searches with slow head turns and beak dips", "reaches ahead on an extended wrinkled neck"),
|
||||
V("keens through a lowered beak and trembling throat folds", "rasps softly as its foreclaws curl beneath the shell rim"),
|
||||
V("clacks its hard beak through a throaty hiss", "stamps clawed forefeet beneath a grating chirr"));
|
||||
|
|
|
|||
|
|
@ -25,33 +25,33 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"tucks its beak beneath a folded wing",
|
||||
"settles with feathers puffed around its body"),
|
||||
V(
|
||||
"scratches twice before darting toward {target}",
|
||||
"tilts the head toward {target} and pecks forward"),
|
||||
"scratches with both feet twice before darting toward {target}",
|
||||
"tilts its head toward {target} and pecks forward"),
|
||||
V(
|
||||
"leaps with both spurs aimed at {target}",
|
||||
"beats both wings before pecking at {target}"),
|
||||
V(
|
||||
"clucks while brushing shoulders with another",
|
||||
"circles close with soft beak taps"),
|
||||
"circles another with quick beak taps"),
|
||||
V(
|
||||
"breaks into rapid clucks with beak wide",
|
||||
"shakes its comb through a rattling cackle"),
|
||||
V(
|
||||
"rakes with both feet in alternating strokes",
|
||||
"carries material pinched in its beak"));
|
||||
"rakes the load forward with both feet",
|
||||
"pinches the load in its beak and carries it"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"crab",
|
||||
V(
|
||||
"scuttles sideways on sharply jointed legs",
|
||||
"keeps its shell level through a quick sidestep"),
|
||||
"sidesteps quickly with its shell held level"),
|
||||
V(
|
||||
"holds both claws ready while its eyestalks pivot",
|
||||
"holds both claws open while its eyestalks pivot",
|
||||
"rests on bent legs with mouthparts ticking"),
|
||||
V(
|
||||
"taps its claws together and spins sideways",
|
||||
"weaves between its own raised pincers"),
|
||||
"sidesteps beneath its own raised pincers"),
|
||||
V(
|
||||
"passes small bites from pincer to mouthparts",
|
||||
"tears a morsel apart between mismatched claws"),
|
||||
|
|
@ -66,35 +66,35 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"raises one heavy claw and sidesteps toward {target}"),
|
||||
V(
|
||||
"waves one claw while its antennae sweep forward",
|
||||
"touches pincers with another in measured taps"),
|
||||
"touches pincers with another in short taps"),
|
||||
V(
|
||||
"clicks its pincers in a quick clattering run",
|
||||
"chatters its mouthparts beneath raised eyestalks"),
|
||||
V(
|
||||
"sorts loose material between precise pincers",
|
||||
"grips and shifts a load one sidestep at a time"));
|
||||
"passes the load between precise pincers",
|
||||
"grips the load and shifts it one sidestep at a time"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"crocodile",
|
||||
V(
|
||||
"crawls on splayed legs with belly held low",
|
||||
"drives forward while its heavy tail counterbalances"),
|
||||
"drives forward while its heavy tail sweeps behind"),
|
||||
V(
|
||||
"lies motionless with only its eyes shifting",
|
||||
"holds its long jaw slightly parted"),
|
||||
V(
|
||||
"rolls its armored body and lashes its tail",
|
||||
"makes a short feint with jaws agape"),
|
||||
"lunges short with jaws agape"),
|
||||
V(
|
||||
"clamps a meal between interlocking teeth",
|
||||
"tilts its broad head back to gulp a bite"),
|
||||
V(
|
||||
"rests its chin with legs drawn against its flanks",
|
||||
"stills beneath ridged eyelids and folded jaws"),
|
||||
"rests its chin low with legs drawn against its flanks",
|
||||
"lies still beneath ridged eyelids with jaws folded"),
|
||||
V(
|
||||
"creeps toward {target} with belly pressed low",
|
||||
"freezes before surging toward {target}"),
|
||||
"holds still before surging toward {target}"),
|
||||
V(
|
||||
"parts long jaws before snapping at {target}",
|
||||
"lashes an armored tail toward {target}"),
|
||||
|
|
@ -102,11 +102,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"bumps an armored snout against another",
|
||||
"rumbles low while resting jaw beside jaw"),
|
||||
V(
|
||||
"claps its jaws around a deep throat rumble",
|
||||
"claps its jaws through a deep throat rumble",
|
||||
"shudders through a run of gravelly bellows"),
|
||||
V(
|
||||
"shoves a load with its plated snout",
|
||||
"drags a load in the hinge of its jaws"));
|
||||
"shoves the load with its plated snout",
|
||||
"drags the load clenched in the hinge of its jaws"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -118,7 +118,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"squats still while its round eyes swivel",
|
||||
"holds its crouch as its throat pulses"),
|
||||
V(
|
||||
"pops through a chain of short, crooked hops",
|
||||
"bounds in a chain of short, crooked hops",
|
||||
"bounces in place with toes spread wide"),
|
||||
V(
|
||||
"flicks its tongue around a morsel",
|
||||
|
|
@ -133,24 +133,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"kicks both hind feet at {target}",
|
||||
"thrusts both splayed forefeet toward {target}"),
|
||||
V(
|
||||
"pulses its throat through a carrying croak",
|
||||
"answers another with quick chirps and toe taps"),
|
||||
"pulses its throat through a loud croak",
|
||||
"chirps back at another with quick toe taps"),
|
||||
V(
|
||||
"croaks in a bouncing, uneven chain",
|
||||
"puffs its throat sac around a chirping trill"),
|
||||
V(
|
||||
"pushes a load with its blunt head",
|
||||
"braces its hind legs and shifts a load forward"));
|
||||
"pushes the load with its blunt head",
|
||||
"braces its hind legs and shoves the load forward"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"ostrich",
|
||||
V(
|
||||
"covers distance in long, springing strides",
|
||||
"strides in long, springing steps",
|
||||
"paces forward while its tall neck sways"),
|
||||
V(
|
||||
"stands high with its neck drawn straight",
|
||||
"shifts between long legs while its head scans"),
|
||||
"shifts between long legs while its head turns"),
|
||||
V(
|
||||
"fans its short wings and prances in a circle",
|
||||
"bobs its long neck between skipping steps"),
|
||||
|
|
@ -161,20 +161,20 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"folds its long legs beneath a feathered body",
|
||||
"rests with its neck curved across its back"),
|
||||
V(
|
||||
"turns the long neck toward {target}",
|
||||
"turns its long neck toward {target}",
|
||||
"rushes toward {target} in lengthening strides"),
|
||||
V(
|
||||
"swings a long leg toward {target}",
|
||||
"drives a two-toed kick at {target}"),
|
||||
V(
|
||||
"weaves its neck beside another's raised neck",
|
||||
"fans loose wing feathers through a measured display"),
|
||||
"presses its neck beside another's raised neck",
|
||||
"fans loose wing feathers while stepping in place"),
|
||||
V(
|
||||
"booms with its neck stretched upright",
|
||||
"clacks its broad beak between hollow calls"),
|
||||
V(
|
||||
"carries material in its beak",
|
||||
"nudges a load forward with its feathered breast"));
|
||||
"carries the load in its beak",
|
||||
"nudges the load forward with its feathered breast"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -195,44 +195,44 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"stands with its beak tucked beneath one flipper",
|
||||
"rests on its belly with flippers held close"),
|
||||
V(
|
||||
"leans toward {target} with beak aligned",
|
||||
"leans toward {target} with beak pointed",
|
||||
"waddles toward {target} in rapid steps"),
|
||||
V(
|
||||
"slaps both flippers at {target}",
|
||||
"leans forward and pecks at {target}"),
|
||||
V(
|
||||
"taps beaks with another between low calls",
|
||||
"presses shoulder to shoulder in a compact cluster"),
|
||||
"presses shoulder to shoulder beside another"),
|
||||
V(
|
||||
"brays with its beak lifted high",
|
||||
"shakes its chest through a run of sharp honks"),
|
||||
V(
|
||||
"shoves a load ahead with its chest",
|
||||
"carries material at the tip of its beak"));
|
||||
"shoves the load ahead with its chest",
|
||||
"carries the load at the tip of its beak"));
|
||||
AddLiquid(
|
||||
voices,
|
||||
"penguin",
|
||||
"move",
|
||||
"cuts through the water with powerful flipper strokes",
|
||||
"torpedoes beneath the surface with feet trailing");
|
||||
"cuts ahead with powerful flipper strokes",
|
||||
"torpedoes downward with feet trailing");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"penguin",
|
||||
"wait",
|
||||
"treads water with small strokes of both feet",
|
||||
"bobs at the surface with flippers spread");
|
||||
"treads with small strokes of both feet",
|
||||
"bobs upright with flippers spread");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"penguin",
|
||||
"play",
|
||||
"porpoises above the surface with flippers driving",
|
||||
"loops underwater and twists through rising bubbles");
|
||||
"porpoises upward with flippers driving",
|
||||
"loops and twists through rising bubbles");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"penguin",
|
||||
"sleep",
|
||||
"rests afloat with its beak tucked low",
|
||||
"dozes while bobbing at the surface");
|
||||
"rests bobbing with its beak tucked low",
|
||||
"dozes while bobbing with flippers loose");
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -241,14 +241,14 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"propels its compact body with quick tail beats",
|
||||
"glides forward with paired fins angled wide"),
|
||||
V(
|
||||
"holds position with its tail twitching",
|
||||
"hovers in place with its tail twitching",
|
||||
"hangs still while its gill covers pulse"),
|
||||
V(
|
||||
"wheels in a tight circle with fins flared",
|
||||
"darts forward and pivots on a rigid tail flick"),
|
||||
V(
|
||||
"shears off a bite with triangular teeth",
|
||||
"nips rapid mouthfuls with its jaw working"),
|
||||
"nips rapid mouthfuls with its jaw snapping"),
|
||||
V(
|
||||
"slows its tail until only its gills move",
|
||||
"hangs nearly motionless with fins folded close"),
|
||||
|
|
@ -257,40 +257,40 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"darts toward {target} with jaws open"),
|
||||
V(
|
||||
"bites at {target} with interlocking teeth",
|
||||
"whips the tail and snaps toward {target}"),
|
||||
"whips its tail and snaps toward {target}"),
|
||||
V(
|
||||
"aligns beside another with fins matching pace",
|
||||
"beats its fins beside another",
|
||||
"circles another while flicking its paired fins"),
|
||||
V(
|
||||
"clacks its triangular teeth in a rapid chatter",
|
||||
"works its lower jaw through a clicking rattle"),
|
||||
"clicks its lower jaw in a rapid rattle"),
|
||||
V(
|
||||
"nudges a load with its blunt snout",
|
||||
"grips material between its teeth"));
|
||||
"nudges the load with its blunt snout",
|
||||
"grips the load between its teeth"));
|
||||
AddLiquid(
|
||||
voices,
|
||||
"piranha",
|
||||
"move",
|
||||
"slices through the water with rapid tail beats",
|
||||
"darts beneath the surface with fins tucked");
|
||||
"slices ahead with rapid tail beats",
|
||||
"darts downward with fins tucked");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"piranha",
|
||||
"wait",
|
||||
"hovers in the water with fins fanning",
|
||||
"faces the current while its tail makes tiny corrections");
|
||||
"hovers with fins fanning beside its body",
|
||||
"holds still while its tail twitches in tiny beats");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"piranha",
|
||||
"play",
|
||||
"zigzags through the water in sudden bursts",
|
||||
"spirals beneath the surface with fins flared");
|
||||
"zigzags through the water with fins flared",
|
||||
"spirals downward through the water with fins flared");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"piranha",
|
||||
"sleep",
|
||||
"drifts underwater with its tail barely moving",
|
||||
"rests below the surface with gills pulsing");
|
||||
"drifts with its tail barely moving",
|
||||
"rests with gills pulsing and fins folded");
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -303,7 +303,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"rests on folded flippers with muzzle raised"),
|
||||
V(
|
||||
"rolls onto its side and bats with both flippers",
|
||||
"arches its body through a clumsy half-turn"),
|
||||
"arches its body through a half-turn"),
|
||||
V(
|
||||
"grips a meal between pointed teeth",
|
||||
"tears off a bite with a sharp head shake"),
|
||||
|
|
@ -312,43 +312,43 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"rests its whiskered muzzle on one foreflipper"),
|
||||
V(
|
||||
"turns a whiskered muzzle toward {target}",
|
||||
"lunges toward {target} with jaws ready"),
|
||||
"lunges toward {target} with jaws open"),
|
||||
V(
|
||||
"bares pointed teeth before snapping at {target}",
|
||||
"surges chest-first and bites toward {target}"),
|
||||
V(
|
||||
"touches whiskers with another between low grunts",
|
||||
"leans close and answers another with a short bark"),
|
||||
"leans close and barks back at another"),
|
||||
V(
|
||||
"barks in bouncing, chesty bursts",
|
||||
"huffs through its whiskers between blunt honks"),
|
||||
V(
|
||||
"pushes a load with its broad chest",
|
||||
"grips a load between its teeth and pulls"));
|
||||
"pushes the load with its broad chest",
|
||||
"grips the load between its teeth and pulls"));
|
||||
AddLiquid(
|
||||
voices,
|
||||
"seal",
|
||||
"move",
|
||||
"swims through the water with sweeping hind-flipper strokes",
|
||||
"dives beneath the surface with foreflippers tucked");
|
||||
"swims with sweeping hind-flipper strokes",
|
||||
"dives downward with foreflippers tucked");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"seal",
|
||||
"wait",
|
||||
"floats upright with its whiskered muzzle above water",
|
||||
"treads water with slow hind-flipper sweeps");
|
||||
"floats upright with its whiskered muzzle raised",
|
||||
"treads with slow hind-flipper sweeps");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"seal",
|
||||
"play",
|
||||
"rolls underwater with bubbles streaming past its whiskers",
|
||||
"slaps the surface and dives through the splash");
|
||||
"rolls with bubbles streaming past its whiskers",
|
||||
"slaps with both flippers and dives through the splash");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"seal",
|
||||
"sleep",
|
||||
"dozes afloat with its muzzle tipped above water",
|
||||
"rests at the surface with flippers drifting");
|
||||
"dozes with its muzzle tipped up",
|
||||
"rests with flippers drifting");
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -358,31 +358,31 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"glides by rippling its ribs beneath smooth scales"),
|
||||
V(
|
||||
"coils with its head raised above the loops",
|
||||
"holds still while a forked tongue samples nearby scents"),
|
||||
"holds still while flicking a forked tongue"),
|
||||
V(
|
||||
"loops its body around itself in quick turns",
|
||||
"darts its head between shifting coils"),
|
||||
V(
|
||||
"opens its hinged jaw around a meal",
|
||||
"works a bite backward with alternating jaw steps"),
|
||||
"pulls a bite backward with alternating jaw steps"),
|
||||
V(
|
||||
"coils tightly with its head at the center",
|
||||
"rests its jaw across a loop of scaled body"),
|
||||
V(
|
||||
"flicks a forked tongue toward {target}",
|
||||
"glides toward {target} with head aligned"),
|
||||
"glides toward {target} with head pointed"),
|
||||
V(
|
||||
"strikes with open jaws at {target}",
|
||||
"coils and snaps toward {target}"),
|
||||
V(
|
||||
"rests in parallel coils beside another",
|
||||
"follows another's motion with matched tongue flicks"),
|
||||
"rests its coils beside another",
|
||||
"flicks its tongue beside another"),
|
||||
V(
|
||||
"hisses in short bursts with jaws parted",
|
||||
"flicks its tongue through a breathy rattle"),
|
||||
V(
|
||||
"loops around a load and pulls",
|
||||
"braces its coils to shift a load"));
|
||||
"loops its coils around the load and pulls",
|
||||
"braces its coils and shoves the load ahead"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -403,8 +403,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"draws its limbs beneath the shell",
|
||||
"rests its chin just inside the shell rim"),
|
||||
V(
|
||||
"extends the neck toward {target}",
|
||||
"holds the hard beak open while lunging toward {target}"),
|
||||
"extends its neck toward {target}",
|
||||
"holds its hard beak open while lunging toward {target}"),
|
||||
V(
|
||||
"drives forward shell-first toward {target}",
|
||||
"bites at {target} with a hard beak"),
|
||||
|
|
@ -415,31 +415,31 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"clicks its beak between throaty chirps",
|
||||
"bobs its head through a rasping chuckle"),
|
||||
V(
|
||||
"shoves a load with the front of its shell",
|
||||
"braces its claws and pushes a load forward"));
|
||||
"shoves the load with the front of its shell",
|
||||
"braces its claws and pushes the load forward"));
|
||||
AddLiquid(
|
||||
voices,
|
||||
"turtle",
|
||||
"move",
|
||||
"paddles through the water with all four feet",
|
||||
"glides beneath the surface with its shell level");
|
||||
"paddles with all four feet",
|
||||
"glides downward with its shell level");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"turtle",
|
||||
"wait",
|
||||
"floats at the surface with its nostrils raised",
|
||||
"holds beneath the water with feet spread wide");
|
||||
"floats with its nostrils raised",
|
||||
"holds still with feet spread wide");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"turtle",
|
||||
"play",
|
||||
"rolls underwater with its shell turning slowly",
|
||||
"paddles in a circle just below the surface");
|
||||
"rolls with its shell turning slowly",
|
||||
"paddles in a circle with all four feet");
|
||||
AddLiquid(
|
||||
voices,
|
||||
"turtle",
|
||||
"sleep",
|
||||
"rests underwater with limbs tucked beneath its shell",
|
||||
"dozes at the surface with its chin above water");
|
||||
"rests with limbs tucked beneath its shell",
|
||||
"dozes with its chin raised");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,10 +17,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with level steady hands", "treats wounds in measured hand passes"),
|
||||
V("faces the flames with cuffs held clear", "handles fire with formal precision"),
|
||||
V("retreats in controlled backward strides", "flees without breaking upright form"),
|
||||
V("settles into equal-ranked formation", "joins the civic cluster at exact spacing"),
|
||||
V("takes a place with others at exact spacing", "stands in line with chin and shoulders square"),
|
||||
V("drills behind a rigid forearm guard", "patrols in sharply measured steps"),
|
||||
V("reads with one finger marking each line", "studies with chin and shoulders held square"),
|
||||
V("gathers kin into ordered ranks", "collects spoils in matching groups"),
|
||||
V("arranges nearby kin into neat rows", "collects spoils into matching piles"),
|
||||
V("relieves the body from a rigid squat", "straightens immediately after relieving itself"),
|
||||
V("starts one duty at conflicting angles", "pauses stiffly over a mistaken sequence"),
|
||||
V("recovers with spine still vertical", "recharges through counted intervals of stillness"),
|
||||
|
|
@ -40,7 +40,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nuzzles wounds with slow wool-framed lips", "tends wounds beneath a lowered woolly neck"),
|
||||
V("steps around flames on nimble feet", "faces fire with fleece drawn back"),
|
||||
V("bounds away on long springing legs", "flees with ears flattened into the wool"),
|
||||
V("settles with all four feet neatly tucked", "forms a close fleece-lined civic cluster"),
|
||||
V("settles with all four feet neatly tucked", "presses fleece-to-fleece among the nearby herd"),
|
||||
V("drills in high-stepping charges", "guards with chest wool pushed forward"),
|
||||
V("reads with muzzle hovering close", "studies while long ears track each pause"),
|
||||
V("herds kin with low humming calls", "gathers spoils against thick chest wool"),
|
||||
|
|
@ -63,7 +63,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with small digging claws", "uncurls one plate at a time and treats wounds"),
|
||||
V("curls beside flames behind thick plates", "tests fire from beneath a shell rim"),
|
||||
V("scuttles away under lowered armor", "flees in a tight plated roll"),
|
||||
V("scrapes and curls into civic formation", "settles with shell backs facing outward"),
|
||||
V("scrapes a place and curls up among the others", "settles with shell backs facing outward"),
|
||||
V("drills in armored rolling charges", "guards from a clawed half-curl"),
|
||||
V("reads with snout nearly touching", "studies beneath a raised plate edge"),
|
||||
V("gathers kin into a plated ring", "rolls spoils beneath the shell curve"),
|
||||
|
|
@ -86,7 +86,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with broad slow paws", "sniffs over wounds before treating them"),
|
||||
V("rears beside flames with paws raised", "handles fire behind a thick forearm guard"),
|
||||
V("lumbers away before breaking into bounds", "flees with heavy paws pounding"),
|
||||
V("settles into a broad paw-marked formation", "joins the civic cluster with a heavy chest brace"),
|
||||
V("plants both paws and settles among the others", "braces its heavy chest and takes a place in the group"),
|
||||
V("drills through weighty upright blows", "patrols with rolling shoulders"),
|
||||
V("reads between two broad paws", "studies with muzzle lowered over the lines"),
|
||||
V("calls kin together with a low roar", "scoops spoils against the chest"),
|
||||
|
|
@ -109,7 +109,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("examines wounds with circling feelers", "tends wounds between delicate forelegs"),
|
||||
V("faces flame behind sealed wing cases", "tests fire with one extended antenna"),
|
||||
V("skitters away in a six-legged burst", "flees with feelers folded against the shell"),
|
||||
V("settles into a geometric carapace cluster", "locks into civic formation along straight traces"),
|
||||
V("locks carapace to carapace in a tight group", "settles along a straight line of shell backs"),
|
||||
V("drills with horn and shell aligned", "patrols in clicking six-step measures"),
|
||||
V("reads by tracking lines with antennae", "studies beneath a lowered horn"),
|
||||
V("signals kin into an antenna-linked group", "pushes spoils beneath the wing case"),
|
||||
|
|
@ -132,7 +132,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nudges wounds with a broad muzzle", "tends wounds while standing horn-outward"),
|
||||
V("faces flames with horns lowered", "stamps around fire on heavy hooves"),
|
||||
V("thunders away with tail held straight", "flees behind a rolling wall of shoulders"),
|
||||
V("settles in a horn-outward civic ring", "joins the formation through deep hoof presses"),
|
||||
V("settles with horns pointed outward among the others", "stamps into place with deep hoof presses"),
|
||||
V("drills in low repeated charges", "patrols with horns maintaining a broad front"),
|
||||
V("reads with muzzle lowered between horns", "studies while one hoof holds position"),
|
||||
V("bellows kin into a guarded circle", "pushes spoils together with the broad brow"),
|
||||
|
|
@ -155,7 +155,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with light crinkling fingers", "bends glossy limbs incrementally and treats wounds"),
|
||||
V("circles flames on quick polished heels", "faces fire with glossy hands fluttering"),
|
||||
V("skips away in sharp zigzag bounds", "flees with striped limbs snapping straight"),
|
||||
V("settles into a neatly wrapped civic cluster", "aligns glossy edges with the formation"),
|
||||
V("settles wrapped close against the others", "aligns its glossy edges with the nearby group"),
|
||||
V("drills in snapping spiral turns", "patrols on bright quick heels"),
|
||||
V("reads with one shiny finger tracing", "studies while striped shoulders stay square"),
|
||||
V("crackles a call to gather kin", "folds spoils against a glossy chest"),
|
||||
|
|
@ -178,7 +178,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nuzzles wounds with a blunt nose", "tends wounds from a low broad stance"),
|
||||
V("sits solidly beside the flames", "handles fire with whiskers held back"),
|
||||
V("ambles away before lengthening its stride", "flees low with broad feet drumming"),
|
||||
V("settles into a close flank-sharing group", "joins the formation at a measured pace"),
|
||||
V("settles flank to flank among the others", "walks in at a measured pace and takes a place"),
|
||||
V("drills through compact shoulder shoves", "patrols without breaking its even stride"),
|
||||
V("reads with blunt chin held close", "studies while small ears remain still"),
|
||||
V("gathers kin through low pulsing calls", "pushes spoils together with both forepaws"),
|
||||
|
|
@ -201,7 +201,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("licks around wounds with a rough tongue", "tends wounds through light paw-tip taps"),
|
||||
V("watches flames through narrowed eyes", "pats toward fire then snaps the paw back"),
|
||||
V("springs away with spine arched", "flees low with tail streaming straight"),
|
||||
V("settles after three tail-led circles", "joins the civic cluster cheek and flank first"),
|
||||
V("settles after three tail-led circles", "presses cheek and flank into the nearby group"),
|
||||
V("drills in silent pouncing bursts", "patrols with claws sheathed and tail level"),
|
||||
V("reads with one paw held firmly down", "tracks each line through narrowed eyes"),
|
||||
V("calls kin with a throaty chirrup", "draws spoils inward beneath both paws"),
|
||||
|
|
@ -224,10 +224,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("preens slowly around wounds", "tends wounds with measured beak taps"),
|
||||
V("flaps around flames with feathers raised", "pecks toward fire between quick retreats"),
|
||||
V("scurries away with wings beating", "flees in darting head-low steps"),
|
||||
V("settles into a close feathered civic circle", "joins the cluster through quick scratching turns"),
|
||||
V("settles into a close feathered circle", "scratches a place among the others with quick turns"),
|
||||
V("drills with spurred hopping strikes", "patrols in stiff head-bobbing strides"),
|
||||
V("reads with one eye turned to each line", "reads each line with head-bobbing pecks"),
|
||||
V("clucks kin into a tight cluster", "scratches spoils into a beak-reached heap"),
|
||||
V("clucks nearby kin into a tight group", "scratches spoils into a beak-reached heap"),
|
||||
V("relieves itself in a brief feathered squat", "flicks the tail after relieving itself"),
|
||||
V("pecks at the wrong duty in confusion", "turns each eye toward a different duty"),
|
||||
V("recharges with beak tucked under wing", "rests in a fluffed rounded crouch"),
|
||||
|
|
@ -247,7 +247,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with a wide slow tongue", "treats wounds from a broadside stance"),
|
||||
V("faces flames with broad nostrils pulsing", "steps around fire on evenly placed hooves"),
|
||||
V("trots away with dewlap swinging", "flees behind a broad lowered head"),
|
||||
V("settles into a shoulder-close civic herd", "joins the formation through steady hoof steps"),
|
||||
V("settles shoulder to shoulder in the herd", "steps into place among the others on steady hooves"),
|
||||
V("drills in sweeping horn-led turns", "patrols with head low and hooves even"),
|
||||
V("reads with muzzle close beneath the brow", "studies while chewing in slow cycles"),
|
||||
V("calls kin together in mellow waves", "pushes spoils inward with a broad muzzle"),
|
||||
|
|
@ -270,10 +270,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with fine pincer tips", "circles wounds on evenly moving jointed legs"),
|
||||
V("faces flames behind a lifted shell edge", "tests fire with one extended claw"),
|
||||
V("scuttles sideways in a rapid retreat", "flees with eyestalks folded low"),
|
||||
V("settles into a shell-outward civic ring", "joins the circle with paired pincers raised"),
|
||||
V("settles with shell outward among the others", "steps into the circle with paired pincers raised"),
|
||||
V("drills in hammering claw combinations", "patrols laterally with pincers raised"),
|
||||
V("reads with eyestalks tracking separate lines", "studies between two balanced claws"),
|
||||
V("clacks kin into a tight shell cluster", "snips spoils into a central grouping"),
|
||||
V("clacks nearby kin into a tight shell group", "snips spoils into a central pile"),
|
||||
V("relieves itself beneath a lowered rear shell", "plants all jointed legs while relieving itself"),
|
||||
V("sidesteps between contradictory duties", "waves both claws over a confused duty"),
|
||||
V("recharges sealed beneath shell and limbs", "rests with pincers folded to the mouth"),
|
||||
|
|
@ -293,7 +293,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nudges wounds with the closed snout", "tends wounds between slow claw-tip taps"),
|
||||
V("lies plated and still beside flames", "tests fire with jaws slightly open"),
|
||||
V("bursts away from a motionless crouch", "flees low with armored tail whipping"),
|
||||
V("settles into a low civic wall of plated backs", "joins formation on firmly splayed feet"),
|
||||
V("settles into a low wall of plated backs", "plants firmly splayed feet among the others"),
|
||||
V("drills in jaw-led lunges and tail sweeps", "patrols belly-low behind armored ridges"),
|
||||
V("reads with one eye fixed on each line", "studies between motionless open jaws"),
|
||||
V("rumbles kin into a plated gathering", "sweeps spoils together with the heavy tail"),
|
||||
|
|
@ -306,7 +306,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with the plated tail slowly flexing", "sleeps while one eye opens briefly"));
|
||||
|
||||
AddExtended(voices, "civ_dog",
|
||||
V("sings in muzzle-lifted howling phrases", "barks a tail-beating civic rhythm"),
|
||||
V("sings in muzzle-lifted howling phrases", "barks a tail-beating rhythm"),
|
||||
V("courts through quick circling sniffs", "mates on braced hind legs"),
|
||||
V("cultivates in nose-led bounding passes", "tends planted growth in brisk pawing bursts"),
|
||||
V("pollinates with a soft searching nose", "bounds among blooms with ears forward"),
|
||||
|
|
@ -316,7 +316,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("licks wounds in repeated tongue strokes", "tends wounds with ears trained close"),
|
||||
V("barks at flames from a paw-wide stance", "circles fire with nostrils pulsing"),
|
||||
V("bounds away with ears streaming", "flees low as the tail draws tight"),
|
||||
V("settles after repeated tail-led circling", "joins a close muzzle-facing civic cluster"),
|
||||
V("settles after repeated tail-led circling", "presses muzzle-first into the nearby group"),
|
||||
V("drills in shoulder-first rushing tackles", "patrols nose-first with ears alert"),
|
||||
V("reads with muzzle resting near the lines", "studies while one forepaw taps"),
|
||||
V("calls kin together with repeated barks", "gathers spoils beneath both forepaws"),
|
||||
|
|
@ -339,7 +339,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("licks wounds with a narrow moving tongue", "tends wounds with narrow paw-tip touches"),
|
||||
V("circles flames in angled crossing steps", "tests fire with whiskers held sideways"),
|
||||
V("darts away through crossing turns", "flees with brush held straight behind"),
|
||||
V("settles into an offset civic formation", "joins it through angled body circuits"),
|
||||
V("settles at an offset angle among the others", "sidesteps once and takes a place in the group"),
|
||||
V("drills in feinting black-pawed rushes", "patrols by crossing its own earlier line"),
|
||||
V("reads with the brush wrapped around its feet", "tracks each line through bright narrowed eyes"),
|
||||
V("calls kin with clipped rising barks", "sweeps spoils inward beneath the long brush"),
|
||||
|
|
@ -352,7 +352,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with brush and black paws twitching", "sleeps through tiny muzzle-led feints"));
|
||||
|
||||
AddExtended(voices, "civ_frog",
|
||||
V("sings through a round pulsing throat", "croaks a springy civic refrain"),
|
||||
V("sings through a round pulsing throat", "croaks a springy refrain"),
|
||||
V("courts with throat-puffed hopping displays", "folds long legs into the mating crouch"),
|
||||
V("cultivates in compact repeated leaps", "handles planted growth between broad splayed hands"),
|
||||
V("pollinates with quick tongue-tip touches", "springs bloom to bloom on folded legs"),
|
||||
|
|
@ -362,7 +362,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with broad damp hands", "leans round-eyed while treating wounds"),
|
||||
V("squats beside flames with throat pulsing", "springs around fire on tucked legs"),
|
||||
V("bounds away in long rapid arcs", "flees with throat flat and eyes wide"),
|
||||
V("settles into a close croaking cluster", "joins the formation through repeated short hops"),
|
||||
V("settles into a close croaking cluster", "hops short distances until it is among the others"),
|
||||
V("drills in double-footed kicking leaps", "patrols by springing between low crouches"),
|
||||
V("reads with both round eyes lowered", "tracks the lines with one broad fingertip"),
|
||||
V("croaks kin into a facing circle", "gathers spoils between splayed hands"),
|
||||
|
|
@ -375,7 +375,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with long hind feet twitching", "dozes while the throat pulses silently"));
|
||||
|
||||
AddExtended(voices, "civ_garlic_man",
|
||||
V("sings through rustling layered breaths", "crackles a papery civic tune"),
|
||||
V("sings through rustling layered breaths", "crackles a papery tune"),
|
||||
V("courts by unfurling outer layers", "bundles knobby limbs during mating"),
|
||||
V("cultivates with alternating layered hands", "tends planted growth on knobby bobbing feet"),
|
||||
V("pollinates with soft papery brushes", "rustles between blooms in layered turns"),
|
||||
|
|
@ -385,10 +385,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("wraps wounds in overlapping outer layers", "tends wounds with knobby fingertips"),
|
||||
V("draws papery layers back from flames", "circles fire with dry arms held wide"),
|
||||
V("rolls away in a rustling rush", "flees with loose layers streaming"),
|
||||
V("settles into a tightly layered civic cluster", "bundles into formation along concentric lines"),
|
||||
V("settles into a tightly layered cluster", "bundles its dry layers against the nearby group"),
|
||||
V("drills in knotted head-first rushes", "patrols with papery arms spread"),
|
||||
V("reads while smoothing each rustling layer", "studies with one knobby finger tracing"),
|
||||
V("rustles kin into a layered cluster", "bundles spoils between both dry arms"),
|
||||
V("rustles nearby kin into a layered group", "bundles spoils between both dry arms"),
|
||||
V("relieves itself from a knobby-footed squat", "gathers loose layers after relieving itself"),
|
||||
V("peels back layers over a mistaken duty", "bobs uncertainly between duties"),
|
||||
V("recharges folded inside dry outer layers", "rests while papery edges settle"),
|
||||
|
|
@ -408,7 +408,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nuzzles wounds beneath curled horns", "tends wounds with slow browsing lips"),
|
||||
V("bounds around flames with beard held clear", "faces fire behind lowered curled horns"),
|
||||
V("scrambles away in high uneven leaps", "flees on clattering split hooves"),
|
||||
V("settles into a high-standing horned cluster", "joins the formation with brisk hoof stamps"),
|
||||
V("settles into a high-standing horned cluster", "stamps into place among the others on brisk hooves"),
|
||||
V("drills in sudden brow-first charges", "patrols with curled horns tipped forward"),
|
||||
V("reads with beard brushing close", "studies while one ear cocks sideways"),
|
||||
V("bleats kin into a head-to-head group", "nudges spoils together beneath the horns"),
|
||||
|
|
@ -431,8 +431,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("licks wounds between low pulsing whoops", "tends wounds with broad muzzle lowered"),
|
||||
V("paces around flames with jaws parted", "faces fire from a low sloping crouch"),
|
||||
V("lopes away in widening loops", "flees with shoulders low and jaws shut"),
|
||||
V("settles into a shoulder-close laughing clan", "circles the civic group before lying low"),
|
||||
V("drills through harrying jaw-first passes", "patrols in broad looping circuits"),
|
||||
V("settles shoulder to shoulder in the clan", "circles the others once before lying low"),
|
||||
V("drills through harrying jaw-first passes", "patrols in broad looping paths"),
|
||||
V("reads with jaws slightly parted", "studies while sloped shoulders rock"),
|
||||
V("whoops kin into a close flank group", "crushes spoils into manageable groupings"),
|
||||
V("relieves itself from crooked lowered haunches", "sniffs around after relieving itself"),
|
||||
|
|
@ -454,10 +454,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with quick alternating palms", "leans the pointed crown away and treats wounds"),
|
||||
V("pivots around flames with rind held back", "faces fire on bouncing rounded feet"),
|
||||
V("rolls away before springing upright", "flees with pointed crown angled forward"),
|
||||
V("settles into a neatly segmented civic cluster", "joins formation through rounded divisions"),
|
||||
V("settles into a neatly segmented cluster", "slots into a gap among the others"),
|
||||
V("drills in rolling pointed-crown charges", "patrols with quick springing pivots"),
|
||||
V("reads with mouth held in a pucker", "traces lines beneath the pointed crown"),
|
||||
V("squeaks kin into a rounded cluster", "presses spoils together with both palms"),
|
||||
V("squeaks nearby kin into a rounded group", "presses spoils together with both palms"),
|
||||
V("relieves itself in a tight rounded squat", "straightens the pointed crown after relieving itself"),
|
||||
V("rolls between mismatched duty segments", "puckers over an obviously mistaken duty"),
|
||||
V("recharges curled against the firm rind", "rests with rounded feet tucked close"),
|
||||
|
|
@ -477,7 +477,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("wraps wounds in overlapping soft frills", "tends wounds with long leaflike fingers"),
|
||||
V("unfurls around flames at a measured distance", "faces fire with layered edges drawn inward"),
|
||||
V("glides away with frills streaming", "flees in long supple sweeping steps"),
|
||||
V("settles into a facing circle of layered forms", "weaves the civic group into interlocking bands"),
|
||||
V("settles into a facing circle of layered forms", "threads among the others until the circle closes"),
|
||||
V("drills in supple stem-led turns", "patrols with sharpened frills held outward"),
|
||||
V("reads with one long finger following lines", "studies behind folded layered hands"),
|
||||
V("chimes kin into a layered ring", "braids spoils together between slender arms"),
|
||||
|
|
@ -490,7 +490,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams while layered edges slowly open", "sleeps as long fingers weave delicate patterns"));
|
||||
|
||||
AddExtended(voices, "civ_monkey",
|
||||
V("sings in rapid chest-patting chatter", "howls a long-armed civic refrain"),
|
||||
V("sings in rapid chest-patting chatter", "howls a long-armed refrain"),
|
||||
V("courts through tail-curled swinging displays", "grapples long limbs and tail during mating"),
|
||||
V("cultivates with hands, feet, and tail alternating", "crouches nimbly while tending growth"),
|
||||
V("pollinates with quick fingertip inspections", "swings among blooms with tail curled"),
|
||||
|
|
@ -500,10 +500,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("grooms wounds with nimble fingertips", "tends wounds through long-fingered grooming"),
|
||||
V("circles flames on hands and feet", "reaches toward fire then recoils up the arms"),
|
||||
V("scrambles away on all four limbs", "flees with tail streaming behind"),
|
||||
V("settles into a close grooming civic troop", "joins the troop through swinging circuits"),
|
||||
V("settles into a close grooming troop", "swings arm over arm into place among the others"),
|
||||
V("drills in long-armed grappling turns", "patrols above and below on nimble limbs"),
|
||||
V("reads while tracing with fingers and toes", "studies with tail curled around the stance"),
|
||||
V("chatters kin into a hand-linked cluster", "gathers spoils with hands, feet, and tail"),
|
||||
V("chatters nearby kin into a hand-linked group", "gathers spoils with hands, feet, and tail"),
|
||||
V("relieves itself from a low long-armed squat", "raises the curling tail while relieving itself"),
|
||||
V("scratches its head between conflicting duties", "swings toward an obviously mistaken duty"),
|
||||
V("recharges curled inside long arms and tail", "rests with both hands beneath the head"),
|
||||
|
|
@ -523,7 +523,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("preens wounds with measured bill touches", "tends wounds through soft flipper presses"),
|
||||
V("rocks beside flames with flippers shielding", "faces fire from a close upright stance"),
|
||||
V("slides away on the rounded belly", "flees in short rapid waddles"),
|
||||
V("settles into a shoulder-locked civic huddle", "joins the group with bill facing inward"),
|
||||
V("settles into a shoulder-locked huddle", "presses in with bill facing inward"),
|
||||
V("drills in stiff bill-and-flipper jabs", "patrols with flippers spread for balance"),
|
||||
V("reads with the narrow bill tracking lines", "studies while rocking on flat heels"),
|
||||
V("honks kin into a packed huddle", "slides spoils inward between flippers"),
|
||||
|
|
@ -536,7 +536,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with flippers paddling softly", "dozes while the narrow bill twitches"));
|
||||
|
||||
AddExtended(voices, "civ_piranha",
|
||||
V("sings in sharp jaw-clicking pulses", "vibrates a fin-beaten civic refrain"),
|
||||
V("sings in sharp jaw-clicking pulses", "vibrates a fin-beaten refrain"),
|
||||
V("courts through tight synchronized fin loops", "spirals through mating with synchronized tail flicks"),
|
||||
V("cultivates in darting fin-led passes", "tends growth with quick shearing mouthparts"),
|
||||
V("pollinates in level fin-guided passes", "darts among blooms without snapping"),
|
||||
|
|
@ -546,7 +546,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with closed mouthparts", "hovers level while fins guide each touch"),
|
||||
V("circles flames in quick snapping turns", "faces fire with fins making tiny corrections"),
|
||||
V("darts away in a flashing straight burst", "flees with fins clamped close"),
|
||||
V("settles into a tight fin-aligned civic school", "joins the school through circling ranks"),
|
||||
V("settles into a tight fin-aligned school", "circles once and slots into the school"),
|
||||
V("drills in repeated jaw-first rushes", "patrols through coordinated fin turns"),
|
||||
V("reads while hovering rigidly level", "tracks lines with quick eye and fin shifts"),
|
||||
V("clicks kin into a close-moving school", "herds spoils together with snapping turns"),
|
||||
|
|
@ -555,11 +555,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("recharges nearly motionless on tucked fins", "rests with only the tail tip correcting"),
|
||||
V("darts after an inexplicable compulsion", "answers it in jaw-clicking loops"),
|
||||
V("pilfers inside flashing shearing teeth", "veers away behind beating fins"),
|
||||
V("darts possessed in rigid repeated circuits", "clicks jaws under unseen direction"),
|
||||
V("darts possessed in rigid repeated loops", "clicks jaws under unseen direction"),
|
||||
V("dreams with fins making tiny corrections", "rests while the tail flicks in bursts"));
|
||||
|
||||
AddExtended(voices, "civ_rabbit",
|
||||
V("sings in soft nose-trembling trills", "pipes a long-eared civic refrain"),
|
||||
V("sings in soft nose-trembling trills", "pipes a long-eared refrain"),
|
||||
V("courts through high twisting leaps", "mates in a compact hind-leg crouch"),
|
||||
V("cultivates in quick paired-foot passes", "tends growth with nimble forepaws"),
|
||||
V("pollinates with twitching nose brushes", "bounds among blooms beneath upright ears"),
|
||||
|
|
@ -569,7 +569,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nuzzles wounds with a trembling nose", "tends wounds between soft forepaws"),
|
||||
V("hops around flames with ears flattened", "faces fire from a spring-loaded crouch"),
|
||||
V("zigzags away in rapid paired bounds", "flees with long ears streaming backward"),
|
||||
V("settles into a close ear-alert formation", "joins the group with quick forepaw taps"),
|
||||
V("settles close with ears alert among the others", "taps into place with quick forepaws"),
|
||||
V("drills in alternating paw-boxing bursts", "patrols through sharp zigzag leaps"),
|
||||
V("reads with ears rotating above the lines", "studies between two lifted forepaws"),
|
||||
V("thumps kin into a compact gathering", "draws spoils close with quick paw sweeps"),
|
||||
|
|
@ -582,7 +582,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with hind feet kicking softly", "dozes while long ears rotate"));
|
||||
|
||||
AddExtended(voices, "civ_rat",
|
||||
V("sings in high whisker-twitching squeaks", "pipes a quick tail-curled civic refrain"),
|
||||
V("sings in high whisker-twitching squeaks", "pipes a quick tail-curled refrain"),
|
||||
V("courts through close nose-led circles", "mates in a low nimble crouch"),
|
||||
V("cultivates in narrow whisker-guided turns", "tends growth with tiny gripping paws"),
|
||||
V("pollinates with rapid whiskered sniffs", "scurries among blooms on quick toes"),
|
||||
|
|
@ -592,10 +592,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("grooms wounds between tiny moving paws", "tends wounds through alternating paw presses"),
|
||||
V("sniffs around flames with whiskers recoiling", "faces fire from a low paw-ready crouch"),
|
||||
V("scurries away through narrow turns", "flees with tail drawn straight"),
|
||||
V("settles into a whisker-touching civic cluster", "joins the group through tight scurrying runs"),
|
||||
V("settles whisker to whisker among the others", "scurries in tight and takes a place"),
|
||||
V("drills in low darting bites", "patrols nose-first along every edge"),
|
||||
V("reads with one paw tracking the line", "studies while whiskers sweep side to side"),
|
||||
V("squeaks kin into a tail-linked cluster", "sorts spoils rapidly between both paws"),
|
||||
V("squeaks nearby kin into a tail-linked group", "sorts spoils rapidly between both paws"),
|
||||
V("relieves itself from a low tail-lifted squat", "combs whiskers after relieving itself"),
|
||||
V("scurries between mismatched duties", "rubs both paws over a confused duty"),
|
||||
V("recharges curled tightly around the tail", "rests with whiskers tucked to the chest"),
|
||||
|
|
@ -605,7 +605,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with paws sorting empty air", "sleeps while whiskers and tail twitch"));
|
||||
|
||||
AddExtended(voices, "civ_rhino",
|
||||
V("sings in rough horn-backed bellows", "rumbles a thick-chested civic note"),
|
||||
V("sings in rough horn-backed bellows", "rumbles a thick-chested note"),
|
||||
V("courts through heavy horn-side head sweeps", "mates on four massively planted feet"),
|
||||
V("cultivates in deep hoof-timed passes", "tends growth beneath a lowered horn"),
|
||||
V("pollinates with the broad lower lip", "walks between blooms behind an angled horn"),
|
||||
|
|
@ -615,7 +615,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nudges wounds with the broad lower lip", "tends wounds while standing hide-outward"),
|
||||
V("faces flames behind a lowered horn", "stamps around fire in heavy arcs"),
|
||||
V("thunders away with horn held level", "flees on pounding thick legs"),
|
||||
V("settles into a hide-and-horn civic barrier", "joins the formation through massive hoof presses"),
|
||||
V("settles hide to hide with horns outward", "presses into place with massive hoof stamps"),
|
||||
V("drills in direct horn-led charges", "patrols with thick hide facing outward"),
|
||||
V("reads with small eyes close to the lines", "studies beneath the shadow of the horn"),
|
||||
V("bellows kin into a heavy defensive ring", "pushes spoils together with the broad snout"),
|
||||
|
|
@ -628,7 +628,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with broad feet grinding softly", "dozes while the heavy horn tilts"));
|
||||
|
||||
AddExtended(voices, "civ_scorpion",
|
||||
V("sings in dry pincer-clicking measures", "rasps a tail-arched civic refrain"),
|
||||
V("sings in dry pincer-clicking measures", "rasps a tail-arched refrain"),
|
||||
V("courts through mirrored claw and tail waves", "mates beneath crossed and lifted stingers"),
|
||||
V("cultivates in eight-legged segmented passes", "tends growth between paired pincers"),
|
||||
V("pollinates with delicate claw-tip touches", "skitters among blooms beneath a curled tail"),
|
||||
|
|
@ -638,7 +638,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with fine claw tips", "keeps the stinger clear and treats wounds"),
|
||||
V("faces flames behind raised pincers", "tests fire beneath a tightly curled tail"),
|
||||
V("skitters away with stinger flattened", "flees on eight rapid jointed feet"),
|
||||
V("settles into a claw-outward civic circle", "aligns tail arches across the formation"),
|
||||
V("settles into a claw-outward circle", "aligns its arched tail with the others"),
|
||||
V("drills in pincer grabs and stinger feints", "patrols with eight feet keeping cadence"),
|
||||
V("reads with both claws held level", "studies beneath a motionless stinger"),
|
||||
V("clicks kin into a pincer-linked group", "draws spoils inward with paired claws"),
|
||||
|
|
@ -651,7 +651,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with pincers clicking softly", "sleeps while the curled tail tightens"));
|
||||
|
||||
AddExtended(voices, "civ_seal",
|
||||
V("sings in bouncing whiskered barks", "honks a broad-flippered civic tune"),
|
||||
V("sings in bouncing whiskered barks", "honks a broad-flippered tune"),
|
||||
V("courts through rolling flipper claps", "presses belly-down with flippers during mating"),
|
||||
V("cultivates in low galumphing passes", "tends growth with broad flipper sweeps"),
|
||||
V("pollinates with soft whiskered nose touches", "flops among blooms on broad flippers"),
|
||||
|
|
@ -661,7 +661,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nuzzles wounds with a whiskered muzzle", "tends wounds using soft flipper presses"),
|
||||
V("claps around flames from a low position", "faces fire with whiskers drawn back"),
|
||||
V("galumphs away in rolling lunges", "flees belly-low on beating flippers"),
|
||||
V("settles into a close whisker-touching cohort", "joins the cohort with broad flipper strokes"),
|
||||
V("settles whisker to whisker among the others", "paddles in with broad flipper strokes"),
|
||||
V("drills in rolling body-first charges", "patrols with alternating flipper strokes"),
|
||||
V("reads propped upright on the belly", "tracks lines with whiskers almost touching"),
|
||||
V("barks kin into a flipper-close gathering", "sweeps spoils inward across the belly"),
|
||||
|
|
@ -684,7 +684,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nuzzles wounds through soft fleece", "tends wounds with a slow narrow muzzle"),
|
||||
V("edges around flames with wool pulled back", "faces fire behind a lowered thick brow"),
|
||||
V("bounds away with fleece bouncing", "flees on close quick hooves"),
|
||||
V("settles into a shoulder-tight civic flock", "joins the flock in a fleece-close cluster"),
|
||||
V("settles shoulder to shoulder in the flock", "presses fleece-close among the others"),
|
||||
V("drills in thick-browed rushing turns", "patrols with woolly flanks kept together"),
|
||||
V("reads with muzzle beneath the woolly fringe", "studies while drooping ears hold still"),
|
||||
V("bleats kin into a fleece-packed group", "nudges spoils inward with the soft brow"),
|
||||
|
|
@ -693,11 +693,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("recharges folded into deep fleece", "rests with muzzle against one woolly flank"),
|
||||
V("follows a strange flockless compulsion", "answers it on fleece-muted quick steps"),
|
||||
V("pilfers beneath thick overlapping fleece", "trots away with ears low"),
|
||||
V("marches possessed without flock formation", "fleece shivers through compelled steps"),
|
||||
V("marches possessed, apart from the flock", "fleece shivers through compelled steps"),
|
||||
V("dreams with fleece shivering lightly", "dozes while small hooves twitch"));
|
||||
|
||||
AddExtended(voices, "civ_snake",
|
||||
V("sings in long coiling hisses", "rattles a winding civic refrain"),
|
||||
V("sings in long coiling hisses", "rattles a winding refrain"),
|
||||
V("courts through paired rising coils", "mates in closely interwoven loops"),
|
||||
V("cultivates in smooth coiling curves", "tends growth with a flicking tongue"),
|
||||
V("pollinates with repeated tongue-tip tests", "winds among blooms in polished curves"),
|
||||
|
|
@ -707,7 +707,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("wraps wounds in a loose supporting loop", "tends wounds with repeated tongue tests"),
|
||||
V("coils beside flames with head raised", "tests fire through rapid tongue flicks"),
|
||||
V("flows away in tightening curves", "flees with head low and coils lengthened"),
|
||||
V("settles into a low interlocking civic coil", "links the group through overlapping loops"),
|
||||
V("settles into a low interlocking coil", "overlaps its coils with the others"),
|
||||
V("drills in sudden coil-driven strikes", "patrols in silent looping curves"),
|
||||
V("reads with tongue tracking each line", "studies from a neatly raised coil"),
|
||||
V("hisses kin into an overlapping knot", "winds spoils together inside broad loops"),
|
||||
|
|
@ -730,10 +730,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("nudges wounds with a slow hooking beak", "extends incrementally from the shell and treats wounds"),
|
||||
V("faces flames from behind the shell rim", "tests fire with the beak then withdraws"),
|
||||
V("plods away before drawing limbs inward", "flees under the protection of the shell"),
|
||||
V("settles into a slow shell-rimmed civic ring", "joins the ring through repeated circuits"),
|
||||
V("settles into a slow shell-rimmed ring", "walks the ring once and takes a place"),
|
||||
V("drills in shell-braced forward shoves", "patrols without breaking its measured pace"),
|
||||
V("reads with chin resting on the shell rim", "tracks lines using slow beak movements"),
|
||||
V("calls kin into a ridged-shell cluster", "pushes spoils together with the shell edge"),
|
||||
V("calls nearby kin into a ridged-shell group", "pushes spoils together with the shell edge"),
|
||||
V("relieves itself on short firmly planted legs", "extends the rear beyond the shell to relieve itself"),
|
||||
V("turns slowly between conflicting duties", "withdraws halfway over a confused duty"),
|
||||
V("recharges fully enclosed by the shell", "rests with chin on the ridged rim"),
|
||||
|
|
@ -753,7 +753,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds beneath the horn tip", "tends wounds with slow muzzle nudges"),
|
||||
V("circles flames with mane drawn clear", "faces fire behind a level pointed horn"),
|
||||
V("gallops away with mane streaming", "flees in long horn-forward strides"),
|
||||
V("settles into a horn-outward civic formation", "joins it through high hoof circuits"),
|
||||
V("settles with horns outward among the others", "high-steps into place on firm hooves"),
|
||||
V("drills in poised horn-led charges", "patrols with lifted hooves and neck arched"),
|
||||
V("reads with the horn held straight", "studies while the mane falls to one side"),
|
||||
V("trills kin into a high-stepping group", "draws spoils together with alternating hoof nudges"),
|
||||
|
|
@ -768,22 +768,22 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddExtended(voices, "civ_wolf",
|
||||
V("sings in long muzzle-raised howls", "carries a shoulder-deep pack refrain"),
|
||||
V("courts through close muzzle-and-flank circles", "mates on firmly braced hind legs"),
|
||||
V("cultivates in coordinated pack-timed passes", "tends growth as paws alternate in formation"),
|
||||
V("cultivates in coordinated pack-timed passes", "tends growth as paws alternate in rhythm"),
|
||||
V("pollinates with scenting muzzle passes", "ranges among blooms on quiet paws"),
|
||||
V("trades through low growls and ear signals", "bargains from a shoulder-close stance"),
|
||||
V("fishes with muzzle poised and paws spread", "fishes through a swift jaw-led lunge"),
|
||||
V("hauls in a firm jaw-held formation", "draws weight with rolling shoulders"),
|
||||
V("hauls with jaws locked and body in line", "draws weight with rolling shoulders"),
|
||||
V("licks wounds with slow repeated strokes", "tends wounds while standing flank-outward"),
|
||||
V("circles flames with muzzle testing the air", "faces fire behind a low shoulder guard"),
|
||||
V("ranges away in long driving strides", "flees with ears flat and tail low"),
|
||||
V("settles into a close shoulder-linked formation", "joins it through pack-timed circuits"),
|
||||
V("drills in coordinated flanking rushes", "patrols with shoulders rolling in formation"),
|
||||
V("settles shoulder to shoulder among the pack", "paces in step and takes a place among them"),
|
||||
V("drills in coordinated flanking rushes", "patrols with shoulders rolling in step"),
|
||||
V("reads with muzzle between both forepaws", "studies while ears track every pause"),
|
||||
V("howls kin into a shoulder-close pack", "gathers spoils within a guarded ring"),
|
||||
V("relieves itself with one hind leg lifted", "tests the air after relieving itself"),
|
||||
V("turns ears toward contradictory duties", "circles an obviously mistaken duty"),
|
||||
V("recharges curled muzzle-to-flank", "rests with tail wrapped over the paws"),
|
||||
V("ranges after a strange solitary compulsion", "breaks pack formation through compelled strides"),
|
||||
V("ranges after a strange solitary compulsion", "breaks from the pack in compelled strides"),
|
||||
V("pilfers in quick closing jaws", "slips away with flank held low"),
|
||||
V("runs possessed without pack signals", "the raised muzzle howls through rigid strides"),
|
||||
V("dreams with paws coursing in place", "sleeps through low muzzle-rumbles"));
|
||||
|
|
@ -799,7 +799,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("braces wounds with thick forearms", "tends wounds through compact hand presses"),
|
||||
V("faces flames with beard gathered close", "handles fire from a deep braced crouch"),
|
||||
V("retreats in short pounding strides", "flees with beard and elbows tucked"),
|
||||
V("settles into a tightly joined civic formation", "aligns with it from a stout square stance"),
|
||||
V("settles tightly among the others", "squares its stout stance and takes a place"),
|
||||
V("drills in compact hammering blows", "patrols with fists at a low guard"),
|
||||
V("reads with one thick finger under each line", "studies above a beard spread on the chest"),
|
||||
V("booms kin into a forearm-linked gathering", "stacks spoils in compact ordered groups"),
|
||||
|
|
@ -812,7 +812,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("dreams with thick fists closing softly", "sleeps while short legs brace"));
|
||||
|
||||
AddExtended(voices, "elf",
|
||||
V("sings in clear long-breathed phrases", "threads a light civic melody"),
|
||||
V("sings in clear long-breathed phrases", "threads a light melody"),
|
||||
V("courts through poised fingertip bows", "mates in a light long-limbed embrace"),
|
||||
V("cultivates in near-silent even passes", "tends growth with long alternating fingers"),
|
||||
V("pollinates with delicate fingertip brushes", "steps among blooms without stirring them"),
|
||||
|
|
@ -822,7 +822,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tends wounds with slender steady hands", "leans close and treats wounds in small touches"),
|
||||
V("faces flames with long fingers held clear", "handles fire through silent measured gestures"),
|
||||
V("withdraws in quick near-silent steps", "flees with long limbs gathered close"),
|
||||
V("settles into a quietly ordered civic formation", "joins it through light even pacing"),
|
||||
V("settles quietly among the ordered group", "paces lightly into place beside the others"),
|
||||
V("drills in swift narrow strikes", "patrols without sound on balanced feet"),
|
||||
V("reads with a long finger tracing lines", "studies while head remains lightly bowed"),
|
||||
V("calls kin together in a clear low phrase", "arranges spoils with slender exact fingers"),
|
||||
|
|
@ -845,7 +845,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("braces wounds with both hands", "kneels close and tends each wound"),
|
||||
V("faces flames with forearms shielding", "handles fire from a balanced crouch"),
|
||||
V("runs away with arms driving hard", "flees in quick alternating strides"),
|
||||
V("settles into a hand-linked civic formation", "joins it through paced alternating turns"),
|
||||
V("settles with hands linked among the others", "turns in place until it fits the group"),
|
||||
V("drills through balanced alternating hand strikes", "patrols with eyes and shoulders forward"),
|
||||
V("reads with one finger tracking the line", "studies while shifting weight between feet"),
|
||||
V("calls kin into an arm-linked gathering", "sorts spoils between quick alternating hands"),
|
||||
|
|
@ -868,7 +868,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("braces wounds with broad hands", "tends wounds behind a tusk-bared guard"),
|
||||
V("faces flames with fists raised", "handles fire while keeping tusks and chest clear"),
|
||||
V("pounds away in long heavy strides", "flees with shoulders hunched and tusks forward"),
|
||||
V("settles into a forearm-locked civic formation", "joins it through heavy heel stamps"),
|
||||
V("settles forearm to forearm among the others", "stamps into place with heavy heels"),
|
||||
V("drills in chopping fist-and-forearm blows", "patrols with tusks high and shoulders broad"),
|
||||
V("reads with one heavy finger under the lines", "studies while tusks frame a lowered jaw"),
|
||||
V("bellows kin into a shoulder-packed gathering", "heaves spoils into a guarded grouping"),
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_acid_gentleman",
|
||||
V("flicks a caustic spark into flame", "draws a green flame between rigid fingertips"),
|
||||
V("presses both palms down against the flame", "sweeps a rigid forearm across the flames"),
|
||||
V("bows into a gathering circle", "beckons the family together with one formal hand"),
|
||||
V("bows and takes a place in the family circle", "beckons the family together with one formal hand"),
|
||||
V("draws a soul upward in an emerald strand", "coaxes life essence between poised fingers"),
|
||||
V("searches the spoils with precise fingertips", "lifts spoils with a measured bow"),
|
||||
V("weeps behind one upright hand", "releases a clipped, trembling sob"),
|
||||
|
|
@ -18,7 +18,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_alpaca",
|
||||
V("puffs a bright flame from pursed lips", "kicks a spark into a spreading flame"),
|
||||
V("stamps broad feet through the flames", "presses a woolly chest down against the flame"),
|
||||
V("hums while joining the herd", "nudges the family into a close cluster"),
|
||||
V("hums while pressing into the herd", "nudges family members into a close group"),
|
||||
V("draws a soul along a curling breath", "pulls life essence between soft lips"),
|
||||
V("sniffs through the spoils", "hooks spoils closer with one forefoot"),
|
||||
V("warbles through a streaming nose", "folds long ears through a breathy sob"),
|
||||
|
|
@ -27,7 +27,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_armadillo",
|
||||
V("strikes plated claws into a flickering flame", "rolls a spark into a widening flame"),
|
||||
V("rakes low claws across the flames", "presses a plated curl against the flame"),
|
||||
V("uncurls among the gathering family", "trundles into a shell-to-shell group"),
|
||||
V("uncurls among the nearby family", "trundles into a shell-to-shell group"),
|
||||
V("draws a soul beneath overlapping plates", "cups life essence between curved claws"),
|
||||
V("snuffles through the spoils", "rakes spoils beneath a plated forearm"),
|
||||
V("chitters through a tightly curled body", "rocks inside the shell with dry sobs"),
|
||||
|
|
@ -63,7 +63,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_candy_man",
|
||||
V("snaps glossy fingers into a sparkling flame", "spins a bright flame from striped palms"),
|
||||
V("claps glossy hands around the flame", "pats quick palms across the flames"),
|
||||
V("twirls into the gathering family", "waves the group into a striped circle"),
|
||||
V("twirls into the nearby family", "waves the others into a striped circle"),
|
||||
V("draws a soul through spiraling fingers", "winds life essence around glossy hands"),
|
||||
V("taps through the spoils with glossy fingertips", "tucks spoils against a striped chest"),
|
||||
V("crackles through a high, wet sob", "covers glossy eyes with trembling hands"),
|
||||
|
|
@ -108,7 +108,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_crab",
|
||||
V("clacks both claws into a snapping flame", "fans a spark into a sideways flame"),
|
||||
V("presses both claws against the flames", "rakes jointed legs across the flame"),
|
||||
V("sidesteps into the gathered family", "waves the group into a shell-close cluster"),
|
||||
V("sidesteps into the nearby family", "waves the others into a shell-close group"),
|
||||
V("draws a soul between raised pincers", "pulls life essence beneath the shell"),
|
||||
V("probes the spoils with both claws", "pinches spoils between polished pincers"),
|
||||
V("bubbles through a shuddering shell", "covers both eyestalks with trembling claws"),
|
||||
|
|
@ -126,7 +126,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_dog",
|
||||
V("scratches a paw-spark into lively flame", "pants a small flame into a wider flare"),
|
||||
V("digs both forepaws across the flames", "beats the flame with quick paw strokes"),
|
||||
V("bounds into the gathered family", "calls the group into a nose-close cluster"),
|
||||
V("bounds into the nearby family", "calls the others into a nose-close group"),
|
||||
V("draws a soul along a lifted muzzle", "laps life essence from a wavering strand"),
|
||||
V("sniffs rapidly through the spoils", "pulls spoils closer between both paws"),
|
||||
V("whines with tears on the muzzle", "covers the nose with both paws and sobs"),
|
||||
|
|
@ -153,7 +153,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_garlic_man",
|
||||
V("rubs papery fingers into a crackling flame", "fans a spark into layered flame"),
|
||||
V("beats loose layers against the flames", "presses knobby hands over the flame"),
|
||||
V("rustles into the gathering family", "bundles the group into a layered cluster"),
|
||||
V("rustles into the nearby family", "bundles the others into a layered group"),
|
||||
V("draws a soul between folded layers", "wraps life essence around knobby fingers"),
|
||||
V("rustles through the spoils with both hands", "tucks spoils beneath folded layers"),
|
||||
V("crinkles through a dry, shaking sob", "covers the face with papery hands and weeps"),
|
||||
|
|
@ -180,7 +180,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_lemon_man",
|
||||
V("rubs pointed fingers into a fizzing flame", "sprays a spark into a sharp flame"),
|
||||
V("presses rounded palms against the flames", "rolls a pointed crown across the flame"),
|
||||
V("bounces into the gathering family", "pivots the group into a rind-close circle"),
|
||||
V("bounces into the nearby family", "pivots the others into a rind-close circle"),
|
||||
V("draws a soul around the pointed crown", "presses life essence between rounded palms"),
|
||||
V("taps through the spoils with pointed fingers", "rolls spoils closer with both hands"),
|
||||
V("squeaks through streaming eyes", "folds both hands over the face and sobs"),
|
||||
|
|
@ -189,7 +189,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_liliar",
|
||||
V("rubs slender leaves into a silver flame", "unfurls a spark into layered flame"),
|
||||
V("folds broad frills against the flames", "lashes sharpened leaves across the flame"),
|
||||
V("glides into the gathering family", "unfurls the group into a facing circle"),
|
||||
V("glides into the nearby family", "unfurls among the others into a facing circle"),
|
||||
V("draws a soul along a supple stem", "folds life essence between layered frills"),
|
||||
V("sifts through the spoils with slender fingers", "draws spoils beneath layered arms"),
|
||||
V("chimes through trembling frills", "folds slender hands over the face and sobs"),
|
||||
|
|
@ -198,7 +198,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_monkey",
|
||||
V("claps long hands into a flashing flame", "whips a spark into a growing flame"),
|
||||
V("slaps broad palms against the flames", "presses a curling tail over the flame"),
|
||||
V("swings into the gathered family", "chatters the group into a long-armed cluster"),
|
||||
V("swings into the nearby family", "chatters the others into a long-armed group"),
|
||||
V("draws a soul around a curling tail", "pulls life essence between cupped hands"),
|
||||
V("picks rapidly through the spoils", "grasps spoils with hands and tail"),
|
||||
V("howls with both hands over wet eyes", "curls the tail tight through chattering sobs"),
|
||||
|
|
@ -216,7 +216,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_piranha",
|
||||
V("snaps bright teeth into a darting flame", "flicks the tail and spreads a thin flame"),
|
||||
V("presses quick fins against the flames", "lashes a narrow tail over the flame"),
|
||||
V("darts into the gathered family", "clicks the group into a tight-finned cluster"),
|
||||
V("darts into the nearby family", "clicks the others into a tight-finned group"),
|
||||
V("draws a soul between flashing teeth", "pulls life essence past pulsing gills"),
|
||||
V("nips rapidly through the spoils", "tugs spoils between sharp teeth"),
|
||||
V("chatters through trembling gills", "bows the head through thin, clicking sobs"),
|
||||
|
|
@ -225,7 +225,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_rabbit",
|
||||
V("scratches quick paws into a hopping flame", "kicks a spark into a spreading flame"),
|
||||
V("beats long ears against the flames", "scrapes both forepaws across the flame"),
|
||||
V("bounds into the gathered family", "thumps the group into an ear-close cluster"),
|
||||
V("bounds into the nearby family", "thumps the others into an ear-close group"),
|
||||
V("draws a soul between upright ears", "pulls life essence beneath a twitching nose"),
|
||||
V("sniffs rapidly through the spoils", "cups spoils between both forepaws"),
|
||||
V("sniffles with long ears folded low", "covers the nose with both paws and sobs"),
|
||||
|
|
@ -234,7 +234,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_rat",
|
||||
V("scratches nimble claws into a thin flame", "whips a spark into a spreading flame"),
|
||||
V("rakes both forepaws across the flames", "presses a bare tail over the flame"),
|
||||
V("scurries into the gathered family", "squeaks the group into a whisker-close cluster"),
|
||||
V("scurries into the nearby family", "squeaks the others into a whisker-close group"),
|
||||
V("draws a soul along trembling whiskers", "winds life essence around a bare tail"),
|
||||
V("sniffs quickly through the spoils", "pulls spoils close between nimble paws"),
|
||||
V("squeals with whiskers dripping", "wrings both paws through rapid sobs"),
|
||||
|
|
@ -261,7 +261,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_seal",
|
||||
V("claps broad flippers into a bouncing flame", "barks a spark into a rising flame"),
|
||||
V("slaps both flippers against the flames", "rolls a broad belly across the flame"),
|
||||
V("galumphs into the gathered family", "barks the group into a whisker-close cluster"),
|
||||
V("galumphs into the nearby family", "barks the others into a whisker-close group"),
|
||||
V("draws a soul along trembling whiskers", "folds life essence between broad flippers"),
|
||||
V("sniffs through the spoils", "draws spoils close with both flippers"),
|
||||
V("barks with tears dripping from whiskers", "covers the face with both flippers and sobs"),
|
||||
|
|
@ -315,7 +315,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "dwarf",
|
||||
V("strikes thick knuckles into a bright flame", "cups a deep flame between stout hands"),
|
||||
V("beats heavy palms against the flames", "stamps short feet across the flame"),
|
||||
V("clasps forearms within the gathering group", "calls the family into a stout circle"),
|
||||
V("clasps forearms within the nearby group", "calls the family into a stout circle"),
|
||||
V("draws a soul through a braided beard", "pulls life essence between thick fingers"),
|
||||
V("sorts through the spoils with square hands", "tucks spoils beneath one stout arm"),
|
||||
V("sobs into a bristling beard", "covers both eyes with thick, shaking hands"),
|
||||
|
|
@ -324,7 +324,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "elf",
|
||||
V("traces slender fingers into a clear flame", "coaxes a silver flame between long hands"),
|
||||
V("sweeps long fingers across the flames", "presses slender palms against the flame"),
|
||||
V("bows into the gathering kin-group", "beckons the family into a facing circle"),
|
||||
V("bows into the nearby kin-group", "beckons the family into a facing circle"),
|
||||
V("draws a soul between long fingertips", "guides life essence along an open palm"),
|
||||
V("searches the spoils with light fingertips", "draws spoils beneath one slender arm"),
|
||||
V("weeps behind long, trembling fingers", "releases a clear, unsteady sob"),
|
||||
|
|
@ -333,7 +333,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "human",
|
||||
V("rubs bare palms into a sudden flame", "snaps a spark into a climbing flame"),
|
||||
V("beats both hands against the flames", "stamps alternating feet across the flame"),
|
||||
V("waves the family into a gathering circle", "steps among the forming civic group"),
|
||||
V("waves the family into a circle", "steps among the others as they gather"),
|
||||
V("draws a soul between cupped hands", "pulls life essence toward the chest"),
|
||||
V("searches through the spoils with both hands", "gathers spoils against one forearm"),
|
||||
V("weeps into both open hands", "draws shaking breaths between audible sobs"),
|
||||
|
|
@ -342,7 +342,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "orc",
|
||||
V("claps heavy fists into a roaring flame", "scrapes broad tusks into a spreading flame"),
|
||||
V("pounds thick forearms against the flames", "stamps heavy feet across the flame"),
|
||||
V("shoulders into the gathering group", "calls the family into a tusk-outward group"),
|
||||
V("shoulders into the nearby group", "calls the family into a tusk-outward group"),
|
||||
V("draws a soul between broad tusks", "pulls life essence into a clenched fist"),
|
||||
V("rakes through the spoils with heavy hands", "hauls spoils beneath one thick arm"),
|
||||
V("roars with tears across broad tusks", "bows over both fists through heavy sobs"),
|
||||
|
|
|
|||
|
|
@ -8,15 +8,15 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
{
|
||||
Add(voices, "civ_acid_gentleman",
|
||||
V("paces with back held straight", "advances in an upright stride"),
|
||||
V("holds chin high and shoulders level", "repeats each gesture at the same angle"),
|
||||
V("holds chin high and shoulders level", "holds each arm at the same angle"),
|
||||
V("practices an elaborate bow", "turns with one arm held across the chest"),
|
||||
V("divides the meal into equal portions", "takes one bite between upright pauses"),
|
||||
V("reclines with back still straight", "rests with every limb folded together"),
|
||||
V("stalks {target} in even steps", "closes on {target} behind a rigid guard"),
|
||||
V("stalks {target} in even steps", "closes on {target} with one arm held as a shield"),
|
||||
V("slashes at {target} with a caustic hand", "parries {target} with a rigid forearm"),
|
||||
V("offers another a deep bow", "trades clipped greetings with nearby company"),
|
||||
V("lets out a clipped chuckle", "muffles a short laugh behind one hand"),
|
||||
V("measures the task twice", "keeps records in matching groups"));
|
||||
V("measures each piece twice before placing it", "lines matching pieces into even rows"));
|
||||
|
||||
Add(voices, "civ_alpaca",
|
||||
V("steps lightly with chin held high", "pads onward in a woolly sway"),
|
||||
|
|
@ -28,7 +28,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("kicks at {target} with both hind feet", "shoulders {target} behind dense fleece"),
|
||||
V("leans close for a soft-nosed greeting", "hums in low pulses beside nearby company"),
|
||||
V("bursts into a breathy warble", "shakes all over with a muffled chuckle"),
|
||||
V("carries the load", "sorts material between both forefeet"));
|
||||
V("carries the load across the withers", "sorts material between both forefeet"));
|
||||
|
||||
Add(voices, "civ_armadillo",
|
||||
V("scuttles with plated back bobbing", "trots onward in a low quick rhythm"),
|
||||
|
|
@ -40,7 +40,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("rams {target} in a plated roll", "claws at {target} from a crouched guard"),
|
||||
V("taps shells in a brisk greeting", "chitters softly with nearby company"),
|
||||
V("uncurls with a rattling little laugh", "chitters until the back plates shake"),
|
||||
V("reinforces the construction", "hauls a load against one plated shoulder"));
|
||||
V("packs against the construction with both claws", "hauls a load against one plated shoulder"));
|
||||
|
||||
Add(voices, "civ_bear",
|
||||
V("lumbers forward on heavy paws", "advances with a broad rolling gait"),
|
||||
|
|
@ -51,18 +51,18 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("follows {target} by scent", "surges after {target} with head low"),
|
||||
V("mauls at {target} with sweeping claws", "rears over {target} and crashes down"),
|
||||
V("claps another on the shoulder", "shares a booming greeting with nearby company"),
|
||||
V("roars with belly-deep amusement", "huffs into a rumbling chuckle"),
|
||||
V("roars with belly-deep chuckles", "huffs into a rumbling chuckle"),
|
||||
V("lifts the load above the chest", "braces the construction with both forepaws"));
|
||||
|
||||
Add(voices, "civ_beetle",
|
||||
V("clicks onward on lacquered legs", "traces a straight line on quick feet"),
|
||||
V("locks every joint and watches", "turns both feelers in slow arcs"),
|
||||
V("spins on tightly planted legs", "clambers over its own folded limbs"),
|
||||
V("clips the meal apart", "works steadily along each bite"),
|
||||
V("clips the meal apart", "nibbles steadily along each bite"),
|
||||
V("folds all legs beneath a hard wing case", "rests sealed beneath the carapace"),
|
||||
V("feels out {target} with raised antennae", "skitters after {target} in a straight line"),
|
||||
V("drives a horn at {target}", "meets {target} behind a polished carapace"),
|
||||
V("touches antennae in greeting", "joins nearby company with evenly spaced clicks"),
|
||||
V("touches antennae in greeting", "clicks evenly spaced greetings beside nearby company"),
|
||||
V("rattles wing cases through a laugh", "clicks out a quick dry chuckle"),
|
||||
V("sorts material with repeated leg motions", "fits the construction edge to edge"));
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("gores at {target} from a planted stance", "buffets {target} with a massive brow"),
|
||||
V("presses foreheads in greeting", "forms a horn-outward circle with nearby company"),
|
||||
V("snorts into a rolling thunderous laugh", "bellows between blunt chuckles"),
|
||||
V("pulls the load", "drives the construction into place"));
|
||||
V("pulls the load with lowered head", "drives the construction into place"));
|
||||
|
||||
Add(voices, "civ_candy_man",
|
||||
V("skips along on glossy heels", "twirls onward in quick steps"),
|
||||
|
|
@ -88,7 +88,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("clubs at {target} with a hardened fist", "pelts {target} with rapid hand strikes"),
|
||||
V("greets another with a full turn", "offers quick bows to nearby company"),
|
||||
V("tinkles with a high laugh", "crackles into rapid giggles"),
|
||||
V("groups the work with both hands", "folds the craft in repeated motions"));
|
||||
V("stacks pieces with both hands", "folds each piece of the craft by hand"));
|
||||
|
||||
Add(voices, "civ_capybara",
|
||||
V("ambles onward on evenly placed feet", "takes broad slow steps"),
|
||||
|
|
@ -100,7 +100,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("shoves {target} with a solid shoulder", "snaps at {target} from a low brace"),
|
||||
V("shifts aside for nearby company", "rests flank to flank beside another"),
|
||||
V("chuckles in soft bubbling pulses", "squeaks once before a low laugh"),
|
||||
V("keeps a measured working pace", "moves the load with both forepaws"));
|
||||
V("pushes material along at a slow pace", "moves the load with both forepaws"));
|
||||
|
||||
Add(voices, "civ_cat",
|
||||
V("threads onward on silent paws", "saunters ahead with tail high"),
|
||||
|
|
@ -112,7 +112,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("rakes at {target} with quick claws", "arches against {target} with teeth bared"),
|
||||
V("winds around another in greeting", "offers nearby company a slow blink"),
|
||||
V("chirps into a short laugh", "purrs until the sound breaks into chuckles"),
|
||||
V("sorts material with paw tips", "checks the work from every angle"));
|
||||
V("sorts material with paw tips", "pads around the craft looking closely"));
|
||||
|
||||
Add(voices, "civ_chicken",
|
||||
V("struts in quick head-bobbing steps", "hurries onward on scratching feet"),
|
||||
|
|
@ -122,21 +122,21 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tucks the beak beneath one wing", "settles into a rounded sleeping crouch"),
|
||||
V("rushes after {target} with wings spread", "tracks {target} in darting circles"),
|
||||
V("spurs at {target} in a flapping leap", "pecks at {target} between sharp sidesteps"),
|
||||
V("clucks over civic news with another", "gathers near company with rapid calls"),
|
||||
V("clucks back and forth with another", "gathers near company with rapid calls"),
|
||||
V("cackles in a rapid rising burst", "erupts into breathless clucks"),
|
||||
V("sorts material with the beak", "scratches briskly at the task"));
|
||||
V("sorts material with the beak", "scratches and pecks material into place"));
|
||||
|
||||
Add(voices, "civ_cow",
|
||||
V("walks with a broad pendulous sway", "takes steady repeated steps"),
|
||||
V("walks with a broad pendulous sway", "takes steady hoofed steps"),
|
||||
V("chews while standing hipshot", "waits without shifting a hoof"),
|
||||
V("trots in a broad uneven circle", "flicks the tail and kicks up both heels"),
|
||||
V("pulls in a mouthful", "chews the meal in repeated cycles"),
|
||||
V("pulls in a mouthful", "chews the meal in slow jaw circles"),
|
||||
V("folds down into a heavy resting curl", "rests with muzzle against one flank"),
|
||||
V("follows {target} with steady nostrils", "trots after {target} with lowered head"),
|
||||
V("hooks at {target} with a sweeping horn", "kicks at {target} from a braced stance"),
|
||||
V("greets another with a mellow call", "stands shoulder to shoulder with nearby company"),
|
||||
V("moos into a long wobbling laugh", "shakes the dewlap with deep amusement"),
|
||||
V("draws a steady load", "works the task at an even pace"));
|
||||
V("moos into a long wobbling laugh", "shakes the dewlap through deep chuckles"),
|
||||
V("draws a steady load", "pushes material along with even hoof-steps"));
|
||||
|
||||
Add(voices, "civ_crab",
|
||||
V("sidesteps briskly with claws held high", "scuttles onward on quick jointed legs"),
|
||||
|
|
@ -146,8 +146,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("tucks every limb beneath the shell", "rests fully closed inside the shell"),
|
||||
V("circles {target} in tightening sidesteps", "scuttles after {target} with claws open"),
|
||||
V("pinches at {target} with one heavy claw", "hammers {target} behind a raised shell"),
|
||||
V("waves a claw in brisk greeting", "trades measured taps with nearby company"),
|
||||
V("clacks both claws in choppy amusement", "bubbles out a sideways little laugh"),
|
||||
V("waves a claw in brisk greeting", "trades short taps with nearby company"),
|
||||
V("clacks both claws in choppy laughs", "bubbles out a sideways little laugh"),
|
||||
V("cuts material with paired claws", "carries the load in paired claws"));
|
||||
|
||||
Add(voices, "civ_crocodile",
|
||||
|
|
@ -156,11 +156,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("spins around its sweeping tail", "snaps between quick turns"),
|
||||
V("gulps down a bite", "pins the meal before tearing it apart"),
|
||||
V("sinks flat into a resting pose", "sleeps with one eye barely closed"),
|
||||
V("creeps toward {target} in complete stillness", "bursts after {target} from a dead stop"),
|
||||
V("creeps toward {target} belly-low", "bursts after {target} from a dead stop"),
|
||||
V("clamps down on {target} with crushing jaws", "whips the tail across {target}"),
|
||||
V("rumbles a low greeting to another", "rests flank to flank with nearby company"),
|
||||
V("chuffs through a deep toothy laugh", "rattles the throat through low chuckles"),
|
||||
V("drags the load", "guards the work without moving"));
|
||||
V("drags the load", "lies still beside the construction"));
|
||||
|
||||
Add(voices, "civ_dog",
|
||||
V("trots ahead with tail swinging", "bounds onward with ears streaming"),
|
||||
|
|
@ -172,7 +172,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("bites at {target} and holds fast", "surges into {target} with one shoulder"),
|
||||
V("greets another with repeated sniffs", "leans one flank against nearby company"),
|
||||
V("pants into a barking laugh", "yips through repeated chuckles"),
|
||||
V("carries the load at a trot", "watches the work with ears forward"));
|
||||
V("carries the load at a trot", "watches the construction with ears forward"));
|
||||
|
||||
Add(voices, "civ_fox",
|
||||
V("slips forward on black paws", "weaves onward in a crossing line"),
|
||||
|
|
@ -184,7 +184,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("feints past {target} and snaps back", "slashes at {target} from an oblique angle"),
|
||||
V("trades low whispers with another", "bows to nearby company with ears raised"),
|
||||
V("barks out a quick laugh", "masks a short chuckle with the tail tip"),
|
||||
V("keeps records in narrow groups", "checks each part of the work"));
|
||||
V("sorts pieces into narrow piles", "sniffs along each finished edge"));
|
||||
|
||||
Add(voices, "civ_frog",
|
||||
V("hops forward in compact arcs", "springs onward in quick bounds"),
|
||||
|
|
@ -194,9 +194,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("folds into a tiny crouched form", "dozes with chin resting on both hands"),
|
||||
V("bounds after {target} in long leaps", "waits before springing toward {target}"),
|
||||
V("kicks at {target} with both feet", "lashes at {target} with a whipping tongue"),
|
||||
V("croaks a greeting to another", "joins nearby company in rhythmic calls"),
|
||||
V("ribbits into a bubbling laugh", "inflates the throat with booming amusement"),
|
||||
V("reaches upper parts of the construction", "presses the work with both hands"));
|
||||
V("croaks a greeting to another", "calls nearby company in a shared rhythm"),
|
||||
V("ribbits into a bubbling laugh", "inflates the throat through booming chuckles"),
|
||||
V("climbs to higher parts of the construction", "presses material flat with both hands"));
|
||||
|
||||
Add(voices, "civ_garlic_man",
|
||||
V("marches with papery layers rustling", "bobs onward on knobby feet"),
|
||||
|
|
@ -208,19 +208,19 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("buffets {target} with a knotted head", "strikes at {target} with both hands"),
|
||||
V("greets another with a full-body bob", "rustles beside nearby company"),
|
||||
V("rustles into a crackling laugh", "splits into quick giggles"),
|
||||
V("groups material between both hands", "layers the craft with knobby hands"));
|
||||
V("stacks material between both hands", "layers the craft with knobby hands"));
|
||||
|
||||
Add(voices, "civ_goat",
|
||||
V("clatters onward on nimble split hooves", "picks a quick high-stepping route"),
|
||||
V("balances on four feet while waiting", "chews with one ear cocked"),
|
||||
V("leaps high simply to twist around", "bounds sideways on springy legs"),
|
||||
V("leaps high and twists midair", "bounds sideways on springy legs"),
|
||||
V("tears off a mouthful", "samples every part of the meal"),
|
||||
V("kneels into a compact sleeping curl", "sleeps with legs tucked tightly"),
|
||||
V("scrambles after {target} without slowing", "charges {target} with chin tucked"),
|
||||
V("butts {target} with curled horns", "kicks at {target} from a sudden pivot"),
|
||||
V("nuzzles another in brisk greeting", "joins nearby company with noisy bleats"),
|
||||
V("nuzzles another in brisk greeting", "bleats noisily beside nearby company"),
|
||||
V("bleats out a brash hiccupping laugh", "snorts between sharp little chuckles"),
|
||||
V("works the task from a high stance", "clears material with quick bites"));
|
||||
V("hauls material from a high stance", "clears material with quick bites"));
|
||||
|
||||
Add(voices, "civ_hyena",
|
||||
V("lope-walks with sloping shoulders", "circles onward without slowing"),
|
||||
|
|
@ -228,11 +228,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("bounds in looping bursts", "spins with jaws open and shoulders lowered"),
|
||||
V("cracks through one bite first", "guards the meal between broad jaws"),
|
||||
V("drops into a loose sleeping sprawl", "sleeps with one ear twitching"),
|
||||
V("runs {target} down in repeated stages", "fans wide before closing on {target}"),
|
||||
V("runs {target} down in short bursts", "fans wide before closing on {target}"),
|
||||
V("crushes at {target} with heavy jaws", "harrows {target} with darting bites"),
|
||||
V("shoulder-bumps another in greeting", "calls nearby company into a close group"),
|
||||
V("whoops into a cascading laugh", "cackles until the flanks heave"),
|
||||
V("breaks material into separate parts", "works the task with repeated jaw motions"));
|
||||
V("breaks material into separate parts", "crunches material with repeated jaw motions"));
|
||||
|
||||
Add(voices, "civ_lemon_man",
|
||||
V("zips along with a springy step", "rolls onward before popping upright"),
|
||||
|
|
@ -244,7 +244,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("sprays a stinging burst at {target}", "jabs at {target} with the pointed crown"),
|
||||
V("greets another with a brisk nod", "pivots toward each nearby speaker"),
|
||||
V("squeaks into a sharp fizzy laugh", "puckers before bursting into giggles"),
|
||||
V("presses the material with both palms", "groups the work into even sections"));
|
||||
V("presses the material with both palms", "stacks material into even piles"));
|
||||
|
||||
Add(voices, "civ_liliar",
|
||||
V("glides with layered frills whispering", "drifts onward in measured steps"),
|
||||
|
|
@ -256,7 +256,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("lashes at {target} with a supple stem", "cuts at {target} with sharpened leaves"),
|
||||
V("exchanges a sweeping bow with another", "turns nearby company into a facing circle"),
|
||||
V("chimes with a light silvery laugh", "hides a trilling chuckle behind slim fingers"),
|
||||
V("braids material into the craft", "sets the construction with both hands"));
|
||||
V("braids material into the craft", "places each piece of the construction with both hands"));
|
||||
|
||||
Add(voices, "civ_monkey",
|
||||
V("scampers ahead with arms swinging low", "bounds onward in long-armed strides"),
|
||||
|
|
@ -268,11 +268,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("clubs at {target} with heavy fists", "grapples {target} with hands and tail"),
|
||||
V("grooms another during rapid chatter", "waves both hands at nearby company"),
|
||||
V("chatters into a rolling shriek of laughter", "slaps both knees and howls"),
|
||||
V("handles several parts of the task", "reaches upper parts of the construction"));
|
||||
V("moves several pieces with both hands", "climbs to higher parts of the construction"));
|
||||
|
||||
Add(voices, "civ_penguin",
|
||||
V("waddles forward with flippers held out", "slides onward on a rounded belly"),
|
||||
V("rocks from heel to heel", "stands in a close inward-facing huddle"),
|
||||
V("rocks from heel to heel", "stands pressed into a tight upright huddle"),
|
||||
V("spins belly-down in a tight circle", "bobs through a brisk flipper dance"),
|
||||
V("tips back a morsel", "pecks the meal apart with a narrow bill"),
|
||||
V("tucks the bill beneath one flipper", "sleeps upright with flippers folded"),
|
||||
|
|
@ -280,7 +280,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("jabs at {target} with a stiff beak", "flipper-slaps {target} from a planted stance"),
|
||||
V("bows stiffly to another", "huddles shoulder to shoulder with nearby company"),
|
||||
V("honks into a stuttering laugh", "wobbles through short chuckles"),
|
||||
V("slides the load with steady force", "checks each part of the task in order"));
|
||||
V("slides the load with steady force", "inspects each piece in order with the bill"));
|
||||
|
||||
Add(voices, "civ_piranha",
|
||||
V("darts onward in brisk fin-led bursts", "weaves ahead with snapping turns"),
|
||||
|
|
@ -290,9 +290,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("settles with fins tucked close", "rests almost motionless"),
|
||||
V("homes in on {target} with sudden speed", "circles {target} before rushing close"),
|
||||
V("tears at {target} with flashing teeth", "darts past {target} in repeated bites"),
|
||||
V("clicks teeth in brisk greeting", "moves tightly with nearby company"),
|
||||
V("clicks teeth in brisk greeting", "packs tightly beside nearby company"),
|
||||
V("chatters into a sharp staccato laugh", "snaps the jaws between quick giggles"),
|
||||
V("trims material in rapid cuts", "sorts the task into short stages"));
|
||||
V("trims material in rapid cuts", "bites material into short lengths"));
|
||||
|
||||
Add(voices, "civ_rabbit",
|
||||
V("hops along with ears streaming back", "bounds onward in quick doubles"),
|
||||
|
|
@ -302,7 +302,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("folds long ears over the shoulders", "rests in a compact sleeping crouch"),
|
||||
V("zigzags after {target} in rapid bounds", "tracks {target} with ears pitched forward"),
|
||||
V("kicks at {target} with both hind feet", "boxes at {target} with flashing forepaws"),
|
||||
V("touches noses twice in greeting", "shares rapid civic news with another"),
|
||||
V("touches noses twice in greeting", "chatters rapid updates with another"),
|
||||
V("snickers through a trembling nose", "thumps once before breaking into laughter"),
|
||||
V("carries the load in quick hops", "weaves material with both forepaws"));
|
||||
|
||||
|
|
@ -314,9 +314,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("curls tightly around the tail", "sleeps with forepaws tucked beneath the chin"),
|
||||
V("sniffs a winding trail toward {target}", "cuts ahead of {target} with a quick dash"),
|
||||
V("bites at {target} from below", "swipes at {target} with sharp claws"),
|
||||
V("trades whispered civic news with another", "inclines its whiskers toward nearby company"),
|
||||
V("whispers short updates with another", "inclines its whiskers toward nearby company"),
|
||||
V("squeaks into a high laugh", "wrings both paws through shrill giggles"),
|
||||
V("sorts material by size", "checks each part of the task"));
|
||||
V("sorts material by size", "sniffs each piece before placing it"));
|
||||
|
||||
Add(voices, "civ_rhino",
|
||||
V("stomps onward behind a lowered horn", "pushes ahead in broad heavy steps"),
|
||||
|
|
@ -339,8 +339,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("angles both pincers toward {target}", "skitters after {target} with tail cocked"),
|
||||
V("stings at {target} over a raised guard", "seizes {target} between heavy pincers"),
|
||||
V("crosses claws in a salute", "holds a fixed distance from nearby company"),
|
||||
V("clicks both pincers in dry amusement", "trembles the tail through a rasping laugh"),
|
||||
V("handles material between both pincers", "cuts and grips each part of the task"));
|
||||
V("clicks both pincers in dry laughs", "trembles the tail through a rasping laugh"),
|
||||
V("clips material with both pincers", "cuts and carries each piece in both pincers"));
|
||||
|
||||
Add(voices, "civ_seal",
|
||||
V("galumphs ahead on broad flippers", "slides onward with whiskers streaming"),
|
||||
|
|
@ -352,7 +352,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("body-slams {target} from a rolling start", "bites at {target} behind raised flippers"),
|
||||
V("claps a loud welcome to another", "leans into nearby company whisker-first"),
|
||||
V("barks into a bouncing breathless laugh", "claps through a series of honking chuckles"),
|
||||
V("moves the load with both flippers", "smooths the work with both flippers"));
|
||||
V("moves the load with both flippers", "pats material flat with both flippers"));
|
||||
|
||||
Add(voices, "civ_sheep",
|
||||
V("trots in a soft close-stepping rhythm", "follows a steady path with fleece bobbing"),
|
||||
|
|
@ -362,15 +362,15 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("folds into a deep woolly curl", "sleeps with muzzle against one flank"),
|
||||
V("follows {target} along a steady line", "rushes after {target} with head lowered"),
|
||||
V("rams {target} with a thick brow", "kicks at {target} behind a woolly guard"),
|
||||
V("gathers close for low civic chatter", "greets nearby company with soft bleats"),
|
||||
V("gathers close for low bleating chatter", "greets nearby company with soft bleats"),
|
||||
V("bleats into a soft wavering laugh", "shivers the fleece with low chuckles"),
|
||||
V("sorts and groups material", "moves the load in even motions"));
|
||||
V("sorts material into neat piles", "moves the load in even motions"));
|
||||
|
||||
Add(voices, "civ_snake",
|
||||
V("glides forward in polished curves", "threads onward without a sound"),
|
||||
V("coils tightly and watches", "raises the head with tongue flicking slowly"),
|
||||
V("loops around its own rising coils", "sways through a winding rhythm"),
|
||||
V("works the meal down in repeated gulps", "unhinges the jaw around a bite"),
|
||||
V("gulps the meal down in repeated swallows", "unhinges the jaw around a bite"),
|
||||
V("knots into a compact sleeping coil", "rests beneath overlapping loops"),
|
||||
V("tastes the trail toward {target}", "flows after {target} without a sound"),
|
||||
V("strikes at {target} from a tight coil", "wraps {target} in tightening loops"),
|
||||
|
|
@ -386,14 +386,14 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("withdraws every limb beneath the shell", "settles into a low resting pose"),
|
||||
V("follows {target} without changing pace", "intercepts {target} along a direct line"),
|
||||
V("snaps at {target} from behind the shell", "drives the shell edge into {target}"),
|
||||
V("nods through a long greeting", "shares quiet company without crowding another"),
|
||||
V("nods through a long greeting", "rests near another without crowding"),
|
||||
V("wheezes into a slow creaking laugh", "bobs the head through quiet chuckles"),
|
||||
V("checks each construction joint", "carries a load beneath the shell"));
|
||||
V("presses each construction joint with the beak", "carries a load beneath the shell"));
|
||||
|
||||
Add(voices, "civ_unicorn",
|
||||
V("canters with mane streaming", "prances onward on lifted hooves"),
|
||||
V("stands with the horn lifted", "smooths the mane with repeated turns"),
|
||||
V("dances an even stepping pattern", "tosses the mane through a high rear"),
|
||||
V("dances in even high-stepping turns", "tosses the mane through a high rear"),
|
||||
V("selects one bite at a time", "takes morsels from the meal"),
|
||||
V("folds long legs beneath the body", "rests with the horn angled high"),
|
||||
V("gallops after {target} in a direct line", "closes on {target} with horn lowered"),
|
||||
|
|
@ -404,15 +404,15 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
Add(voices, "civ_wolf",
|
||||
V("trots forward with shoulders rolling", "ranges onward without slowing"),
|
||||
V("sits with tail wrapped close", "tests every nearby scent"),
|
||||
V("sits with tail wrapped close", "sniffs nearby scents in turn"),
|
||||
V("bows low before bounding sideways", "chases its own tail in a quick circle"),
|
||||
V("tears off a bite", "holds the meal beneath one paw"),
|
||||
V("turns into a tight sleeping circle", "rests with muzzle tucked to one flank"),
|
||||
V("courses after {target} along the flank", "drives {target} toward a tighter line"),
|
||||
V("courses after {target} along the flank", "drives {target} sideways into a tighter path"),
|
||||
V("slashes at {target} with repeated bites", "knocks {target} down from the side"),
|
||||
V("touches muzzles in a close greeting", "raises a gathering call to nearby company"),
|
||||
V("yips into a rough rising laugh", "howls between long chuckles"),
|
||||
V("patrols around the work", "moves the load in close formation"));
|
||||
V("patrols around the construction", "drags the load with shoulders packed close"));
|
||||
|
||||
Add(voices, "dwarf",
|
||||
V("strides on short powerful legs", "marches onward with beard tucked close"),
|
||||
|
|
@ -424,7 +424,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("hammers at {target} with heavy fists", "hooks {target} with a thick forearm"),
|
||||
V("clasps forearms with another", "trades craft boasts with nearby company"),
|
||||
V("booms with a body-shaking laugh", "snorts through a bristling beard"),
|
||||
V("aligns the construction", "drives the craft in a steady rhythm"));
|
||||
V("squares the construction with both hands", "drives the craft in a steady rhythm"));
|
||||
|
||||
Add(voices, "elf",
|
||||
V("walks with a light even stride", "passes onward in near-silent steps"),
|
||||
|
|
@ -432,11 +432,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("balances through a turning step", "springs lightly from foot to foot"),
|
||||
V("divides the meal into equal portions", "takes bites with long fingers"),
|
||||
V("reclines with limbs folded together", "sleeps with one hand lightly raised"),
|
||||
V("follows {target} with soundless steps", "draws a direct line toward {target}"),
|
||||
V("follows {target} with soundless steps", "moves straight toward {target}"),
|
||||
V("strikes at {target} with a swift hand", "cuts at {target} with a slender hand"),
|
||||
V("exchanges brief greetings with another", "shares civic lore with nearby company"),
|
||||
V("exchanges brief greetings with another", "shares long counsel with nearby company"),
|
||||
V("laughs in a clear ascending ripple", "muffles a short chuckle with long fingers"),
|
||||
V("shapes the craft with fingertips", "keeps records of the work"));
|
||||
V("shapes the craft with fingertips", "marks each finished piece with long fingers"));
|
||||
|
||||
Add(voices, "human",
|
||||
V("hurries onward with arms swinging", "threads ahead in alternating steps"),
|
||||
|
|
@ -446,9 +446,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("curls with knees drawn to the chest", "rests with hands folded over the chest"),
|
||||
V("follows {target} through repeated turns", "runs down {target} with eyes fixed forward"),
|
||||
V("strikes at {target} with ready hands", "holds firm against {target} from a balanced stance"),
|
||||
V("trades names and civic news with another", "waves nearby company into the conversation"),
|
||||
V("trades names and short updates with another", "waves nearby company closer to speak"),
|
||||
V("breaks into an open laugh", "slaps one knee through a broad grin"),
|
||||
V("checks the record", "moves briskly from task to task"));
|
||||
V("reviews each finished piece twice", "hurries from one pile of material to the next"));
|
||||
|
||||
Add(voices, "orc",
|
||||
V("stalks forward in long heavy strides", "shoulders onward with tusks high"),
|
||||
|
|
@ -459,7 +459,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("runs {target} down with pounding steps", "closes on {target} behind raised forearms"),
|
||||
V("chops at {target} with repeated hand strikes", "headbutts {target} between heavy blows"),
|
||||
V("greets another with a forearm clash", "swaps loud boasts with nearby company"),
|
||||
V("barks out a harsh booming laugh", "bares both tusks in rumbling amusement"),
|
||||
V("barks out a harsh booming laugh", "bares both tusks through rumbling chuckles"),
|
||||
V("heaves material into place", "drives the construction with both arms"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,477 +8,477 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
{
|
||||
AddExtended(voices, "UFO",
|
||||
V("broadcasts a layered electronic hymn", "sings through synchronized hull tones"),
|
||||
V("reproduces through pulsing silver light", "begins replication beneath cycling lights"),
|
||||
V("tends growth with measured underlight", "cultivates in scanning passes"),
|
||||
V("courts through pulsing silver light", "mates beneath cycling hull lights"),
|
||||
V("farms with measured underlight passes", "plants in slow scanning sweeps"),
|
||||
V("pollinates {target} through a soft tractor pulse", "sweeps pollen across {target} with controlled underlight"),
|
||||
V("trades through sequenced signal flashes", "pulses colored lights during exchange"),
|
||||
V("trades through sequenced signal flashes", "pulses colored lights while bargaining"),
|
||||
V("fishes with a narrow scanning beam", "tracks fish beneath pulsing sensors"),
|
||||
V("hauls through steady lifting force", "moves the load beneath its hull"),
|
||||
V("hauls through steady lifting force", "lifts and carries beneath its hull"),
|
||||
V("heals {target} under a soft scanning ray", "bathes {target} in modulated light"),
|
||||
V("projects a concentrated heat ray", "fires a bright lower pulse"),
|
||||
V("stokes fire with a concentrated heat ray", "fans the flames with a bright lower pulse"),
|
||||
V("flees {target} in a silent silver rush", "banks away from {target} with lights streaming"),
|
||||
V("settles into a stable hover", "anchors itself with downward force"),
|
||||
V("patrols with sensor lights sweeping", "holds formation in guarded flight"),
|
||||
V("holds a warrior hover with sensor lights sweeping", "patrols in a guarded hovering sweep"),
|
||||
V("reads through a traveling scan bar", "decodes marks in flickering lights"),
|
||||
V("gathers life through calibrated scans", "samples living signals with underlight"),
|
||||
V("gathers life through sweeping scans", "samples life force with underlight"),
|
||||
V("vents a brief waste vapor", "purges residue beneath its hull"),
|
||||
V("wobbles as its lights missequence", "spins while indicators flash irregularly"),
|
||||
V("recharges with every light brightening", "draws power into its humming hull"),
|
||||
V("jitters through erratic hover loops", "flashes compulsive signal bursts"),
|
||||
V("jitters through erratic hover loops", "flashes compulsive signal bursts under a strange urge"),
|
||||
V("steals {target} beneath dimmed lights", "reaches for {target} with lifting force"),
|
||||
V("shudders under foreign signal pulses", "flickers as another force pilots it"),
|
||||
V("sees {target} in projected dreams", "drifts dormant through waves of colored light"));
|
||||
|
||||
AddExtended(voices, "alien",
|
||||
V("sings in clicking throat pulses", "layers chirps through its throat sac"),
|
||||
V("reproduces with synchronized body pulses", "begins mating through mirrored gestures"),
|
||||
V("tends growth with four quick hands", "cultivates through nimble fingerwork"),
|
||||
V("courts with synchronized body pulses", "mates through mirrored gestures"),
|
||||
V("farms with four quick hands", "plants through nimble fingerwork"),
|
||||
V("pollinates {target} with trembling narrow fingers", "brushes pollen across {target} through rapid handwork"),
|
||||
V("trades through taps and soft clicks", "braids its fingers during exchange"),
|
||||
V("trades through taps and soft clicks", "braids its fingers while bargaining"),
|
||||
V("fishes with darting eyes and hands", "grabs near fish with springing reflexes"),
|
||||
V("hauls against its springing shoulders", "moves the load with four hands"),
|
||||
V("heals {target} through careful narrow fingertips", "presses {target} with clicking mouthparts"),
|
||||
V("fires a sharp bioelectric pulse", "launches crackling force from its wrists"),
|
||||
V("stokes fire with a sharp bioelectric pulse", "fans the flames from crackling wrists"),
|
||||
V("flees {target} in bounding sideways leaps", "scuttles away from {target} on springing legs"),
|
||||
V("settles into a compact crouch", "claims space with tapping fingertips"),
|
||||
V("stands guard on flexed legs", "patrols with darting eyes"),
|
||||
V("stands warrior-ready on flexed legs", "patrols with darting eyes"),
|
||||
V("reads by tracing marks rapidly", "studies symbols with unblinking eyes"),
|
||||
V("gathers life with tasting fingertips", "samples living traces through mouthparts"),
|
||||
V("relieves itself in a low crouch", "expels waste as its throat sac contracts"),
|
||||
V("tilts as its eyes desynchronize", "fumbles while four hands disagree"),
|
||||
V("recharges through pulsing throat sacs", "draws energy into springing limbs"),
|
||||
V("twitches through compulsive hand patterns", "scuttles in abrupt repeated bursts"),
|
||||
V("twitches through compulsive hand patterns", "scuttles in abrupt repeated bursts under a strange urge"),
|
||||
V("steals {target} with four synchronized hands", "lunges toward {target} with grasping fingers"),
|
||||
V("jerks as its limbs move independently", "chatters while foreign pulses seize it"),
|
||||
V("sees {target} in dreams as eyelids flutter", "curls tightly while throat colors ripple"));
|
||||
|
||||
AddExtended(voices, "angle",
|
||||
V("sings in resonant celestial chimes", "voices a hymn through radiant pulses"),
|
||||
V("reproduces within converging holy radiance", "begins mating as divine light swells"),
|
||||
V("tends growth beneath measured brilliance", "cultivates with steady sacred light"),
|
||||
V("courts within shared holy radiance", "mates as divine light swells"),
|
||||
V("farms beneath measured brilliance", "plants with steady sacred light"),
|
||||
V("pollinates {target} in a radiant wash", "guides pollen across {target} through holy light"),
|
||||
V("trades beneath steady divine illumination", "pulses sacred light during exchange"),
|
||||
V("trades beneath steady divine illumination", "pulses sacred light while bargaining"),
|
||||
V("fishes through revealing celestial light", "sweeps radiant force near fish"),
|
||||
V("hauls within surrounding radiance", "moves the load through divine force"),
|
||||
V("heals {target} beneath holy light", "bathes {target} in celestial brilliance"),
|
||||
V("releases a searing sacred flash", "fires a focused surge of divinity"),
|
||||
V("stokes fire with a searing sacred flash", "fans the flames with a focused surge of holy light"),
|
||||
V("flees {target} as radiance streams behind", "withdraws from {target} in a burst of holy light"),
|
||||
V("settles beneath a steadfast sacred glow", "holds its station with radiant presence"),
|
||||
V("keeps watch in unwavering brilliance", "patrols as a celestial presence"),
|
||||
V("settles beneath a steadfast sacred glow", "holds vigil with radiant holy light"),
|
||||
V("keeps warrior watch in unwavering brilliance", "patrols as a celestial guardian"),
|
||||
V("reads as divine light reveals marks", "studies symbols within pale radiance"),
|
||||
V("gathers life in revealing holy light", "reaches for living essence through sacred radiance"),
|
||||
V("gathers life in revealing holy light", "draws living traces through sacred radiance"),
|
||||
V("relieves itself in a fading shimmer", "releases waste beneath veiling radiance"),
|
||||
V("flickers as its sacred glow falters", "wanders while divine pulses misfire"),
|
||||
V("recharges in gathering celestial brilliance", "draws holy power into its presence"),
|
||||
V("surges through repeated radiant flashes", "burns with an erratic sacred pulse"),
|
||||
V("recharges in gathering celestial brilliance", "draws holy power into its glow"),
|
||||
V("surges through repeated radiant flashes", "burns with an erratic sacred pulse under a strange urge"),
|
||||
V("steals {target} beneath a muted sacred glow", "reaches for {target} through radiance"),
|
||||
V("flares as foreign force grips it", "shudders beneath a distorted holy glow"),
|
||||
V("sees {target} in radiant dreams", "rests as celestial visions pulse visibly"));
|
||||
V("sees {target} in radiant dreams", "rests as celestial visions pulse"));
|
||||
|
||||
AddExtended(voices, "assimilator",
|
||||
V("sings through several borrowed throats", "layers mismatched voices across its surface"),
|
||||
V("reproduces by budding a pulsing mass", "begins mating as membranes intermingle"),
|
||||
V("tends growth with braided tendrils", "cultivates through probing filaments"),
|
||||
V("courts by budding a pulsing mass", "mates as membranes intermingle"),
|
||||
V("farms with braided tendrils", "plants through probing filaments"),
|
||||
V("pollinates {target} with rippling surface cilia", "spreads pollen across {target} on tasting tendrils"),
|
||||
V("trades through shifting grasping limbs", "layers borrowed voices during exchange"),
|
||||
V("trades through shifting grasping limbs", "layers borrowed voices while bargaining"),
|
||||
V("fishes with a snapping membrane", "senses fish through trailing filaments"),
|
||||
V("hauls with braided grasping tendrils", "moves the load beneath its mass"),
|
||||
V("heals {target} by matching living tissue", "covers {target} beneath a clear membrane"),
|
||||
V("fires a hardened organic barb", "launches a dense pulse of tissue"),
|
||||
V("stokes fire with a hardened organic barb", "fans the flames with a dense pulse of tissue"),
|
||||
V("flees {target} in rolling bodily surges", "flees {target} on rapidly pulling tendrils"),
|
||||
V("settles by anchoring many filaments", "spreads into a rooted living mound"),
|
||||
V("guards with hardened surface plates", "patrols on braided tendrils"),
|
||||
V("guards warrior-ready with hardened surface plates", "patrols on braided tendrils"),
|
||||
V("reads through borrowed clustered eyes", "traces marks with tasting filaments"),
|
||||
V("gathers life into sampling membranes", "draws living traces through cilia"),
|
||||
V("gathers life into tasting membranes", "draws life force through cilia"),
|
||||
V("expels waste through opening pores", "sheds a clouded outer membrane"),
|
||||
V("ripples through mismatched borrowed forms", "stumbles as limbs repeatedly reform"),
|
||||
V("recharges as inner pulses quicken", "draws energy beneath its surface"),
|
||||
V("buds grasping hands in repeated cycles", "surges through rapid transformations"),
|
||||
V("buds grasping hands in repeated cycles", "buds and sheds limbs under a strange urge"),
|
||||
V("steals {target} with a sudden pseudopod", "reaches around {target} with a clear membrane"),
|
||||
V("convulses as foreign patterns spread", "forms unfamiliar faces across its surface"),
|
||||
V("sees {target} in borrowed dream-faces", "rests while remembered forms ripple"));
|
||||
|
||||
AddExtended(voices, "civ_crystal_golem",
|
||||
V("sings in deep crystalline resonance", "rings harmonics through its faceted chest"),
|
||||
V("reproduces as core light divides", "begins mating through synchronized core pulses"),
|
||||
V("tends growth with heavy faceted hands", "cultivates beneath refracted core light"),
|
||||
V("courts as core light divides", "mates through synchronized core pulses"),
|
||||
V("farms with heavy faceted hands", "plants beneath refracted core light"),
|
||||
V("pollinates {target} through prismatic light pulses", "brushes pollen across {target} with crystal fingertips"),
|
||||
V("trades with slow resonant hand taps", "pulses chest light during exchange"),
|
||||
V("trades with slow resonant hand taps", "pulses chest light while bargaining"),
|
||||
V("fishes through refracted glints", "closes faceted palms near fish"),
|
||||
V("hauls against its massive crystal frame", "moves the load with stone hands"),
|
||||
V("heals {target} through refracted core light", "presses {target} beneath glowing facets"),
|
||||
V("fires a concentrated prismatic burst", "releases core light in a hot flash"),
|
||||
V("stokes fire with a concentrated prismatic burst", "fans the flames as core light flashes hot"),
|
||||
V("flees {target} with heavy ringing strides", "flees {target} as core light races"),
|
||||
V("settles into rooted statue stillness", "plants its faceted feet firmly"),
|
||||
V("guards with broad crystal arms", "patrols in resonant heavy steps"),
|
||||
V("guards warrior-ready with broad crystal arms", "patrols in resonant heavy steps"),
|
||||
V("reads through shifting facet reflections", "studies marks in core light"),
|
||||
V("gathers life through vibrating fingertips", "draws living traces into its core"),
|
||||
V("vents powdered residue from its seams", "sheds dull grit between crystal joints"),
|
||||
V("staggers as core light scatters", "turns while facets flash inconsistently"),
|
||||
V("recharges as its core intensifies", "draws energy through glowing seams"),
|
||||
V("trembles with compulsive core surges", "strides as facets flash erratically"),
|
||||
V("trembles with compulsive core surges", "strides as facets flash erratically under a strange urge"),
|
||||
V("steals {target} with a heavy crystal hand", "reaches for {target} between glowing facets"),
|
||||
V("cracks with invading dark pulses", "moves as foreign light fills its core"),
|
||||
V("sees {target} in prismatic dreams", "rests as visions cross its facets"));
|
||||
|
||||
AddExtended(voices, "cold_one",
|
||||
V("sings through chiming frozen breath", "voices a brittle frost cadence"),
|
||||
V("reproduces amid mingling cold vapor", "begins mating as rime pulses"),
|
||||
V("tends growth beneath numbing palms", "cultivates with measured cooling touch"),
|
||||
V("courts amid mingling cold vapor", "mates as rime pulses"),
|
||||
V("farms beneath numbing palms", "plants with measured cooling touch"),
|
||||
V("pollinates {target} on emitted cold vapor", "brushes pollen across {target} with frost-rimmed fingers"),
|
||||
V("trades with clicks of frozen teeth", "emits pale vapor during exchange"),
|
||||
V("trades with clicks of frozen teeth", "emits pale vapor while bargaining"),
|
||||
V("fishes by sensing warmth below", "closes whitening hands near fish"),
|
||||
V("hauls with rigid frostbound limbs", "moves the load across slick rime"),
|
||||
V("heals {target} beneath a frost sheen", "numbs {target} with a pale palm"),
|
||||
V("fires a lance of intense cold", "releases a burst of hard rime"),
|
||||
V("stokes fire with a lance of intense cold", "fans the flames with a burst of hard rime"),
|
||||
V("flees {target} in a skidding frost trail", "flees {target} behind emitted cold vapor"),
|
||||
V("settles beneath an anchored ice crust", "plants stiff limbs in spreading rime"),
|
||||
V("guards behind hardening frost", "patrols with whitening palms ready"),
|
||||
V("guards warrior-ready behind hardening frost", "patrols with whitening palms ready"),
|
||||
V("reads as rime highlights marks", "studies symbols through pale eyes"),
|
||||
V("gathers life through heat-sensing fingers", "draws living warmth into rime"),
|
||||
V("relieves itself in brittle frozen waste", "expels waste beneath cold vapor"),
|
||||
V("stares as frost pulses unevenly", "stumbles while rime locks its limbs"),
|
||||
V("recharges as its rime thickens", "draws energy into a whitening core"),
|
||||
V("scrapes compulsively at its own frost", "paces beneath surging cold vapor"),
|
||||
V("scrapes compulsively at its own frost", "paces beneath surging cold vapor under a strange urge"),
|
||||
V("steals {target} with a numbing quick palm", "reaches for {target} through hardening rime"),
|
||||
V("jerks as black frost spreads", "moves beneath an invading cold pulse"),
|
||||
V("sees {target} in dreams beneath sleeping ice", "rests as emitted vapor forms visions"));
|
||||
|
||||
AddExtended(voices, "crabzilla",
|
||||
V("sings in thunderous shell resonance", "booms a rhythm through colossal plates"),
|
||||
V("reproduces through booming pincer displays", "begins mating as shell plates rumble"),
|
||||
V("tends growth beneath careful claw taps", "cultivates with immense measured pincers"),
|
||||
V("courts through booming pincer displays", "mates as shell plates rumble"),
|
||||
V("farms beneath careful claw taps", "plants with immense measured pincers"),
|
||||
V("pollinates {target} with sweeping pincer beats", "fans pollen across {target} beneath colossal claws"),
|
||||
V("trades through monumental claw gestures", "rumbles its shell during exchange"),
|
||||
V("trades through monumental claw gestures", "rumbles its shell while bargaining"),
|
||||
V("fishes between immense closing pincers", "tracks fish with sweeping eye stalks"),
|
||||
V("hauls beneath its fortress shell", "moves the load with colossal pincers"),
|
||||
V("heals {target} by applying plated pressure", "presses {target} beneath a broad claw"),
|
||||
V("fires a crushing pressure blast", "launches force between snapping pincers"),
|
||||
V("stokes fire with a crushing pressure blast", "fans the flames between snapping pincers"),
|
||||
V("flees {target} in thundering sideways strides", "flees {target} behind its fortress shell"),
|
||||
V("settles on folded towering limbs", "anchors its shell with planted legs"),
|
||||
V("guards behind raised colossal pincers", "patrols with eye stalks sweeping"),
|
||||
V("guards warrior-ready behind raised colossal pincers", "patrols with eye stalks sweeping"),
|
||||
V("reads through swiveling eye stalks", "studies marks with careful claw taps"),
|
||||
V("gathers life through vibrating leg tips", "samples living motion with eye stalks"),
|
||||
V("relieves itself beneath folded rear plates", "expels waste below its vast shell"),
|
||||
V("clacks while eye stalks cross", "lurches as towering legs mistime"),
|
||||
V("recharges as shell plates vibrate", "draws energy through planted leg tips"),
|
||||
V("stamps through compulsive sideways surges", "snaps both pincers without cause"),
|
||||
V("stamps through compulsive sideways surges", "snaps both pincers without cause under a strange urge"),
|
||||
V("steals {target} with one sweeping pincer", "reaches for {target} beneath its shell"),
|
||||
V("shudders as shell plates darken", "stomps beneath an invading pulse"),
|
||||
V("sees {target} in rumbling dreams", "rests as eye stalks twitch"));
|
||||
|
||||
AddExtended(voices, "crystal_sword",
|
||||
V("sings through a ringing crystal blade", "voices a clear hilt-deep peal"),
|
||||
V("reproduces as prismatic light separates", "begins mating through crossed resonant tones"),
|
||||
V("tends growth with careful blade glints", "cultivates beneath refracted light"),
|
||||
V("courts as prismatic light separates", "mates through crossed resonant tones"),
|
||||
V("farms with careful blade glints", "plants beneath refracted light"),
|
||||
V("pollinates {target} through sweeping flat-side passes", "guides pollen across {target} on prismatic pulses"),
|
||||
V("trades with a formal hilt dip", "rings clearly during exchange"),
|
||||
V("trades with a formal hilt dip", "rings clearly while bargaining"),
|
||||
V("fishes in a swift point-first dive", "flashes beneath fish with its flat"),
|
||||
V("hauls beneath its hovering guard", "moves the load with lifting resonance"),
|
||||
V("heals {target} by laying its flat nearby", "bathes {target} in prismatic shimmer"),
|
||||
V("fires a piercing crystal pulse", "releases a bright blast from its point"),
|
||||
V("stokes fire with a piercing crystal pulse", "fans the flames from its bright point"),
|
||||
V("flees {target} in a ringing aerial sweep", "flees {target} point-first through prismatic light"),
|
||||
V("settles point-down in steady hover", "anchors its presence through low resonance"),
|
||||
V("guards upright with edge forward", "patrols in measured sweeping arcs"),
|
||||
V("settles point-down in steady hover", "anchors itself through low resonance"),
|
||||
V("guards warrior-ready upright with edge forward", "patrols in measured sweeping arcs"),
|
||||
V("reads by tracing marks with light", "studies symbols reflected along its blade"),
|
||||
V("gathers life through testing resonance", "draws living traces along its fuller"),
|
||||
V("sheds cloudy residue from its facets", "vents dull particles beneath its guard"),
|
||||
V("wobbles as its resonance breaks", "spins while prismatic light scatters"),
|
||||
V("recharges as its facets brighten", "draws energy along its fuller"),
|
||||
V("slashes through repeated empty sweeps", "rings in rapidly recurring bursts"),
|
||||
V("slashes through repeated empty sweeps", "rings in rapidly recurring bursts under a strange urge"),
|
||||
V("steals {target} beneath a muted prismatic shimmer", "hooks toward {target} with its guard"),
|
||||
V("jerks as dark resonance grips it", "rings harshly under foreign control"),
|
||||
V("sees {target} in chiming dreams", "rests as visions shimmer along its blade"));
|
||||
|
||||
AddExtended(voices, "demon",
|
||||
V("sings in a cracked furnace roar", "chants through smoking fangs"),
|
||||
V("reproduces amid mingling embers", "begins mating with pulsing wingbeats"),
|
||||
V("tends growth with ember-warm claws", "cultivates beneath controlled heat"),
|
||||
V("courts amid mingling embers", "mates with pulsing wingbeats"),
|
||||
V("farms with ember-warm claws", "plants beneath controlled heat"),
|
||||
V("pollinates {target} with careful wingbeats", "fans pollen across {target} with leathery wings"),
|
||||
V("trades with horns lowered formally", "sheds red sparks during exchange"),
|
||||
V("trades with horns lowered formally", "sheds red sparks while bargaining"),
|
||||
V("fishes with heat-sensing nostrils", "closes hooked claws near fish"),
|
||||
V("hauls against its horned shoulders", "moves the load with clawed hands"),
|
||||
V("heals {target} beneath claw heat", "presses {target} with ember-warm claws"),
|
||||
V("fires a scorching throat burst", "hurls flame from both claws"),
|
||||
V("stokes fire with a scorching throat burst", "fans the flames from both claws"),
|
||||
V("flees {target} on smoking hooves", "flees {target} behind beating wings"),
|
||||
V("settles within a scorched crouch", "plants smoking hooves firmly"),
|
||||
V("guards with horns and claws raised", "patrols beneath folded wings"),
|
||||
V("guards warrior-ready with horns and claws raised", "patrols beneath folded wings"),
|
||||
V("reads through ember-bright eyes", "traces marks with a hot claw"),
|
||||
V("gathers life through flared nostrils", "draws living heat into embers"),
|
||||
V("relieves itself in smoking waste", "expels waste beneath folded wings"),
|
||||
V("snarls as sparks misfire", "stumbles when hooves flare unevenly"),
|
||||
V("recharges around a red-hot core", "draws energy through smoking horns"),
|
||||
V("lashes its tail compulsively", "paces beneath uncontrolled embers"),
|
||||
V("lashes its tail compulsively", "paces beneath uncontrolled embers under a strange urge"),
|
||||
V("steals {target} with a hooked claw", "reaches for {target} beneath one wing"),
|
||||
V("convulses as black flame spreads", "moves beneath a foreign infernal pulse"),
|
||||
V("sees {target} in ember-lit dreams", "rests while wing membranes twitch"));
|
||||
|
||||
AddExtended(voices, "dragon",
|
||||
V("sings in rolling chest thunder", "voices a vast plated resonance"),
|
||||
V("reproduces through synchronized wing displays", "begins mating amid pulsing throat glow"),
|
||||
V("tends growth with careful foreclaws", "cultivates beneath measured warm breath"),
|
||||
V("courts through synchronized wing displays", "mates amid pulsing throat glow"),
|
||||
V("farms with careful foreclaws", "plants beneath measured warm breath"),
|
||||
V("pollinates {target} with broad wingbeats", "fans pollen across {target} with controlled wings"),
|
||||
V("trades with a formal horn dip", "rumbles its chest during exchange"),
|
||||
V("trades with a formal horn dip", "rumbles its chest while bargaining"),
|
||||
V("fishes in a talon-first plunge", "tracks fish with unblinking eyes"),
|
||||
V("hauls against its plated shoulders", "moves the load in closed talons"),
|
||||
V("heals {target} beneath warming breath", "presses {target} with careful foreclaws"),
|
||||
V("fires a narrow blazing torrent", "launches a throat-deep blast"),
|
||||
V("stokes fire with a narrow blazing torrent", "fans the flames with a throat-deep blast"),
|
||||
V("flees {target} on vast wingbeats", "flees {target} with plated tail streaming"),
|
||||
V("settles onto folded haunches", "anchors itself beneath spread talons"),
|
||||
V("guards with wings half spread", "patrols beneath a horned gaze"),
|
||||
V("guards warrior-ready with wings half spread", "patrols beneath a horned gaze"),
|
||||
V("reads with one unblinking eye", "traces marks using a foreclaw"),
|
||||
V("gathers life through flared nostrils", "draws living traces in deep breaths"),
|
||||
V("relieves itself beneath a raised tail", "expels waste in a plated crouch"),
|
||||
V("tilts as its pupils lose focus", "missteps while tail and wings disagree"),
|
||||
V("recharges as throat glow deepens", "draws energy beneath plated scales"),
|
||||
V("snaps through compulsive wingbeats", "paces under surging throat light"),
|
||||
V("snaps through compulsive wingbeats", "paces under surging throat light under a strange urge"),
|
||||
V("steals {target} in a swift talon sweep", "reaches for {target} beneath its chest"),
|
||||
V("thrashes as scales pulse darkly", "moves under an invading throat glow"),
|
||||
V("sees {target} in smoke-lit dreams", "rests while vast wings twitch"));
|
||||
|
||||
AddExtended(voices, "druid",
|
||||
V("sings in layered rustling tones", "chants as leaf fibers tremble"),
|
||||
V("reproduces amid entwining living fibers", "begins mating as leaf patterns pulse"),
|
||||
V("tends growth through coaxing palms", "cultivates with fresh root magic"),
|
||||
V("courts amid entwining living fibers", "mates as leaf patterns pulse"),
|
||||
V("farms through coaxing palms", "plants with fresh root magic"),
|
||||
V("pollinates {target} with rustling leaves", "guides pollen across {target} through curling vines"),
|
||||
V("trades with a leaf-hood bow", "rustles living fibers during exchange"),
|
||||
V("trades with a leaf-hood bow", "rustles living fibers while bargaining"),
|
||||
V("fishes with sensing root magic", "draws fish near through living fibers"),
|
||||
V("hauls with tightening green vines", "moves the load through living growth"),
|
||||
V("heals {target} beneath fresh green fibers", "binds {target} with curling growth"),
|
||||
V("fires a burst of hard thorns", "launches force through snapping vines"),
|
||||
V("stokes fire with a burst of hard thorns", "fans the flames through snapping vines"),
|
||||
V("flees {target} beneath streaming leaf fibers", "flees {target} on quick curling roots"),
|
||||
V("settles as roots spread below", "anchors itself through living fibers"),
|
||||
V("guards behind layered thorn growth", "patrols as leaves listen"),
|
||||
V("guards warrior-ready behind layered thorn growth", "patrols as leaves listen"),
|
||||
V("reads as leaf veins trace marks", "studies symbols through living grain"),
|
||||
V("gathers life through fine roots", "draws living traces into fresh growth"),
|
||||
V("relieves itself into absorbing roots", "releases waste beneath folded leaves"),
|
||||
V("turns as leaves rustle erratically", "stumbles while roots pull apart"),
|
||||
V("recharges as fresh leaves unfurl", "draws energy through living fibers"),
|
||||
V("sprouts vines in compulsive bursts", "paces while leaves pulse rapidly"),
|
||||
V("sprouts vines in compulsive bursts", "paces while leaves pulse rapidly under a strange urge"),
|
||||
V("steals {target} with a curling vine", "reaches around {target} with living fibers"),
|
||||
V("jerks as black roots spread", "moves beneath invading thorn growth"),
|
||||
V("sees {target} in leaf-veined dreams", "rests while roots trace visions"));
|
||||
|
||||
AddExtended(voices, "evil_mage",
|
||||
V("sings in layered shadow whispers", "chants through violet sparks"),
|
||||
V("reproduces amid merging dark sigils", "begins mating as shadows pulse"),
|
||||
V("tends growth beneath violet force", "cultivates through crawling dark symbols"),
|
||||
V("courts amid merging dark sigils", "mates as shadows pulse"),
|
||||
V("farms beneath violet force", "plants through crawling dark symbols"),
|
||||
V("pollinates {target} with circling shadows", "guides pollen across {target} with violet sparks"),
|
||||
V("trades with a hooded bow", "cycles dark sigils during exchange"),
|
||||
V("trades with a hooded bow", "cycles dark sigils while bargaining"),
|
||||
V("fishes through a hovering violet gaze", "draws fish upward with shadow force"),
|
||||
V("hauls within grasping shadows", "moves the load through violet force"),
|
||||
V("heals {target} beneath binding dark symbols", "presses {target} with smoking fingertips"),
|
||||
V("fires crackling violet force", "launches a burst of shadow"),
|
||||
V("stokes fire with crackling violet force", "fans the flames with a burst of shadow"),
|
||||
V("flees {target} inside emitted black vapor", "flees {target} as shadows fold inward"),
|
||||
V("settles within hovering dark sigils", "anchors shadows beneath its robe"),
|
||||
V("guards behind a violet barrier", "patrols with shadows circling"),
|
||||
V("guards warrior-ready behind a violet barrier", "patrols with shadows circling"),
|
||||
V("reads through crawling luminous symbols", "studies marks beneath violet light"),
|
||||
V("gathers life through a circling gaze", "draws living traces into shadow"),
|
||||
V("relieves itself beneath folded darkness", "expels waste inside layered shadow"),
|
||||
V("flickers as sigils scramble", "wanders while shadows point elsewhere"),
|
||||
V("recharges as violet symbols brighten", "draws energy into layered shadow"),
|
||||
V("casts compulsive empty sigils", "paces amid uncontrolled dark sparks"),
|
||||
V("casts compulsive empty sigils", "paces amid uncontrolled dark sparks under a strange urge"),
|
||||
V("steals {target} through a grasping shadow", "reaches for {target} with folded darkness"),
|
||||
V("convulses beneath foreign pale symbols", "moves while foreign shadows pull"),
|
||||
V("sees {target} in violet dreams", "rests as shadows reenact visions"));
|
||||
|
||||
AddExtended(voices, "fairy",
|
||||
V("sings in tiny bell trills", "layers bright notes with wingbeats"),
|
||||
V("reproduces amid mingling shimmer", "begins mating through synchronized glow pulses"),
|
||||
V("tends growth with sparkling fingertips", "cultivates beneath a tiny warm glow"),
|
||||
V("courts amid mingling shimmer", "mates through synchronized glow pulses"),
|
||||
V("farms with sparkling fingertips", "plants beneath a tiny warm glow"),
|
||||
V("pollinates {target} with shimmering wingbeats", "dusts pollen across {target} with sparkling motes"),
|
||||
V("trades through spiraling light ribbons", "trills brightly during exchange"),
|
||||
V("trades through spiraling light ribbons", "trills brightly while bargaining"),
|
||||
V("fishes in quick shimmering dives", "tracks fish through pulsing glow"),
|
||||
V("hauls within a sparkling lift", "moves the load on rapid wingbeats"),
|
||||
V("heals {target} beneath bright motes", "bathes {target} in a tiny flash"),
|
||||
V("fires a needle-thin sparkle", "launches a bright mote burst"),
|
||||
V("stokes fire with a needle-thin sparkle", "fans the flames with a bright mote burst"),
|
||||
V("flees {target} in looping wing flashes", "flees {target} with glow streaming"),
|
||||
V("settles into a hovering shimmer", "perches with wings folded upright"),
|
||||
V("guards with wings buzzing brightly", "patrols in tight glowing loops"),
|
||||
V("guards warrior-ready with wings buzzing brightly", "patrols in tight glowing loops"),
|
||||
V("reads by tracing marks in light", "studies symbols through tiny glints"),
|
||||
V("gathers life into sparkling motes", "samples living traces with shimmer"),
|
||||
V("relieves itself beneath veiling motes", "releases waste during a brief hover"),
|
||||
V("loops as its glow pulses unevenly", "hovers while wings lose rhythm"),
|
||||
V("recharges inside a swelling glow", "draws energy through shimmering wings"),
|
||||
V("darts through compulsive tiny loops", "scatters motes in urgent bursts"),
|
||||
V("darts through compulsive tiny loops", "scatters motes in urgent bursts under a strange urge"),
|
||||
V("steals {target} in a quick sparkling pass", "reaches for {target} through shimmer"),
|
||||
V("jerks as its glow turns harsh", "flies under an invading pulse"),
|
||||
V("sees {target} in glowing dreams", "rests as wings trace visions"));
|
||||
|
||||
AddExtended(voices, "fire_elemental",
|
||||
V("sings in roaring flame harmonics", "crackles through a rising cadence"),
|
||||
V("reproduces as core flame divides", "begins mating through mingling fire"),
|
||||
V("tends growth with measured warmth", "cultivates beneath careful flame"),
|
||||
V("courts as core flame divides", "mates through mingling fire"),
|
||||
V("farms with measured warmth", "plants beneath careful flame"),
|
||||
V("pollinates {target} with controlled heat pulses", "guides pollen across {target} with thin flames"),
|
||||
V("trades through sequenced spark bursts", "flares white during exchange"),
|
||||
V("trades through sequenced spark bursts", "flares white while bargaining"),
|
||||
V("fishes by sensing cooler motion", "surrounds fish with curling heat"),
|
||||
V("hauls within a lifting heat column", "moves the load through flowing flame"),
|
||||
V("heals {target} beneath measured warmth", "presses {target} with a white fingertip"),
|
||||
V("fires a roaring arm of flame", "launches a white-hot burst"),
|
||||
V("stokes fire as a roaring arm of flame", "fans the flames with a white-hot burst"),
|
||||
V("flees {target} as streaming orange ribbons", "flees {target} in a sudden flare"),
|
||||
V("settles into a steady upright blaze", "anchors around a white-hot core"),
|
||||
V("guards as a broad wall of fire", "patrols in folding flames"),
|
||||
V("guards warrior-ready as a broad wall of fire", "patrols in folding flames"),
|
||||
V("reads as heat reveals marks", "studies symbols through flickering tongues"),
|
||||
V("gathers life through trembling flames", "draws living warmth toward its core"),
|
||||
V("sheds spent ash beneath itself", "vents dark smoke from its core"),
|
||||
V("flares as tongues split repeatedly", "wavers while its core pulses unevenly"),
|
||||
V("recharges around a whitening core", "draws energy through every flame"),
|
||||
V("lashes out in compulsive firebursts", "surges through uncontrolled flares"),
|
||||
V("lashes out in compulsive firebursts", "surges through uncontrolled flares under a strange urge"),
|
||||
V("steals {target} behind a curtain of flame", "reaches for {target} through lowered heat"),
|
||||
V("blackens as foreign fire spreads", "moves beneath an invading blaze"),
|
||||
V("sees {target} in ember dreams", "rests as flames replay visions"));
|
||||
|
||||
AddExtended(voices, "fire_elemental_blob",
|
||||
V("sings in bubbly molten pops", "gurgles through bright crackles"),
|
||||
V("reproduces by budding a hot lobe", "begins mating as molten surfaces mingle"),
|
||||
V("tends growth with warm pseudopods", "cultivates beneath soft heat"),
|
||||
V("courts by budding a hot lobe", "mates as molten surfaces mingle"),
|
||||
V("farms with warm pseudopods", "plants beneath soft heat"),
|
||||
V("pollinates {target} with popping heat bubbles", "brushes pollen across {target} with glowing lobes"),
|
||||
V("trades through shaped molten gestures", "pops a bright bubble during exchange"),
|
||||
V("trades through molten gestures", "pops a bright bubble while bargaining"),
|
||||
V("fishes with a stretching hot lobe", "senses fish through surface ripples"),
|
||||
V("hauls within several molten lobes", "moves the load across its surface"),
|
||||
V("heals {target} beneath a warm fold", "covers {target} with controlled heat"),
|
||||
V("fires a clinging heat glob", "launches a popping molten burst"),
|
||||
V("stokes fire with a clinging heat glob", "fans the flames with a popping molten burst"),
|
||||
V("flees {target} in wobbling molten hops", "flees {target} with flames streaming"),
|
||||
V("settles into a broad hot puddle", "anchors through spreading molten folds"),
|
||||
V("guards behind swelling fiery lobes", "patrols in bouncing molten surges"),
|
||||
V("guards warrior-ready behind swelling fiery lobes", "patrols in bouncing molten surges"),
|
||||
V("reads through traveling surface bubbles", "traces marks with a narrow pseudopod"),
|
||||
V("gathers life across tasting folds", "draws living traces beneath its skin"),
|
||||
V("expels dark slag from one fold", "sheds spent crust beneath itself"),
|
||||
V("wobbles as bubbles reverse direction", "splits and rejoins in repeated cycles"),
|
||||
V("recharges as its center brightens", "draws energy through molten skin"),
|
||||
V("buds compulsive grasping lobes", "pops through urgent surface surges"),
|
||||
V("buds compulsive grasping lobes", "pops through urgent surface surges under a strange urge"),
|
||||
V("steals {target} with a stretching pseudopod", "reaches around {target} with one fold"),
|
||||
V("convulses as black bubbles spread", "moves while foreign pulses deform it"),
|
||||
V("sees {target} in rippling dreams", "rests as bubbles form visions"));
|
||||
|
||||
AddExtended(voices, "fire_elemental_horse",
|
||||
V("sings in furnace-bright whinnies", "nickers through a crackling mane"),
|
||||
V("reproduces amid synchronized flame pulses", "begins mating through blazing prances"),
|
||||
V("tends growth with warm careful hooves", "cultivates beneath controlled hoof heat"),
|
||||
V("courts amid synchronized flame pulses", "mates through blazing prances"),
|
||||
V("farms with warm careful hooves", "plants beneath controlled hoof heat"),
|
||||
V("pollinates {target} with mane-driven pulses", "fans pollen across {target} with a fiery tail"),
|
||||
V("trades through ember-bright muzzle dips", "flares one hoof during exchange"),
|
||||
V("trades through ember-bright muzzle dips", "flares one hoof while bargaining"),
|
||||
V("fishes with smoke-sensitive nostrils", "strikes near fish with a hot hoof"),
|
||||
V("hauls against its blazing shoulders", "moves the load in a heated stride"),
|
||||
V("heals {target} beneath a warming muzzle", "presses {target} with controlled hoof heat"),
|
||||
V("fires a blazing forward breath", "launches sparks through a sharp snort"),
|
||||
V("stokes fire with a blazing forward breath", "fans the flames through a sharp snort"),
|
||||
V("flees {target} on streaming fiery hooves", "flees {target} with mane blazing"),
|
||||
V("settles onto folded ember legs", "plants four compact flame hooves"),
|
||||
V("guards with mane fully raised", "patrols in a measured hot canter"),
|
||||
V("guards warrior-ready with mane fully raised", "patrols in a measured hot canter"),
|
||||
V("reads through ember-bright eyes", "traces marks with one hot hoof"),
|
||||
V("gathers life through flared nostrils", "draws living traces through warm breath"),
|
||||
V("relieves itself beneath a lifted flame tail", "expels glowing waste in a crouch"),
|
||||
V("sidesteps as mane pulses unevenly", "stamps while nostrils flare repeatedly"),
|
||||
V("recharges as its mane whitens", "draws energy through glowing hooves"),
|
||||
V("prances in compulsive fiery bursts", "stamps through uncontrolled sparks"),
|
||||
V("prances in compulsive fiery bursts", "stamps through uncontrolled sparks under a strange urge"),
|
||||
V("steals {target} in a quick muzzle sweep", "reaches for {target} with glowing teeth"),
|
||||
V("bucks as black flame spreads", "gallops beneath a foreign pulse"),
|
||||
V("sees {target} in ember-lit dreams", "rests while blazing legs twitch"));
|
||||
|
||||
AddExtended(voices, "fire_elemental_slug",
|
||||
V("sings in wet sizzling whistles", "bubbles through a molten trill"),
|
||||
V("reproduces amid mingling mantle glow", "begins mating as hot bodies pulse"),
|
||||
V("tends growth with a heated foot", "cultivates beneath mantle warmth"),
|
||||
V("courts amid mingling mantle glow", "mates as hot bodies pulse"),
|
||||
V("farms with a heated foot", "plants beneath mantle warmth"),
|
||||
V("pollinates {target} with curling feeler sparks", "brushes pollen across {target} with flame feelers"),
|
||||
V("trades through paired feeler curls", "pulses its mantle during exchange"),
|
||||
V("trades through paired feeler curls", "pulses its mantle while bargaining"),
|
||||
V("fishes with heat-sensitive feelers", "surrounds fish in a slow hot fold"),
|
||||
V("hauls atop its broad heated foot", "moves the load beneath a mantle fold"),
|
||||
V("heals {target} under a warm body trail", "covers {target} with controlled mantle heat"),
|
||||
V("fires a strip of clinging flame", "launches a hot mantle spark"),
|
||||
V("stokes fire with a strip of clinging flame", "fans the flames with a hot mantle spark"),
|
||||
V("flees {target} in a swift molten glide", "flees {target} beneath streaming feelers"),
|
||||
V("settles into a low smoldering coil", "anchors through its broad heated foot"),
|
||||
V("guards with both feelers blazing", "patrols along a narrow hot trail"),
|
||||
V("guards warrior-ready with both feelers blazing", "patrols along a narrow hot trail"),
|
||||
V("reads by sweeping sensitive feelers", "traces marks with its heated foot"),
|
||||
V("gathers life across tasting skin", "draws living traces through feelers"),
|
||||
V("leaves a dark waste bead behind", "expels residue beneath its mantle"),
|
||||
V("coils as feelers point apart", "glides while mantle pulses misfire"),
|
||||
V("recharges as its mantle glows", "draws energy through its broad underside"),
|
||||
V("curls through compulsive hot spirals", "flicks feelers in urgent bursts"),
|
||||
V("curls through compulsive hot spirals", "flicks feelers in urgent bursts under a strange urge"),
|
||||
V("steals {target} beneath a mantle fold", "reaches for {target} along its heated foot"),
|
||||
V("writhes as black heat spreads", "glides beneath an invading pulse"),
|
||||
V("sees {target} in mantle dreams", "rests as feelers trace visions"));
|
||||
|
||||
AddExtended(voices, "fire_elemental_snake",
|
||||
V("sings in a crackling hiss", "rattles through bright flame notes"),
|
||||
V("reproduces amid braided fiery coils", "begins mating as core flames pulse"),
|
||||
V("tends growth within warm loose coils", "cultivates through measured body heat"),
|
||||
V("courts amid braided fiery coils", "mates as core flames pulse"),
|
||||
V("farms within warm loose coils", "plants through measured body heat"),
|
||||
V("pollinates {target} with sweeping coils", "guides pollen across {target} with a flame tongue"),
|
||||
V("trades through paired coil gestures", "rattles its tail during exchange"),
|
||||
V("trades through paired coil gestures", "rattles its tail while bargaining"),
|
||||
V("fishes with a heat-sensitive tongue", "strikes near fish with glowing jaws"),
|
||||
V("hauls within tightening fiery coils", "moves the load along its body"),
|
||||
V("heals {target} beneath a warm coil", "surrounds {target} with controlled flame"),
|
||||
V("fires a searing tongue bolt", "launches flame from raised jaws"),
|
||||
V("stokes fire with a searing tongue bolt", "fans the flames from raised jaws"),
|
||||
V("flees {target} in a swift incandescent slither", "flees {target} with tail sparks"),
|
||||
V("settles into a banked ember coil", "anchors through overlapping fiery loops"),
|
||||
V("guards with head raised brightly", "patrols in tight burning curves"),
|
||||
V("guards warrior-ready with head raised brightly", "patrols in tight burning curves"),
|
||||
V("reads through tongue-tip heat changes", "traces marks with a glowing tail"),
|
||||
V("gathers life through its split tongue", "draws living warmth into coils"),
|
||||
V("expels glowing waste behind its coils", "leaves a dark residue pellet"),
|
||||
V("knots as tongue flicks erratically", "turns while coils pull against themselves"),
|
||||
V("recharges as every coil brightens", "draws energy through a flickering tongue"),
|
||||
V("strikes through compulsive empty lunges", "rattles beneath uncontrolled flame"),
|
||||
V("strikes through compulsive empty lunges", "rattles beneath uncontrolled flame under a strange urge"),
|
||||
V("steals {target} within a swift coil", "reaches around {target} with its body"),
|
||||
V("writhes as dark flame bands it", "slithers under a foreign pulse"),
|
||||
V("sees {target} in coiling dreams", "rests while its tail twitches"));
|
||||
|
||||
AddExtended(voices, "fire_skull",
|
||||
V("sings through a blazing hollow howl", "cackles in pitched jaw notes"),
|
||||
V("reproduces as crown flame divides", "begins mating through synchronized jaw fire"),
|
||||
V("tends growth with measured crown heat", "cultivates beneath careful flame breath"),
|
||||
V("courts as crown flame divides", "mates through synchronized jaw fire"),
|
||||
V("farms with measured crown heat", "plants beneath careful flame breath"),
|
||||
V("pollinates {target} with hollow-mouth pulses", "guides pollen across {target} with crown sparks"),
|
||||
V("trades through formal jaw clacks", "pulses socket flame during exchange"),
|
||||
V("trades through formal jaw clacks", "pulses socket flame while bargaining"),
|
||||
V("fishes through heat-sensing sockets", "snaps fish between blazing teeth"),
|
||||
V("hauls with gripping fiery jaws", "moves the load beneath its chin"),
|
||||
V("heals {target} beneath measured flame breath", "presses {target} with warm teeth"),
|
||||
V("fires a compact mouth bolt", "launches flame through open jaws"),
|
||||
V("stokes fire with a compact mouth bolt", "fans the flames through open jaws"),
|
||||
V("flees {target} with crown flame streaming", "flees {target} in a hollow rush"),
|
||||
V("settles jaw-down in low hover", "anchors beneath a banked blue crown"),
|
||||
V("guards with sockets fixed forward", "patrols in snapping fiery arcs"),
|
||||
V("guards warrior-ready with sockets fixed forward", "patrols in snapping fiery arcs"),
|
||||
V("reads through pulsing empty sockets", "traces marks with crown light"),
|
||||
V("gathers life through hollow nostrils", "draws living warmth into its crown"),
|
||||
V("drops dark ash through its jaw", "vents spent soot from hollow sockets"),
|
||||
V("spins as sockets flare unevenly", "chatters while crown flame misfires"),
|
||||
V("recharges as its crown whitens", "draws energy through hollow jaws"),
|
||||
V("snaps compulsively at empty space", "bobs through uncontrolled flame bursts"),
|
||||
V("snaps compulsively at empty space", "bobs through uncontrolled flame bursts under a strange urge"),
|
||||
V("steals {target} in a sudden jaw snap", "reaches for {target} between blazing teeth"),
|
||||
V("rattles as black flame crowns it", "flies under an invading socket glow"),
|
||||
V("sees {target} in crown-lit dreams", "rests as jaws silently chatter"));
|
||||
|
||||
AddExtended(voices, "ghost",
|
||||
V("sings in airy layered echoes", "warbles through a translucent form"),
|
||||
V("reproduces as two auras intermingle", "begins mating through synchronized fading"),
|
||||
V("tends growth with spectral pressure", "cultivates beneath a cool aura"),
|
||||
V("courts as two auras intermingle", "mates through synchronized fading"),
|
||||
V("farms with spectral pressure", "plants beneath a cool aura"),
|
||||
V("pollinates {target} with spectral pressure", "guides pollen across {target} with translucent hands"),
|
||||
V("trades through pulsing aura gestures", "bows its spectral form during exchange"),
|
||||
V("trades through pulsing aura gestures", "bows its spectral form while bargaining"),
|
||||
V("fishes with an unseen lifting force", "tracks fish through its emitted mist"),
|
||||
V("hauls through steady unseen pressure", "moves the load without contact"),
|
||||
V("heals {target} beneath a spectral veil", "presses {target} with translucent hands"),
|
||||
V("fires a chilling spectral pulse", "launches force through a sudden wail"),
|
||||
V("stokes fire with a chilling spectral pulse", "fans the flames through a sudden wail"),
|
||||
V("flees {target} as a thinning pale streak", "flees {target} within its trailing mist"),
|
||||
V("settles into a faint hovering veil", "anchors as a dim silhouette"),
|
||||
V("guards with aura spread broadly", "patrols through silent drifting passes"),
|
||||
V("guards warrior-ready with aura spread broadly", "patrols through silent drifting passes"),
|
||||
V("reads by passing through marks", "studies symbols as its aura ripples"),
|
||||
V("gathers life through spectral fingertips", "draws living traces into its emitted mist"),
|
||||
V("releases cloudy residue through itself", "sheds a dim spectral waste"),
|
||||
V("fades in and out irregularly", "drifts while hands pass through itself"),
|
||||
V("recharges as its outline brightens", "draws energy into a hollow form"),
|
||||
V("loops through compulsive fading passes", "wails beneath an urgent aura pulse"),
|
||||
V("loops through compulsive fading passes", "wails beneath an urgent aura pulse under a strange urge"),
|
||||
V("steals {target} through a passing spectral hand", "reaches for {target} within its emitted mist"),
|
||||
V("distorts as foreign shadow crosses its mist", "moves beneath a foreign spectral pull"),
|
||||
V("sees {target} in translucent dreams", "rests as its aura reenacts visions"));
|
||||
|
||||
AddExtended(voices, "god_finger",
|
||||
V("sings by drumming its nail", "wiggles through a silent fingertip ballad"),
|
||||
V("reproduces through paired fingertip pulses", "begins mating as nail glints synchronize"),
|
||||
V("tends growth with its sensitive tip", "cultivates with measured fingertip presses"),
|
||||
V("courts through paired fingertip pulses", "mates as nail glints synchronize"),
|
||||
V("farms with its sensitive tip", "plants with measured fingertip presses"),
|
||||
V("pollinates {target} with nail-tip taps", "brushes pollen across {target} with its fingertip"),
|
||||
V("trades through a formal fingertip curl", "taps its nail during exchange"),
|
||||
V("trades through a formal fingertip curl", "taps its nail while bargaining"),
|
||||
V("fishes with a sudden fingertip flick", "tests for fish with its sensitive tip"),
|
||||
V("hauls by bracing its curved body", "nudges the load with its nail"),
|
||||
V("heals {target} with measured pressure", "tends {target} with careful fingertip taps"),
|
||||
V("fires a bright nail-tip pulse", "flicks a compact burst forward"),
|
||||
V("stokes fire with a bright nail-tip pulse", "fans the flames with a compact forward flick"),
|
||||
V("flees {target} in upright hops", "slides away as its fingertip bends"),
|
||||
V("settles upright on its rounded tip", "curls into a stable resting posture"),
|
||||
V("stands guard with nail raised", "patrols in deliberate fingertip hops"),
|
||||
V("stands warrior-ready with nail raised", "patrols in deliberate fingertip hops"),
|
||||
V("reads by tracing marks with its nail", "taps symbols in measured sequence"),
|
||||
V("gathers life through its sensitive tip", "samples living traces with its nail"),
|
||||
V("relieves itself through a brief tip contraction", "expels waste while curled low"),
|
||||
|
|
@ -491,63 +491,63 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "greg",
|
||||
V("sings in a wobbling nasal honk", "bellows notes through a slack jaw"),
|
||||
V("reproduces through an uneven mating dance", "begins mating with elbows flung wide"),
|
||||
V("tends growth with alternating hand pats", "cultivates in a lopsided crouch"),
|
||||
V("courts through an uneven mating dance", "mates with elbows flung wide"),
|
||||
V("farms with alternating hand pats", "plants in a lopsided crouch"),
|
||||
V("pollinates {target} with windmilling hands", "brushes pollen across {target} with spread fingers"),
|
||||
V("trades through an overlarge two-hand wave", "nods after each exchange gesture"),
|
||||
V("trades through an overlarge two-hand wave", "nods after each bargaining gesture"),
|
||||
V("fishes with abrupt two-handed grabs", "peers for fish beneath one arm"),
|
||||
V("hauls against one oversized shoulder", "shoves the load with both palms"),
|
||||
V("heals {target} with clumsy hand pressure", "pats {target} with splayed fingers"),
|
||||
V("fires a forceful open-mouthed burst", "claps both hands into a shock pulse"),
|
||||
V("stokes fire with a forceful open-mouthed burst", "fans the flames by clapping both hands"),
|
||||
V("flees {target} in a crooked shuffle", "lopes away with elbows swinging"),
|
||||
V("settles into a wide heel squat", "plants mismatched feet and sways"),
|
||||
V("stands guard with windmilling fists", "patrols in abrupt sideways hops"),
|
||||
V("stands warrior-ready with windmilling fists", "patrols in abrupt sideways hops"),
|
||||
V("reads with its jaw hanging open", "follows marks using a waggling finger"),
|
||||
V("gathers life through noisy close sniffs", "pokes at living traces with one finger"),
|
||||
V("relieves itself in a slack-limbed squat", "expels waste with shoulders bouncing"),
|
||||
V("stares while its hands copy each other", "turns in place with one eye narrowed"),
|
||||
V("recharges as its limbs twitch awake", "draws energy through a wide yawn"),
|
||||
V("hops twice whenever the urge strikes", "waves both hands in repeated bursts"),
|
||||
V("hops twice whenever the urge strikes", "waves both hands in repeated bursts under a strange urge"),
|
||||
V("steals {target} in a windmilling grab", "snatches {target} with both hands"),
|
||||
V("lurches as its limbs move out of sequence", "grins while foreign force jerks its elbows"),
|
||||
V("sees {target} in lopsided dreams", "sleeps while fingers mime crooked gestures"));
|
||||
|
||||
AddExtended(voices, "jumpy_skull",
|
||||
V("sings through rapid tooth clacks", "rattles a tune inside its cranium"),
|
||||
V("reproduces through synchronized jaw bounces", "begins mating as empty sockets pulse"),
|
||||
V("tends growth with light crown taps", "cultivates through measured jaw hops"),
|
||||
V("courts through synchronized jaw bounces", "mates as empty sockets pulse"),
|
||||
V("farms with light crown taps", "plants through measured jaw hops"),
|
||||
V("pollinates {target} with bouncing jawbeats", "puffs pollen across {target} through clenched teeth"),
|
||||
V("trades with alternating tooth clicks", "bobs its cranium during exchange"),
|
||||
V("trades with alternating tooth clicks", "bobs its cranium while bargaining"),
|
||||
V("fishes in quick jaw-first snaps", "tracks fish through tilted sockets"),
|
||||
V("hauls with the load between its teeth", "pushes the load using its crown"),
|
||||
V("heals {target} with light crown pressure", "tends {target} through pulsing socket light"),
|
||||
V("fires a bolt between open jaws", "launches force in a snapping bounce"),
|
||||
V("stokes fire with a bolt between open jaws", "fans the flames in a snapping bounce"),
|
||||
V("flees {target} in ricocheting hops", "boings away on its springing jaw"),
|
||||
V("settles crown-down with jaw tucked", "balances quietly on its lower teeth"),
|
||||
V("guards with teeth clenched forward", "patrols in quick rebounding arcs"),
|
||||
V("guards warrior-ready with teeth clenched forward", "patrols in quick rebounding arcs"),
|
||||
V("reads by tapping symbols with teeth", "tilts one socket across the marks"),
|
||||
V("gathers life through hollow socket pulses", "samples living traces with chattering teeth"),
|
||||
V("drops waste through its open jaw", "expels residue during a low bounce"),
|
||||
V("spins while its sockets point apart", "bounces between unrelated marks"),
|
||||
V("recharges as its sockets brighten", "draws energy through clenched teeth"),
|
||||
V("snaps repeatedly at a strange urge", "boings in place without stopping"),
|
||||
V("snaps repeatedly under a strange urge", "boings in place without stopping"),
|
||||
V("steals {target} in a teeth-first hop", "clamps {target} between chattering teeth"),
|
||||
V("rattles as foreign light fills its sockets", "bounces in an imposed rhythm"),
|
||||
V("sees {target} in bouncing dreams", "rests as dim scenes cross its sockets"));
|
||||
|
||||
AddExtended(voices, "living_house",
|
||||
V("sings through resonant inner rooms", "rings a tune through door and shutters"),
|
||||
V("reproduces as its foundation stones divide", "begins mating while windows pulse together"),
|
||||
V("tends growth with careful shutter movements", "cultivates through measured foundation taps"),
|
||||
V("courts as its foundation stones divide", "mates while windows pulse together"),
|
||||
V("farms with careful shutter movements", "plants through measured foundation taps"),
|
||||
V("pollinates {target} with rhythmic shutter beats", "fans pollen across {target} through its doorway"),
|
||||
V("trades through opening and closing windows", "rings from within during exchange"),
|
||||
V("trades through opening and closing windows", "rings from within while bargaining"),
|
||||
V("fishes with a swiveling window gaze", "snaps its door near passing fish"),
|
||||
V("hauls against its broad foundation", "draws the load through its doorway"),
|
||||
V("heals {target} with sheltering inner warmth", "tends {target} through a softly lit window"),
|
||||
V("fires a forceful chimney pulse", "launches a blast through its doorway"),
|
||||
V("stokes fire with a forceful chimney pulse", "fans the flames through its doorway"),
|
||||
V("flees {target} on lurching foundation stones", "shuffles away as shutters flap"),
|
||||
V("settles with every foundation stone braced", "rests squarely with shutters tucked"),
|
||||
V("guards behind a firmly shut door", "patrols with windows swiveling"),
|
||||
V("guards warrior-ready behind a firmly shut door", "patrols with windows swiveling"),
|
||||
V("reads by scanning marks through its windows", "opens shutters in response to symbols"),
|
||||
V("gathers life through listening walls", "samples living motion with swiveling windows"),
|
||||
V("expels waste through a brief door opening", "vents residue through its chimney"),
|
||||
|
|
@ -560,17 +560,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "living_plants",
|
||||
V("sings through rustling layered leaves", "rattles seed pods in a leafy cadence"),
|
||||
V("reproduces as living fibers intertwine", "begins mating while central buds pulse"),
|
||||
V("tends growth with fine probing roots", "cultivates through careful vine curls"),
|
||||
V("courts as living fibers intertwine", "mates while central buds pulse"),
|
||||
V("farms with fine probing roots", "plants through careful vine curls"),
|
||||
V("pollinates {target} with shaking seed pods", "dusts {target} through trembling blooms"),
|
||||
V("trades through paired tendril gestures", "opens a bright bloom during exchange"),
|
||||
V("trades through paired tendril gestures", "opens a bright bloom while bargaining"),
|
||||
V("fishes with sensitive trailing roots", "curls a vine near passing fish"),
|
||||
V("hauls with several tightening vines", "pulls the load across braided roots"),
|
||||
V("heals {target} with soft binding fibers", "tends {target} beneath layered leaves"),
|
||||
V("fires a cluster of hardened thorns", "snaps a vine into a forceful burst"),
|
||||
V("stokes fire with a cluster of hardened thorns", "fans the flames with a snapping vine"),
|
||||
V("flees {target} on rapidly probing roots", "pulls away with leaves streaming"),
|
||||
V("settles as roots spread beneath its body", "folds broad leaves around its stem"),
|
||||
V("guards behind thorned vines", "patrols with roots and tendrils extended"),
|
||||
V("guards warrior-ready behind thorned vines", "patrols with roots and tendrils extended"),
|
||||
V("reads by tracing marks with tendrils", "turns leaf surfaces toward each symbol"),
|
||||
V("gathers life through fine root hairs", "samples living traces with sensitive leaves"),
|
||||
V("releases waste through opening leaf pores", "sheds a dark bead from its roots"),
|
||||
|
|
@ -583,17 +583,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "mush_animal",
|
||||
V("sings in soft gill-puff squeaks", "chuffs a tune beneath its broad cap"),
|
||||
V("reproduces through a pulsing spore release", "begins mating as gills synchronize"),
|
||||
V("tends growth with quick forepaw pats", "cultivates beneath a tilted cap"),
|
||||
V("courts through a pulsing spore release", "mates as gills synchronize"),
|
||||
V("farms with quick forepaw pats", "plants beneath a tilted cap"),
|
||||
V("pollinates {target} with soft spore puffs", "brushes pollen across {target} with short paws"),
|
||||
V("trades through cap dips and chirps", "puffs its gills during exchange"),
|
||||
V("trades through cap dips and chirps", "puffs its gills while bargaining"),
|
||||
V("fishes with a porous snout", "pounces near fish with both forepaws"),
|
||||
V("hauls against its squat shoulders", "pushes the load beneath its cap"),
|
||||
V("heals {target} with soft gill puffs", "tends {target} using quick paw presses"),
|
||||
V("fires a dense spore burst", "launches force from beneath its cap"),
|
||||
V("stokes fire with a dense spore burst", "fans the flames from beneath its cap"),
|
||||
V("flees {target} in cap-bobbing bounds", "scampers away on stubby feet"),
|
||||
V("settles beneath its lowered cap", "curls into a squat spongy ball"),
|
||||
V("guards with cap tilted forward", "patrols in quick snout-led bounds"),
|
||||
V("guards warrior-ready with cap tilted forward", "patrols in quick snout-led bounds"),
|
||||
V("reads by sniffing along marks", "taps symbols with one short paw"),
|
||||
V("gathers life through trembling gills", "samples living traces with its snout"),
|
||||
V("relieves itself beneath its lowered cap", "expels waste as its gills contract"),
|
||||
|
|
@ -606,17 +606,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "mush_unit",
|
||||
V("sings in low papery gill notes", "voices a rhythm beneath its broad cap"),
|
||||
V("reproduces through a measured spore release", "begins mating as cap pulses synchronize"),
|
||||
V("tends growth with pale careful hands", "cultivates through controlled spore puffs"),
|
||||
V("courts through a measured spore release", "mates as cap pulses synchronize"),
|
||||
V("farms with pale careful hands", "plants through controlled spore puffs"),
|
||||
V("pollinates {target} with a directed spore plume", "brushes pollen across {target} with pale fingers"),
|
||||
V("trades with a formal cap tilt", "presses its palms during exchange"),
|
||||
V("trades with a formal cap tilt", "presses its palms while bargaining"),
|
||||
V("fishes with tapping fingertips", "tracks fish through trembling gills"),
|
||||
V("hauls against its stalk-like shoulders", "moves the load with both pale hands"),
|
||||
V("heals {target} with measured palm pressure", "tends {target} beneath a soft spore veil"),
|
||||
V("fires a compact hardened spore burst", "launches force between both palms"),
|
||||
V("stokes fire with a compact hardened spore burst", "fans the flames between both palms"),
|
||||
V("flees {target} in long cap-led strides", "marches away as gills pulse rapidly"),
|
||||
V("settles upright beneath its lowered cap", "folds pale arms beneath hanging gills"),
|
||||
V("guards with forearms raised", "patrols with cap tilted forward"),
|
||||
V("guards warrior-ready with forearms raised", "patrols with cap tilted forward"),
|
||||
V("reads by tracing marks with fingertips", "studies symbols while its gills pulse"),
|
||||
V("gathers life through sensing spores", "samples living traces with tapping hands"),
|
||||
V("relieves itself in a cap-covered squat", "expels waste as its gills close"),
|
||||
|
|
@ -629,17 +629,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "necromancer",
|
||||
V("sings in layered papery whispers", "chants while pale fragments rattle"),
|
||||
V("reproduces through paired spectral pulses", "begins mating as pale runes synchronize"),
|
||||
V("tends growth with grave-pale fingertips", "cultivates beneath orbiting bone light"),
|
||||
V("courts through paired spectral pulses", "mates as pale runes synchronize"),
|
||||
V("farms with grave-pale fingertips", "plants beneath orbiting bone light"),
|
||||
V("pollinates {target} with circling pale fragments", "guides pollen across {target} through spectral force"),
|
||||
V("trades through measured rune flashes", "bows its hood during exchange"),
|
||||
V("trades through measured rune flashes", "bows its hood while bargaining"),
|
||||
V("fishes with a searching spectral wisp", "draws near fish through pale force"),
|
||||
V("hauls within grasping spectral hands", "moves the load through pale force"),
|
||||
V("heals {target} with binding pale runes", "tends {target} using spectral fingertips"),
|
||||
V("fires a grave-pale force bolt", "launches grasping spectral hands"),
|
||||
V("stokes fire with a grave-pale force bolt", "fans the flames with grasping spectral hands"),
|
||||
V("flees {target} inside streaming pale runes", "glides away as bone light circles faster"),
|
||||
V("settles within a low rune glow", "rests upright as pale fragments orbit"),
|
||||
V("guards behind spectral hands", "patrols with bone light circling"),
|
||||
V("guards warrior-ready behind spectral hands", "patrols with bone light circling"),
|
||||
V("reads through hovering pale runes", "traces symbols with a spectral fingertip"),
|
||||
V("gathers life through a cold spectral wisp", "samples living traces with pale runes"),
|
||||
V("relieves itself beneath folded robes", "expels waste as orbiting fragments turn aside"),
|
||||
|
|
@ -649,19 +649,20 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("steals {target} with a spectral hand", "draws {target} into circling pale light"),
|
||||
V("convulses as foreign runes cross its robe", "moves while foreign whispers leave its mouth"),
|
||||
V("sees {target} in bone-lit dreams", "rests while pale runes replay visions"));
|
||||
|
||||
AddExtended(voices, "plague_doctor",
|
||||
V("sings in filtered beak notes", "hums while round lenses vibrate"),
|
||||
V("reproduces through a measured mating display", "begins mating as masked breaths synchronize"),
|
||||
V("tends growth with precise gloved fingers", "cultivates beneath the lowered beak"),
|
||||
V("courts through a measured mating display", "mates as masked breaths synchronize"),
|
||||
V("farms with precise gloved fingers", "plants beneath the lowered beak"),
|
||||
V("pollinates {target} with careful glove strokes", "brushes pollen across {target} beneath its beak"),
|
||||
V("trades through a formal masked bow", "raises one glove during exchange"),
|
||||
V("trades through a formal masked bow", "raises one glove while bargaining"),
|
||||
V("fishes by tracking motion through round lenses", "snaps its long beak near fish"),
|
||||
V("hauls against its coated shoulders", "moves the load with both gloves"),
|
||||
V("heals {target} with measured gloved pressure", "examines {target} through round lenses"),
|
||||
V("fires a narrow beak-directed pulse", "launches force between raised gloves"),
|
||||
V("stokes fire with a narrow beak-directed pulse", "fans the flames between raised gloves"),
|
||||
V("flees {target} with coat tails snapping", "hurries away beneath the forward beak"),
|
||||
V("settles with gloved hands clasped", "rests upright beneath the long mask"),
|
||||
V("guards with lenses fixed forward", "patrols in quick coated strides"),
|
||||
V("guards warrior-ready with lenses fixed forward", "patrols in quick coated strides"),
|
||||
V("reads through round mask lenses", "traces marks with one gloved finger"),
|
||||
V("gathers life through filtered beak breaths", "samples living traces with close lens work"),
|
||||
V("relieves itself beneath folded coat tails", "expels waste while the beak points aside"),
|
||||
|
|
@ -674,19 +675,19 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "printer",
|
||||
V("sings through sequenced electronic tones", "chatters a tune through turning gears"),
|
||||
V("reproduces through synchronized print cycles", "begins replication as indicators pulse together"),
|
||||
V("tends growth with measured roller passes", "cultivates beneath a traveling scan bar"),
|
||||
V("courts through synchronized print cycles", "mates as indicators pulse together"),
|
||||
V("farms with measured roller passes", "plants beneath a traveling scan bar"),
|
||||
V("pollinates {target} with tray-driven puffs", "feeds pollen across {target} beneath its rollers"),
|
||||
V("trades by printing matching marks", "beeps twice during exchange"),
|
||||
V("trades by printing matching marks", "beeps twice while bargaining"),
|
||||
V("fishes with its traveling scan bar", "snaps its tray near detected fish"),
|
||||
V("hauls atop its extended tray", "moves the load through humming rollers"),
|
||||
V("heals {target} with a scanning pass", "applies measured pressure to {target} with its tray"),
|
||||
V("fires a rapid sheet burst", "launches a pulse from its scan bar"),
|
||||
V("stokes fire with a rapid sheet burst", "fans the flames from its scan bar"),
|
||||
V("flees {target} on humming rollers", "trundles away with its tray rattling"),
|
||||
V("settles with print head parked", "rests with tray tucked closed"),
|
||||
V("guards with scan bar traveling", "patrols on steady humming rollers"),
|
||||
V("guards warrior-ready with scan bar traveling", "patrols on steady humming rollers"),
|
||||
V("reads through its narrow glass slit", "copies symbols beneath the scan bar"),
|
||||
V("gathers life through calibrated scans", "samples living traces with its glass slit"),
|
||||
V("gathers life through sweeping scans", "samples life force with its glass slit"),
|
||||
V("ejects a strip of dark residue", "purges waste through its lower tray"),
|
||||
V("feeds blank strips without printing", "flashes conflicting indicators"),
|
||||
V("recharges as its display brightens", "draws power into humming internal gears"),
|
||||
|
|
@ -697,17 +698,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "skeleton",
|
||||
V("sings through hollow jaw clacks", "rattles a tune across bare ribs"),
|
||||
V("reproduces through synchronized bone taps", "begins mating as rib cages resonate"),
|
||||
V("tends growth with bony fingertips", "cultivates through alternating foot rakes"),
|
||||
V("courts through synchronized bone taps", "mates as rib cages resonate"),
|
||||
V("farms with bony fingertips", "plants through alternating foot rakes"),
|
||||
V("pollinates {target} with rib-driven puffs", "brushes pollen across {target} with finger bones"),
|
||||
V("trades through measured jaw clicks", "raises a bare hand during exchange"),
|
||||
V("trades through measured jaw clicks", "raises a bare hand while bargaining"),
|
||||
V("fishes with empty sockets lowered", "snaps bare teeth near fish"),
|
||||
V("hauls against its exposed rib cage", "moves the load with hooked bone fingers"),
|
||||
V("heals {target} with careful bone pressure", "tends {target} using jointed fingertips"),
|
||||
V("fires a rattling bone burst", "launches force through its open rib cage"),
|
||||
V("stokes fire with a rattling bone burst", "fans the flames through its open rib cage"),
|
||||
V("flees {target} in clattering strides", "scatters away and reassembles farther on"),
|
||||
V("settles into a neatly folded bone pile", "rests with hands hooked through ribs"),
|
||||
V("guards with sharpened forearms raised", "patrols in hollow clattering steps"),
|
||||
V("guards warrior-ready with sharpened forearms raised", "patrols in hollow clattering steps"),
|
||||
V("reads by tapping marks with finger bones", "tilts empty sockets across symbols"),
|
||||
V("gathers life through vibrating bare feet", "samples living motion with empty sockets"),
|
||||
V("drops dry waste through its pelvis", "expels residue between loose ribs"),
|
||||
|
|
@ -720,17 +721,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "tumor_monster_animal",
|
||||
V("sings through several wet throats", "gurgles a rhythm across pulsing growths"),
|
||||
V("reproduces as fleshy buds divide", "begins mating while nodules pulse together"),
|
||||
V("tends growth with quick uneven paws", "cultivates beneath probing tendrils"),
|
||||
V("courts as fleshy buds divide", "mates while nodules pulse together"),
|
||||
V("farms with quick uneven paws", "plants beneath probing tendrils"),
|
||||
V("pollinates {target} with trembling nodules", "brushes pollen across {target} with extra limbs"),
|
||||
V("trades through pulsing sensory lobes", "raises a hooked limb during exchange"),
|
||||
V("trades through pulsing sensory lobes", "raises a hooked limb while bargaining"),
|
||||
V("fishes with a ring of wet nostrils", "snaps clustered mouths near fish"),
|
||||
V("hauls against its swollen shoulder", "moves the load with hooked extra limbs"),
|
||||
V("heals {target} with soft tissue pressure", "tends {target} using probing tendrils"),
|
||||
V("fires a hardened tissue barb", "launches force from a pulsing nodule"),
|
||||
V("stokes fire with a hardened tissue barb", "fans the flames from a pulsing nodule"),
|
||||
V("flees {target} on scrambling uneven limbs", "lopes away with growths shaking"),
|
||||
V("settles around its largest pulsing mass", "folds several limbs beneath its body"),
|
||||
V("guards behind hardened growths", "patrols with wet nostrils testing"),
|
||||
V("guards warrior-ready behind hardened growths", "patrols with wet nostrils testing"),
|
||||
V("reads by touching marks with tendrils", "turns clustered eyes across symbols"),
|
||||
V("gathers life through sensitive nodules", "samples living traces with wet nostrils"),
|
||||
V("expels waste through a puckered opening", "releases residue beneath folded limbs"),
|
||||
|
|
@ -743,17 +744,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "tumor_monster_unit",
|
||||
V("sings in overlapping throat pitches", "drums a rhythm across hardened nodules"),
|
||||
V("reproduces as smaller hands interlace", "begins mating while clustered eyes synchronize"),
|
||||
V("tends growth with three careful hands", "cultivates through a tasting tendril"),
|
||||
V("courts as smaller hands interlace", "mates while clustered eyes synchronize"),
|
||||
V("farms with three careful hands", "plants through a tasting tendril"),
|
||||
V("pollinates {target} with several quick palms", "brushes pollen across {target} with extra fingers"),
|
||||
V("trades through alternating hand signs", "blinks clustered eyes during exchange"),
|
||||
V("trades through alternating hand signs", "blinks clustered eyes while bargaining"),
|
||||
V("fishes with a thin tasting tendril", "grabs near fish with a smaller hand"),
|
||||
V("hauls against its oversized arm", "moves the load using three hands"),
|
||||
V("heals {target} with several measured palms", "tends {target} through soft tissue pressure"),
|
||||
V("fires a dense tissue pulse", "launches force from its oversized palm"),
|
||||
V("stokes fire with a dense tissue pulse", "fans the flames from its oversized palm"),
|
||||
V("flees {target} on mismatched legs", "lumbers away with extra arms swinging"),
|
||||
V("settles with every hand braced", "folds extra limbs around its torso"),
|
||||
V("guards behind an oversized forearm", "patrols with clustered eyes blinking"),
|
||||
V("guards warrior-ready behind an oversized forearm", "patrols with clustered eyes blinking"),
|
||||
V("reads by tracing marks with three hands", "turns clustered eyes across symbols"),
|
||||
V("gathers life through a tasting tendril", "samples living traces with clustered eyes"),
|
||||
V("expels waste through a side opening", "releases residue beneath its swollen torso"),
|
||||
|
|
@ -766,17 +767,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "white_mage",
|
||||
V("sings in clear pearl-bright notes", "chants while pale sigils pulse"),
|
||||
V("reproduces through synchronized light patterns", "begins mating as pearl glows intermingle"),
|
||||
V("tends growth with open glowing palms", "cultivates beneath woven pale light"),
|
||||
V("courts through synchronized light patterns", "mates as pearl glows intermingle"),
|
||||
V("farms with open glowing palms", "plants beneath woven pale light"),
|
||||
V("pollinates {target} with pearl-bright motes", "guides pollen across {target} through pale light"),
|
||||
V("trades through ordered sigil flashes", "bows its bright-edged hood during exchange"),
|
||||
V("trades through ordered sigil flashes", "bows its bright-edged hood while bargaining"),
|
||||
V("fishes with a searching luminous mote", "draws near fish through pale force"),
|
||||
V("hauls within woven pale light", "moves the load between open palms"),
|
||||
V("heals {target} with cleansing light", "tends {target} beneath pearl radiance"),
|
||||
V("fires a concentrated pale pulse", "launches force between open palms"),
|
||||
V("stokes fire with a concentrated pale pulse", "fans the flames between open palms"),
|
||||
V("flees {target} inside streaming pale light", "glides away as sigils brighten"),
|
||||
V("settles within ordered pale sigils", "rests with both palms open"),
|
||||
V("guards behind a shining barrier", "patrols with pearl motes circling"),
|
||||
V("guards warrior-ready behind a shining barrier", "patrols with pearl motes circling"),
|
||||
V("reads as pale light reveals marks", "studies symbols through ordered sigils"),
|
||||
V("gathers life through a luminous mote", "samples living traces with pearl light"),
|
||||
V("relieves itself beneath a pale veil", "releases waste as sigils turn aside"),
|
||||
|
|
@ -789,17 +790,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "zombie",
|
||||
V("sings in a broken throaty moan", "groans a rhythm through its crooked jaw"),
|
||||
V("reproduces through a stiff mating display", "begins mating as dead limbs twitch together"),
|
||||
V("tends growth with slow stiff fingers", "cultivates through repeated palm presses"),
|
||||
V("courts through a stiff mating display", "mates as dead limbs twitch together"),
|
||||
V("farms with slow stiff fingers", "plants through repeated palm presses"),
|
||||
V("pollinates {target} with dragging hand sweeps", "brushes pollen across {target} with stiff fingers"),
|
||||
V("trades through a delayed hand raise", "groans once during exchange"),
|
||||
V("trades through a delayed hand raise", "groans once while bargaining"),
|
||||
V("fishes with an unbroken forward stare", "snaps broken teeth near fish"),
|
||||
V("hauls against its stiff shoulders", "pushes the load with both rigid arms"),
|
||||
V("heals {target} with slow hand pressure", "tends {target} using stiff fingertips"),
|
||||
V("fires a hoarse mouth pulse", "launches force with both reaching hands"),
|
||||
V("stokes fire with a hoarse mouth pulse", "fans the flames with both reaching hands"),
|
||||
V("flees {target} in a dragging lurch", "shambles away with arms swinging"),
|
||||
V("settles into a limp heap", "rests upright with jaw hanging"),
|
||||
V("guards with both stiff hands raised", "patrols in slow dragging steps"),
|
||||
V("guards warrior-ready with both stiff hands raised", "patrols in slow dragging steps"),
|
||||
V("reads with an unbroken stare", "traces marks using one rigid finger"),
|
||||
V("gathers life through a ruined nose", "samples living traces with broken teeth"),
|
||||
V("relieves itself without changing its stare", "expels waste in a stiff crouch"),
|
||||
|
|
@ -812,17 +813,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
|
||||
AddExtended(voices, "snowman",
|
||||
V("sings in cold hollow crunches", "rumbles a tune through packed sections"),
|
||||
V("reproduces as packed sections bud", "begins mating while cold pulses synchronize"),
|
||||
V("tends growth with stick-like limb taps", "cultivates through careful body pressure"),
|
||||
V("courts as packed sections bud", "mates while cold pulses synchronize"),
|
||||
V("farms with stick-like limb taps", "plants through careful body pressure"),
|
||||
V("pollinates {target} with broad limb sweeps", "brushes pollen across {target} with packed hands"),
|
||||
V("trades through a rounded body dip", "waves one stick-like limb during exchange"),
|
||||
V("fishes through pulsing cold-body effects", "scoops near fish with packed limbs"),
|
||||
V("trades through a rounded body dip", "waves one stick-like limb while bargaining"),
|
||||
V("fishes through pulsing cold along its body", "scoops near fish with packed limbs"),
|
||||
V("hauls against its rounded lower section", "pushes the load with both stick-like limbs"),
|
||||
V("heals {target} with numbing body pressure", "tends {target} using packed hands"),
|
||||
V("fires a burst of packed body snow", "launches cold force between raised limbs"),
|
||||
V("stokes fire with a burst of packed body snow", "fans the flames between raised limbs"),
|
||||
V("flees {target} in a swaying waddle", "pivots away as packed sections wobble"),
|
||||
V("settles into a stable stacked posture", "rests with stick-like limbs tucked"),
|
||||
V("guards with both limbs spread", "patrols in slow rounded pivots"),
|
||||
V("guards warrior-ready with both limbs spread", "patrols in slow rounded pivots"),
|
||||
V("reads by tapping marks with one limb", "rotates its upper section across symbols"),
|
||||
V("gathers life through cold-body pulses", "samples living traces with packed hands"),
|
||||
V("releases waste beneath its lower section", "expels dark residue while sections compress"),
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "UFO",
|
||||
V("kindles flame beneath a focused heat ray", "spreads fire with a sweeping thermal beam"),
|
||||
V("smothers flame beneath a cooling field", "dims fire with a pulsing suppression ray"),
|
||||
V("gathers with kin through synchronized signals", "joins kin beneath matching light pulses"),
|
||||
V("draws observed essence through a scanning beam", "samples visible life force beneath its hull"),
|
||||
V("pulses silver light among the others", "settles hull-close among the others"),
|
||||
V("draws essence through a scanning beam", "samples life force beneath its hull"),
|
||||
V("searches with a narrow scan", "reaches with a controlled lifting field"),
|
||||
V("sounds a rising electronic trill", "pulses a wavering alarm tone"),
|
||||
V("blasts clipped synthetic notes", "flashes harsh signals with a metallic buzz"));
|
||||
|
|
@ -18,8 +18,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "alien",
|
||||
V("sparks flame between clicking fingertips", "spreads fire with crackling wrist pulses"),
|
||||
V("presses flame down with splayed hands", "quenches fire beneath a bioelectric pulse"),
|
||||
V("gathers with kin through rapid clicks", "joins kin in mirrored body pulses"),
|
||||
V("draws observed essence through tasting fingertips", "samples visible life force with its mouthparts"),
|
||||
V("clicks rapidly among the others", "presses mirrored pulses among the others"),
|
||||
V("draws essence through tasting fingertips", "samples life force with its mouthparts"),
|
||||
V("searches with four darting hands", "reaches with narrow grasping fingers"),
|
||||
V("cries through a trembling throat sac", "releases a chain of bubbling chirps"),
|
||||
V("chatters in jagged throat clicks", "snaps out a harsh clicking burst"));
|
||||
|
|
@ -27,7 +27,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "angle",
|
||||
V("kindles flame with holy radiance", "spreads fire through a surge of divine light"),
|
||||
V("suppresses flame beneath sacred brilliance", "dims fire within steady celestial light"),
|
||||
V("gathers with kin through shared holy radiance", "joins kin beneath shared divine light"),
|
||||
V("presses glowing sides among the others", "settles in shared divine light among the others"),
|
||||
V("draws life essence into holy radiance", "channels life force through celestial light"),
|
||||
V("searches beneath revealing sacred light", "reaches through a pulse of divine radiance"),
|
||||
V("sounds a sustained celestial chime", "releases a trembling hymn of light"),
|
||||
|
|
@ -36,8 +36,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "assimilator",
|
||||
V("kindles flame with a searing membrane pulse", "spreads fire through reaching hot tendrils"),
|
||||
V("smothers flame beneath a widening membrane", "draws fire into heat-drinking tissue"),
|
||||
V("gathers with kin through braided tendrils", "joins kin by matching surface pulses"),
|
||||
V("draws observed essence through tasting filaments", "absorbs visible life force beneath rippling tissue"),
|
||||
V("braids tendrils among the others", "presses rippling tissue among the others"),
|
||||
V("draws essence through tasting filaments", "absorbs life force beneath rippling tissue"),
|
||||
V("searches with many probing feelers", "reaches through a forming grasping limb"),
|
||||
V("cries through several borrowed throats", "releases mismatched wails across its surface"),
|
||||
V("barks layered borrowed syllables", "snaps through a chorus of harsh voices"));
|
||||
|
|
@ -45,8 +45,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "civ_crystal_golem",
|
||||
V("kindles flame with a white-hot core pulse", "spreads fire through radiant crystal seams"),
|
||||
V("suppresses flame beneath cooling crystal light", "draws fire into dimming core seams"),
|
||||
V("gathers with kin through resonant core hums", "joins kin as inner lights pulse together"),
|
||||
V("draws observed essence through luminous facets", "channels visible life force into its core"),
|
||||
V("hums its core among the others", "pulses inner light among the others"),
|
||||
V("draws essence through luminous facets", "channels life force into its core"),
|
||||
V("searches with refracted inner light", "reaches with broad crystalline hands"),
|
||||
V("cries in a deep crystalline peal", "rings from every facet in trembling notes"),
|
||||
V("booms in sharp core-deep pulses", "clashes its facets through a harsh resonance"));
|
||||
|
|
@ -54,8 +54,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "cold_one",
|
||||
V("kindles flame with a concentrated pale spark", "spreads fire from a pale crackling palm"),
|
||||
V("smothers flame beneath hardening rime", "quenches fire with a numbing cold pulse"),
|
||||
V("gathers with kin through clicking frozen teeth", "joins kin as cold vapors mingle"),
|
||||
V("draws observed essence through a whitening palm", "pulls visible life force into its rime"),
|
||||
V("clicks frozen teeth among the others", "mingles cold vapors among the others"),
|
||||
V("draws essence through a whitening palm", "pulls life force into its rime"),
|
||||
V("searches with heat-sensitive fingers", "reaches with a frost-rimmed hand"),
|
||||
V("cries in a thin ice-cracking shriek", "releases a long chime through frozen teeth"),
|
||||
V("snaps out brittle frozen clicks", "rasps through a burst of cracking rime"));
|
||||
|
|
@ -63,8 +63,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "crabzilla",
|
||||
V("kindles flame between grinding mouthplates", "spreads fire with a vast heated breath"),
|
||||
V("smothers flame beneath a colossal pincer", "quenches fire with a crushing shell-borne pressure"),
|
||||
V("gathers with kin through booming pincer clacks", "joins kin as armored shells resonate"),
|
||||
V("draws observed essence through sweeping eye stalks", "pulls visible life force between its mouthplates"),
|
||||
V("clacks both pincers among the others", "presses armored shell among the others"),
|
||||
V("draws essence through sweeping eye stalks", "pulls life force between its mouthplates"),
|
||||
V("searches with swiveling eye stalks", "reaches with a colossal open pincer"),
|
||||
V("cries in a shell-rattling bellow", "clacks its mouthparts in thunderous pulses"),
|
||||
V("snaps both pincers in a harsh barrage", "grinds out a booming plated rasp"));
|
||||
|
|
@ -72,8 +72,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "crystal_sword",
|
||||
V("kindles flame along its glowing edge", "spreads fire through a searing blade pulse"),
|
||||
V("parts flame with a cooling edge", "draws fire into dimming crystal facets"),
|
||||
V("gathers with kin through matching crystal peals", "joins kin as suspended blades resonate"),
|
||||
V("draws observed essence along its fuller", "channels visible life force into its jeweled guard"),
|
||||
V("rings crystal peals among the others", "resonates blade-to-blade among the others"),
|
||||
V("draws essence along its fuller", "channels life force into its jeweled guard"),
|
||||
V("searches with its point slowly testing", "reaches with a hovering hilt"),
|
||||
V("cries in a high sustained ring", "trembles through a descending crystal peal"),
|
||||
V("rings in sharp metallic bursts", "shivers its edge through a harsh bright note"));
|
||||
|
|
@ -81,8 +81,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "demon",
|
||||
V("kindles flame between blackened claws", "spreads fire with a scorching breath"),
|
||||
V("smothers flame inside a smoking palm", "draws fire beneath ember-hot skin"),
|
||||
V("gathers with kin through heated snarls", "joins kin as smoking bodies press close"),
|
||||
V("draws observed essence through glowing fangs", "pulls visible life force into its hot core"),
|
||||
V("snarls heated among the others", "presses smoking body among the others"),
|
||||
V("draws essence through glowing fangs", "pulls life force into its hot core"),
|
||||
V("searches with heat-sensing nostrils", "reaches with hooked claws"),
|
||||
V("cries in a cracked furnace howl", "releases a throat-deep scorching wail"),
|
||||
V("barks harsh syllables through smoking fangs", "snarls in short ember-spitting bursts"));
|
||||
|
|
@ -90,8 +90,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "dragon",
|
||||
V("kindles flame behind serrated teeth", "spreads fire with a broad searing breath"),
|
||||
V("smothers flame beneath a plated foreclaw", "draws fire back through flared nostrils"),
|
||||
V("gathers with kin through chest-deep rumbles", "joins kin as plated bodies resonate"),
|
||||
V("draws observed essence through flared nostrils", "pulls visible life force between glowing teeth"),
|
||||
V("rumbles chest-deep among the others", "presses plated flank among the others"),
|
||||
V("draws essence through flared nostrils", "pulls life force between glowing teeth"),
|
||||
V("searches with unblinking eyes", "reaches with an open foreclaw"),
|
||||
V("cries in a vast chest-deep roar", "releases a long horn-rattling bellow"),
|
||||
V("snaps out thunderous guttural syllables", "growls through bursts of bright sparks"));
|
||||
|
|
@ -99,8 +99,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "druid",
|
||||
V("kindles flame between bark-lined palms", "spreads fire through glowing sap"),
|
||||
V("smothers flame beneath unfurling leaves", "draws fire into darkening living grain"),
|
||||
V("gathers with kin through rustling leaf-signals", "joins kin as living fibers intertwine"),
|
||||
V("draws observed essence through root-like fingers", "pulls visible life force into living grain"),
|
||||
V("rustles leaves among the others", "intertwines living fibers among the others"),
|
||||
V("draws essence through root-like fingers", "pulls life force into living grain"),
|
||||
V("searches with curling rootlets", "reaches with a vine-wrapped hand"),
|
||||
V("cries through a dry leafy rasp", "releases a low wooden groan"),
|
||||
V("utters clipped syllables through rustling leaves", "snaps living grain in a harsh cadence"));
|
||||
|
|
@ -108,8 +108,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "evil_mage",
|
||||
V("kindles flame from violet fingertips", "spreads fire through crawling dark sparks"),
|
||||
V("smothers flame beneath folded shadow", "draws fire into a dim violet aura"),
|
||||
V("gathers with kin through layered whispers", "joins kin as dark auras overlap"),
|
||||
V("draws observed essence into a shadowed palm", "pulls visible life force through violet sparks"),
|
||||
V("whispers while stepping among the others", "overlaps dark aura among the others"),
|
||||
V("draws essence into a shadowed palm", "pulls life force through violet sparks"),
|
||||
V("searches through a circling violet eye", "reaches with a shadow-wrapped hand"),
|
||||
V("cries in a thin echoing rasp", "releases a wavering chorus of whispers"),
|
||||
V("hisses clipped words through violet static", "barks a harsh syllable as shadows pulse"));
|
||||
|
|
@ -117,8 +117,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "fairy",
|
||||
V("kindles flame from sparkling fingertips", "spreads fire through pulsing bright motes"),
|
||||
V("dims flame beneath cooling shimmer", "smothers fire inside a veil of motes"),
|
||||
V("gathers with kin through matching light pulses", "joins kin as tiny glows mingle"),
|
||||
V("draws observed essence into sparkling motes", "pulls visible life force through its shimmer"),
|
||||
V("pulses tiny light among the others", "mingles bright motes among the others"),
|
||||
V("draws essence into sparkling motes", "pulls life force through its shimmer"),
|
||||
V("searches with flickering motes", "reaches with both tiny hands"),
|
||||
V("cries in a piercing bell-like trill", "releases a trembling chain of tiny notes"),
|
||||
V("chirps sharp syllables in rapid bursts", "flashes harshly through a clipped trill"));
|
||||
|
|
@ -126,8 +126,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "fire_elemental",
|
||||
V("kindles flame from its white-hot core", "spreads fire through reaching tongues of flame"),
|
||||
V("draws loose flame back into its core", "banks fire beneath a dim ember shell"),
|
||||
V("gathers with kin as sparks intermingle", "joins kin through merging flame pulses"),
|
||||
V("draws observed essence into its burning core", "pulls visible life force through licking flames"),
|
||||
V("sparks among the others", "merges flame pulses among the others"),
|
||||
V("draws essence into its burning core", "pulls life force through licking flames"),
|
||||
V("searches with thin reaching flames", "reaches with a forming arm of fire"),
|
||||
V("cries in a roaring cascade of crackles", "releases a long furnace-like howl"),
|
||||
V("snaps in harsh explosive pops", "flares through a jagged crackling burst"));
|
||||
|
|
@ -135,8 +135,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "fire_elemental_blob",
|
||||
V("kindles flame from a bubbling hot lobe", "spreads fire through clinging molten droplets"),
|
||||
V("draws flame beneath a cooling crust", "smothers fire inside its soft molten body"),
|
||||
V("gathers with kin through shared bubbling pulses", "joins kin as molten sides mingle"),
|
||||
V("draws observed essence through a glowing pseudopod", "pulls visible life force beneath its liquid surface"),
|
||||
V("bubbles among the others", "presses molten sides among the others"),
|
||||
V("draws essence through a glowing pseudopod", "pulls life force beneath its liquid surface"),
|
||||
V("searches with a wavering hot lobe", "reaches with a stretching pseudopod"),
|
||||
V("cries in a wet chain of fiery pops", "gurgles through a long bubbling wail"),
|
||||
V("bursts in harsh sputtering pops", "slaps its molten surface through a jagged hiss"));
|
||||
|
|
@ -144,8 +144,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "fire_elemental_horse",
|
||||
V("kindles flame between glowing teeth", "spreads fire through a blazing breath"),
|
||||
V("draws flame into its ember-bright muzzle", "stamps fire beneath a cooling hoof"),
|
||||
V("gathers with kin through furnace nickers", "joins kin as fiery manes mingle"),
|
||||
V("draws observed essence through flared nostrils", "pulls visible life force into its burning chest"),
|
||||
V("nickers furnace-hot among the others", "mingles fiery mane among the others"),
|
||||
V("draws essence through flared nostrils", "pulls life force into its burning chest"),
|
||||
V("searches with a glowing muzzle", "reaches with ember-bright teeth"),
|
||||
V("cries in a rising furnace whinny", "releases a long crackling nicker"),
|
||||
V("snorts sharp bursts of sparks", "barks a harsh note through glowing teeth"));
|
||||
|
|
@ -153,8 +153,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "fire_elemental_slug",
|
||||
V("kindles flame beneath its glowing mantle", "spreads fire through a molten body ribbon"),
|
||||
V("draws flame under a cooled black crust", "smothers fire beneath its broad heated underside"),
|
||||
V("gathers with kin through touching flame feelers", "joins kin as glowing mantles pulse together"),
|
||||
V("draws observed essence through heat-sensitive feelers", "pulls visible life force beneath its mantle"),
|
||||
V("touches flame feelers among the others", "pulses glowing mantle among the others"),
|
||||
V("draws essence through heat-sensitive feelers", "pulls life force beneath its mantle"),
|
||||
V("searches with sweeping flame feelers", "reaches with an extended glowing mantle"),
|
||||
V("cries in a long wet sizzle", "releases a bubbling crackle through its mantle"),
|
||||
V("pops in sharp hissing bursts", "rasps through a harsh chain of sizzles"));
|
||||
|
|
@ -162,8 +162,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "fire_elemental_snake",
|
||||
V("kindles flame behind a forked fire tongue", "spreads fire along its blazing coils"),
|
||||
V("draws flame into banked coils", "smothers fire beneath overlapping ember scales"),
|
||||
V("gathers with kin through braided burning coils", "joins kin as forked sparks pulse together"),
|
||||
V("draws observed essence through its split flame tongue", "pulls visible life force along glowing coils"),
|
||||
V("braids burning coils among the others", "pulses forked sparks among the others"),
|
||||
V("draws essence through its split flame tongue", "pulls life force along glowing coils"),
|
||||
V("searches with a flickering forked tongue", "reaches with an opening fiery coil"),
|
||||
V("cries in a long crackling hiss", "rattles out a wavering chain of pops"),
|
||||
V("hisses in clipped searing bursts", "snaps its flame tongue through harsh crackles"));
|
||||
|
|
@ -171,8 +171,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "fire_skull",
|
||||
V("kindles flame inside its hollow mouth", "spreads fire through snapping blazing jaws"),
|
||||
V("draws flame into empty sockets", "smothers fire beneath its dimming crown"),
|
||||
V("gathers with kin through synchronized jaw clacks", "joins kin as hollow sockets flare together"),
|
||||
V("draws observed essence through empty sockets", "pulls visible life force between blazing teeth"),
|
||||
V("clacks jaws among the others", "flares hollow sockets among the others"),
|
||||
V("draws essence through empty sockets", "pulls life force between blazing teeth"),
|
||||
V("searches with fixed hollow sockets", "reaches with opening jaws"),
|
||||
V("cries in a hollow fire-fed howl", "cackles through a trembling loose jaw"),
|
||||
V("clacks out harsh tooth-borne bursts", "barks through a flare of roaring fire"));
|
||||
|
|
@ -180,8 +180,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "ghost",
|
||||
V("kindles pale flame in a spectral palm", "spreads fire through a wavering aura"),
|
||||
V("smothers flame inside its translucent form", "dims fire beneath a chilling spectral pulse"),
|
||||
V("gathers with kin through overlapping outlines", "joins kin as spectral auras mingle"),
|
||||
V("draws observed essence into its hollow form", "pulls visible life force through a translucent hand"),
|
||||
V("overlaps outline among the others", "mingles spectral aura among the others"),
|
||||
V("draws essence into its hollow form", "pulls life force through a translucent hand"),
|
||||
V("searches through a wavering outline", "reaches with a spectral hand"),
|
||||
V("cries in a long airy wail", "moans through a trembling echo"),
|
||||
V("rasps in clipped hollow syllables", "warbles through a harsh spectral pulse"));
|
||||
|
|
@ -189,8 +189,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "god_finger",
|
||||
V("kindles flame beneath its rounded tip", "spreads fire with a heated nail pulse"),
|
||||
V("presses flame beneath its broad tip", "draws fire into a dimming nail"),
|
||||
V("gathers with kin through fingertip taps", "joins kin as nails pulse together"),
|
||||
V("draws observed essence through its sensitive tip", "pulls visible life force beneath its nail"),
|
||||
V("taps fingertips among the others", "pulses nails among the others"),
|
||||
V("draws essence through its sensitive tip", "pulls life force beneath its nail"),
|
||||
V("searches with its tip flexing", "reaches with a slowly curling digit"),
|
||||
V("cries through rapid self-drumming taps", "trembles out a rolling nail-borne rattle"),
|
||||
V("taps out a harsh clipped sequence", "snaps its nail in sharp repeated bursts"));
|
||||
|
|
@ -198,8 +198,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "greg",
|
||||
V("kindles flame between rubbing palms", "spreads fire through a hot open-mouthed breath"),
|
||||
V("smothers flame beneath both broad hands", "blows a forceful breath across the fire"),
|
||||
V("gathers with kin through matching nasal honks", "joins kin in close shoulder contact"),
|
||||
V("draws observed essence through spread fingertips", "pulls visible life force into its open mouth"),
|
||||
V("honks nasal among the others", "presses shoulder-close among the others"),
|
||||
V("draws essence through spread fingertips", "pulls life force into its open mouth"),
|
||||
V("searches with unblinking eyes", "reaches with both open hands"),
|
||||
V("cries in a long nasal honk", "wheezes through a trembling throat"),
|
||||
V("barks blunt syllables through clenched teeth", "snorts a harsh broken cadence"));
|
||||
|
|
@ -207,8 +207,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "jumpy_skull",
|
||||
V("kindles flame between chattering teeth", "spreads fire through snapping hot jaws"),
|
||||
V("smothers flame beneath its heavy cranium", "draws fire into hollow sockets"),
|
||||
V("gathers with kin through rapid jaw clacks", "joins kin as bare craniums rattle together"),
|
||||
V("draws observed essence through hollow sockets", "pulls visible life force between chattering teeth"),
|
||||
V("clacks jaws among the others", "rattles bare cranium among the others"),
|
||||
V("draws essence through hollow sockets", "pulls life force between chattering teeth"),
|
||||
V("searches with tilted empty sockets", "reaches with an opening jaw"),
|
||||
V("cries in a hollow rattling shriek", "cackles through uncontrollable jaw clacks"),
|
||||
V("snaps out a harsh tooth-clacking barrage", "rattles its cranium through clipped bursts"));
|
||||
|
|
@ -216,8 +216,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "living_house",
|
||||
V("kindles flame within its glowing interior", "spreads fire through heat pulsing from its openings"),
|
||||
V("smothers flame behind closing shutters", "draws fire into a darkened interior"),
|
||||
V("gathers with kin through resonant inner bells", "joins kin as windows pulse together"),
|
||||
V("draws observed essence through open windows", "pulls visible life force into its interior"),
|
||||
V("rings inner bells among the others", "pulses windows among the others"),
|
||||
V("draws essence through open windows", "pulls life force into its interior"),
|
||||
V("searches through swiveling windows", "reaches with an opening doorway"),
|
||||
V("cries through rattling windows and walls", "releases a long foundation-deep groan"),
|
||||
V("slams its openings in harsh succession", "rings a sharp booming inner bell"));
|
||||
|
|
@ -225,8 +225,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "living_plants",
|
||||
V("kindles flame through heating sap", "spreads fire along glowing vines"),
|
||||
V("smothers flame beneath broad folded leaves", "draws fire into thick cooling sap"),
|
||||
V("gathers with kin through intertwining roots", "joins kin as leaf pulses synchronize"),
|
||||
V("draws observed essence through fine root hairs", "pulls visible life force into its central bud"),
|
||||
V("intertwines roots among the others", "pulses leaves among the others"),
|
||||
V("draws essence through fine root hairs", "pulls life force into its central bud"),
|
||||
V("searches with probing roots", "reaches with a curling vine"),
|
||||
V("cries in a long rustling rasp", "releases a dry pod-rattling wail"),
|
||||
V("snaps leaves in a harsh cadence", "rattles dry pods through clipped bursts"));
|
||||
|
|
@ -234,8 +234,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "mush_animal",
|
||||
V("kindles flame through a hot spore puff", "spreads fire beneath a pulsing cap"),
|
||||
V("smothers flame beneath its broad damp cap", "quenches fire with a dense cooling spore cloud"),
|
||||
V("gathers with kin through synchronized gill puffs", "joins kin as broad caps press together"),
|
||||
V("draws observed essence through porous gills", "pulls visible life force beneath its cap"),
|
||||
V("puffs gills among the others", "presses broad cap among the others"),
|
||||
V("draws essence through porous gills", "pulls life force beneath its cap"),
|
||||
V("searches with a porous snout", "reaches with quick forepaws"),
|
||||
V("cries in a damp bubbling squeal", "chuffs through rapidly pulsing gills"),
|
||||
V("snaps flat teeth through harsh squeaks", "puffs clipped rasping bursts from its gills"));
|
||||
|
|
@ -243,8 +243,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "mush_unit",
|
||||
V("kindles flame in a heated spore puff", "spreads fire beneath its broad cap"),
|
||||
V("smothers flame under pulsing damp gills", "quenches fire with a dense cooling spore veil"),
|
||||
V("gathers with kin through shared spore pulses", "joins kin as broad caps touch"),
|
||||
V("draws observed essence through hanging gills", "pulls visible life force beneath its cap"),
|
||||
V("shares spore pulses among the others", "touches broad caps among the others"),
|
||||
V("draws essence through hanging gills", "pulls life force beneath its cap"),
|
||||
V("searches with trembling fingertips", "reaches with a pale open hand"),
|
||||
V("cries in a low papery wail", "releases a trembling puff through its gills"),
|
||||
V("rasps clipped syllables beneath its cap", "snaps out harsh papery puffs"));
|
||||
|
|
@ -252,8 +252,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "necromancer",
|
||||
V("kindles grave-pale flame in one hand", "spreads fire through cold spectral wisps"),
|
||||
V("smothers flame beneath a wan magic pulse", "draws fire into circling pale light"),
|
||||
V("gathers with kin through layered bone-dry whispers", "joins kin as pale auras overlap"),
|
||||
V("draws observed essence into a raised hand", "pulls visible life force through grave-pale magic"),
|
||||
V("whispers bone-dry among the others", "overlaps pale aura among the others"),
|
||||
V("draws essence into a raised hand", "pulls life force through grave-pale magic"),
|
||||
V("searches through a floating spectral wisp", "reaches with a pale open hand"),
|
||||
V("cries in a papery hollow wail", "releases a chorus of rattling whispers"),
|
||||
V("hisses clipped syllables through pale static", "rasps in a harsh bone-dry cadence"));
|
||||
|
|
@ -261,8 +261,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "plague_doctor",
|
||||
V("kindles flame through a narrow filtered breath", "spreads fire from a heated gloved palm"),
|
||||
V("smothers flame beneath both gloved hands", "quenches fire through a cooling filtered breath"),
|
||||
V("gathers with kin through measured beak clicks", "joins kin as masked heads incline together"),
|
||||
V("draws observed essence through round mask lenses", "pulls visible life force into the narrow beak"),
|
||||
V("clicks its beak among the others", "inclines masked head among the others"),
|
||||
V("draws essence through round mask lenses", "pulls life force into the narrow beak"),
|
||||
V("searches through round dark lenses", "reaches with a gloved hand"),
|
||||
V("cries in a muffled hollow rasp", "releases a long filtered wheeze"),
|
||||
V("barks clipped syllables behind the beak", "snaps out harsh muffled sounds"));
|
||||
|
|
@ -270,8 +270,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "printer",
|
||||
V("kindles flame beneath an overheating print head", "spreads fire through a hot internal pulse"),
|
||||
V("smothers flame beneath a cooling internal vent", "suppresses fire with a pulsing thermal cutoff"),
|
||||
V("gathers with kin through synchronized status beeps", "joins kin as indicator lights match"),
|
||||
V("draws observed essence through its scan bar", "samples visible life force across its glass slit"),
|
||||
V("beeps status tones among the others", "matches indicator lights among the others"),
|
||||
V("draws essence through its scan bar", "samples life force across its glass slit"),
|
||||
V("searches with a traveling scan light", "reaches with its extending tray"),
|
||||
V("cries in a wavering electronic whine", "chatters its gears through a broken alarm"),
|
||||
V("blasts sharp electronic tones", "rattles out a harsh mechanical sequence"));
|
||||
|
|
@ -279,8 +279,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "skeleton",
|
||||
V("kindles flame inside its hollow rib cage", "spreads fire through snapping bare fingers"),
|
||||
V("smothers flame beneath interlocked bones", "draws fire into empty sockets"),
|
||||
V("gathers with kin through matching bone rattles", "joins kin as bare ribs clack together"),
|
||||
V("draws observed essence through empty sockets", "pulls visible life force into its rib cage"),
|
||||
V("rattles bones among the others", "clacks bare ribs among the others"),
|
||||
V("draws essence through empty sockets", "pulls life force into its rib cage"),
|
||||
V("searches with its hollow gaze", "reaches with a bare jointed hand"),
|
||||
V("cries in a hollow jaw-flapping wail", "rattles from skull to toes in long pulses"),
|
||||
V("clacks teeth in a harsh barrage", "snaps finger bones through clipped beats"));
|
||||
|
|
@ -288,8 +288,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "tumor_monster_animal",
|
||||
V("kindles flame from a heated pulsing nodule", "spreads fire through a searing tendril"),
|
||||
V("smothers flame beneath a broad fleshy lobe", "draws fire into cooling swollen tissue"),
|
||||
V("gathers with kin through matching tissue pulses", "joins kin as sensory lobes touch"),
|
||||
V("draws observed essence through wet nostrils", "pulls visible life force into a pulsing growth"),
|
||||
V("pulses tissue among the others", "touches sensory lobes among the others"),
|
||||
V("draws essence through wet nostrils", "pulls life force into a pulsing growth"),
|
||||
V("searches with sensitive nodules", "reaches with a twitching tendril"),
|
||||
V("cries through several throats at once", "releases a wet overlapping wail"),
|
||||
V("snaps crowded teeth through harsh gurgles", "barks from several mouths in clipped bursts"));
|
||||
|
|
@ -297,8 +297,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "tumor_monster_unit",
|
||||
V("kindles flame in a throbbing heated palm", "spreads fire through a searing extra limb"),
|
||||
V("smothers flame beneath an oversized hand", "draws fire into cooling pulsing tissue"),
|
||||
V("gathers with kin through synchronized nodules", "joins kin as sensory tendrils touch"),
|
||||
V("draws observed essence through clustered eyes", "pulls visible life force into a pulsing abdomen"),
|
||||
V("pulses nodules among the others", "touches sensory tendrils among the others"),
|
||||
V("draws essence through clustered eyes", "pulls life force into a pulsing abdomen"),
|
||||
V("searches with clustered blinking eyes", "reaches with several open hands"),
|
||||
V("cries in overlapping throaty pitches", "releases a wet wail from several vents"),
|
||||
V("barks clipped sounds from a sideways mouth", "snorts through several vents in harsh bursts"));
|
||||
|
|
@ -306,8 +306,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "white_mage",
|
||||
V("kindles flame in a pearl-bright palm", "spreads fire through cleansing light"),
|
||||
V("suppresses flame beneath a pale luminous veil", "dims fire within cooling pearl light"),
|
||||
V("gathers with kin through shared luminous pulses", "joins kin as pale auras overlap"),
|
||||
V("draws observed essence through an open palm", "pulls visible life force into pearl-white light"),
|
||||
V("pulses luminous light among the others", "overlaps pale aura among the others"),
|
||||
V("draws essence through an open palm", "pulls life force into pearl-white light"),
|
||||
V("searches through a revealing luminous mote", "reaches with a light-wrapped hand"),
|
||||
V("cries in a clear sustained ring", "releases a trembling luminous hum"),
|
||||
V("voices clipped ringing syllables", "flashes sharply through a harsh bright cadence"));
|
||||
|
|
@ -315,8 +315,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "zombie",
|
||||
V("kindles flame between stiff rubbing hands", "spreads fire through a hot broken-toothed breath"),
|
||||
V("smothers flame beneath both stiff hands", "presses its cold body against the fire"),
|
||||
V("gathers with kin through matching groans", "joins kin in close cold contact"),
|
||||
V("draws observed essence through a ruined nose", "pulls visible life force into its open mouth"),
|
||||
V("groans among the others", "presses cold body among the others"),
|
||||
V("draws essence through a ruined nose", "pulls life force into its open mouth"),
|
||||
V("searches with an unbroken stare", "reaches with both stiff hands"),
|
||||
V("cries through a long crooked-jaw groan", "gurgles in a wavering broken-throat call"),
|
||||
V("barks hoarse clipped syllables", "snaps broken teeth through a harsh rasp"));
|
||||
|
|
@ -324,8 +324,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddSpecialized(voices, "snowman",
|
||||
V("kindles flame between its cold stick-like limbs", "spreads fire through a heat pulse from its packed body"),
|
||||
V("smothers flame beneath its packed cold body", "quenches fire with a burst of its own cold powder"),
|
||||
V("gathers with kin through matching body tremors", "joins kin as packed sides press together"),
|
||||
V("draws observed essence through its rounded upper body", "pulls visible life force into its packed middle"),
|
||||
V("trembles packed body among the others", "presses packed sides among the others"),
|
||||
V("draws essence through its rounded upper body", "pulls life force into its packed middle"),
|
||||
V("searches by rotating its upper body", "reaches with both stick-like limbs"),
|
||||
V("cries in a powdery body-deep crunch", "releases a long packed-body rumble"),
|
||||
V("snaps its stick-like limbs in harsh beats", "crunches through a clipped rumbling burst"));
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a precise lower ray", "attacks {target} with a hot lance"),
|
||||
V("answers nearby signals with colored flashes", "circles once while broadcasting soft tones"),
|
||||
V("trills in quick electronic notes", "warbles through a rising chord"),
|
||||
V("maps its task with scanning light", "aligns its panels over a precision task"));
|
||||
V("maps material with scanning light", "aligns its panels while placing each piece"));
|
||||
|
||||
Add(voices, "alien",
|
||||
V("bounds forward on springing legs", "scuttles sideways with its torso upright"),
|
||||
|
|
@ -28,7 +28,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a hooked wrist", "attacks {target} from springing legs"),
|
||||
V("touches fingertips and trades soft clicks", "mirrors another's posture in greeting"),
|
||||
V("chatters in bubbling bursts", "chirps until its throat sac trembles"),
|
||||
V("sorts material by shape with four quick hands", "fits task material with narrow fingers"));
|
||||
V("sorts material with four quick hands", "fits material with narrow fingers"));
|
||||
|
||||
Add(voices, "angle",
|
||||
V("glides beneath a mantle of holy radiance", "advances as divine light gathers around it"),
|
||||
|
|
@ -40,7 +40,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a surge of divine light", "attacks {target} in cleansing brilliance"),
|
||||
V("greets nearby company with a sacred glow", "answers another presence with radiant pulses"),
|
||||
V("chimes with bright celestial laughter", "laughs as celestial light ripples outward"),
|
||||
V("casts divine radiance over its labor", "shapes each effort with steady divine light"));
|
||||
V("casts divine radiance over its labor", "steadies each effort with divine light"));
|
||||
|
||||
Add(voices, "assimilator",
|
||||
V("pulls itself forward on braided tendrils", "rolls its shifting bulk in measured surges"),
|
||||
|
|
@ -52,7 +52,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a hardened wedge-limb", "attacks {target} by splitting and snapping shut"),
|
||||
V("echoes nearby calls in layered voices", "offers a borrowed face that melts into another"),
|
||||
V("bursts into a chorus of mismatched chuckles", "repeats one bright laugh from several mouths"),
|
||||
V("weaves task material into useful shapes", "repairs its own surface with matched fibers"));
|
||||
V("weaves material into a firm mass", "repairs its own surface with matched fibers"));
|
||||
|
||||
Add(voices, "civ_crystal_golem",
|
||||
V("strides with heavy faceted steps", "advances as inner light shifts between joints"),
|
||||
|
|
@ -76,7 +76,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with frost-rimmed claws", "attacks {target} with a numbing palm"),
|
||||
V("greets with a breath of glittering vapor", "clicks frozen teeth in a measured exchange"),
|
||||
V("crackles like ice under strain", "gives a thin laugh of chiming shards"),
|
||||
V("freezes task material into a firm join", "shapes task material with repeated icy claw strokes"));
|
||||
V("freezes material into a firm join", "works material with repeated icy claw strokes"));
|
||||
|
||||
Add(voices, "crabzilla",
|
||||
V("thunders sideways on towering jointed legs", "hauls its armored bulk ahead with earthshaking steps"),
|
||||
|
|
@ -88,7 +88,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a colossal pincer", "attacks {target} with an immense plated claw"),
|
||||
V("raises both pincers toward another", "clacks a greeting for nearby company"),
|
||||
V("rattles its shell with a booming clatter", "clacks its mouthparts in rolling bursts"),
|
||||
V("levels task material with measured pincer taps", "packs material flat beneath a broad claw"));
|
||||
V("levels material with measured pincer taps", "packs material flat beneath a broad claw"));
|
||||
|
||||
Add(voices, "crystal_sword",
|
||||
V("floats point-first in a gleaming rush", "sweeps ahead with its hilt held level"),
|
||||
|
|
@ -100,7 +100,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} in a clean cutting arc", "attacks {target} with its ringing flat"),
|
||||
V("salutes by lifting its hilt", "crosses guards and trades a clear ringing note"),
|
||||
V("sings with a high crystalline peal", "rings out in a bright descending cadence"),
|
||||
V("trims task material with exact strokes", "scores material using its shining point"));
|
||||
V("trims material with exact strokes", "scores material using its shining point"));
|
||||
|
||||
Add(voices, "demon",
|
||||
V("strides on smoking hooves", "lunges ahead with wings drawn tight"),
|
||||
|
|
@ -112,7 +112,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a burning claw", "attacks {target} with its barbed tail"),
|
||||
V("butts horns with another in greeting", "shares a red-hot snarl with nearby company"),
|
||||
V("cackles in a cracked furnace roar", "barks a burst of scorching laughter"),
|
||||
V("brands task material with clawed sigils", "heats task material with beating wings"));
|
||||
V("brands material with clawed sigils", "heats material with beating wings"));
|
||||
|
||||
Add(voices, "dragon",
|
||||
V("surges forward on vast beating wings", "pads ahead with its plated tail held clear"),
|
||||
|
|
@ -136,7 +136,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with thorny growth", "attacks {target} with grasping vines"),
|
||||
V("bows the leaf-woven hood toward another", "greets nearby company with a rustling cloak"),
|
||||
V("chuckles through a rustling hood", "laughs softly as the leaf-woven cloak flutters"),
|
||||
V("binds task material with fresh fibers", "guides material into an orderly weave"));
|
||||
V("binds material with fresh fibers", "guides material into an orderly weave"));
|
||||
|
||||
Add(voices, "evil_mage",
|
||||
V("sweeps forward behind a trailing black robe", "glides with a crooked staff held before the face"),
|
||||
|
|
@ -148,7 +148,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with crackling violet force", "attacks {target} with the hooked staff"),
|
||||
V("bows with the face hidden by the hood", "trades layered whispers over clasped sleeves"),
|
||||
V("snickers behind one raised hand", "laughs in a dry, echoing rasp"),
|
||||
V("inks task material with a smoking fingertip", "distills murky energy for a waiting task"));
|
||||
V("inks material with a smoking fingertip", "distills murky energy into the craft"));
|
||||
|
||||
Add(voices, "fairy",
|
||||
V("zips ahead on shimmering wings", "darts in a loop while its own glow pulses"),
|
||||
|
|
@ -160,7 +160,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a needle-thin flash", "attacks {target} with its own sparkling motes"),
|
||||
V("touches wingtips with another in greeting", "trades spiraling ribbons of its own colored light"),
|
||||
V("giggles in tiny bell-like bursts", "trills a laugh in quick pulses"),
|
||||
V("ties task material into delicate loops", "polishes material with its own sparkling motes"));
|
||||
V("ties material into delicate loops", "polishes material with its own sparkling motes"));
|
||||
|
||||
Add(voices, "fire_elemental",
|
||||
V("strides as a column of folding flame", "streams forward in licking orange ribbons"),
|
||||
|
|
@ -179,12 +179,12 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("puddles into a quivering orange mound", "holds still as bubbles roll beneath its skin"),
|
||||
V("pops little fire bubbles from its surface", "splits into two wobbling lobes and rejoins"),
|
||||
V("rolls fuel into its glowing body", "melts a meal beneath a drooping fold"),
|
||||
V("flattens into a dim ember-shape", "forms a cooling crust around its liquid center"),
|
||||
V("flattens into a dim ember mound", "forms a cooling crust around its liquid center"),
|
||||
V("hunts {target} with a glowing pseudopod", "hunts {target} with a forked lick of flame"),
|
||||
V("attacks {target} with a clinging heat-glob", "attacks {target} by expanding its fiery body"),
|
||||
V("bumps warm sides with another", "waves a small flaming lobe toward nearby company"),
|
||||
V("gurgles through a popping laugh", "burps a chain of bright crackles"),
|
||||
V("fills task seams with molten material", "presses its soft heat around a task join"));
|
||||
V("fills seams with molten material", "presses its soft heat around a join"));
|
||||
|
||||
Add(voices, "fire_elemental_horse",
|
||||
V("gallops on hooves of compact flame", "canters with a blazing mane streaming backward"),
|
||||
|
|
@ -208,7 +208,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a strip of clinging flame", "attacks {target} with a hot spark"),
|
||||
V("touches feelers with another", "draws a curling ember-sign toward nearby company"),
|
||||
V("sizzles in wet, bubbly chuckles", "pops softly along its glowing mantle"),
|
||||
V("lays a narrow bead across task material", "smooths task joins with its heated foot"));
|
||||
V("lays a narrow bead across material", "smooths joins with its heated foot"));
|
||||
|
||||
Add(voices, "fire_elemental_snake",
|
||||
V("slithers in a swift incandescent coil", "whips forward as a narrow line of flame"),
|
||||
|
|
@ -220,7 +220,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} in a searing straight line", "attacks {target} within burning coils"),
|
||||
V("braids one loop beside another in greeting", "flicks a paired spark toward nearby company"),
|
||||
V("hisses with a bright crackling cadence", "rattles its tail in popping bursts"),
|
||||
V("threads heat through task material", "coils around a task join until it fuses cleanly"));
|
||||
V("threads heat through material", "coils around a join until it fuses cleanly"));
|
||||
|
||||
Add(voices, "fire_skull",
|
||||
V("drifts forward beneath a ragged flame", "bobs ahead with jaws aglow"),
|
||||
|
|
@ -232,7 +232,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with blazing jaws", "attacks {target} with a compact fiery bolt"),
|
||||
V("clacks teeth toward another in greeting", "bumps brows and shares a tongue of flame"),
|
||||
V("cackles through a loose rattling jaw", "howls with fire roaring from its mouth"),
|
||||
V("scorches task material with a measured bite", "carries a hot task load between its teeth"));
|
||||
V("scorches material with a measured bite", "carries a hot load between its teeth"));
|
||||
|
||||
Add(voices, "ghost",
|
||||
V("drifts with a trailing translucent hem", "passes forward in a wavering glide"),
|
||||
|
|
@ -244,7 +244,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a chilling hand", "attacks {target} with a face-stretching wail"),
|
||||
V("passes one hand through another in greeting", "bows toward nearby company as its outline brightens"),
|
||||
V("warbles in an airy, echoing laugh", "moans upward into a trembling chuckle"),
|
||||
V("lifts a task load with unseen pressure", "guides task material without contact"));
|
||||
V("lifts a load with unseen pressure", "guides material without contact"));
|
||||
|
||||
Add(voices, "god_finger",
|
||||
V("walks on its tip in deliberate little hops", "slides upright with the nail leading"),
|
||||
|
|
@ -256,7 +256,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a sudden flick", "attacks {target} with a gleaming nail"),
|
||||
V("crooks itself toward another in greeting", "taps another tip in quick acknowledgment"),
|
||||
V("drums a rolling laugh against itself", "wiggles through a silent pantomime of laughter"),
|
||||
V("nudges task material into exact position", "presses firmly to set finished work"));
|
||||
V("nudges material into exact position", "presses firmly to set each piece"));
|
||||
|
||||
Add(voices, "greg",
|
||||
V("lopes ahead with elbows flung wide", "shuffles sideways in a lopsided gait"),
|
||||
|
|
@ -268,7 +268,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with windmilling fists", "attacks {target} with a lunging headbutt"),
|
||||
V("waves with both hands far too close", "greets by copying every gesture a beat late"),
|
||||
V("honks out a belly laugh", "wheezes until its shoulders bounce"),
|
||||
V("stacks task material in uneven columns", "hammers task material in an irregular rhythm"));
|
||||
V("stacks material in uneven columns", "hammers material in an irregular rhythm"));
|
||||
|
||||
Add(voices, "jumpy_skull",
|
||||
V("boings forward on a springing jaw", "hops in quick arcs with teeth clenched"),
|
||||
|
|
@ -280,7 +280,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} in a teeth-first arc", "attacks {target} with a ricocheting cranium"),
|
||||
V("bumps craniums with another", "chatters a greeting toward nearby company"),
|
||||
V("cackles in rapid jaw-clacking bursts", "rattles with a hollow, breathless guffaw"),
|
||||
V("pounds task material with its crown", "carries a task load clenched between its teeth"));
|
||||
V("pounds material with its crown", "carries a load clenched between its teeth"));
|
||||
|
||||
Add(voices, "living_house",
|
||||
V("shuffles forward on creaking foundation stones", "lurches ahead as doors and shutters flap"),
|
||||
|
|
@ -292,7 +292,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a heavy door", "attacks {target} behind a jutting porch"),
|
||||
V("waves both shutters toward another", "rings an inner bell for nearby company"),
|
||||
V("rattles every window in a booming laugh", "creaks from cellar to rafters in a long chuckle"),
|
||||
V("repairs task material with an inner beam", "stacks material with measured foundation steps"));
|
||||
V("repairs material with an inner beam", "stacks material with measured foundation steps"));
|
||||
|
||||
Add(voices, "living_plants",
|
||||
V("walks on a braid of probing roots", "pulls itself forward with curling vines"),
|
||||
|
|
@ -304,7 +304,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with thorned vines", "attacks {target} behind layered leaves"),
|
||||
V("entwines tendrils in a slow greeting", "opens a bright bloom toward nearby company"),
|
||||
V("rustles in a quick leafy chuckle", "shakes dry pods in a rattling laugh"),
|
||||
V("weaves task material with flexible stems", "binds material with tightening roots"));
|
||||
V("weaves material with flexible stems", "binds material with tightening roots"));
|
||||
|
||||
Add(voices, "mush_animal",
|
||||
V("scampers on stubby feet beneath a broad cap", "bounds forward as soft gills puff with each landing"),
|
||||
|
|
@ -316,7 +316,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with its broad cap", "attacks {target} beneath a blinding spore puff"),
|
||||
V("rubs caps with another in greeting", "sniffs another and chirps through its gills"),
|
||||
V("squeaks in damp, bubbly bursts", "chuffs until its broad cap wobbles"),
|
||||
V("packs task material with quick forepaws", "carries a task load balanced on its cap"));
|
||||
V("packs material with quick forepaws", "carries a load balanced on its cap"));
|
||||
|
||||
Add(voices, "mush_unit",
|
||||
V("marches on pale stalk-like legs", "strides with a broad cap tilted forward"),
|
||||
|
|
@ -328,7 +328,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a hardened forearm", "attacks {target} beneath a dense spore cloud"),
|
||||
V("tips the cap in measured greeting", "presses palms and exchanges a faint spore plume"),
|
||||
V("chuckles in low, papery puffs", "laughs until spores shake from the gills"),
|
||||
V("cultivates task material into sturdy panels", "presses material into useful molded shapes"));
|
||||
V("cultivates material into sturdy panels", "presses material into useful molded forms"));
|
||||
|
||||
Add(voices, "necromancer",
|
||||
V("paces with a bone-tipped staff clicking beside each step", "glides as its own magic stirs the robe"),
|
||||
|
|
@ -340,7 +340,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with conjured grasping hands", "attacks {target} with grave-pale force"),
|
||||
V("greets another with a tap of the staff", "trades layered whispers with nearby company"),
|
||||
V("laughs in a papery, hollow rasp", "chuckles while its orbiting bones knock together"),
|
||||
V("threads task material into jointed frames", "inscribes pale commands along material"));
|
||||
V("threads material into jointed frames", "inscribes pale commands along material"));
|
||||
|
||||
Add(voices, "plague_doctor",
|
||||
V("hurries with coat tails snapping behind", "steps beneath a long beaked mask"),
|
||||
|
|
@ -352,7 +352,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with both gloved hands", "attacks {target} with a thrust of the long beak"),
|
||||
V("nods toward another and raises one glove", "bows the long beaked mask toward nearby company"),
|
||||
V("chuckles dryly behind the hollow beak", "lets out a muffled laugh through layered cloth"),
|
||||
V("measures task material into labeled portions", "sterilizes task material with a controlled flame"));
|
||||
V("measures material into labeled portions", "sterilizes material with a controlled flame"));
|
||||
|
||||
Add(voices, "printer",
|
||||
V("trundles forward on humming rollers", "slides along while its paper tray rattles"),
|
||||
|
|
@ -364,7 +364,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a rapid sheet volley", "attacks {target} with its snapping tray"),
|
||||
V("beeps twice and flashes its status light", "exchanges neatly printed greeting slips"),
|
||||
V("chatters its gears in a mechanical laugh", "chirps a laugh through sequenced tones"),
|
||||
V("copies precise symbols onto task material", "collates task material into squared stacks"));
|
||||
V("copies precise symbols onto material", "collates material into squared stacks"));
|
||||
|
||||
Add(voices, "skeleton",
|
||||
V("clatters forward on bare jointed feet", "strides with loose ribs clicking together"),
|
||||
|
|
@ -376,7 +376,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a sharpened forearm", "attacks {target} by separating and reassembling"),
|
||||
V("rattles finger bones toward another", "clicks jaws with nearby company"),
|
||||
V("cackles with its jaw flapping wide", "shakes from skull to toes in hollow laughter"),
|
||||
V("sorts task material by length", "fastens material with strips pulled through its ribs"));
|
||||
V("sorts material by length", "fastens material with strips pulled through its ribs"));
|
||||
|
||||
Add(voices, "tumor_monster_animal",
|
||||
V("lopes on uneven limbs beneath pulsing growths", "scrambles forward with one swollen shoulder leading"),
|
||||
|
|
@ -388,7 +388,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} behind a hardened growth", "attacks {target} with several mouths"),
|
||||
V("nuzzles another with a broad sensory lobe", "trades low pulses through touching growths"),
|
||||
V("gurgles from several throats at once", "wheezes in a wet, hiccupping laugh"),
|
||||
V("packs task material with fleshy fibers", "drags material using a hooked extra limb"));
|
||||
V("packs material with fleshy fibers", "drags material using a hooked extra limb"));
|
||||
|
||||
Add(voices, "tumor_monster_unit",
|
||||
V("lumbers upright on mismatched legs", "pulls a swollen frame forward with an oversized arm"),
|
||||
|
|
@ -400,7 +400,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with its oversized fist", "attacks {target} between hardened lobes"),
|
||||
V("raises a small palm toward another", "touches sensory tendrils in a pulsing greeting"),
|
||||
V("laughs in overlapping throaty pitches", "snorts through several vents in uneven rhythm"),
|
||||
V("molds dense tissue around task material", "uses three hands to bind material under tension"));
|
||||
V("molds dense tissue around material", "uses three hands to bind material under tension"));
|
||||
|
||||
Add(voices, "white_mage",
|
||||
V("walks beneath a robe edged in steady light", "glides with a smooth staff held upright"),
|
||||
|
|
@ -412,7 +412,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with a shining barrier", "attacks {target} with cleansing light"),
|
||||
V("offers a pearl glow toward another", "bows as two pale halos briefly overlap"),
|
||||
V("laughs in a clear, ringing cadence", "chuckles as bright motes bob around the hood"),
|
||||
V("mends task material with woven light", "purifies material in a pearl-white glow"));
|
||||
V("mends material with woven light", "purifies material in a pearl-white glow"));
|
||||
|
||||
Add(voices, "zombie",
|
||||
V("shambles forward with one foot dragging", "lurches ahead on stiff, reaching arms"),
|
||||
|
|
@ -424,7 +424,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("attacks {target} with both stiff hands", "attacks {target} with broken teeth"),
|
||||
V("groans face to face with another", "pats another with a cold, stiff hand"),
|
||||
V("gurgles through a crooked jaw", "barks a hoarse chuckle"),
|
||||
V("hauls a load with stiff arms", "presses task material with its full weight"));
|
||||
V("hauls a load with stiff arms", "presses material with its full weight"));
|
||||
|
||||
Add(voices, "snowman",
|
||||
V("waddles on a rolling rounded base", "pivots forward as its packed sections sway"),
|
||||
|
|
@ -432,10 +432,10 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("twirls both stick-like limbs in broad circles", "rotates its rounded sections in opposite directions"),
|
||||
V("absorbs energy through its packed body", "compacts a meal into its rounded middle"),
|
||||
V("settles each packed section into a dormant stack", "draws its stick-like limbs against its cold body"),
|
||||
V("hunts {target} by rotating its rounded upper body", "hunts {target} through pulsing cold-body effects"),
|
||||
V("hunts {target} by rotating its rounded upper body", "hunts {target} through pulsing cold along its body"),
|
||||
V("attacks {target} with sweeping stick-like limbs", "attacks {target} with a burst of its own packed snow"),
|
||||
V("waves one stick-like limb toward another", "tips its rounded upper body toward nearby company"),
|
||||
V("shakes its stacked sections in a powdery chuckle", "crunches through a soft, body-rumbling laugh"),
|
||||
V("compacts task material with its rounded body", "pushes a load with both stick-like limbs"));
|
||||
V("compacts material with its rounded body", "pushes a load with both stick-like limbs"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,451 +9,451 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
AddExtended(
|
||||
voices,
|
||||
"acid_blob",
|
||||
V("warbles through fizzing surface bubbles", "ripples its rim in a wet, rising cadence"),
|
||||
V("folds a budding lobe slowly into a reproductive union", "tightens its surface around a pulsing germ"),
|
||||
V("etches planting seams with a narrow acidic feeler", "bathes each planting point in a measured secretion"),
|
||||
V("dusts reproductive grains from one tacky lobe to another", "rolls a pollen film across its adhesive rim"),
|
||||
V("pinches off a measured bead and absorbs one in return", "opens a surface pocket to barter with pulsing rim-signals"),
|
||||
V("sweeps a thin pseudopod in search of a catch", "fans a sensing film outward before snapping it inward"),
|
||||
V("rolls its mass forward in a series of hauling surges", "anchors its rear rim and drags with a broad front lobe"),
|
||||
V("warbles through fizzing surface bubbles", "ripples its rim in a wet rising cadence"),
|
||||
V("folds a budding lobe slowly against another", "tightens its surface around a pulsing germ"),
|
||||
V("etches narrow seams with an acidic feeler", "bathes each etched seam in a measured secretion"),
|
||||
V("dusts sticky grains from one tacky lobe to another", "rolls a thin film across its adhesive rim"),
|
||||
V("pinches off a measured bead and absorbs one in return", "opens a surface pocket and pulses its rim in reply"),
|
||||
V("sweeps a thin pseudopod out then snaps it shut", "fans a sensing film wide before drawing it shut"),
|
||||
V("rolls its mass forward in short surging waves", "anchors its rear rim and drags with a broad front lobe"),
|
||||
V("lays a mild sealing film over {target}", "presses a cool regenerative lobe against {target}"),
|
||||
V("spreads into a smothering sheet over the flame", "jets damp acidic foam at the flame"),
|
||||
V("spreads into a broad sheet and holds", "jets damp acidic foam from its leading edge"),
|
||||
V("streams away in one stretched ribbon", "retracts every feeler and pours into a rapid glide"),
|
||||
V("anchors a broad rim and raises a stable central mound", "spreads firm lobes until its mass rests securely"),
|
||||
V("hardens its leading edge into a rippling guard", "raises a striking lobe charged with corrosive pressure"),
|
||||
V("anchors a broad rim and raises a stable central mound", "spreads firm lobes until its mass rests wide"),
|
||||
V("hardens its leading edge into a rippling ridge", "raises a striking lobe charged with corrosive pressure"),
|
||||
V("tracks each line with a hair-thin surface filament", "pulses paired eye-like spots from mark to mark"),
|
||||
V("draws loose life-glow through its translucent skin", "cups a fading essence inside a sealed inner bubble"),
|
||||
V("draws a faint glow through its translucent skin", "cups a fading bead inside a sealed inner bubble"),
|
||||
V("opens a rear pore and expels a spent acidic bead", "contracts from front to back and releases spent fluid"),
|
||||
V("sends contradictory ripples around its rim", "splits its leading lobe twice before drawing both halves back"),
|
||||
V("pulls its mass inward as inner bubbles brighten", "rests wide while restorative pulses thicken its center"),
|
||||
V("raises an unbidden spire that curls into its own surface", "paddles one lobe against the rhythm of the rest"),
|
||||
V("pulls its mass inward as inner bubbles brighten", "rests wide while slow pulses thicken its center"),
|
||||
V("raises a sudden spire that curls into its own surface", "paddles one lobe against the rhythm of the rest"),
|
||||
V("slides a silent filament toward {target}", "reaches an opaque surface pocket toward {target}"),
|
||||
V("bucks as foreign pulses race through its mass", "forms jagged lobes that strike without its usual flow"),
|
||||
V("drifts in sleep while dim shapes bloom beneath its skin", "replays slow phantom ripples across its resting pool"));
|
||||
V("bucks as sharp pulses race through its mass", "forms jagged lobes that strike without its usual flow"),
|
||||
V("drifts flat while dim shapes bloom beneath its skin", "replays slow phantom ripples across its resting pool"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"ant_black",
|
||||
V("stridulates a clipped rhythm through its body plates", "clicks its mandibles beneath a steady antenna beat"),
|
||||
V("aligns abdomen to abdomen in a brisk reproductive clasp", "circles once with linked feelers before mating"),
|
||||
V("scores straight planting furrows with its mandibles", "tamps each planting point with all six feet"),
|
||||
V("combs pollen along its forelegs and antennae", "presses its dusted body against receptive blossoms"),
|
||||
V("barters with rapid paired feeler taps", "passes and receives with precise mandible grips"),
|
||||
V("searches for a catch with jaws poised", "waits under still antennae before snapping its mandibles"),
|
||||
V("locks its jaws on the haul and pulls in a straight course", "braces all six feet and drags without veering"),
|
||||
V("aligns abdomen to abdomen in a brisk clasp", "circles once with linked feelers before mating"),
|
||||
V("scores straight furrows with its mandibles", "tamps each furrow with all six feet"),
|
||||
V("combs fine dust along its forelegs and antennae", "presses its dusted body from feeler tip to feeler tip"),
|
||||
V("taps paired feelers twice then once in reply", "grips once with its mandibles then releases"),
|
||||
V("holds its jaws poised then snaps them shut", "waits under still antennae before a sharp mandible snap"),
|
||||
V("locks its jaws forward and pulls in a straight course", "braces all six feet and drags without veering"),
|
||||
V("grooms {target} with fine mouthpart strokes", "presses both antenna tips gently against {target}"),
|
||||
V("beats at the flame with rapid abdomen sweeps", "scrapes a smothering path forward with its forelegs"),
|
||||
V("beats rapid abdomen sweeps forward and back", "scrapes a path ahead with its forelegs"),
|
||||
V("scurries away in a low straight burst", "folds its feelers back and drives all six feet rapidly"),
|
||||
V("tests its surroundings with brisk antenna taps before stopping", "settles all six feet into a compact ordered stance"),
|
||||
V("taps with both antennae then stops on all six feet", "plants all six feet into a compact ordered stance"),
|
||||
V("sets its feet square and opens its mandibles", "advances in a disciplined line with antennae level"),
|
||||
V("follows each mark with alternating feeler taps", "holds still while both antennae read from side to side"),
|
||||
V("hooks a fading life-thread between its mandibles", "draws the gathered essence along both antennae"),
|
||||
V("hooks a thin thread between its mandibles", "draws a thin thread along both antennae"),
|
||||
V("raises its abdomen and releases a compact dropping", "plants its forefeet as its abdomen briefly contracts"),
|
||||
V("crosses and recrosses a straight path", "taps one antenna rapidly while the other holds rigid"),
|
||||
V("folds low as energy returns through its six limbs", "grooms each leg in sequence during recovery"),
|
||||
V("marches backward while its antennae insist forward", "repeatedly opens one mandible and closes the other"),
|
||||
V("slips flattened antennae and mandibles toward {target}", "tries to pinch {target} before backing away silently"),
|
||||
V("jerks in broken straight lines under an alien impulse", "snaps its jaws while both feelers curl against its head"),
|
||||
V("tucks all six feet close as its antennae twitch in sleep", "makes faint marching motions beneath a resting crouch"));
|
||||
V("folds low as its six limbs firm again", "grooms each leg in sequence while resting"),
|
||||
V("marches backward while its antennae point forward", "repeatedly opens one mandible and closes the other"),
|
||||
V("slips flattened antennae and mandibles toward {target}", "tries to pinch {target} then backs away silently"),
|
||||
V("jerks in broken straight lines as its joints seize", "snaps its jaws while both feelers curl against its head"),
|
||||
V("tucks all six feet close as its antennae twitch in sleep", "pedals all six feet faintly beneath its resting crouch"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"ant_blue",
|
||||
V("ticks its mouthparts in a measured ascending scale", "draws paired antenna arcs to a precise body hum"),
|
||||
V("matches alternating feeler strokes before a balanced mating clasp", "joins abdomen tips while all six feet hold a careful stance"),
|
||||
V("sets planting points at equal intervals with paired jaws", "levels each furrow with alternating forefoot strokes"),
|
||||
V("maps pollen between crossing antennae and forelegs", "turns in exact angles while brushing reproductive dust onward"),
|
||||
V("barters with mirrored feeler taps on both sides", "rotates paired mouthparts in a measured give-and-take"),
|
||||
V("angles its antennae while searching for a catch", "closes both jaws in a precisely timed fishing snap"),
|
||||
V("sets centered mandibles on the haul and steps backward evenly", "pulls with alternating six-foot braces"),
|
||||
V("matches alternating feeler strokes before a balanced mating clasp", "presses abdomen tips together while all six feet hold steady"),
|
||||
V("cuts equal furrows with paired jaws", "levels each furrow with alternating forefoot strokes"),
|
||||
V("maps fine dust between crossing antennae and forelegs", "turns in exact arcs while brushing dust onward"),
|
||||
V("taps one feeler then the other in matching beats", "rotates paired mouthparts forward then draws them back"),
|
||||
V("angles its antennae then closes both jaws on a timed snap", "holds still before a precisely timed mandible snap"),
|
||||
V("sets centered mandibles forward and steps backward evenly", "pulls with alternating six-foot braces"),
|
||||
V("sweeps both antennae symmetrically over {target}", "tends {target} with equal strokes of its paired mouthparts"),
|
||||
V("fans the flame with alternating wingless body pivots", "presses a measured smothering edge forward with both forelegs"),
|
||||
V("pivots its body ahead in alternating turns", "presses both forelegs forward along one edge"),
|
||||
V("retreats in exact zigzags with feelers laid back", "sidesteps away through alternating angular turns"),
|
||||
V("surveys in widening antenna arcs before planting its feet", "settles into alignment with paired forefoot adjustments"),
|
||||
V("sweeps widening antenna arcs then plants its feet", "aligns both forefeet until its stance holds even"),
|
||||
V("holds a high squared stance with jaws centered", "paces in measured angular steps with mandibles ready"),
|
||||
V("brackets each line between parallel antennae", "advances both feeler tips across the marks together"),
|
||||
V("triangulates a loose life-spark between its feelers", "channels gathered essence down paired antennae in matched pulses"),
|
||||
V("holds a tiny spark between both feelers", "channels a tiny spark down paired antennae in matched beats"),
|
||||
V("balances high and releases a neat abdominal pellet", "holds every foot fixed as its abdomen contracts"),
|
||||
V("turns left and right by identical angles without advancing", "draws mismatched symbols with its crossing antennae"),
|
||||
V("turns left and right by identical arcs without advancing", "traces mismatched paths with its crossing antennae"),
|
||||
V("rests on straightened legs as strength pulses in pairs", "folds each limb in mirrored sequence while recharging"),
|
||||
V("traces an exact circle with only one feeler", "steps in a rigid pattern its body did not choose"),
|
||||
V("traces an exact circle with only one feeler", "steps in a rigid pattern against its own pace"),
|
||||
V("times a reach for {target} between alternating antenna sweeps", "tries to nip {target} before withdrawing in a precise zigzag"),
|
||||
V("moves in impossible angles as foreign force bends its joints", "crosses both antennae tightly while its feet pace alone"),
|
||||
V("rests narrow while paired feelers sketch silent patterns", "ticks its feet in symmetrical dream motions"));
|
||||
V("moves in broken zigzags as its joints bend unevenly", "crosses both antennae tightly while its feet pace alone"),
|
||||
V("rests narrow while paired feelers sketch silent patterns", "ticks its feet in symmetrical dream-steps"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"ant_green",
|
||||
V("scrapes its jaws in springing syncopation", "drums raised forelegs beneath a bouncing chirr"),
|
||||
V("vaults into a hooked reproductive embrace", "links feelers overhead while abdomen tips meet"),
|
||||
V("cuts planting slits with hooked forefeet", "vaults between planting points and presses them with its abdomen"),
|
||||
V("sweeps pollen onward with raised forelegs", "hooks reproductive dust into the hairs of its wrists"),
|
||||
V("barters with mandibles lifted high", "links its forelegs in an arched give-and-take"),
|
||||
V("poises on folded hind legs while seeking a catch", "hooks downward with both raised forefeet"),
|
||||
V("loops its forelegs around the haul and bounds backward", "hooks underneath and pulls in springing steps"),
|
||||
V("vaults into a hooked embrace", "links feelers overhead while abdomen tips meet"),
|
||||
V("cuts slits with hooked forefeet", "vaults between furrows and presses them with its abdomen"),
|
||||
V("sweeps fine dust onward with raised forelegs", "hooks dust into the hairs of its wrists"),
|
||||
V("lifts its mandibles high then lowers them once", "links its forelegs in an arch then unlinks them"),
|
||||
V("poises on folded hind legs then hooks downward", "hooks downward with both raised forefeet"),
|
||||
V("loops its forelegs forward and bounds backward", "hooks underneath and pulls in springing steps"),
|
||||
V("clasps {target} gently between hooked wrists", "grooms {target} with elevated mandible strokes"),
|
||||
V("beats both raised forelegs over the flame", "springs past the flame with broad abdomen sweeps"),
|
||||
V("beats both raised forelegs in rapid arcs", "springs past with broad abdomen sweeps"),
|
||||
V("vaults away with forelegs tucked over its head", "bounds back in quick doubled leaps"),
|
||||
V("hooks its forefeet down and settles its weight", "arches its body above six firm leg braces"),
|
||||
V("raises both forelegs like hooked standards", "bounds forward with mandibles lifted for battle"),
|
||||
V("hooks its forefeet down and lowers its weight", "arches its body above six firm leg braces"),
|
||||
V("raises both forelegs in hooked arcs", "bounds forward with mandibles lifted"),
|
||||
V("holds the marks aloft between its forefeet", "reads each line with one hooked wrist"),
|
||||
V("catches a life-glimmer between uplifted feelers", "channels gathered essence down its raised forelegs"),
|
||||
V("catches a tiny glimmer between uplifted feelers", "channels a tiny glimmer down its raised forelegs"),
|
||||
V("rears on four feet and releases from its abdomen", "folds its forelegs overhead as its abdomen contracts"),
|
||||
V("vaults forward and lands facing the same direction", "grooms one feeler while the other circles wildly"),
|
||||
V("curls into a high-legged rest as vigor rebounds", "pumps its folded hind legs in a restoring rhythm"),
|
||||
V("clasps its own antennae and tries to vault beneath them", "holds both forelegs aloft while spinning involuntarily"),
|
||||
V("curls into a high-legged rest as its limbs rebound", "pumps its folded hind legs in a restoring rhythm"),
|
||||
V("clasps its own antennae and tries to vault under them", "holds both forelegs aloft while spinning in place"),
|
||||
V("hooks one raised foreleg toward {target}", "tries to snag {target} before bounding away"),
|
||||
V("rears repeatedly as an outside rhythm seizes its legs", "swings its hooked forefeet at empty intervals"),
|
||||
V("curls around raised forelegs while hind legs twitch", "makes tiny sleeping vaults without leaving its crouch"));
|
||||
V("rears repeatedly as its legs seize then drop", "swings its hooked forefeet at empty intervals"),
|
||||
V("curls around raised forelegs while hind legs twitch", "vaults in place without leaving its crouch"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"ant_red",
|
||||
V("clacks wide mandibles in a fierce rolling cadence", "stamps all six feet beneath a hard body rattle"),
|
||||
V("locks into a forceful reproductive coupling", "circles with jaws spread before abdomen tips join"),
|
||||
V("tears planting furrows with driving mandible strokes", "rams each planting point with its plated head"),
|
||||
V("charges among blossoms with dusted body hairs", "scrapes pollen onward using forceful foreleg strokes"),
|
||||
V("barters between jaws held wide", "seals its give-and-take with a hard antenna strike"),
|
||||
V("crouches with mandibles open while seeking a catch", "lunges into a sudden six-legged fishing snap"),
|
||||
V("clamps onto the haul and drives backward without pause", "shoves with head low and legs churning"),
|
||||
V("locks into a forceful coupling", "circles with jaws spread before abdomen tips meet"),
|
||||
V("tears furrows with driving mandible strokes", "rams each furrow with its plated head"),
|
||||
V("charges with dusted body hairs brushing onward", "scrapes fine dust onward using forceful foreleg strokes"),
|
||||
V("opens wide jaws then closes them on a careful grip", "strikes once with a hard antenna tap"),
|
||||
V("crouches with mandibles open then lunges into a snap", "lunges into a sudden six-legged snap"),
|
||||
V("clamps forward and drives backward without pause", "shoves with head low and legs churning"),
|
||||
V("braces {target} firmly between its jaws", "tends {target} with rapid mouthpart strokes"),
|
||||
V("charges the flame with beating forelegs", "drives a smothering body sweep across the flame"),
|
||||
V("charges ahead with beating forelegs", "drives a body sweep across the front"),
|
||||
V("bursts away with jaws still spread", "scrambles backward on splayed feet before turning"),
|
||||
V("rams its head down before settling on braced feet", "paces with rigid antennae before dropping into a low stance"),
|
||||
V("plants six feet wide and brandishes open mandibles", "surges into battle in short aggressive bursts"),
|
||||
V("rams its head down then plants on braced feet", "paces with rigid antennae before dropping into a low stance"),
|
||||
V("plants six feet wide and brandishes open mandibles", "surges forward in short aggressive bursts"),
|
||||
V("pins the markings beneath its forefeet", "jabs an antenna along each line in rapid strokes"),
|
||||
V("seizes a life-flare between its jaws", "drives gathered essence down rigid feelers"),
|
||||
V("seizes a bright flare between its jaws", "drives a bright flare down rigid feelers"),
|
||||
V("braces low and expels a hard abdominal pellet", "keeps its jaws spread as its abdomen forcefully releases"),
|
||||
V("charges three directions in quick succession", "locks its jaws open while antennae whip apart"),
|
||||
V("crouches taut as energy surges back through its legs", "pumps its abdomen in hard restoring pulses"),
|
||||
V("crouches taut as its legs surge firm again", "pumps its abdomen in hard restoring pulses"),
|
||||
V("bites at its own forefeet under a sudden compulsion", "rushes in a tight circle with abdomen raised"),
|
||||
V("snaps its jaws toward {target}", "tries to clamp {target} before retreating in a rapid burst"),
|
||||
V("lunges in broken bursts as another will drives it", "clamps and releases its jaws against its own rhythm"),
|
||||
V("rests low while dream-battles twitch through all six feet", "snaps its mandibles softly in sleep"));
|
||||
V("lunges in broken bursts as its legs drive alone", "clamps and releases its jaws against its own rhythm"),
|
||||
V("rests low while mandible snaps twitch through all six feet", "snaps its mandibles softly in sleep"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"bee",
|
||||
V("sings through a bright sustained wing hum", "modulates its buzz with pulses of its abdomen"),
|
||||
V("joins in a brief airborne reproductive coupling", "fans its wings during an abdomen-to-abdomen mating clasp"),
|
||||
V("scrapes planting points with its forelegs", "presses each planting point using the tip of its abdomen"),
|
||||
V("brushes pollen from body hairs into packed leg combs", "dusts reproductive grains onward with a vibrating abdomen"),
|
||||
V("barters with a compact waggle", "gives and receives with precise mouthpart touches"),
|
||||
V("hovers with forelegs poised while searching for a catch", "dips its legs and rises on a sudden fishing sweep"),
|
||||
V("hooks its legs around the haul and beats upward", "pulls with wings buzzing at a deep pitch"),
|
||||
V("couples briefly abdomen to abdomen on beating wings", "fans its wings during an abdomen-to-abdomen mating clasp"),
|
||||
V("scrapes furrows with its forelegs", "presses each furrow using the tip of its abdomen"),
|
||||
V("brushes packed dust from body hairs into leg combs", "dusts grains onward with a vibrating abdomen"),
|
||||
V("waggles once then stills its abdomen", "touches mouthparts twice in a compact sequence"),
|
||||
V("hovers with forelegs poised then dips into a snap", "dips its legs and rises on a sudden sweeping snap"),
|
||||
V("hooks its legs forward and beats upward", "pulls with wings buzzing at a deep pitch"),
|
||||
V("fans warm pulsing air over {target}", "grooms {target} with delicate mouthpart strokes"),
|
||||
V("buffets the flame with concentrated wingbeats", "drives cooling air directly at the flame"),
|
||||
V("buffets ahead with concentrated wingbeats", "drives air directly forward with its wings"),
|
||||
V("zips away with its abdomen tucked under", "accelerates in a rising line on frantic wings"),
|
||||
V("tests its surroundings with antennae and circling flights", "settles after repeated abdomen presses against the surface"),
|
||||
V("curls its abdomen forward and deepens its warning buzz", "holds a rigid hover with legs spread for combat"),
|
||||
V("circles on antennae then lands and presses its abdomen", "presses its abdomen repeatedly then holds still"),
|
||||
V("curls its abdomen forward and deepens its warning buzz", "holds a rigid hover with legs spread wide"),
|
||||
V("walks its forefeet along each line", "reads with both antennae angled over the marks"),
|
||||
V("draws a life-glow into the pulse of its abdomen", "gathers loose essence through vibrating body hairs"),
|
||||
V("draws a faint glow into its abdomen", "combs vibrating body hairs inward"),
|
||||
V("hangs its abdomen and releases a tiny dropping in flight", "lands, lifts its abdomen, and contracts once"),
|
||||
V("hovers sideways while its antennae point apart", "starts a waggle sequence and repeatedly breaks the pattern"),
|
||||
V("rests with wings folded as its body hum steadies", "vibrates flight muscles in a low restorative pulse"),
|
||||
V("waggles in a pattern that loops against itself", "grooms one wing while the other beats without command"),
|
||||
V("rests with wings folded as its body hum steadies", "vibrates flight muscles in a low steadying pulse"),
|
||||
V("waggles in a pattern that loops against itself", "grooms one wing while the other beats on its own"),
|
||||
V("slips toward {target} on muted wingbeats", "reaches both forelegs toward {target} before darting away"),
|
||||
V("buzzes at a fractured pitch as its abdomen jerks", "flies in rigid angles under a foreign impulse"),
|
||||
V("buzzes at a fractured pitch as its abdomen jerks", "flies in rigid zigzags with wings locked stiff"),
|
||||
V("folds its wings while tiny flight tremors cross its body", "waggles faintly in sleep with antennae tucked"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"beetle",
|
||||
V("rasps hooked feet against its plated sides", "clicks its wing cases in a hollow measured refrain"),
|
||||
V("opens its wing cases during a close reproductive mounting", "locks hooked feet gently during mating"),
|
||||
V("furrows planting lines with its hardened brow", "presses planting points beneath its plated body"),
|
||||
V("brushes pollen onward with hairy forefeet", "parts its wing cases while reproductive dust crosses its back"),
|
||||
V("barters with taps from both feelers", "takes measured turns with its hooked forefeet"),
|
||||
V("plants hooked feet and searches for a catch", "snaps its head forward after a still feeler sweep"),
|
||||
V("wedges its plated back beneath the haul", "grips and drags with forefeet on six braced legs"),
|
||||
V("opens its wing cases during a close mounting", "locks hooked feet gently during mating"),
|
||||
V("furrows lines with its hardened brow", "presses furrows beneath its plated body"),
|
||||
V("brushes fine dust onward with hairy forefeet", "parts its wing cases while dust crosses its back"),
|
||||
V("taps both feelers twice then pauses", "offers one hooked forefoot then the other"),
|
||||
V("plants hooked feet then snaps its head forward", "snaps its head forward after a still feeler sweep"),
|
||||
V("wedges its plated back beneath and heaves", "grips and drags with forefeet on six braced legs"),
|
||||
V("presses a smooth wing case against {target}", "tends {target} with careful mouthpart strokes"),
|
||||
V("beats open wing cases against the flame", "shoves its plated front over the flame"),
|
||||
V("beats open wing cases in broad arcs", "shoves its plated front forward and holds"),
|
||||
V("trundles away with legs pumping beneath sealed cases", "opens its wing cases and bolts on buzzing wings"),
|
||||
V("tests its footing with hooked feet before settling", "leans its hardened back into a stable resting brace"),
|
||||
V("lowers its armored brow and spreads all six feet", "opens its wing cases into a broad warrior display"),
|
||||
V("tests with hooked feet then lowers into a brace", "leans its hardened back into a stable resting brace"),
|
||||
V("lowers its armored brow and spreads all six feet", "opens its wing cases wide above spread feet"),
|
||||
V("reads with short feeler sweeps", "pins each line beneath a hooked forefoot"),
|
||||
V("cups a fading life-light beneath its wing cases", "draws gathered essence through seams in its plated back"),
|
||||
V("cups a fading light beneath its wing cases", "draws fading light through seams in its plated back"),
|
||||
V("raises its rear plates and releases a compact pellet", "anchors all six feet as its abdomen slowly pushes"),
|
||||
V("rolls onto its back and pedals without direction", "opens one wing case while keeping the other sealed"),
|
||||
V("locks its feet and rests as strength returns beneath its shell", "pulses its folded wings in a low restoring rhythm"),
|
||||
V("locks its feet and rests as its shell settles", "pulses its folded wings in a low restoring rhythm"),
|
||||
V("rocks on its plated back with legs folded", "repeatedly opens and seals its wing cases without flight"),
|
||||
V("hooks a folded foreleg toward {target}", "tries to catch {target} before withdrawing with wing cases shut"),
|
||||
V("clatters as foreign force pries its plates apart", "marches stiffly while its feelers curl inward"),
|
||||
V("seals its wing cases while sleeping legs slowly pedal", "rocks inside its plated rest through a hollow dream"));
|
||||
V("clatters as its plates pry apart and reseal", "marches stiffly while its feelers curl inward"),
|
||||
V("seals its wing cases while sleeping legs slowly pedal", "rocks inside its plated rest through a hollow sleep"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"bioblob",
|
||||
V("warbles through elastic membrane pops", "pulses its rounded skin in a soft resonant sequence"),
|
||||
V("buds a second pulse within a reproductive membrane join", "mingles inner currents around a tightening germ"),
|
||||
V("forms shallow planting pockets with rhythmic squeezes", "presses each planting point beneath a rounded membrane dimple"),
|
||||
V("rolls pollen across its adhesive outer skin", "pulses reproductive dust from one temporary pocket to another"),
|
||||
V("forms two clear barter chambers in its membrane", "trades with alternating contractions of its surface pockets"),
|
||||
V("extends a springy membrane tube in search of a catch", "snaps a sensing bulge inward with a whole-body squeeze"),
|
||||
V("wraps gripping pockets around the haul and heaves", "bounds backward with its membrane held taut"),
|
||||
V("spreads a warm regenerative film over {target}", "pulses restorative fluid against {target} through a membrane patch"),
|
||||
V("flattens its damp body across the flame", "pumps cooling fluid through a broad outer blister"),
|
||||
V("buds a second pulse within a tightening membrane fold", "mingles inner currents around a tightening germ"),
|
||||
V("forms shallow pockets with rhythmic squeezes", "presses each furrow beneath a rounded membrane dimple"),
|
||||
V("rolls fine dust across its adhesive outer skin", "pulses dust from one temporary pocket to another"),
|
||||
V("forms two clear pockets in its membrane", "contracts one surface pocket then the other"),
|
||||
V("extends a springy membrane tube then snaps it inward", "snaps a sensing bulge inward with a whole-body squeeze"),
|
||||
V("wraps gripping pockets forward and heaves", "bounds backward with its membrane held taut"),
|
||||
V("spreads a warm regenerative film over {target}", "pulses warm fluid against {target} through a membrane patch"),
|
||||
V("flattens its damp body into a broad sheet", "pumps fluid through a broad outer blister"),
|
||||
V("bounds away in rapid whole-body contractions", "stretches forward and recoils into a springing escape"),
|
||||
V("widens its base and firms the settling membrane", "pulses downward until its rounded body holds steady"),
|
||||
V("widens its base and firms its membrane downward", "pulses downward until its rounded body holds steady"),
|
||||
V("hardens its front into a resilient bulwark", "compresses into a taut spring ready to strike"),
|
||||
V("forms clear lens-spots that move across each line", "ripples written marks beneath a thin sensing membrane"),
|
||||
V("draws a life-spark into a glowing inner vesicle", "surrounds gathered essence with concentric pulses"),
|
||||
V("draws a spark into a glowing inner vesicle", "surrounds a glowing spark with concentric pulses"),
|
||||
V("opens a temporary pore and squeezes out spent matter", "contracts its inner chamber and releases spent fluid"),
|
||||
V("wobbles between two incompatible shapes", "sends pulses inward when its rim tries to move outward"),
|
||||
V("draws membrane tight as inner fluid brightens", "rests in a dome while deep restorative pulses recur"),
|
||||
V("draws membrane tight as inner fluid brightens", "rests in a dome while deep inner pulses recur"),
|
||||
V("pinches off a bead and repeatedly reels it back", "bounces in place as one inner current reverses"),
|
||||
V("extends a nearly invisible membrane pocket toward {target}", "tries to fold its reaching membrane over {target}"),
|
||||
V("jerks into sharp shapes under an alien current", "pops and swells as foreign pulses seize its membrane"),
|
||||
V("sags into sleep while luminous forms drift inside", "quivers around slow inner dream-currents"));
|
||||
V("extends a thin membrane pocket toward {target}", "tries to fold its reaching membrane over {target}"),
|
||||
V("jerks into sharp shapes as inner currents reverse", "pops and swells as sharp pulses seize its membrane"),
|
||||
V("sags flat while luminous forms drift inside", "quivers around slow currents drifting inside"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"butterfly",
|
||||
V("flutters a papery rhythm beneath a faint thoracic hum", "fans broad wings in a slow singing cadence"),
|
||||
V("joins abdomen tips in a delicate reproductive pairing", "holds a close wing-to-wing mating posture"),
|
||||
V("scores planting points with slender feet", "presses each planting point beneath the tip of its abdomen"),
|
||||
V("dusts broad wings and legs with pollen", "unfurls its feeding tube while reproductive grains brush onward"),
|
||||
V("barters while circling in matched wing arcs", "curls its forelegs in a delicate give-and-take"),
|
||||
V("skims with feeding tube uncurled while seeking a catch", "dips slender feet and lifts on one broad fishing sweep"),
|
||||
V("clasps the haul with its legs and laboring wings", "leans its whole flight into the pull"),
|
||||
V("presses abdomen tips together in a delicate pairing", "holds a close wing-to-wing mating posture"),
|
||||
V("scores furrows with slender feet", "presses each furrow beneath the tip of its abdomen"),
|
||||
V("dusts broad wings and legs with fine grains", "unfurls its feeding tube while grains brush onward"),
|
||||
V("circles in matched wing arcs then draws close", "curls its forelegs inward then opens them"),
|
||||
V("skims with feeding tube uncurled then dips into a snap", "dips slender feet and lifts on one broad sweeping snap"),
|
||||
V("clasps forward with its legs while wings beat hard", "leans its whole flight into the pull"),
|
||||
V("fans {target} with slow warming wingbeats", "touches {target} gently with its feeding tube tip"),
|
||||
V("beats broad wings hard across the flame", "folds and opens its wings in repeated smothering strokes"),
|
||||
V("beats broad wings hard in forceful strokes", "folds and opens its wings in repeated hard strokes"),
|
||||
V("rises away in steep uneven spirals", "folds its legs tight and drives forward on rapid wingbeats"),
|
||||
V("tests its footing lightly and comes to rest", "holds its wings upright while its feet establish a steady brace"),
|
||||
V("spreads its wings into a broad warning plane", "dives to battle with slender legs extended"),
|
||||
V("tests lightly with its feet then holds still", "holds its wings upright while its feet brace steady"),
|
||||
V("spreads its wings into a broad warning plane", "dives forward with slender legs extended"),
|
||||
V("walks its feeding tube along written lines", "opens and closes its wings as slender feet track each mark"),
|
||||
V("catches a life-glimmer between its wing scales", "draws gathered essence along the veins of its wings"),
|
||||
V("catches a tiny glimmer between its wing scales", "draws a tiny glimmer along the veins of its wings"),
|
||||
V("hangs its abdomen and releases a tiny dropping", "holds its wings still as its abdomen briefly contracts"),
|
||||
V("spirals upward, folds, and drops before opening again", "uncurls its feeding tube toward nothing and recoils"),
|
||||
V("rests with wings spread as warmth returns through their veins", "pumps its thorax slowly beneath closed wings"),
|
||||
V("beats left and right wings in opposing rhythms", "loops downward under an unbidden abdominal curl"),
|
||||
V("settles near {target} with wings concealing its legs", "reaches curled forelegs toward {target} before lifting away"),
|
||||
V("flaps in rigid jolts as an outside will pulls its abdomen", "folds its wings midflight under a foreign impulse"),
|
||||
V("sleeps behind closed wings while the edges faintly tremble", "makes slow dream-flights with tucked, twitching legs"));
|
||||
V("beats left and right wings in opposing rhythms", "loops downward as its abdomen curls sideways"),
|
||||
V("folds near {target} with wings concealing its legs", "reaches curled forelegs toward {target} before lifting away"),
|
||||
V("flaps in rigid jolts as its abdomen jerks sideways", "folds its wings midflight then snaps them open"),
|
||||
V("sleeps behind closed wings while the edges faintly tremble", "beats slow dream-flights with tucked twitching legs"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"flower_bud",
|
||||
V("rustles layered petals in a rising vegetal refrain", "hums through a vibrating hollow stalk"),
|
||||
V("presses its receptive center into a reproductive bloom", "twines rootlets while pollen reaches its opened core"),
|
||||
V("parts planting seams with branching root tips", "cups each planting point beneath a leaf"),
|
||||
V("opens its crown and brushes pollen across receptive petals", "shakes reproductive dust from anther to central folds"),
|
||||
V("barters by cupping and uncurling paired leaves", "inclines its crown as leaf tips give and receive"),
|
||||
V("extends a fine root filament in search of a catch", "snaps a curled leaf closed after a patient tremor"),
|
||||
V("winds rootlets around the haul and contracts its stalk", "braces its base while paired leaves pull"),
|
||||
V("presses its receptive center into a bloom", "twines rootlets while pollen reaches its opened core"),
|
||||
V("parts seams with branching root tips", "cups each furrow beneath a leaf"),
|
||||
V("opens its crown and brushes pollen across receptive petals", "shakes pollen from anther to central folds"),
|
||||
V("cups paired leaves then uncurls them", "inclines its crown as leaf tips touch and part"),
|
||||
V("extends a fine root filament then snaps a leaf shut", "snaps a curled leaf closed after a patient tremor"),
|
||||
V("winds rootlets forward and contracts its stalk", "braces its base while paired leaves pull"),
|
||||
V("lays a sap-rich leaf over {target}", "presses regenerative pollen gently onto {target}"),
|
||||
V("folds damp petals over the flame", "fans broad leaves directly at the flame"),
|
||||
V("hitches away on frantic root contractions", "draws every petal closed and bends rapidly from danger"),
|
||||
V("sinks fine roots into a steady settling brace", "opens its crown as its stalk establishes a firm base"),
|
||||
V("stiffens its stalk and closes petals into a pointed crown", "spreads leaves around a root-braced warrior stance"),
|
||||
V("folds damp petals into a tight close", "fans broad leaves in rapid beats"),
|
||||
V("hitches away on frantic root contractions", "draws every petal closed and bends rapidly aside"),
|
||||
V("sinks fine roots into a steady brace", "opens its crown as its stalk firms into a base"),
|
||||
V("stiffens its stalk and closes petals into a pointed crown", "spreads leaves around root-braced stalks"),
|
||||
V("traces each line with a curling leaf tip", "turns its crown as root hairs sense each mark"),
|
||||
V("draws life-light into its receptive center", "channels gathered essence down the veins of its petals"),
|
||||
V("draws faint light into its opened center", "channels faint light down the veins of its petals"),
|
||||
V("opens a basal pore and sheds spent fibrous residue", "contracts its root crown and expels dry fibers"),
|
||||
V("turns its crown between opposing directions", "opens alternating petals while its stalk coils"),
|
||||
V("roots deeply as sap rises through its stalk", "closes its petals while restorative light pulses at the center"),
|
||||
V("roots deeply as sap rises through its stalk", "closes its petals while soft light pulses at the center"),
|
||||
V("twines its own leaves around its stalk without cause", "opens one petal repeatedly against the rhythm of the crown"),
|
||||
V("folds its leaves toward {target} and retracts its roots", "tries to cup {target} between closing petals"),
|
||||
V("lashes its leaves as foreign sap pulses seize the stalk", "blooms and closes in jagged involuntary bursts"),
|
||||
V("bows into sleep while dream-petals open inside the bud", "twitches its rootlets beneath a softly pulsing crown"));
|
||||
V("lashes its leaves as sharp sap pulses seize the stalk", "blooms and closes in jagged uneven bursts"),
|
||||
V("bows while petals open and close inside the bud", "twitches its rootlets beneath a softly pulsing crown"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"fly",
|
||||
V("buzzes a thin wavering melody on glassy wings", "rubs its wings into a sharp repeating trill"),
|
||||
V("clasps in a brief reproductive pairing on braced legs", "joins abdomen tips while forefeet drum rapidly"),
|
||||
V("scratches planting points with bent forelegs", "tamps each planting point with quick six-foot steps"),
|
||||
V("brushes pollen onward with hairy feet and body", "rubs reproductive dust from forelegs to hind legs"),
|
||||
V("barters with rapid forefoot drums", "sponges and releases with lowered mouthparts"),
|
||||
V("hovers in abrupt stops while searching for a catch", "darts downward and snaps back on whining wings"),
|
||||
V("grips the haul with all six feet and beats backward", "pulls in short bursts of wing speed"),
|
||||
V("clasps in a brief pairing on braced legs", "presses abdomen tips together while forefeet drum rapidly"),
|
||||
V("scratches furrows with bent forelegs", "tamps each furrow with quick six-foot steps"),
|
||||
V("brushes fine dust onward with hairy feet and body", "rubs dust from forelegs to hind legs"),
|
||||
V("drums rapid forefeet twice then stills", "sponges once with lowered mouthparts then lifts"),
|
||||
V("hovers in abrupt stops then darts into a snap", "darts downward and snaps back on whining wings"),
|
||||
V("grips forward with all six feet and beats backward", "pulls in short bursts of wing speed"),
|
||||
V("sponges {target} with careful mouthpart presses", "grooms {target} with rapid foreleg strokes"),
|
||||
V("buffets the flame with whining wingbeats", "darts past the flame in repeated cooling passes"),
|
||||
V("buffets ahead with whining wingbeats", "darts past in repeated wing passes"),
|
||||
V("shoots away through a chain of right-angle turns", "folds its forelegs and accelerates on blurred wings"),
|
||||
V("samples its footing with each foot before settling", "orbits tightly before bracing on all six legs"),
|
||||
V("faces forward with wings spread and forelegs raised", "charges into battle in abrupt aerial bursts"),
|
||||
V("samples with each foot then braces on all six", "orbits tightly before bracing on all six legs"),
|
||||
V("faces forward with wings spread and forelegs raised", "charges ahead in abrupt aerial bursts"),
|
||||
V("wipes its eyes before tracking each line", "drums bent forefeet along the printed marks"),
|
||||
V("draws a life-flicker across its many-faceted eyes", "gathers loose essence through vibrating wing veins"),
|
||||
V("sweeps a faint flicker across its many-faceted eyes", "pulls through vibrating wing veins"),
|
||||
V("lifts its abdomen and releases a minute dropping", "rubs its forelegs as its abdomen releases"),
|
||||
V("darts in a square and misses the final turn", "wipes one eye repeatedly while circling on three legs"),
|
||||
V("rests with wings flat as flight muscles regain their hum", "vibrates its thorax in a low restoring buzz"),
|
||||
V("loops upside down and hovers there too long", "rubs its hind legs while both forelegs point rigidly ahead"),
|
||||
V("lands silently beside {target} on padded feet", "reaches all six legs toward {target} before lifting"),
|
||||
V("jerks through angular flight under a foreign command", "buzzes in broken pulses as its legs grasp at nothing"),
|
||||
V("jerks through angular flight as its legs seize", "buzzes in broken pulses as its legs grasp at nothing"),
|
||||
V("sleeps with wings flat while its feet make tiny wiping strokes", "twitches through silent dream-darts"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"garl",
|
||||
V("rustles papery layers beneath a reedy leaf whistle", "shivers its narrow leaves in a dry descending song"),
|
||||
V("braids receptive root fibers in a reproductive joining", "parts its layered bulb while pollen settles into its core"),
|
||||
V("rakes planting seams with fibrous roots", "presses each planting point beneath its layered bulb"),
|
||||
V("catches pollen among narrow leaves and papery folds", "shakes reproductive dust downward along its stalk"),
|
||||
V("barters by opening and closing two papery layers", "alternates curled leaf tips in a measured give-and-take"),
|
||||
V("threads a fine root outward in search of a catch", "jerks its bulb backward when root fibers tighten"),
|
||||
V("hooks root bundles around the haul and leans away", "wedges its dense bulb behind and drives forward"),
|
||||
V("braids receptive root fibers into a close clasp", "parts its layered bulb while pollen reaches its core"),
|
||||
V("rakes seams with fibrous roots", "presses each furrow beneath its layered bulb"),
|
||||
V("catches pollen among narrow leaves and papery folds", "shakes pollen downward along its stalk"),
|
||||
V("opens two papery layers then closes them", "touches with one curled leaf tip then the other"),
|
||||
V("threads a fine root outward then jerks its bulb back", "jerks its bulb backward when root fibers tighten"),
|
||||
V("hooks root bundles forward and leans away", "wedges its dense bulb behind and drives forward"),
|
||||
V("binds {target} with a sap-damp layer", "presses pungent regenerative fibers against {target}"),
|
||||
V("lashes narrow leaves across the flame", "presses its dense damp bulb against the flame"),
|
||||
V("lashes narrow leaves in broad arcs", "presses its dense damp bulb forward and holds"),
|
||||
V("scrambles away on bunching root fibers", "folds its leaves tight and lurches rapidly aside"),
|
||||
V("spreads root fibers into a broad settling hold", "stacks its layered bulb firmly above anchored roots"),
|
||||
V("stiffens narrow leaves into a bristling crown", "swings its dense bulb from a root-braced warrior stance"),
|
||||
V("spreads root fibers into a broad hold", "stacks its layered bulb firmly above anchored roots"),
|
||||
V("stiffens narrow leaves into a bristling crown", "swings its dense bulb from braced roots"),
|
||||
V("runs a leaf tip beneath each line", "parts papery layers as root fibers trace the marks"),
|
||||
V("draws life-light between its layered skins", "pulls gathered essence down its fibrous roots"),
|
||||
V("draws faint light between its layered skins", "pulls faint light down its fibrous roots"),
|
||||
V("parts its basal layers and expels spent pulp", "tightens its bulb and sheds dry fibers"),
|
||||
V("winds root fibers in opposite directions", "fans one leaf while every other leaf folds"),
|
||||
V("rests its bulb low as sap pressure returns", "draws strength inward through tightly coiled roots"),
|
||||
V("peels one papery layer back and wraps it again", "braids its own leaf tips under an unbidden impulse"),
|
||||
V("rests its bulb low as sap pressure builds", "draws strength inward through tightly coiled roots"),
|
||||
V("peels one papery layer back and wraps it again", "braids its own leaf tips against its usual sway"),
|
||||
V("folds dry skins toward {target}", "tries to draw {target} between layered bulb scales"),
|
||||
V("thrashes its leaves as foreign pressure twists the stalk", "lurches on roots that contract outside its rhythm"),
|
||||
V("bows its stalk while sleeping roots slowly curl", "rustles inside closed papery layers as it dreams"));
|
||||
V("thrashes its leaves as its stalk twists unevenly", "lurches on roots that contract against its beat"),
|
||||
V("bows its stalk while sleeping roots slowly curl", "rustles inside closed papery layers in sleep"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"grasshopper",
|
||||
V("scrapes a bright skipping song from leg against wing", "pulses its hind legs through a rising chirr"),
|
||||
V("clasps tightly during a balanced reproductive mounting", "joins abdomen tips with hind legs folded close"),
|
||||
V("kicks planting furrows with spined hind feet", "presses planting points beneath short forefoot stamps"),
|
||||
V("brushes pollen onward with its body and jointed legs", "springs between pollinating contacts with dusted feet"),
|
||||
V("barters with alternating forefoot taps", "gives and receives with precise serrated mouthparts"),
|
||||
V("crouches on folded hind legs while seeking a catch", "springs upward after a sudden fishing snap"),
|
||||
V("grips the haul with its forefeet and hops backward", "drives forward with both hind feet"),
|
||||
V("clasps tightly during a balanced mounting", "presses abdomen tips together with hind legs folded close"),
|
||||
V("kicks furrows with spined hind feet", "presses furrows beneath short forefoot stamps"),
|
||||
V("brushes fine dust onward with its body and jointed legs", "springs from footfall to footfall with dusted feet"),
|
||||
V("taps one forefoot then the other", "touches with serrated mouthparts then draws back"),
|
||||
V("crouches on folded hind legs then springs into a snap", "springs upward after a sudden snap"),
|
||||
V("grips forward with its forefeet and hops backward", "drives forward with both hind feet"),
|
||||
V("combs {target} with delicate forefoot strokes", "presses its mouthparts carefully against {target}"),
|
||||
V("kicks across the flame with broad hind-leg sweeps", "leaps past the flame while fanning both wings"),
|
||||
V("kicks across with broad hind-leg sweeps", "leaps past while fanning both wings"),
|
||||
V("launches away in successive full-length bounds", "folds its feelers back and springs without pause"),
|
||||
V("tests its footing with deep hind-foot presses", "settles into a stable four-point crouch"),
|
||||
V("raises on extended hind legs with jaws working", "bounds into battle forefeet-first"),
|
||||
V("tests with deep hind-foot presses then crouches", "folds into a stable four-point crouch"),
|
||||
V("raises on extended hind legs with jaws parted", "bounds forward forefeet-first"),
|
||||
V("tracks each line with one long feeler", "holds the markings between forefeet while mouthparts tick"),
|
||||
V("catches a life-spark between extended feelers", "draws gathered essence through a resonant wing pulse"),
|
||||
V("catches a tiny spark between extended feelers", "draws a tiny spark through a resonant wing pulse"),
|
||||
V("lifts its abdomen and drops a compact pellet", "folds its hind legs as its abdomen briefly releases"),
|
||||
V("springs straight up and lands facing backward", "scrapes one broken chirr while both feelers cross"),
|
||||
V("crouches low as strength coils into its hind legs", "pumps both jumping limbs with slow restoring bends"),
|
||||
V("kicks one hind leg while the other stays locked", "leaps in place under an unexplained abdominal twitch"),
|
||||
V("snatches at {target} with folded forefeet", "tries to clasp {target} before bounding away"),
|
||||
V("launches in jagged bursts under a foreign rhythm", "scrapes a harsh chirr while its hind legs kick alone"),
|
||||
V("sleeps with long legs folded as tiny jumps twitch within", "moves its mouthparts through a faint dream-chirr"));
|
||||
V("launches in jagged bursts as its hind legs seize", "scrapes a harsh chirr while its hind legs kick alone"),
|
||||
V("sleeps with long legs folded as tiny jumps twitch within", "moves its mouthparts through a faint sleeping chirr"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"lemon_snail",
|
||||
V("sings through a wet rasp beneath its shell lip", "rocks its shell to a slow foot-pulsed hum"),
|
||||
V("presses foot to foot in a reciprocal reproductive joining", "touches mating pores beneath crossed feelers"),
|
||||
V("rasps shallow planting seams with its toothed tongue", "presses planting points beneath the broad front of its foot"),
|
||||
V("collects pollen on its moist body and feeler tips", "glides reproductive dust across receptive surfaces"),
|
||||
V("barters with touches from both long feelers", "ripples the front of its foot in a slow give-and-take"),
|
||||
V("extends its eyestalks while searching for a catch", "casts its head forward and recoils beneath its shell"),
|
||||
V("sets its muscular foot against the haul and ripples backward", "anchors its shell while the broad foot pushes"),
|
||||
V("presses foot to foot in a reciprocal clasp", "touches mating pores beneath crossed feelers"),
|
||||
V("rasps shallow seams with its toothed tongue", "presses furrows beneath the broad front of its foot"),
|
||||
V("collects fine dust on its moist body and feeler tips", "glides dust across its moist foot and shell"),
|
||||
V("touches both long feelers then withdraws them", "ripples the front of its foot forward then back"),
|
||||
V("extends its eyestalks then casts its head forward", "casts its head forward and recoils beneath its shell"),
|
||||
V("sets its muscular foot forward and ripples backward", "anchors its shell while the broad foot pushes"),
|
||||
V("lays a healing trail of mucus over {target}", "presses the soft rim of its foot against {target}"),
|
||||
V("draws damp mucus over the flame", "swings its shell down in a slow smothering press"),
|
||||
V("draws damp mucus into a thin film", "swings its shell down in a slow heavy press"),
|
||||
V("glides away on rapid foot ripples with feelers withdrawn", "pulls its head beneath the shell while sliding aside"),
|
||||
V("seals its broad foot into a stable settling grip", "tests the boundary with fully extended eyestalks"),
|
||||
V("rears beneath its shell with all feelers forward", "swings its shell from a firmly anchored warrior stance"),
|
||||
V("seals its broad foot into a stable grip", "extends both eyestalks fully then holds still"),
|
||||
V("rears beneath its shell with all feelers forward", "swings its shell from a firmly anchored foot"),
|
||||
V("traces each line with the tips of its eyestalks", "rasps lightly beneath the marks with its toothed tongue"),
|
||||
V("draws a life-glow into the spiral of its shell", "gathers loose essence along its shining mucus trail"),
|
||||
V("draws a faint glow into the spiral of its shell", "pulls a faint glow along its shining mucus trail"),
|
||||
V("raises its shell and releases a soft waste pellet", "contracts its muscular foot and slowly releases waste"),
|
||||
V("extends one eyestalk while withdrawing the other", "glides in a circle as its shell tilts the opposite way"),
|
||||
V("rests half withdrawn as vigor ripples through its foot", "seals close while restorative moisture gathers beneath its shell"),
|
||||
V("waves crossed feelers while its foot moves backward", "rasps at its own shell lip under a strange impulse"),
|
||||
V("rests half withdrawn as its foot ripples steadily", "seals close while moisture gathers beneath its shell"),
|
||||
V("waves crossed feelers while its foot moves backward", "rasps at its own shell lip against its slow pace"),
|
||||
V("slides silently toward {target} with feelers tucked", "tries to arch its broad foot over {target}"),
|
||||
V("twists beneath its shell as foreign pulses seize its foot", "lashes its feelers in movements outside its slow rhythm"),
|
||||
V("sleeps sealed close while eyestalks twitch within", "rocks its shell slowly as spiral forms fill its dream"));
|
||||
V("twists beneath its shell as sharp pulses seize its foot", "lashes its feelers faster than its slow foot allows"),
|
||||
V("sleeps sealed close while eyestalks twitch within", "rocks its shell slowly as spiral forms drift inside"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"lil_pumpkin",
|
||||
V("rattles its hollow ribs beneath a vine-tip rhythm", "whistles through a curling stem in bouncing notes"),
|
||||
V("twines receptive tendrils into a reproductive joining", "opens its crown as pollen reaches the seeded core"),
|
||||
V("parts planting seams with forked tendril tips", "rolls its ribbed base over each planting point"),
|
||||
V("catches pollen on curling vines around its crown", "flicks reproductive dust inward with springing tendrils"),
|
||||
V("barters by looping and releasing two tendrils", "rocks its ribbed side in a measured give-and-take"),
|
||||
V("uncurls a thin vine while searching for a catch", "snaps the tendril back into a tight coil"),
|
||||
V("winds several tendrils around the haul and rolls backward", "braces its ribbed body while coiled vines pull"),
|
||||
V("twines receptive tendrils into a close clasp", "opens its crown as pollen reaches the seeded core"),
|
||||
V("parts seams with forked tendril tips", "rolls its ribbed base over each furrow"),
|
||||
V("catches pollen on curling vines around its crown", "flicks pollen inward with springing tendrils"),
|
||||
V("loops two tendrils then releases them", "rocks its ribbed side once then stills"),
|
||||
V("uncurls a thin vine then snaps it into a tight coil", "snaps the tendril back into a tight coil"),
|
||||
V("winds several tendrils forward and rolls backward", "braces its ribbed body while coiled vines pull"),
|
||||
V("wraps a sap-rich tendril around {target}", "presses its soft inner vine gently against {target}"),
|
||||
V("rolls its broad ribbed body over the flame", "lashes damp vine coils directly at the flame"),
|
||||
V("rolls its broad ribbed body into a heavy press", "lashes damp vine coils in rapid arcs"),
|
||||
V("bounds away on recoiling tendrils", "rolls rapidly with crown bent and vines tucked"),
|
||||
V("spreads tendrils into a firm settling lattice", "sets its rounded base while the crown straightens"),
|
||||
V("stiffens coiled vines around its ribbed body", "butts forward from a tendril-braced warrior stance"),
|
||||
V("spreads tendrils into a firm lattice", "sets its rounded base while the crown straightens"),
|
||||
V("stiffens coiled vines around its ribbed body", "butts forward from braced tendrils"),
|
||||
V("runs a forked vine tip along each line", "tilts its crown while tendrils trace the marks"),
|
||||
V("draws life-light through its crown into the seeded hollow", "gathers loose essence along curling vine veins"),
|
||||
V("draws faint light through its crown into the seeded hollow", "pulls faint light along curling vine veins"),
|
||||
V("lifts its base and releases spent fibrous pulp", "contracts its hollow body and expels dry fibers"),
|
||||
V("rolls forward while every tendril pulls backward", "coils its crown vine around one rib repeatedly"),
|
||||
V("rests round and still as sap fills each tendril", "pulses its hollow core in a slow restoring rhythm"),
|
||||
V("rests round and still as sap fills its tendrils", "pulses its hollow core in a slow restoring rhythm"),
|
||||
V("ties two of its own vines into a tightening loop", "bounces on its base while the crown twists sideways"),
|
||||
V("curls broad tendrils toward {target}", "tries to loop its vines around {target} before rolling away"),
|
||||
V("rattles violently as foreign force plucks its vines", "rolls in broken arcs under an outside impulse"),
|
||||
V("sleeps on one rib while tendrils curl and uncurl", "echoes soft dream-knocks inside its hollow body"));
|
||||
V("rattles violently as its vines pluck and snap", "rolls in broken arcs as its vines yank sideways"),
|
||||
V("sleeps on one rib while tendrils curl and uncurl", "knocks softly inside its hollow body as it sleeps"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"sand_spider",
|
||||
V("drums eight feet in a dry intricate song", "rasps mouthparts beneath alternating leg taps"),
|
||||
V("locks legs in a careful reproductive embrace", "transfers a mating pulse through paired front appendages"),
|
||||
V("rakes planting lines with alternating front legs", "tamps planting points with four paired foot presses"),
|
||||
V("combs pollen through the hairs of its legs", "steps reproductive dust onward across eight contact points"),
|
||||
V("barters with measured front-foot taps", "alternates folded forelegs in a precise give-and-take"),
|
||||
V("casts a fine silk line while searching for a catch", "feels along the silk with widely spread feet before jerking back"),
|
||||
V("binds the haul in silk and pulls with all eight legs", "walks backward while paired feet drag"),
|
||||
V("locks legs in a careful embrace", "transfers a mating pulse through paired front appendages"),
|
||||
V("rakes lines with alternating front legs", "tamps furrows with four paired foot presses"),
|
||||
V("combs fine dust through the hairs of its legs", "steps dust onward across eight contact points"),
|
||||
V("taps its front feet twice then pauses", "extends one folded foreleg then the other"),
|
||||
V("casts a fine silk line then jerks back", "feels along the silk with widely spread feet before jerking back"),
|
||||
V("binds forward in silk and pulls with all eight legs", "walks backward while paired feet drag"),
|
||||
V("lays a sealing silk pad over {target}", "grooms {target} with fine mouthpart strokes"),
|
||||
V("casts a dense silk sheet over the flame", "beats four pairs of legs in a smothering press"),
|
||||
V("casts a dense silk sheet outward", "beats four pairs of legs in a heavy press"),
|
||||
V("scuttles away sideways on low-splayed legs", "retracts its front pair and darts in an angular retreat"),
|
||||
V("anchors silk before folding into a settled crouch", "reads surface tremors through eight feet before settling"),
|
||||
V("rears on its hind pairs with front legs spread", "pivots sideways in a low fighting stance"),
|
||||
V("anchors silk then folds into a low crouch", "reads tremors through eight feet then folds still"),
|
||||
V("rears on its hind pairs with front legs spread", "pivots sideways with front legs spread low"),
|
||||
V("follows each line with alternating front feet", "reads tiny tremors along a taut silk filament"),
|
||||
V("wraps a life-glimmer in a pulsing silk knot", "draws gathered essence inward through all eight feet"),
|
||||
V("wraps a tiny glimmer in a pulsing silk knot", "draws a tiny glimmer inward through all eight feet"),
|
||||
V("raises its abdomen and releases a compact dropping", "holds on four feet as its rear briefly contracts"),
|
||||
V("lifts the wrong leg in every paired sequence", "spins half a turn and freezes with feet crossed"),
|
||||
V("settles low as vigor returns through eight joints", "flexes each paired leg in a slow restoring wave"),
|
||||
V("folds low as its eight joints firm again", "flexes each paired leg in a slow restoring wave"),
|
||||
V("ties a silk loop around its own forelegs", "drums three feet while the other five hold rigid"),
|
||||
V("casts silk toward {target} with rapid rear pulses", "tries to fold its front legs around {target}"),
|
||||
V("jerks on stiffened legs as alien tremors command it", "strikes with its front pair outside its usual rhythm"),
|
||||
V("folds into sleep while feet answer phantom vibrations", "spins a tiny dream-thread beneath its resting body"));
|
||||
V("jerks on stiffened legs as tremors seize each joint", "strikes with its front pair against its usual beat"),
|
||||
V("folds into sleep while feet answer phantom vibrations", "spins a tiny thread beneath its resting body in sleep"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"scorpion",
|
||||
V("clacks both pincers in a hollow antiphonal song", "rattles its plated tail beneath measured claw beats"),
|
||||
V("clasps pincers during a paired reproductive turning", "joins bodies beneath a carefully arched tail"),
|
||||
V("shears planting seams with opposing claws", "presses each planting point with the flat of a pincer"),
|
||||
V("brushes pollen onward between fine pincer hairs", "guides reproductive dust with alternating claw tips"),
|
||||
V("barters between open pincers", "alternates one claw and the other in a measured give-and-take"),
|
||||
V("holds one open claw while searching for a catch", "snaps both pincers inward after a tail-balanced pause"),
|
||||
V("grips the haul with both claws and walks backward", "hooks underneath while eight legs pull"),
|
||||
V("clasps pincers during a paired turning", "presses bodies together beneath a carefully arched tail"),
|
||||
V("shears seams with opposing claws", "presses each furrow with the flat of a pincer"),
|
||||
V("brushes fine dust onward between fine pincer hairs", "guides dust with alternating claw tips"),
|
||||
V("opens both pincers then closes them carefully", "offers one claw then the other"),
|
||||
V("holds one open claw then snaps both inward", "snaps both pincers inward after a tail-balanced pause"),
|
||||
V("grips forward with both claws and walks backward", "hooks underneath while eight legs pull"),
|
||||
V("holds {target} steady in one pincer", "applies a minute regenerative sting to {target}"),
|
||||
V("beats the flame with broad opposing claws", "presses its plated body low over the flame"),
|
||||
V("beats ahead with broad opposing claws", "presses its plated body low and holds"),
|
||||
V("sidesteps away with tail curled tight overhead", "retreats rapidly while both pincers guard its front"),
|
||||
V("tests its footing with claw tips and walking legs", "lowers its plated body into a settled eight-foot brace"),
|
||||
V("opens both pincers and poises its tail above", "advances sideways to battle with its plated guard raised"),
|
||||
V("tests with claw tips and walking legs then lowers", "lowers its plated body into an eight-foot brace"),
|
||||
V("opens both pincers and poises its tail above", "advances sideways with its plated back raised"),
|
||||
V("runs one claw tip beneath each line", "holds the markings between pincers while tail segments count"),
|
||||
V("catches a life-spark between closing claws", "draws gathered essence down the arch of its tail"),
|
||||
V("catches a tiny spark between closing claws", "draws a tiny spark down the arch of its tail"),
|
||||
V("raises its rear plates and releases a compact dropping", "sets all eight feet as its abdomen pushes"),
|
||||
V("circles its own tail while one claw opens and shuts", "sidesteps left as both pincers insist right"),
|
||||
V("rests low as strength returns along its plated tail", "folds its claws beneath a slow restorative pulse"),
|
||||
V("clasps its own tail tip between careful pincers", "walks backward beneath an involuntary claw rhythm"),
|
||||
V("rests low as its plated tail steadies", "folds its claws beneath a slow steadying pulse"),
|
||||
V("clasps its own tail tip between careful pincers", "walks backward beneath a mismatched claw rhythm"),
|
||||
V("snaps one claw toward {target} while the other guards", "tries to pinch {target} before withdrawing sideways"),
|
||||
V("strikes downward as foreign force arches its tail", "clacks its pincers in a rhythm it does not control"),
|
||||
V("sleeps beneath a lowered tail while claw tips twitch", "dreams of a silent paired turn beneath its arched tail"));
|
||||
V("strikes downward as its tail arches without pause", "clacks its pincers in a broken mismatched rhythm"),
|
||||
V("sleeps beneath a lowered tail while claw tips twitch", "twitches through a silent paired turn beneath its arched tail"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"smore",
|
||||
V("flaps broad layers in a soft stacked refrain", "pipes a thin note through clustered springy stalks"),
|
||||
V("presses yielding layers into a reproductive joining", "braids ribbonlike leaves as pollen reaches the inner fold"),
|
||||
V("parts planting seams with bundled stalk tips", "compresses its broad lower layer over each planting point"),
|
||||
V("catches pollen between broad yielding layers", "flicks reproductive dust onward with ribbonlike leaves"),
|
||||
V("barters by pinching and opening two soft layers", "alternates bending shoot tips in a gentle give-and-take"),
|
||||
V("extends a ribbonlike leaf while searching for a catch", "snaps stacked layers shut after a trembling pause"),
|
||||
V("clamps the haul between broad layers and shuffles backward", "bends bundled stalks into a springing push"),
|
||||
V("flaps broad layers in a soft stacked refrain", "pipes a thin note through bundled springy stalks"),
|
||||
V("presses yielding layers into a close clasp", "braids ribbonlike leaves as pollen reaches the inner fold"),
|
||||
V("parts seams with bundled stalk tips", "compresses its broad lower layer over each furrow"),
|
||||
V("catches pollen between broad yielding layers", "flicks pollen onward with ribbonlike leaves"),
|
||||
V("pinches two soft layers then opens them", "bends one shoot tip then the other"),
|
||||
V("extends a ribbonlike leaf then snaps stacked layers shut", "snaps stacked layers shut after a trembling pause"),
|
||||
V("clamps forward between broad layers and shuffles backward", "bends bundled stalks into a springing push"),
|
||||
V("presses a soft sap-filled layer over {target}", "wraps {target} between warm yielding folds"),
|
||||
V("claps broad layers over the flame", "fans the flame with rapid stacked flaps"),
|
||||
V("claps broad layers into a tight close", "fans rapid stacked flaps in quick beats"),
|
||||
V("bounds away on compressed springy stalks", "folds its ribbonlike leaves and shuffles rapidly aside"),
|
||||
V("spreads bundled shoots into a steady settling base", "aligns its stacked crown above a firm fibrous brace"),
|
||||
V("compresses its layers into a dense springing guard", "raises ribbonlike leaves from a broad warrior stance"),
|
||||
V("spreads bundled shoots into a steady base", "aligns its stacked crown above a firm fibrous brace"),
|
||||
V("compresses its layers into a dense spring", "raises ribbonlike leaves from a broad braced base"),
|
||||
V("slides a leaf tip beneath each line", "tilts stacked layers as bundled shoots trace the marks"),
|
||||
V("cups a life-glow between yielding inner folds", "draws gathered essence through its springy stalks"),
|
||||
V("cups a faint glow between yielding inner folds", "draws a faint glow through its springy stalks"),
|
||||
V("parts its lowest layers and expels spent fibrous residue", "compresses its crown and sheds soft fibers"),
|
||||
V("tilts each layer in a different direction", "wraps one ribbonlike leaf around the entire stack"),
|
||||
V("rests compressed while vigor fills its bending shoots", "slowly expands each layer with a restoring pulse"),
|
||||
V("claps its upper layers without separating the lower ones", "braids its own leaves under an unbidden bounce"),
|
||||
V("rests compressed while sap fills its bending shoots", "slowly expands each layer with a restoring pulse"),
|
||||
V("claps its upper layers without separating the lower ones", "braids its own leaves while bouncing out of rhythm"),
|
||||
V("closes soft layers toward {target}", "tries to pinch {target} between yielding folds"),
|
||||
V("buckles and springs as foreign force compresses its crown", "flaps unevenly under a pulse outside its body"),
|
||||
V("settles into sleep while inner layers softly rise and fall", "bounces on folded shoots as muted dreams pulse within"));
|
||||
V("buckles and springs as its crown compresses unevenly", "flaps unevenly as a pulse wrenches its crown"),
|
||||
V("folds into sleep while inner layers softly rise and fall", "bounces on folded shoots as muted pulses rise within"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"acid_blob",
|
||||
V("kindles flame beneath a searing pseudopod", "spreads flame with a sweep of its acidic rim"),
|
||||
V("smothers flame beneath a broad liquid fold", "suppresses flame with jets from its pulsing pores"),
|
||||
V("pools against its kin in a ring of touching rims", "merges its outline into a visible cluster with kin"),
|
||||
V("draws the observed life essence through a feeding film", "cups the observed life essence inside a contracting vacuole"),
|
||||
V("smothers flame beneath a broad liquid fold", "beats flame down with jets from its pulsing pores"),
|
||||
V("pools rim to rim among the others", "presses its rim into the nearby group"),
|
||||
V("draws life essence through a feeding film", "cups glowing life essence inside a contracting vacuole"),
|
||||
V("probes for spoils with a hair-thin pseudopod", "reaches for spoils with an opening surface pocket"),
|
||||
V("burbles as its membrane dimples in rapid waves", "spills a wavering gurgle through its trembling rim"),
|
||||
V("raises a jagged lobe and spits a sharp wet hiss", "slaps its rim down as surface bubbles crackle"));
|
||||
|
|
@ -21,9 +21,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"ant_black",
|
||||
V("kindles flame with rapid mandible strikes", "spreads flame with straight abdomen sweeps"),
|
||||
V("smothers flame beneath stamping forefeet", "suppresses flame with rapid abdomen beats"),
|
||||
V("packs into a straight-bodied cluster with kin", "locks antennae into a visible rank among kin"),
|
||||
V("draws the observed life essence between closed mandibles", "pulls the observed life essence along both antennae"),
|
||||
V("smothers flame beneath stamping forefeet", "beats flame down with rapid abdomen beats"),
|
||||
V("packs antennae-first among the others", "locks antennae into the nearby group"),
|
||||
V("draws life essence between closed mandibles", "pulls glowing life essence along both antennae"),
|
||||
V("probes for spoils with brisk antenna taps", "reaches for spoils with narrowly opened mandibles"),
|
||||
V("stridulates in clipped pulses as its antennae shiver", "folds low while its mandibles click unevenly"),
|
||||
V("clacks its mandibles in a hard measured burst", "stamps all six feet beneath rigid antennae"));
|
||||
|
|
@ -32,9 +32,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"ant_blue",
|
||||
V("kindles flame with alternating mandible scrapes", "spreads flame through precise abdomen pivots"),
|
||||
V("smothers flame with paired forefoot presses", "suppresses flame beneath symmetrical abdomen fans"),
|
||||
V("forms an angular cluster with evenly spaced kin", "crosses antennae in a visible lattice among kin"),
|
||||
V("draws the observed life essence between parallel antennae", "channels the observed life essence through paired mouthparts"),
|
||||
V("smothers flame with paired forefoot presses", "beats flame down beneath symmetrical abdomen fans"),
|
||||
V("packs on even feet into the nearby group", "crosses antennae among the others"),
|
||||
V("draws life essence between parallel antennae", "channels glowing life essence through paired mouthparts"),
|
||||
V("probes for spoils with mirrored antenna arcs", "reaches for spoils with both mandibles centered"),
|
||||
V("ticks its mouthparts as both antennae droop", "draws uneven antenna spirals beneath a thin stridulation"),
|
||||
V("clicks both mandibles in an exact descending pattern", "cuts rigid angles with its antennae while its feet stamp"));
|
||||
|
|
@ -43,9 +43,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"ant_green",
|
||||
V("kindles flame with hooked foreleg scrapes", "spreads flame with bounding abdomen flicks"),
|
||||
V("smothers flame beneath crossing forelegs", "suppresses flame with broad sweeps of its raised abdomen"),
|
||||
V("arches its forelegs across a cluster of kin", "hooks antennae into a visible ring among kin"),
|
||||
V("draws the observed life essence between uplifted feelers", "pulls the observed life essence down its hooked forelegs"),
|
||||
V("smothers flame beneath crossing forelegs", "beats flame down with broad sweeps of its raised abdomen"),
|
||||
V("arches its forelegs among the others", "hooks antennae into the nearby group"),
|
||||
V("draws life essence between uplifted feelers", "pulls glowing life essence down its hooked forelegs"),
|
||||
V("probes for spoils with one raised foreleg", "reaches for spoils with both mandibles lifted"),
|
||||
V("scrapes a skipping chirr as its forelegs curl", "bows beneath raised forelegs while its jaws rasp"),
|
||||
V("flings both hooked forelegs overhead with a harsh chirr", "scrapes its mandibles while its abdomen snaps upward"));
|
||||
|
|
@ -54,9 +54,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"ant_red",
|
||||
V("kindles flame with forceful mandible grinding", "spreads flame with charging abdomen sweeps"),
|
||||
V("smothers flame beneath pounding forefeet", "suppresses flame with hard full-body swipes"),
|
||||
V("wedges into a dense cluster with braced kin", "raises spread mandibles inside a visible knot of kin"),
|
||||
V("draws the observed life essence through parted mandibles", "drags the observed life essence along rigid antennae"),
|
||||
V("smothers flame beneath pounding forefeet", "beats flame down with hard full-body swipes"),
|
||||
V("wedges abdomen-first into the nearby group", "raises spread mandibles among the others"),
|
||||
V("draws life essence through parted mandibles", "drags glowing life essence along rigid antennae"),
|
||||
V("probes for spoils with forceful antenna thrusts", "reaches for spoils with mandibles spread wide"),
|
||||
V("rattles its body plates as its jaws open and close", "crouches low beneath a broken stridulating rasp"),
|
||||
V("clashes its mandibles and lashes both antennae", "rears on four feet with a hard abdominal rattle"));
|
||||
|
|
@ -65,9 +65,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"bee",
|
||||
V("kindles flame with a rapid sting scrape", "spreads flame beneath beating wings"),
|
||||
V("smothers flame with dense wingbeat pulses", "suppresses flame beneath sweeping abdomen fans"),
|
||||
V("lands in a tight wing-to-wing cluster with kin", "locks legs into a visible hanging cluster with kin"),
|
||||
V("draws the observed life essence along its unfurled tongue", "pulls the observed life essence between vibrating mouthparts"),
|
||||
V("smothers flame with dense wingbeat pulses", "beats flame down beneath sweeping abdomen fans"),
|
||||
V("lands wing-to-wing among the others", "locks its legs into the nearby group"),
|
||||
V("draws life essence along its unfurled tongue", "pulls glowing life essence between vibrating mouthparts"),
|
||||
V("probes for spoils with antennae and tongue extended", "reaches for spoils with its forelegs spread"),
|
||||
V("releases a wavering buzz as its abdomen contracts", "hangs its antennae beneath a broken wing hum"),
|
||||
V("drives a harsh buzz through flared wings", "curls its stinger forward while its wingbeats rasp"));
|
||||
|
|
@ -76,9 +76,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"beetle",
|
||||
V("kindles flame with scraping mandibles", "spreads flame beneath opening wing cases"),
|
||||
V("smothers flame under its plated abdomen", "suppresses flame with repeated wing-case claps"),
|
||||
V("presses wing cases into a plated cluster with kin", "interlocks hooked feet in a visible mound with kin"),
|
||||
V("draws the observed life essence between its mandibles", "pulls the observed life essence beneath closed wing cases"),
|
||||
V("smothers flame under its plated abdomen", "beats flame down with repeated wing-case claps"),
|
||||
V("presses wing case to wing case among the others", "interlocks hooked feet into the nearby group"),
|
||||
V("draws life essence between its mandibles", "pulls glowing life essence beneath closed wing cases"),
|
||||
V("probes for spoils with clubbed feelers", "reaches for spoils with hooked forefeet"),
|
||||
V("rasps its feet along its plates as its feelers sag", "clicks its wing cases through a low uneven tremor"),
|
||||
V("snaps its wing cases open with a hollow crack", "rakes hooked feet across its plates in a harsh rasp"));
|
||||
|
|
@ -87,9 +87,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"bioblob",
|
||||
V("kindles flame with a hot contracting membrane", "spreads flame through bouncing membrane flicks"),
|
||||
V("smothers flame beneath an expanding membrane pocket", "suppresses flame with pulsing jets from its pores"),
|
||||
V("presses its membrane into a quivering cluster with kin", "stacks pulsing lobes in a visible mound among kin"),
|
||||
V("draws the observed life essence through its translucent membrane", "pulls the observed life essence into a pulsing inner vesicle"),
|
||||
V("smothers flame beneath an expanding membrane pocket", "beats flame down with pulsing jets from its pores"),
|
||||
V("presses its membrane among the others", "stacks pulsing lobes into the nearby group"),
|
||||
V("draws life essence through its translucent membrane", "pulls glowing life essence into a pulsing inner vesicle"),
|
||||
V("probes for spoils with budding membrane nubs", "reaches for spoils with an expanding ingestion pocket"),
|
||||
V("warbles through membrane pops as its body sags", "contracts around a low wobbling internal hum"),
|
||||
V("pops its membrane in a sharp percussive chain", "thrusts a blunt lobe upward through a bubbling rasp"));
|
||||
|
|
@ -98,9 +98,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"butterfly",
|
||||
V("kindles flame with rapid feeding-tube scrapes", "spreads flame beneath fanning wing scales"),
|
||||
V("smothers flame beneath overlapping wings", "suppresses flame with downward wingbeat fans"),
|
||||
V("folds wing edges into a visible cluster with kin", "links slender legs in a hanging cluster among kin"),
|
||||
V("draws the observed life essence along its coiled feeding tube", "pulls the observed life essence between trembling mouthparts"),
|
||||
V("smothers flame beneath overlapping wings", "beats flame down with downward wingbeat fans"),
|
||||
V("folds wing edges among the others", "links slender legs into the nearby group"),
|
||||
V("draws life essence along its coiled feeding tube", "pulls glowing life essence between trembling mouthparts"),
|
||||
V("probes for spoils with its feeding tube uncoiled", "reaches for spoils with its slender forelegs"),
|
||||
V("flutters in broken pulses as its feeding tube curls", "bows its antennae beneath a thin wing-scale hiss"),
|
||||
V("lashes its feeding tube through a burst of wingbeats", "claps its wings while its antennae snap outward"));
|
||||
|
|
@ -109,9 +109,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"flower_bud",
|
||||
V("kindles flame with rasping rootlets", "spreads flame with quick petal fans"),
|
||||
V("smothers flame beneath closing petals", "suppresses flame with broad leaf sweeps"),
|
||||
V("weaves rootlets into a visible cluster with kin", "presses closed crowns together in a dense cluster of kin"),
|
||||
V("draws the observed life essence through its root hairs", "pulls the observed life essence into its layered bud"),
|
||||
V("smothers flame beneath closing petals", "beats flame down with broad leaf sweeps"),
|
||||
V("weaves rootlets among the others", "presses crown to crown in the nearby group"),
|
||||
V("draws life essence through its root hairs", "pulls glowing life essence into its layered bud"),
|
||||
V("probes for spoils with uncurling rootlets", "reaches for spoils with cupped lower leaves"),
|
||||
V("bows its stalk as its petals rustle in broken pulses", "folds its crown inward beneath a papery keening"),
|
||||
V("snaps its petals wide with a dry crackle", "whips its leaves while its closed crown rasps"));
|
||||
|
|
@ -120,9 +120,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"fly",
|
||||
V("kindles flame with rasping mouthparts", "spreads flame beneath blurred wingbeats"),
|
||||
V("smothers flame with hammering wing pulses", "suppresses flame beneath sweeping abdominal fans"),
|
||||
V("hooks legs into a visible buzzing cluster with kin", "packs wing-to-wing inside a tight cluster of kin"),
|
||||
V("draws the observed life essence through its sponging mouthparts", "pulls the observed life essence between rubbing forefeet"),
|
||||
V("smothers flame with hammering wing pulses", "beats flame down beneath sweeping abdominal fans"),
|
||||
V("hooks its legs among the others", "packs wing-to-wing into the nearby group"),
|
||||
V("draws life essence through its sponging mouthparts", "pulls glowing life essence between rubbing forefeet"),
|
||||
V("probes for spoils with forefeet and mouthparts", "reaches for spoils with its sponging tube extended"),
|
||||
V("buzzes in broken drops as its forelegs cover its eyes", "folds its wings beneath a wavering high whine"),
|
||||
V("grinds its forefeet beneath a piercing buzz", "flares its wings and spits a jagged wing whine"));
|
||||
|
|
@ -131,9 +131,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"garl",
|
||||
V("kindles flame with fibrous root scrapes", "spreads flame through whipping leaf tips"),
|
||||
V("smothers flame beneath layered bulb skins", "suppresses flame with dense leaf fans"),
|
||||
V("braids roots into a visible cluster with kin", "packs layered bulbs into a rustling cluster of kin"),
|
||||
V("draws the observed life essence through its fibrous roots", "pulls the observed life essence between layered bulb skins"),
|
||||
V("smothers flame beneath layered bulb skins", "beats flame down with dense leaf fans"),
|
||||
V("braids roots among the others", "packs bulb to bulb into the nearby group"),
|
||||
V("draws life essence through its fibrous roots", "pulls glowing life essence between layered bulb skins"),
|
||||
V("probes for spoils with fine root fibers", "reaches for spoils with curling leaf tips"),
|
||||
V("bows its stalk beneath a long papery rustle", "closes its leaves as its bulb layers creak"),
|
||||
V("lashes its leaves through a dry cutting hiss", "shakes its layered bulb in a hard papery rattle"));
|
||||
|
|
@ -142,9 +142,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"grasshopper",
|
||||
V("kindles flame with scraping hind legs", "spreads flame through forceful wing fans"),
|
||||
V("smothers flame beneath stamping hind feet", "suppresses flame with downward wing pulses"),
|
||||
V("folds hind legs into a visible cluster with kin", "crosses feelers inside a tight crouching cluster of kin"),
|
||||
V("draws the observed life essence between side-working jaws", "pulls the observed life essence along its folded hind legs"),
|
||||
V("smothers flame beneath stamping hind feet", "beats flame down with downward wing pulses"),
|
||||
V("folds its hind legs among the others", "crosses feelers into the nearby group"),
|
||||
V("draws life essence between sideways jaws", "pulls glowing life essence along its folded hind legs"),
|
||||
V("probes for spoils with sweeping feelers", "reaches for spoils with both forefeet"),
|
||||
V("scrapes a descending chirr as its hind legs fold", "crouches beneath a stuttering wing rattle"),
|
||||
V("kicks both hind legs through a harsh chirr", "saws a jagged rasp from leg against wing"));
|
||||
|
|
@ -153,9 +153,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"lemon_snail",
|
||||
V("kindles flame with rapid radula strokes", "spreads flame with broad sweeps of its muscular foot"),
|
||||
V("smothers flame beneath its muscular foot", "suppresses flame with wet mantle contractions"),
|
||||
V("presses shells into a visible spiral cluster with kin", "overlaps muscular feet in a close cluster of kin"),
|
||||
V("draws the observed life essence along its rasping radula", "pulls the observed life essence beneath its mantle"),
|
||||
V("smothers flame beneath its muscular foot", "beats flame down with wet mantle contractions"),
|
||||
V("presses shell to shell in the nearby group", "overlaps its muscular foot among the others"),
|
||||
V("draws life essence along its rasping radula", "pulls glowing life essence beneath its mantle"),
|
||||
V("probes for spoils with extended eyestalks", "reaches for spoils with the front of its muscular foot"),
|
||||
V("withdraws its eyestalks beneath a low shell scrape", "ripples its foot beneath a wavering mantle hiss"),
|
||||
V("whips both feelers through a wet rasp", "rocks its shell while its radula grates sharply"));
|
||||
|
|
@ -164,9 +164,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"lil_pumpkin",
|
||||
V("kindles flame with rubbing tendril tips", "spreads flame through whipping vines"),
|
||||
V("smothers flame beneath its ribbed body", "suppresses flame with coiling tendril sweeps"),
|
||||
V("laces tendrils into a visible cluster with kin", "presses ribbed sides into a tight cluster of kin"),
|
||||
V("draws the observed life essence through its curling tendrils", "pulls the observed life essence into its hollow core"),
|
||||
V("smothers flame beneath its ribbed body", "beats flame down with coiling tendril sweeps"),
|
||||
V("laces tendrils among the others", "presses rib to rib into the nearby group"),
|
||||
V("draws life essence through its curling tendrils", "pulls glowing life essence into its hollow core"),
|
||||
V("probes for spoils with split tendril tips", "reaches for spoils with an uncoiling vine"),
|
||||
V("droops its crown beneath a hollow internal knock", "curls every tendril as its ribbed body creaks"),
|
||||
V("snaps its tendrils through a hollow body rattle", "jerks its crown upward while its vines whip"));
|
||||
|
|
@ -175,9 +175,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"sand_spider",
|
||||
V("kindles flame with rasping mouthparts", "spreads flame through rapid foreleg sweeps"),
|
||||
V("smothers flame beneath four paired leg presses", "suppresses flame with dense silk casts"),
|
||||
V("interlaces eight legs in a visible cluster with kin", "packs low beneath a lattice of touching legs with kin"),
|
||||
V("draws the observed life essence through its mouthparts", "pulls the observed life essence along taut silk"),
|
||||
V("smothers flame beneath four paired leg presses", "beats flame down with dense silk casts"),
|
||||
V("interlaces eight legs among the others", "packs low leg-to-leg into the nearby group"),
|
||||
V("draws life essence through its mouthparts", "pulls glowing life essence along taut silk"),
|
||||
V("probes for spoils with lifted forelegs", "reaches for spoils with hooked front feet"),
|
||||
V("folds all eight legs beneath a dry mouthpart tremor", "drums an uneven cadence as its body flattens"),
|
||||
V("rears four forelegs through a cutting rasp", "strikes its hooked feet together in a hard dry burst"));
|
||||
|
|
@ -186,9 +186,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"scorpion",
|
||||
V("kindles flame with grinding pincer tips", "spreads flame through arcing tail sweeps"),
|
||||
V("smothers flame beneath closing pincers", "suppresses flame with broad plated-body sweeps"),
|
||||
V("locks pincers into a visible cluster with kin", "arches tails over a tight cluster of kin"),
|
||||
V("draws the observed life essence between its pincers", "pulls the observed life essence along its segmented tail"),
|
||||
V("smothers flame beneath closing pincers", "beats flame down with broad plated-body sweeps"),
|
||||
V("locks pincers among the others", "arches its tail over the nearby group"),
|
||||
V("draws life essence between its pincers", "pulls glowing life essence along its segmented tail"),
|
||||
V("probes for spoils with open pincer tips", "reaches for spoils with one claw extended"),
|
||||
V("lowers its tail beneath a wavering pincer clack", "folds its claws inward as its body plates rattle"),
|
||||
V("snaps both pincers through a hard plated crackle", "lashes its tail overhead while its claws clack"));
|
||||
|
|
@ -197,9 +197,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"smore",
|
||||
V("kindles flame with fibrous stalk scrapes", "spreads flame through flapping crown layers"),
|
||||
V("smothers flame beneath compressing crown layers", "suppresses flame with broad ribbon-leaf fans"),
|
||||
V("presses stacked crowns into a visible cluster with kin", "weaves springy stalks through a close cluster of kin"),
|
||||
V("draws the observed life essence through its fibrous stalks", "pulls the observed life essence between yielding crown layers"),
|
||||
V("smothers flame beneath compressing crown layers", "beats flame down with broad ribbon-leaf fans"),
|
||||
V("presses crown to crown into the nearby group", "weaves springy stalks among the others"),
|
||||
V("draws life essence through its fibrous stalks", "pulls glowing life essence between yielding crown layers"),
|
||||
V("probes for spoils with ribbonlike leaves", "reaches for spoils with opening crown layers"),
|
||||
V("compresses its crown beneath a soft layered flap", "folds its stalks inward through a wavering rustle"),
|
||||
V("claps its crown layers in a sharp dry burst", "whips its ribbonlike leaves while its stacked body rattles"));
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("lashes out at {target} with a sudden liquid fold", "rears its front edge at {target} and slaps it down"),
|
||||
V("touches rims and trades slow surface pulses", "presses close and mirrors another's ripples"),
|
||||
V("burbles as rings race across its surface", "pops a chain of little bubbles"),
|
||||
V("pushes a broad lobe steadily at the task", "divides its mass around the task"));
|
||||
V("pushes a broad lobe steadily into the load", "splits its mass around a load and closes over it"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -42,16 +42,16 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("pivots in tight loops on alternating feet", "rears and catches its forefeet in a paired clasp"),
|
||||
V("rotates a morsel between paired mouthparts", "pares bites from its meal"),
|
||||
V("folds into a narrow resting stance", "rests with its antennae laid along its head"),
|
||||
V("triangulates toward {target} with alternating feeler taps", "takes an angular zigzag toward {target}"),
|
||||
V("homes toward {target} with alternating feeler taps", "takes an angular zigzag toward {target}"),
|
||||
V("sidesteps at {target} and pinches from the flank", "sets its feet wide at {target} and closes both jaws"),
|
||||
V("draws paired symbols with crossing antennae", "paces beside another in matching steps"),
|
||||
V("crosses antennae in paired looping strokes", "paces beside another in matching steps"),
|
||||
V("ticks its mouthparts in a rising cadence", "taps its forefeet in a quick alternating pattern"),
|
||||
V("taps each load with both feelers before shifting it", "fits material into a straight line"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"ant_green",
|
||||
V("bounds forward with its forelegs held overhead", "threads ahead beneath a balanced abdomen"),
|
||||
V("bounds forward with its forelegs held overhead", "moves ahead while balancing its raised abdomen"),
|
||||
V("rests its forelegs across raised mandibles", "stops to groom its feelers with hooked wrists"),
|
||||
V("spins beneath raised forelegs", "vaults forward and doubles back"),
|
||||
V("saws at a morsel with its mandibles", "holds a morsel aloft while shaving off bites"),
|
||||
|
|
@ -72,9 +72,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("drops into a tight crouch without relaxing its jaws", "folds its limbs close and rests low"),
|
||||
V("surges after {target} in rapid bursts", "cuts toward {target} with jaws spread"),
|
||||
V("lunges at {target} with mandibles wide", "clamps on {target} and twists its whole body"),
|
||||
V("bumps heads and trades forceful antenna strokes", "marches shoulder to shoulder with another"),
|
||||
V("bumps heads and trades forceful antenna strokes", "marches flank to flank with another"),
|
||||
V("clacks its jaws in a rapid rolling burst", "stamps all six feet in a crackling rhythm"),
|
||||
V("drives a load forward from behind", "grips the task and pulls without pause"));
|
||||
V("drives a load forward from behind", "grips the load in its mandibles and pulls without pause"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -116,7 +116,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("hardens its front at {target} into a blunt swell", "compresses and springs at {target} as one mass"),
|
||||
V("joins surfaces and trades alternating pulses", "echoes another's pulse from rim to rim"),
|
||||
V("warbles through a chain of membrane pops", "jiggles until ripples cross its membrane in rings"),
|
||||
V("forms gripping pockets around the task", "moves material with alternating squeezes"));
|
||||
V("forms gripping pockets around a load", "moves material with alternating whole-body squeezes"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -130,7 +130,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("beats its wings hard at {target}", "veers at {target} and kicks with slender legs"),
|
||||
V("circles another in paired rising arcs", "rests alongside another with wing edges nearly touching"),
|
||||
V("flutters in a loose cascade of wingbeats", "bobs through an uneven airy chuckle"),
|
||||
V("carries a load on its legs", "makes repeated passes over the task"));
|
||||
V("carries a load on its legs", "returns again and again to shift material with its feet"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -138,13 +138,13 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("hitches its rootlets forward beneath a bending stalk", "leans and draws its stalk after its roots"),
|
||||
V("holds its closed petals above a steady stalk", "anchors its rootlets and lets its leaves settle"),
|
||||
V("twirls its stalk until the outer petals fan wide", "bobs its closed crown in quick springing arcs"),
|
||||
V("presses root hairs outward and draws nutrients in", "cups a morsel beneath its lowest leaves"),
|
||||
V("presses root hairs outward and draws nutrients upward", "cups a morsel beneath its lowest leaves"),
|
||||
V("folds every petal inward around its center", "bows its crown and slackens its leaves"),
|
||||
V("angles its crown toward {target}", "pulls its rootlets toward {target} in a tightening curve"),
|
||||
V("whips its stalk at {target} with its crown closed", "braces its roots at {target} and sweeps its leaves outward"),
|
||||
V("touches leaf tips and trades a tremor with another", "inclines its crown beside another's petals"),
|
||||
V("shakes its petals in a crisp papery rattle", "nods through a cascade of rustling leaves"),
|
||||
V("winds fine roots around the task", "uses paired leaves to lift and place material"));
|
||||
V("winds fine roots around a load and pulls", "lifts and places material with paired leaves"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -158,7 +158,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("slams sideways at {target} with a burst of wing speed", "grapples with {target} while its wings whine"),
|
||||
V("faces another and drums with its forefeet", "orbits another in close mirrored darts"),
|
||||
V("buzzes in a broken, hiccupping run", "rubs its wings into a thin trill"),
|
||||
V("shuttles material in rapid trips", "uses its forefeet to turn the task bit by bit"));
|
||||
V("shuttles material in rapid trips", "turns material bit by bit with its forefeet"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -172,7 +172,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("swings its dense bulb at {target} in a low arc", "lashes at {target} with stiff leaves"),
|
||||
V("braids leaf tips briefly with another's", "presses layered sides together and rustles"),
|
||||
V("shudders until its dry skins chatter", "flicks its leaves in an alternating crackle"),
|
||||
V("hooks the task with bundled root fibers", "wedges its layered base behind a load"));
|
||||
V("hooks a load with bundled root fibers", "wedges its layered base behind a load"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -200,7 +200,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("swings its shell sideways at {target}", "rears its head and drives at {target} under its shell"),
|
||||
V("touches feeler tips and circles shell to shell", "glides alongside another in a close parallel line"),
|
||||
V("bobs its eyestalks in a slow alternating rhythm", "rocks its shell through a scraping chuckle"),
|
||||
V("pushes material with the broad front of its foot", "anchors its shell and rasps steadily at the task"));
|
||||
V("pushes material with the broad front of its foot", "anchors its shell and rasps material into place"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -208,13 +208,13 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("rolls its ribbed body as a short vine pulls ahead", "scampers on curling tendrils beneath its bobbing crown"),
|
||||
V("sets its round body down among coiled tendrils", "holds its crown upright while the vine tips rest"),
|
||||
V("bounces on its rounded base and spins a tendril", "catches one curling vine between two others"),
|
||||
V("draws a morsel beneath its vine and presses close", "uses a split tendril to guide a morsel inward"),
|
||||
V("draws a morsel beneath its vine and presses close", "guides a morsel inward with a split tendril"),
|
||||
V("curls every tendril against its ribbed sides", "tips onto one flank and lets its crown droop"),
|
||||
V("uncurls an extended vine toward {target}", "rolls after {target} with tendrils reaching ahead"),
|
||||
V("butts its hard rounded body at {target}", "snaps a coiled tendril at {target}"),
|
||||
V("loops tendrils briefly around another's vine", "rests side by side and taps crowns with another"),
|
||||
V("rattles its hollow body from within", "bounces as its hollow body knocks"),
|
||||
V("winds tendrils around the task and pulls", "braces its round body behind a shifting load"));
|
||||
V("winds tendrils around a load and pulls", "braces its round body behind a shifting load"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -228,7 +228,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("rears at {target} and strikes with the front pair", "hooks at {target} and pivots sideways"),
|
||||
V("taps front feet in a measured exchange", "faces another and mirrors each lifted leg"),
|
||||
V("drums eight feet in a tumbling cadence", "shakes its mouthparts through a dry clicking fit"),
|
||||
V("draws fine strands around the task", "pulls bound material backward beneath its body"));
|
||||
V("binds material in fine strands", "pulls bound material backward beneath its body"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -242,7 +242,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("snaps both claws at {target} before driving its tail downward", "snaps one pincer at {target} and counters with the other"),
|
||||
V("clasps pincers and steps through a paired turn", "touches claw tips in measured alternating taps"),
|
||||
V("clacks its pincers in a brisk hollow rhythm", "rattles its plated tail in uneven pulses"),
|
||||
V("grips the task between both claws", "drags material backward with its tail held clear"));
|
||||
V("grips the load between both claws", "drags material backward with its tail held clear"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -256,6 +256,6 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("springs its stacked body at {target}", "claps two broad layers at {target}"),
|
||||
V("rests one broad layer against another's crown", "crosses ribbonlike leaves with another"),
|
||||
V("wobbles until its stacked layers flap together", "rustles its leaves through a bouncing chuckle"),
|
||||
V("pinches the task between broad yielding layers", "uses bundled stalks to shove material into place"));
|
||||
V("pinches material between broad yielding layers", "shoves material into place with bundled stalks"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,48 +11,48 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"alpaca",
|
||||
V("hums through a raised muzzle in wavering notes", "sings a soft phrase while its long neck sways"),
|
||||
V("courts with close humming and a lifted tail", "mates with long legs planted and neck extended"),
|
||||
V("farms in light, padded steps with split lips busy", "plants and presses with its long neck lowered"),
|
||||
V("brushes pollen onward through its trailing fleece", "carries pollen along its muzzle and wool"),
|
||||
V("trades with ears upright and muzzle bobbing", "barters through soft hums and neck dips"),
|
||||
V("fishes with neck stretched and split lips poised", "fishes with eyes lowered and padded feet held steady"),
|
||||
V("hauls with fleece bunching above a straight back", "leans forward on padded feet and draws steadily"),
|
||||
V("heals {target} through delicate split-lip nudges", "kneels and hums while licking {target} gently"),
|
||||
V("stokes fire with its long neck drawn back", "fans the flames through quick muzzle dips"),
|
||||
V("flees in long, rocking bounds with fleece flying", "gallops away on padded feet with neck extended"),
|
||||
V("settles by folding long legs beneath thick fleece", "kneels carefully as padded joints fold under its chest"),
|
||||
V("stands warrior-straight with neck high and ears fixed", "braces behind a spit and a forward kick"),
|
||||
V("reads with long neck curved and ears still", "reads line by line through slow, precise head tilts"),
|
||||
V("gathers life with split lips and careful foot placement", "gathers life with its long neck lowered"),
|
||||
V("squats on folded hind legs with tail lifted", "relieves itself while balancing on padded feet"),
|
||||
V("turns its long neck between conflicting directions", "steps sideways as its upright ears swivel unevenly"),
|
||||
V("recharges kneeling beneath a curtain of fleece", "rests its weight low while its jaw rolls slowly"),
|
||||
V("pivots stiff-legged as a strange urge takes hold", "stretches its neck forward and paws in short bursts"),
|
||||
V("steals with soft-footed steps and mobile split lips", "snatches quickly, then retreats behind swaying fleece"),
|
||||
V("jerks its long neck while its padded feet stamp", "moves in rigid bounds with ears pinned flat"),
|
||||
V("clips and presses in light steps on padded feet", "lowers its long neck and presses with split lips"),
|
||||
V("brushes onward with trailing fleece and muzzle", "sweeps its muzzle and wool in short forward strokes"),
|
||||
V("bobs its muzzle with ears upright", "dips its neck through soft answering hums"),
|
||||
V("stretches its neck with split lips poised", "holds padded feet steady with eyes lowered"),
|
||||
V("bunches fleece above a straight back and pulls", "leans forward on padded feet and draws steadily"),
|
||||
V("nudges {target} with delicate split-lip touches", "kneels and licks {target} while humming gently"),
|
||||
V("draws its long neck back and flicks its muzzle", "dips its muzzle in quick beating strokes"),
|
||||
V("bounds away in long rocking strides with fleece flying", "gallops off on padded feet with neck extended"),
|
||||
V("folds long legs beneath thick fleece", "kneels as padded joints tuck under its chest"),
|
||||
V("stands tall with neck high and ears fixed", "braces behind a spit and a forward kick"),
|
||||
V("curves its long neck with ears held still", "tilts its head in slow precise arcs"),
|
||||
V("clips with split lips between careful foot placements", "lowers its long neck and clips with soft lips"),
|
||||
V("squats on folded hind legs with tail lifted", "balances on padded feet while its rear drops"),
|
||||
V("turns its long neck between conflicting directions", "steps sideways as upright ears swivel unevenly"),
|
||||
V("kneels low beneath a curtain of fleece", "rests its weight low while its jaw rolls slowly"),
|
||||
V("pivots stiff-legged and stretches its neck forward", "paws in short bursts with neck extended"),
|
||||
V("steps soft-footed with mobile split lips ready", "snatches quickly then retreats behind swaying fleece"),
|
||||
V("jerks its long neck while padded feet stamp", "bounds rigidly with ears pinned flat"),
|
||||
V("dreams with folded legs twitching beneath its fleece", "hums faintly as its long neck shifts in sleep"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"armadillo",
|
||||
V("squeaks a dry tune beneath its plated brow", "sings in clipped chirps while armor bands flex"),
|
||||
V("courts by circling low and touching pointed snouts", "mates with broad claws braced beneath overlapping armor"),
|
||||
V("farms by raking in alternating foreclaw strokes", "plants with snout low and shell rocking"),
|
||||
V("pushes pollen onward with its narrow snout", "carries pollen beneath its plated underside"),
|
||||
V("trades with quick sniffs and foreclaw taps", "barters from beneath its armored brow"),
|
||||
V("fishes with broad claws poised and snout extended", "fishes low while armor bands rise with each breath"),
|
||||
V("hauls backward with digging claws locked down", "pushes steadily behind an armored shoulder"),
|
||||
V("heals {target} through small snout touches", "heals {target} while keeping broad foreclaws tucked"),
|
||||
V("stokes fire with short foreclaw scrapes", "fans the flames from beneath its plated brow"),
|
||||
V("flees in a rapid armored scuttle", "scrambles away with armor bands pumping over short legs"),
|
||||
V("settles by scraping with broad foreclaws", "turns in a low circle and tucks beneath its shell"),
|
||||
V("faces battle behind overlapping plates and flexed claws", "holds a warrior crouch with pointed snout forward"),
|
||||
V("reads with snout tracking side to side", "reads steadily beneath a motionless plated brow"),
|
||||
V("gathers life through careful sniffs and shallow scrapes", "gathers life with broad claws opening lightly"),
|
||||
V("raises its armored tail and crouches low", "relieves itself with foreclaws planted wide"),
|
||||
V("circles low and touches pointed snouts", "mates with broad claws braced beneath overlapping armor"),
|
||||
V("rakes in alternating foreclaw strokes", "presses with snout low while its shell rocks"),
|
||||
V("pushes onward with its narrow snout", "sweeps its plated underside in short brushing strokes"),
|
||||
V("sniffs quickly and taps with foreclaws", "bobs its snout from beneath its armored brow"),
|
||||
V("extends its snout with broad claws poised", "holds low while armor bands rise with each breath"),
|
||||
V("locks digging claws and pulls backward", "pushes steadily behind an armored shoulder"),
|
||||
V("touches {target} with small snout presses", "tucks broad foreclaws while nuzzling {target}"),
|
||||
V("scrapes short strokes with both foreclaws", "beats downward from beneath its plated brow"),
|
||||
V("scuttles away in a rapid armored rush", "scrambles off with armor bands pumping over short legs"),
|
||||
V("scrapes a circle with broad foreclaws then tucks close", "turns low and curls beneath its shell"),
|
||||
V("faces outward behind overlapping plates and flexed claws", "holds a low crouch with pointed snout forward"),
|
||||
V("tracks side to side with its snout", "holds still beneath a motionless plated brow"),
|
||||
V("sniffs carefully then scrapes in shallow strokes", "opens broad claws lightly and scoops"),
|
||||
V("raises its armored tail and crouches low", "sets foreclaws wide while its rear drops"),
|
||||
V("scuttles in crossing circles with snout darting", "halts halfway into a curl and opens again"),
|
||||
V("recharges curled around its soft underside", "rests low while overlapping bands loosen"),
|
||||
V("scrabbles abruptly under a strange urge", "rises on hind feet and paddles broad claws"),
|
||||
V("steals with pointed snout low and claws silent", "hooks away quickly beneath its plated body"),
|
||||
V("curls around its soft underside", "rests low while overlapping bands loosen"),
|
||||
V("scrabbles abruptly with claws flying", "rises on hind feet and paddles broad claws"),
|
||||
V("keeps pointed snout low and claws silent", "hooks away quickly beneath its plated body"),
|
||||
V("bucks beneath its armor and rakes both claws forward", "uncurls in rigid jolts with snout snapping upward"),
|
||||
V("dreams curled tightly as armor bands pulse", "scrapes faintly in sleep with one broad foreclaw"));
|
||||
|
||||
|
|
@ -61,23 +61,23 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"bandit",
|
||||
V("sings under the breath with one hand at the throat", "threads a low tune through quick measured breaths"),
|
||||
V("courts through close gestures and deliberate body turns", "mates with hands braced and hips rocking steadily"),
|
||||
V("farms in a crouch with quick, exact handwork", "plants through alternating reaches and fingertip presses"),
|
||||
V("dusts pollen onward with nimble fingertips", "transfers pollen through quick turns of both wrists"),
|
||||
V("trades through clipped words and counting fingers", "barters with one hand held close"),
|
||||
V("fishes from a low stance with both hands poised", "fishes with narrowed eyes and still shoulders"),
|
||||
V("hauls with bent knees and both arms drawing", "shifts its grip through compact hand-over-hand pulls"),
|
||||
V("heals {target} with fast, precise fingers", "heals {target} with one hand braced and the other pressing"),
|
||||
V("stokes fire with face turned and forearm raised", "fans the flames through quick wrist turns"),
|
||||
V("flees through sharp turns and low sprinting steps", "retreats with shoulders tucked and hands close"),
|
||||
V("settles by lowering one foot and then the other", "crouches with shoulders tucked and hands drawn close"),
|
||||
V("takes a warrior stance with hands high and knees loose", "advances behind feints and a narrow profile"),
|
||||
V("reads with one finger marking each line", "reads in quick jumps of narrowed eyes"),
|
||||
V("gathers life with cupped hands and exact fingertips", "gathers life while shifting between knees and toes"),
|
||||
V("squats with back turned and shoulders alert", "relieves itself while checking both sides"),
|
||||
V("crouches and presses with quick exact hands", "reaches and presses in alternating fingertip strokes"),
|
||||
V("dusts onward with nimble fingertips", "turns both wrists through quick brushing strokes"),
|
||||
V("counts on fingers through clipped words", "holds one hand close and taps its fingers"),
|
||||
V("poises both hands from a low stance", "narrows its eyes with shoulders held still"),
|
||||
V("draws with bent knees and both arms", "pulls hand-over-hand in compact grips"),
|
||||
V("presses {target} with fast precise fingers", "braces one hand and presses {target} with the other"),
|
||||
V("turns its face aside with forearm raised", "turns both wrists in quick beating strokes"),
|
||||
V("sprints away through sharp low turns", "retreats with shoulders tucked and hands close"),
|
||||
V("lowers one foot and then the other into place", "crouches with shoulders tucked and hands drawn close"),
|
||||
V("stands with hands high and knees loose", "advances behind feints and a narrow profile"),
|
||||
V("marks each line with one finger", "sweeps narrowed eyes along in quick looks"),
|
||||
V("cups both hands and pinches with exact fingertips", "shifts between knees and toes while pinching"),
|
||||
V("squats with back turned and shoulders alert", "checks both sides while its rear drops"),
|
||||
V("cycles through three interrupted gestures", "turns twice with hands hovering at different angles"),
|
||||
V("recharges in a tight crouch with hands tucked", "rests lightly while breathing through closed lips"),
|
||||
V("moves under a strange urge through repeated wrist flicks", "paces a tight loop while fingers flex in sequence"),
|
||||
V("steals with a hooked finger and immediate retreat", "slips close, palms quickly, and turns away"),
|
||||
V("curls into a tight crouch with hands tucked", "rests lightly while breathing through closed lips"),
|
||||
V("flicks both wrists in repeated bursts", "paces a tight loop while fingers flex in sequence"),
|
||||
V("hooks with one finger and retreats at once", "slips close, palms quickly, and turns away"),
|
||||
V("moves in clipped angles with hands rigidly spread", "jerks upright as each shoulder pulls against the other"),
|
||||
V("dreams with fingers twitching against folded arms", "makes silent feints while curled in shallow sleep"));
|
||||
|
||||
|
|
@ -86,23 +86,23 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"bear",
|
||||
V("sings in deep pulses through a broad muzzle", "rumbles a tune while massive shoulders sway"),
|
||||
V("courts upright with muzzle rubbing and heavy huffs", "mates with broad hind paws planted and forepaws braced"),
|
||||
V("farms through deep scoops of long curved claws", "plants with shoulders rolling behind both paws"),
|
||||
V("smears pollen onward across its broad muzzle", "carries pollen through thick fur on wide paws"),
|
||||
V("trades with low grunts and open forepaws", "barters upright on heavy haunches"),
|
||||
V("fishes with muzzle low and one forepaw hovering", "fishes by swiping with long curved claws"),
|
||||
V("hauls with jaws set and massive shoulders driving", "drags backward on broad plantigrade paws"),
|
||||
V("heals {target} with small foreclaw presses", "heals {target} through close muzzle touches"),
|
||||
V("stokes fire with muzzle lifted and forearms back", "fans the flames with broad furred paws"),
|
||||
V("flees in a pounding four-pawed gallop", "lumbers away as heavy shoulders rise and fall"),
|
||||
V("settles by turning its broad body and scraping once", "drops onto its haunches before curling muzzle to paws"),
|
||||
V("rises warrior-tall with both forepaws spread", "charges behind a roar and rolling shoulders"),
|
||||
V("reads upright with forepaws held against its chest", "reads through slow sweeps of its broad muzzle"),
|
||||
V("gathers life between broad cupped paws", "gathers life with claw tips beneath a lowered muzzle"),
|
||||
V("squats heavily with short tail lifted", "relieves itself on braced hind paws"),
|
||||
V("scoops deep with long curved claws", "rolls both shoulders behind pressing paws"),
|
||||
V("smears onward across its broad muzzle", "carries along thick fur on wide paws"),
|
||||
V("grunts low with forepaws open", "stands upright on heavy haunches with paws open"),
|
||||
V("holds muzzle low with one forepaw hovering", "swipes with long curved claws"),
|
||||
V("pulls with jaws set and massive shoulders driving", "drags backward on broad flat paws"),
|
||||
V("presses {target} with small foreclaw touches", "touches {target} with close muzzle strokes"),
|
||||
V("lifts its muzzle with forearms drawn back", "beats downward with broad furred paws"),
|
||||
V("gallops away on pounding four-pawed strides", "lumbers off as heavy shoulders rise and fall"),
|
||||
V("turns its broad body, scrapes once, and drops down", "drops onto its haunches before curling muzzle to paws"),
|
||||
V("rises tall with both forepaws spread", "charges behind a roar and rolling shoulders"),
|
||||
V("holds upright with forepaws against its chest", "sweeps its broad muzzle in slow arcs"),
|
||||
V("cups between broad paws and scoops", "scoops with claw tips beneath a lowered muzzle"),
|
||||
V("squats heavily with short tail lifted", "braces on hind paws while its rear drops"),
|
||||
V("swings its broad head through opposing arcs", "rises halfway, drops down, and turns again"),
|
||||
V("recharges curled densely with paws over muzzle", "rests on its haunches while shoulders slowly slacken"),
|
||||
V("rocks upright under a strange urge and bats above its chest", "paces heavily while rubbing both forepaws together"),
|
||||
V("steals with one broad paw and a backward shuffle", "hooks away quickly beneath a lowered muzzle"),
|
||||
V("curls densely with paws over muzzle", "rests on its haunches while shoulders slowly slacken"),
|
||||
V("rocks upright and bats above its chest", "paces heavily while rubbing both forepaws together"),
|
||||
V("hooks with one broad paw and shuffles backward", "hooks away quickly beneath a lowered muzzle"),
|
||||
V("rears in stiff jolts with foreclaws spread", "lurches on all fours as its broad head snaps sideways"),
|
||||
V("dreams with paws kneading and muzzle rumbling", "paddles all four paws while twitching on its side"));
|
||||
|
||||
|
|
@ -110,24 +110,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"buffalo",
|
||||
V("sings in a chest-deep bellow beneath curved horns", "rolls a low tune through its beard and broad muzzle"),
|
||||
V("courts by circling with horned head held broadside", "mates on planted hooves beneath a rising shoulder hump"),
|
||||
V("farms with broad muzzle low and hooves pressing firmly", "plants through short, horn-guided pushes"),
|
||||
V("brushes pollen onward through its hanging beard", "carries pollen across its broad muzzle"),
|
||||
V("trades through deep grunts and measured horn dips", "barters broadside on four hooves"),
|
||||
V("fishes with nostrils flared and horned brow low", "fishes motionless with beard hanging"),
|
||||
V("hauls through its neck and massive shoulder hump", "leans forward as broad hooves dig in"),
|
||||
V("nudges and licks {target} slowly", "heals {target} with curved horns angled aside"),
|
||||
V("stokes fire with horned brow lowered", "fans the flames with short, heavy head sweeps"),
|
||||
V("flees in a rolling gallop beneath tossing horns", "thunders away with shoulder hump surging"),
|
||||
V("settles by folding thick legs under a massive chest", "turns broadside and lowers its horned head"),
|
||||
V("holds a warrior line with horns level and hooves spread", "drives forward behind its heavy skull"),
|
||||
V("reads with broad muzzle tracing each line", "reads through slow turns of its horned head"),
|
||||
V("gathers life using careful muzzle sweeps", "gathers life low beneath its brushing beard"),
|
||||
V("arches its heavy tail and spreads its hind hooves", "relieves itself beneath a level horned head"),
|
||||
V("circles with horned head held broadside", "mates on planted hooves beneath a rising shoulder hump"),
|
||||
V("presses firmly with broad muzzle low and hooves set", "pushes in short strokes guided by its horns"),
|
||||
V("brushes onward through its hanging beard", "sweeps across its broad muzzle in short strokes"),
|
||||
V("grunts deep and dips its horns in measure", "stands broadside on four hooves with horns dipped"),
|
||||
V("flares its nostrils with horned brow low", "holds still with beard hanging"),
|
||||
V("pulls through its neck and massive shoulder hump", "leans forward as broad hooves dig deep"),
|
||||
V("nudges and licks {target} slowly", "nuzzles {target} with curved horns angled aside"),
|
||||
V("lowers its horned brow and sweeps", "sweeps its heavy head in short beating arcs"),
|
||||
V("gallops away beneath tossing horns", "thunders off with shoulder hump surging"),
|
||||
V("folds thick legs under a massive chest", "turns broadside and lowers its horned head"),
|
||||
V("holds a line with horns level and hooves spread", "drives forward behind its heavy skull"),
|
||||
V("traces with broad muzzle in slow arcs", "turns its horned head through slow sweeps"),
|
||||
V("sweeps carefully with its muzzle and scoops", "scoops low beneath its brushing beard"),
|
||||
V("arches its heavy tail and spreads its hind hooves", "holds a level horned head while its rear drops"),
|
||||
V("pivots its horned head while hooves step out of rhythm", "starts a charge, checks, and turns broadside"),
|
||||
V("recharges chest-down with legs folded beneath", "stands ruminating while its shoulder hump settles"),
|
||||
V("bucks under a strange urge and tosses both horns", "stamps in a tight square with beard swinging"),
|
||||
V("steals by hooking quickly with its broad muzzle", "edges away behind a shield of curved horns"),
|
||||
V("lies chest-down with legs folded beneath", "stands chewing while its shoulder hump settles"),
|
||||
V("bucks and tosses both horns", "stamps in a tight square with beard swinging"),
|
||||
V("hooks quickly with its broad muzzle", "edges away behind a shield of curved horns"),
|
||||
V("lurches in rigid surges with horns sweeping", "stamps unevenly as its heavy head jerks low"),
|
||||
V("dreams with hooves kicking beneath a heaving chest", "bellows faintly while its horned head shifts"));
|
||||
|
||||
|
|
@ -135,24 +135,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"capybara",
|
||||
V("sings in soft whistles through a blunt muzzle", "purrs a bubbling tune with rounded ears flicking"),
|
||||
V("courts through nose touches and close body circling", "mates on short legs with webbed toes spread"),
|
||||
V("farms with broad incisors clipping and forefeet pressing", "plants low behind a blunt muzzle"),
|
||||
V("pushes pollen onward with whiskers spread", "carries pollen across its bobbing blunt nose"),
|
||||
V("trades through soft whistles and brief muzzle dips", "barters seated squarely on folded feet"),
|
||||
V("fishes with webbed toes braced and whiskers forward", "fishes with blunt chin held low"),
|
||||
V("hauls by gripping firmly with broad incisors", "pushes forward on short legs behind a broad chest"),
|
||||
V("nibbles {target} lightly with broad incisors", "heals {target} with careful forefoot presses"),
|
||||
V("stokes fire with blunt muzzle tilted away", "fans the flames through short head bobs"),
|
||||
V("flees in compact bounds on short legs", "scampers away with webbed toes splayed wide"),
|
||||
V("settles by folding its feet under a barrel body", "turns once and rests its blunt chin low"),
|
||||
V("faces battle with incisors bared and chest low", "holds a compact warrior crouch on splayed toes"),
|
||||
V("reads with whiskers brushing close to each line", "reads through small turns of its blunt muzzle"),
|
||||
V("gathers life with incisors and careful forefeet", "gathers life with whiskers fanned around its muzzle"),
|
||||
V("raises its short tail and squats on splayed hind toes", "relieves itself with barrel body held level"),
|
||||
V("touches noses and circles close", "mates on short legs with webbed toes spread"),
|
||||
V("clips with broad incisors and presses with forefeet", "presses low behind a blunt muzzle"),
|
||||
V("pushes onward with whiskers spread", "bobs its blunt nose through short brushing strokes"),
|
||||
V("whistles softly and dips its muzzle briefly", "sits squarely on folded feet and dips its muzzle"),
|
||||
V("braces webbed toes with whiskers forward", "holds its blunt chin low"),
|
||||
V("grips firmly with broad incisors and pulls", "pushes forward on short legs behind a broad chest"),
|
||||
V("nibbles {target} lightly with broad incisors", "presses {target} carefully with both forefeet"),
|
||||
V("tilts its blunt muzzle aside and sweeps", "bobs its head in short beating strokes"),
|
||||
V("bounds away in compact strides on short legs", "scampers off with webbed toes splayed wide"),
|
||||
V("folds its feet under a barrel body", "turns once and rests its blunt chin low"),
|
||||
V("bares its incisors with chest held low", "holds a compact crouch on splayed toes"),
|
||||
V("brushes whiskers close from side to side", "turns its blunt muzzle in small sweeps"),
|
||||
V("clips with incisors and careful forefeet", "fans whiskers around its muzzle while clipping"),
|
||||
V("raises its short tail and squats on splayed hind toes", "holds its barrel body level while its rear drops"),
|
||||
V("bobs between directions while rounded ears flick", "scampers a half-circle and freezes nose-first"),
|
||||
V("recharges in a square loaf on folded feet", "rests chin-down while its barrel sides slow"),
|
||||
V("hops repeatedly as a strange urge takes hold", "bobs its blunt head and paddles both forefeet"),
|
||||
V("steals with a quick incisor grip and low retreat", "nudges close, snatches, and scampers away"),
|
||||
V("loafs square on folded feet", "rests chin-down while its barrel sides slow"),
|
||||
V("hops repeatedly with blunt head bobbing", "bobs its blunt head and paddles both forefeet"),
|
||||
V("grips with one quick incisor bite and retreats low", "nudges close, snatches, and scampers away"),
|
||||
V("jerks in compact hops with incisors exposed", "paddles stiff forefeet while its blunt head twists"),
|
||||
V("dreams with webbed toes twitching beneath its body", "whistles faintly as its blunt muzzle bobs"));
|
||||
|
||||
|
|
@ -160,24 +160,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"cat",
|
||||
V("sings in rising yowls with whiskers pushed forward", "trills a tune while its tail curls and uncurls"),
|
||||
V("courts through calling, circling, and cheek presentation", "mates with hind paws planted and tail held aside"),
|
||||
V("farms with precise paw scrapes and close sniffing", "plants with tucked claws and twitching tail"),
|
||||
V("brushes pollen onward on silent paws", "carries pollen across whiskers and cheek fur"),
|
||||
V("trades with measured chirps and one careful paw", "barters seated behind a curling tail"),
|
||||
V("fishes with body flattened and forepaw hovering", "fishes by striking with unsheathed claws"),
|
||||
V("hauls backward with teeth set and paws braced", "hooks and draws with curved foreclaws"),
|
||||
V("licks {target} roughly between gentle paw touches", "heals {target} with whiskers forward and claws tucked"),
|
||||
V("stokes fire with whiskers drawn back", "fans the flames with its curling tail"),
|
||||
V("flees in low, elastic bounds with tail streaming", "springs away as hind claws drive hard"),
|
||||
V("settles by kneading twice and circling tightly", "folds paws beneath its chest and wraps its tail"),
|
||||
V("takes a warrior crouch with back rippling", "advances sideways with ears flat and claws bare"),
|
||||
V("reads with pupils tracking steadily across each line", "reads through tiny whiskered head turns"),
|
||||
V("gathers life with delicate paw hooks", "gathers life while nose and whiskers pulse"),
|
||||
V("squats with hind legs spread and tail lifted clear", "relieves itself before scraping with both forepaws"),
|
||||
V("calls, circles, and presents its cheek", "mates with hind paws planted and tail held aside"),
|
||||
V("scrapes with precise paws and sniffs close", "presses with tucked claws and twitching tail"),
|
||||
V("brushes onward on silent paws", "sweeps whiskers and cheek fur in short strokes"),
|
||||
V("chirps in measure and extends one careful paw", "sits behind a curling tail and extends one paw"),
|
||||
V("flattens its body with one forepaw hovering", "strikes with unsheathed claws"),
|
||||
V("pulls backward with teeth set and paws braced", "hooks and draws with curved foreclaws"),
|
||||
V("licks {target} roughly between gentle paw touches", "licks {target} with whiskers forward and claws tucked"),
|
||||
V("draws its whiskers back and sweeps", "beats with its curling tail"),
|
||||
V("bounds away low and elastic with tail streaming", "springs off as hind claws drive hard"),
|
||||
V("kneads twice and circles tightly before curling close", "folds paws beneath its chest and wraps its tail"),
|
||||
V("crouches with back rippling", "advances sideways with ears flat and claws bare"),
|
||||
V("tracks with pupils steady as its head turns", "turns its whiskered head in tiny sweeps"),
|
||||
V("hooks delicately with one paw and scoops", "pulses nose and whiskers while scooping"),
|
||||
V("squats with hind legs spread and tail lifted clear", "scrapes with both forepaws after its rear drops"),
|
||||
V("turns after its own tail, then freezes abruptly", "steps toward two directions with ears swiveling apart"),
|
||||
V("recharges curled nose-to-tail with paws hidden", "rests in a compact loaf while whiskers slacken"),
|
||||
V("chatters under a strange urge and paws repeatedly", "arches, sidesteps, and lashes its tail without pause"),
|
||||
V("steals with a silent paw hook and backward spring", "closes its teeth quickly and slips away low"),
|
||||
V("curls nose-to-tail with paws hidden", "rests in a compact loaf while whiskers slacken"),
|
||||
V("chatters and paws repeatedly", "arches, sidesteps, and lashes its tail without pause"),
|
||||
V("hooks silently with one paw and springs backward", "closes its teeth quickly and slips away low"),
|
||||
V("stalks in rigid steps with pupils stretched wide", "jerks its head sideways while claws open and close"),
|
||||
V("dreams with paws kneading and tail tip flicking", "chirps asleep as hind legs make tiny pounces"));
|
||||
|
||||
|
|
@ -185,24 +185,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"cow",
|
||||
V("sings in long lowing notes through a broad muzzle", "rolls a slow tune beneath a swinging dewlap"),
|
||||
V("courts with flank sniffing and chin resting across a back", "mates on cloven hooves with tail raised aside"),
|
||||
V("farms with broad muzzle sweeping and hooves pressing", "plants in slow passes beneath a wide forehead"),
|
||||
V("sweeps pollen onward across its broad muzzle", "carries pollen on its rough tongue and nose"),
|
||||
V("trades through low calls and slow forehead dips", "barters while chewing between low signals"),
|
||||
V("fishes with broad muzzle lowered and nostrils flaring", "fishes on quietly planted cloven hooves"),
|
||||
V("hauls with broad chest forward and neck straight", "draws steadily as cloven hooves brace"),
|
||||
V("licks {target} with a broad rough tongue", "heals {target} with its forehead angled aside"),
|
||||
V("stokes fire with broad muzzle lifted", "fans the flames with slow tail switches"),
|
||||
V("flees in a heavy gallop with dewlap swinging", "runs away on pounding cloven hooves"),
|
||||
V("settles by folding its forelegs beneath a broad belly", "turns slowly and lowers its heavy body"),
|
||||
V("holds a warrior stance with forehead low and hooves wide", "drives ahead behind a swinging horned head"),
|
||||
V("reads with broad muzzle moving along each line", "reads through slow, square head turns"),
|
||||
V("gathers life using tongue, muzzle, and careful hooves", "gathers life low beneath a broad forehead"),
|
||||
V("raises its tail and spreads its hind hooves", "relieves itself while continuing a slow jaw roll"),
|
||||
V("sniffs a flank and rests its chin across a back", "mates on cloven hooves with tail raised aside"),
|
||||
V("sweeps with broad muzzle and presses with hooves", "presses in slow strokes beneath a wide forehead"),
|
||||
V("sweeps onward across its broad muzzle", "carries along its rough tongue and nose"),
|
||||
V("calls low and dips its forehead slowly", "chews between low calls and forehead dips"),
|
||||
V("lowers its broad muzzle with nostrils flaring", "holds still on quietly planted cloven hooves"),
|
||||
V("pulls with broad chest forward and neck straight", "draws steadily as cloven hooves brace"),
|
||||
V("licks {target} with a broad rough tongue", "nuzzles {target} with its forehead angled aside"),
|
||||
V("lifts its broad muzzle and sweeps", "switches its tail in slow beating arcs"),
|
||||
V("gallops away heavily with dewlap swinging", "runs off on pounding cloven hooves"),
|
||||
V("folds its forelegs beneath a broad belly", "turns slowly and lowers its heavy body"),
|
||||
V("holds stance with forehead low and hooves wide", "drives ahead behind a swinging horned head"),
|
||||
V("moves its broad muzzle along in slow sweeps", "turns its head in slow square sweeps"),
|
||||
V("scoops with tongue, muzzle, and careful hooves", "scoops low beneath a broad forehead"),
|
||||
V("raises its tail and spreads its hind hooves", "rolls its jaw slowly while its rear drops"),
|
||||
V("steps forward and back while its broad head swings", "turns from one side to the other with nostrils flaring"),
|
||||
V("recharges belly-down while chewing in circles", "rests on folded legs with tail and ears barely moving"),
|
||||
V("kicks its hind heels under a strange urge", "sidesteps repeatedly with forehead dipping"),
|
||||
V("steals with a swift tongue curl and muzzle withdrawal", "edges close, closes its broad lips, and backs away"),
|
||||
V("lies belly-down while chewing in circles", "rests on folded legs with tail and ears barely moving"),
|
||||
V("kicks its hind heels repeatedly", "sidesteps repeatedly with forehead dipping"),
|
||||
V("curls its tongue swiftly and withdraws its muzzle", "edges close, closes its broad lips, and backs away"),
|
||||
V("stamps in uneven beats as its head jerks", "lurches broadside with tail rigid and jaw still"),
|
||||
V("dreams with cloven hooves twitching under its belly", "lows softly as its broad muzzle shifts"));
|
||||
|
||||
|
|
@ -210,49 +210,49 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"dog",
|
||||
V("sings in rising howls with muzzle lifted", "threads yips into a tune while its tail keeps time"),
|
||||
V("courts through circling, sniffing, and close tail signals", "mates on braced paws with hindquarters aligned"),
|
||||
V("farms by digging in alternating forepaw strokes", "plants nose-first with tail held level"),
|
||||
V("pushes pollen onward with repeated nose passes", "carries pollen across its muzzle with ears forward"),
|
||||
V("trades through short barks and alternating paw taps", "barters seated upright on its haunches"),
|
||||
V("fishes with nose low and one forepaw raised", "fishes with a sudden snap after holding still"),
|
||||
V("hauls with jaws firm and all four paws driving", "pulls backward while shoulders bunch"),
|
||||
V("licks and nudges {target} carefully", "heals {target} with ears fixed forward"),
|
||||
V("stokes fire with nose turned and tail lowered", "fans the flames through quick paw strokes"),
|
||||
V("flees in long bounds with ears swept back", "sprints away as hind paws drive beneath its body"),
|
||||
V("settles by circling twice and testing with its nose", "scrapes briefly, then folds nose beneath tail"),
|
||||
V("stands warrior-alert with hackles raised and paws spread", "advances behind bared teeth and braced forelegs"),
|
||||
V("reads with nose tracing beneath each line", "reads through quick head tilts"),
|
||||
V("gathers life with nose close and forepaws moving", "gathers life with careful jaw grips and short sniffs"),
|
||||
V("squats on bent hind legs with tail lifted", "relieves itself while forepaws hold steady"),
|
||||
V("circles, sniffs, and signals with its tail", "mates on braced paws with hindquarters aligned"),
|
||||
V("digs in alternating forepaw strokes", "presses nose-first with tail held level"),
|
||||
V("pushes onward with repeated nose sweeps", "sweeps across its muzzle with ears forward"),
|
||||
V("barks short and taps with alternating paws", "sits upright on its haunches and taps a paw"),
|
||||
V("holds nose low with one forepaw raised", "snaps suddenly after holding still"),
|
||||
V("pulls with jaws firm and all four paws driving", "pulls backward while shoulders bunch"),
|
||||
V("licks and nudges {target} carefully", "nuzzles {target} with ears fixed forward"),
|
||||
V("turns its nose aside with tail lowered", "beats with quick paw strokes"),
|
||||
V("bounds away in long strides with ears swept back", "sprints off as hind paws drive beneath its body"),
|
||||
V("circles twice and tests with its nose before curling close", "scrapes briefly, then folds nose beneath tail"),
|
||||
V("stands alert with hackles raised and paws spread", "advances behind bared teeth and braced forelegs"),
|
||||
V("traces with its nose held close", "tilts its head through quick sweeps"),
|
||||
V("scoops with nose close and forepaws moving", "grips carefully in its jaws between short sniffs"),
|
||||
V("squats on bent hind legs with tail lifted", "holds forepaws steady while its rear drops"),
|
||||
V("tilts its head from side to side and circles", "starts forward, wheels back, and sniffs again"),
|
||||
V("recharges curled tightly with nose beneath tail", "rests flank-down while paws and ears slacken"),
|
||||
V("chases a strange urge through tight, repeated circles", "bows, springs, and paws in quick succession"),
|
||||
V("steals with a quick jaw grip and bounding retreat", "slips close nose-first, snatches, and trots away"),
|
||||
V("moves in stiff lunges with hackles standing", "opens and closes its jaws while its head jerks sharply"),
|
||||
V("curls tightly with nose beneath tail", "rests flank-down while paws and ears slacken"),
|
||||
V("chases itself through tight repeated circles", "bows, springs, and paws in quick succession"),
|
||||
V("grips quickly in its jaws and bounds away", "slips close nose-first, snatches, and trots away"),
|
||||
V("lunges stiffly with hackles standing", "opens and closes its jaws while its head jerks sharply"),
|
||||
V("dreams with paws running and muzzle softly yipping", "twitches on its side as its tail taps"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"fox",
|
||||
V("sings in clear yips through a pointed muzzle", "threads rasping notes while its brush sways"),
|
||||
V("courts with gekker calls and brush-led circles", "mates on narrow paws with brush lifted aside"),
|
||||
V("farms through neat forepaw scrapes and precise sniffs", "plants lightly with pointed muzzle low"),
|
||||
V("brushes pollen onward with its trailing brush", "carries pollen across its narrow muzzle"),
|
||||
V("trades through quick chirps and delicate paw gestures", "barters seated behind a curled brush"),
|
||||
V("fishes from a still crouch with ears fixed", "fishes by pouncing forepaws-first"),
|
||||
V("hauls with narrow jaws set and paws skimming backward", "draws in short pulls beneath a level brush"),
|
||||
V("nibbles and licks {target} delicately", "heals {target} with pointed ears held forward"),
|
||||
V("stokes fire with whiskers tucked and brush high", "fans the flames with quick brush sweeps"),
|
||||
V("flees in light bounds with brush streaming", "darts away on narrow paws through abrupt turns"),
|
||||
V("settles by circling tightly beneath its own brush", "scrapes with quick forepaws and tucks its muzzle"),
|
||||
V("takes a warrior crouch with ears flat and brush level", "darts forward behind bared narrow teeth"),
|
||||
V("reads with pointed muzzle tracking each line", "reads with ears pricked and brush curled close"),
|
||||
V("gathers life using precise paw taps and muzzle touches", "gathers life lightly with whiskers fanned"),
|
||||
V("arches its brush and crouches on narrow hind paws", "relieves itself with pointed muzzle held alert"),
|
||||
V("gekker-calls and circles brush-led", "mates on narrow paws with brush lifted aside"),
|
||||
V("scrapes neatly with forepaws and sniffs precisely", "presses lightly with pointed muzzle low"),
|
||||
V("brushes onward with its trailing brush", "sweeps across its narrow muzzle in short strokes"),
|
||||
V("chirps quickly and gestures with delicate paws", "sits behind a curled brush and extends a paw"),
|
||||
V("holds still in a crouch with ears fixed", "pounces forepaws-first"),
|
||||
V("pulls with narrow jaws set and paws skimming backward", "draws in short pulls beneath a level brush"),
|
||||
V("nibbles and licks {target} delicately", "nuzzles {target} with pointed ears held forward"),
|
||||
V("tucks its whiskers with brush held high", "sweeps quickly with its brush"),
|
||||
V("bounds away lightly with brush streaming", "darts off on narrow paws through abrupt turns"),
|
||||
V("circles tightly beneath its own brush", "scrapes with quick forepaws and tucks its muzzle"),
|
||||
V("crouches with ears flat and brush level", "darts forward behind bared narrow teeth"),
|
||||
V("tracks with pointed muzzle held close", "holds ears pricked with brush curled close"),
|
||||
V("taps precisely with paws and touches with muzzle", "fans whiskers lightly while scooping"),
|
||||
V("arches its brush and crouches on narrow hind paws", "holds pointed muzzle alert while its rear drops"),
|
||||
V("pivots between sounds with ears pointing apart", "pounces one way, checks, and circles back"),
|
||||
V("recharges curled beneath its sweeping brush", "rests with pointed muzzle tucked and paws hidden"),
|
||||
V("springs vertically under a strange urge", "gekker-calls while whipping around after its brush"),
|
||||
V("steals with a delicate bite and instant sidestep", "slips close on narrow paws and darts away"),
|
||||
V("curls beneath its sweeping brush", "rests with pointed muzzle tucked and paws hidden"),
|
||||
V("springs vertically and lands stiff", "gekker-calls while whipping around after its brush"),
|
||||
V("bites delicately and sidesteps at once", "slips close on narrow paws and darts away"),
|
||||
V("stalks in angular jolts with brush rigid", "snaps sideways as its pointed ears flatten"),
|
||||
V("dreams with narrow paws paddling beneath its brush", "yips faintly while its pointed muzzle twitches"));
|
||||
|
||||
|
|
@ -260,24 +260,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"goat",
|
||||
V("sings in broken bleats beneath a lifted chin", "trills nasally while its beard quivers"),
|
||||
V("courts through horn rubs, sniffs, and raised forequarters", "mates on hard cloven hooves with hind legs braced"),
|
||||
V("farms with split lips clipping and hooves pressing", "plants through short, horn-guided pushes"),
|
||||
V("pushes pollen onward with mobile split lips", "carries pollen along its beard and muzzle"),
|
||||
V("trades through nasal calls and compact horn dips", "barters balanced squarely on hard hooves"),
|
||||
V("fishes with horizontal pupils fixed and muzzle low", "fishes with forehooves planted close"),
|
||||
V("hauls with forehead down and cloven hooves gripping", "draws in springing pulls through its narrow chest"),
|
||||
V("licks {target} with careful lip and tongue strokes", "heals {target} with horns angled along its back"),
|
||||
V("stokes fire with beard lifted and muzzle back", "fans the flames through compact head tosses"),
|
||||
V("flees in steep, springing bounds", "scampers away with beard and short tail raised"),
|
||||
V("settles by placing each hoof and folding narrow legs", "turns once with horns high before kneeling"),
|
||||
V("stands warrior-ready on stiff legs with horns forward", "rears and drives down behind a compact headbutt"),
|
||||
V("reads with horizontal pupils following each line", "reads through tiny bearded head tilts"),
|
||||
V("gathers life with mobile lips and exact hoof placement", "gathers life close beneath its brushing beard"),
|
||||
V("lifts its short tail and squats on bent hind legs", "relieves itself with forehooves planted together"),
|
||||
V("rubs horns, sniffs, and raises its forequarters", "mates on hard cloven hooves with hind legs braced"),
|
||||
V("clips with split lips and presses with hooves", "pushes in short strokes guided by its horns"),
|
||||
V("pushes onward with mobile split lips", "sweeps along its beard and muzzle"),
|
||||
V("calls nasally and dips its horns compactly", "stands balanced squarely on hard hooves"),
|
||||
V("fixes horizontal pupils with muzzle low", "sets forehooves close and holds"),
|
||||
V("pulls with forehead down and cloven hooves gripping", "draws in springing pulls through its narrow chest"),
|
||||
V("licks {target} with careful lip and tongue strokes", "nuzzles {target} with horns angled along its back"),
|
||||
V("lifts its beard with muzzle drawn back", "tosses its head in compact beating arcs"),
|
||||
V("bounds away in steep springing strides", "scampers off with beard and short tail raised"),
|
||||
V("places each hoof and folds narrow legs", "turns once with horns high before kneeling"),
|
||||
V("stands ready on stiff legs with horns forward", "rears and drives down behind a compact headbutt"),
|
||||
V("follows with horizontal pupils held steady", "tilts its bearded head in tiny sweeps"),
|
||||
V("clips with mobile lips and exact hoof placement", "clips close beneath its brushing beard"),
|
||||
V("lifts its short tail and squats on bent hind legs", "sets forehooves together while its rear drops"),
|
||||
V("hops between positions while horizontal pupils scan", "starts to rear, drops, and turns in place"),
|
||||
V("recharges chest-down on folded narrow legs", "rests squarely while chewing with a sideways jaw"),
|
||||
V("rears repeatedly under a strange urge", "twists stiff-legged while tapping its horns together"),
|
||||
V("steals with split lips and a backward hop", "snatches quickly, then bounds clear on hard hooves"),
|
||||
V("lies chest-down on folded narrow legs", "rests squarely while chewing with a sideways jaw"),
|
||||
V("rears repeatedly and drops stiff-legged", "twists stiff-legged while tapping its horns together"),
|
||||
V("snatches with split lips and hops backward", "snatches quickly, then bounds clear on hard hooves"),
|
||||
V("bucks in rigid bursts with beard snapping", "jerks its horned head while hooves stamp crosswise"),
|
||||
V("dreams with stiff legs kicking beneath its chest", "bleats softly as its beard and muzzle twitch"));
|
||||
|
||||
|
|
@ -285,24 +285,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"hyena",
|
||||
V("sings in whooping pulses through heavy jaws", "cackles a jagged tune beneath rounded ears"),
|
||||
V("courts through close sniffing and sloping-body circles", "mates with powerful forequarters braced and hindquarters aligned"),
|
||||
V("farms with crushing jaws and alternating forepaw scrapes", "plants low beneath raised shoulders"),
|
||||
V("pushes pollen onward with persistent muzzle passes", "carries pollen across its heavy muzzle"),
|
||||
V("trades through whoops and measured jaw clacks", "barters from a high-shouldered stance"),
|
||||
V("fishes with heavy head low and rounded ears fixed", "fishes by snapping from braced forequarters"),
|
||||
V("hauls with jaws locked and shoulders driving", "drags backward as the sloping back tightens"),
|
||||
V("nibbles {target} carefully with its front teeth", "heals {target} with massive jaws held still"),
|
||||
V("stokes fire with heavy muzzle turned aside", "fans the flames through powerful forepaw strokes"),
|
||||
V("flees in an endurance lope with back sloping", "runs away as high shoulders pump steadily"),
|
||||
V("settles by circling on long forelegs and lowering its jaws", "folds belly-down beneath its raised shoulders"),
|
||||
V("takes a warrior stance with crushing jaws open", "surges forward behind powerful forequarters"),
|
||||
V("reads with heavy muzzle moving under each line", "reads while rounded ears remain still"),
|
||||
V("gathers life with strong forepaws and controlled incisors", "gathers life beneath a lowered heavy neck"),
|
||||
V("squats with short hindquarters lowered and tail raised", "relieves itself while forelegs stay nearly straight"),
|
||||
V("sniffs close and circles with sloping body", "mates with powerful forequarters braced and hindquarters aligned"),
|
||||
V("scrapes with crushing jaws and alternating forepaws", "presses low beneath raised shoulders"),
|
||||
V("pushes onward with repeated muzzle sweeps", "sweeps across its heavy muzzle"),
|
||||
V("whoops and clacks its jaws in measure", "stands high-shouldered and clacks its jaws"),
|
||||
V("holds heavy head low with rounded ears fixed", "snaps from braced forequarters"),
|
||||
V("pulls with jaws locked and shoulders driving", "drags backward as the sloping back tightens"),
|
||||
V("nibbles {target} carefully with its front teeth", "nuzzles {target} with massive jaws held still"),
|
||||
V("turns its heavy muzzle aside and sweeps", "beats with powerful forepaw strokes"),
|
||||
V("lopes away with back sloping", "runs off as high shoulders pump steadily"),
|
||||
V("circles on long forelegs and lowers its jaws", "folds belly-down beneath its raised shoulders"),
|
||||
V("stands with crushing jaws open", "surges forward behind powerful forequarters"),
|
||||
V("moves its heavy muzzle in slow close sweeps", "holds rounded ears still above a lowered muzzle"),
|
||||
V("scoops with strong forepaws and controlled incisors", "scoops beneath a lowered heavy neck"),
|
||||
V("squats with short hindquarters lowered and tail raised", "keeps forelegs nearly straight while its rear drops"),
|
||||
V("lopes a crooked loop and snaps back around", "shifts between crouch and standing as ears swivel"),
|
||||
V("recharges belly-down with jaws across both paws", "rests on one flank while high shoulders loosen"),
|
||||
V("cackles under a strange urge and wheels repeatedly", "bounds crookedly while its heavy jaws open and close"),
|
||||
V("steals with a crushing jaw grip and loping retreat", "creeps in high-shouldered, snatches, and wheels away"),
|
||||
V("lies belly-down with jaws across both paws", "rests on one flank while high shoulders loosen"),
|
||||
V("cackles and wheels repeatedly", "bounds crookedly while its heavy jaws open and close"),
|
||||
V("grips with crushing jaws and retreats in a lope", "creeps in high-shouldered, snatches, and wheels away"),
|
||||
V("lurches behind rigid forequarters with jaws clacking", "twists its sloping body as the heavy head jerks"),
|
||||
V("dreams with jaws opening and long forelegs twitching", "whoops faintly while curled beneath raised shoulders"));
|
||||
|
||||
|
|
@ -310,24 +310,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"monkey",
|
||||
V("sings in patterned hoots while both hands beat time", "threads chatter into a tune with tail balancing"),
|
||||
V("courts through grooming gestures and close body displays", "mates with hands braced and long tail held clear"),
|
||||
V("farms with nimble thumbs turning and pressing", "plants from a squat with both hands"),
|
||||
V("moves pollen with careful finger-and-thumb pinches", "carries pollen on fingertips while its tail counterbalances"),
|
||||
V("trades through rapid chatter and open-palmed gestures", "barters by counting across nimble fingers"),
|
||||
V("fishes in a crouch with one hand hovering", "fishes by snatching while the other hand braces"),
|
||||
V("hauls with both hands clasped and feet pushing", "draws backward with long tail held straight"),
|
||||
V("heals {target} with precise fingertips", "heals {target} carefully with both hands while squatting"),
|
||||
V("stokes fire with quick hands and face turned aside", "fans the flames with open palms"),
|
||||
V("flees in four-limbed bounds with tail streaming", "scrambles away as hands and feet alternate rapidly"),
|
||||
V("settles by patting and turning with both hands", "squats low and wraps its long tail close"),
|
||||
V("takes a warrior crouch with hands spread and teeth bared", "leaps forward behind a slap and grappling reach"),
|
||||
V("reads with one finger following each line", "reads through quick eye shifts and head tilts"),
|
||||
V("gathers life through nimble two-handed sorting", "gathers life with precise thumb-and-finger pinches"),
|
||||
V("squats deep with tail lifted clear", "relieves itself while balancing on feet and one hand"),
|
||||
V("grooms close and displays with its body", "mates with hands braced and long tail held clear"),
|
||||
V("turns and presses with nimble thumbs", "presses from a squat with both hands"),
|
||||
V("pinches carefully with finger and thumb", "carries on fingertips while its tail counterbalances"),
|
||||
V("chatters rapidly and gestures with open palms", "counts across nimble fingers with palms open"),
|
||||
V("crouches with one hand hovering", "snatches while the other hand braces"),
|
||||
V("pulls with both hands clasped and feet pushing", "draws backward with long tail held straight"),
|
||||
V("presses {target} with precise fingertips", "presses {target} carefully with both hands while squatting"),
|
||||
V("turns quick hands with face held aside", "beats with open palms"),
|
||||
V("bounds away on four limbs with tail streaming", "scrambles off as hands and feet alternate rapidly"),
|
||||
V("pats and turns with both hands before curling close", "squats low and wraps its long tail close"),
|
||||
V("crouches with hands spread and teeth bared", "leaps forward behind a slap and grappling reach"),
|
||||
V("follows along with one pointing finger", "shifts its eyes quickly between head tilts"),
|
||||
V("sorts with both nimble hands and pinches", "pinches precisely with thumb and finger"),
|
||||
V("squats deep with tail lifted clear", "balances on feet and one hand while its rear drops"),
|
||||
V("reaches three ways while its tail counters each turn", "rises on its hind feet, drops, and chatters in place"),
|
||||
V("recharges curled with hands beneath its chin", "rests in a compact squat while tail wraps close"),
|
||||
V("claps repeatedly under a strange urge", "leaps and lands while fingers spread and curl"),
|
||||
V("steals with one quick hand and a tail-balanced retreat", "palms swiftly, then bounds away on all fours"),
|
||||
V("curls with hands beneath its chin", "rests in a compact squat while tail wraps close"),
|
||||
V("claps repeatedly in sudden bursts", "leaps and lands while fingers spread and curl"),
|
||||
V("takes with one quick hand and retreats tail-balanced", "palms swiftly, then bounds away on all fours"),
|
||||
V("jerks through broken gestures with fingers splayed", "scrambles in place as head and tail snap opposite ways"),
|
||||
V("dreams with fingers grasping and tail slowly curling", "chatters softly while hands paddle beneath its chin"));
|
||||
|
||||
|
|
@ -335,24 +335,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"rabbit",
|
||||
V("sings in soft honks with nose pulsing rapidly", "chatters a tiny rhythm beneath upright ears"),
|
||||
V("courts through circling, chin contact, and high leaps", "mates on powerful hind feet with ears laid back"),
|
||||
V("farms with rapid forepaw scrapes and incisor clips", "plants crouched on folded hind legs"),
|
||||
V("pushes pollen onward through quick nose-first hops", "carries pollen on its muzzle with ears upright"),
|
||||
V("trades through nose touches and light forepaw taps", "barters sitting tall on long hind feet"),
|
||||
V("fishes from a low crouch with ears fixed forward", "fishes with nose rapidly twitching"),
|
||||
V("hauls with incisors gripping and hind feet pushing", "draws backward through quick, low hops"),
|
||||
V("licks and nibbles {target} gently", "heals {target} with upright ears held still"),
|
||||
V("stokes fire with short forepaw scrapes", "fans the flames through quick nose-first hops"),
|
||||
V("flees in accelerating bounds on long hind feet", "darts away through sharp leaps with ears flattened"),
|
||||
V("settles by scraping with both forepaws and turning", "folds hind legs beneath a compact loaf"),
|
||||
V("takes a warrior posture tall on hind feet", "boxes forward with rapid forepaw strikes"),
|
||||
V("reads with nose tracking beneath each line", "reads while one upright ear swivels"),
|
||||
V("gathers life with incisors clipping and forepaws pressing", "gathers life from a low hind-leg crouch"),
|
||||
V("raises its short tail over bent hind legs", "relieves itself in a compact crouch"),
|
||||
V("circles, touches chin, and leaps high", "mates on powerful hind feet with ears laid back"),
|
||||
V("scrapes rapidly with forepaws and clips with incisors", "presses crouched on folded hind legs"),
|
||||
V("pushes onward through quick nose-first hops", "sweeps across its muzzle with ears upright"),
|
||||
V("touches noses and taps lightly with forepaws", "sits tall on long hind feet and taps a forepaw"),
|
||||
V("holds a low crouch with ears fixed forward", "twitches its nose rapidly while holding still"),
|
||||
V("pulls with incisors gripping and hind feet pushing", "draws backward through quick low hops"),
|
||||
V("licks and nibbles {target} gently", "nuzzles {target} with upright ears held still"),
|
||||
V("scrapes short strokes with both forepaws", "hops nose-first in quick beating bursts"),
|
||||
V("bounds away accelerating on long hind feet", "darts off through sharp leaps with ears flattened"),
|
||||
V("scrapes with both forepaws and turns before curling close", "folds hind legs beneath a compact loaf"),
|
||||
V("stands tall on hind feet ready to strike", "boxes forward with rapid forepaw strikes"),
|
||||
V("tracks with its nose held close", "holds one upright ear swiveling as its nose tracks"),
|
||||
V("clips with incisors and presses with forepaws", "clips from a low hind-leg crouch"),
|
||||
V("raises its short tail over bent hind legs", "holds a compact crouch while its rear drops"),
|
||||
V("hops toward one side while both ears point elsewhere", "freezes, turns, and launches into a second direction"),
|
||||
V("recharges in a compact loaf with feet hidden", "rests stretched low while long ears settle"),
|
||||
V("leaps and twists under a strange urge", "darts in tight circles before kicking both hind feet"),
|
||||
V("steals with one incisor nip and a sudden bound", "edges close nose-first, snatches, and darts away"),
|
||||
V("loafs compact with feet hidden", "rests stretched low while long ears settle"),
|
||||
V("leaps and twists in sudden bursts", "darts in tight circles before kicking both hind feet"),
|
||||
V("nips with one incisor and bounds suddenly", "edges close nose-first, snatches, and darts away"),
|
||||
V("jerks through crooked hops with ears rigid", "boxes forward as its nose stops twitching"),
|
||||
V("dreams with hind feet kicking beneath a compact body", "honks faintly while ears and whiskers twitch"));
|
||||
|
||||
|
|
@ -360,49 +360,49 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"raccoon",
|
||||
V("sings in raspy trills with black forepaws clasped", "chirrs a tune while its ringed tail keeps balance"),
|
||||
V("courts through face sniffing and two-pawed grooming", "mates on plantigrade paws with ringed tail held aside"),
|
||||
V("farms with sensitive fingers sifting and turning", "plants while crouched behind a masked face"),
|
||||
V("moves pollen delicately with both black paws", "carries pollen on sensitive fingers with ringed tail trailing"),
|
||||
V("trades through chirrs and quick finger counts", "barters sitting upright on plantigrade haunches"),
|
||||
V("fishes with sensitive forepaws spread and hovering", "fishes by plunging both black paws together"),
|
||||
V("hauls with fingers hooked and arched back pulling", "draws backward on nimble plantigrade paws"),
|
||||
V("heals {target} through careful two-pawed touches", "heals {target} fingertip-first beneath its mask"),
|
||||
V("stokes fire with black paws held back", "fans the flames with its raised ringed tail"),
|
||||
V("flees in an arched-back gallop with tail streaming", "scampers away on nimble plantigrade paws"),
|
||||
V("settles by patting around with both sensitive paws", "turns and curls masked muzzle against ringed tail"),
|
||||
V("stands warrior-upright with black claws spread", "lunges from its haunches behind both grasping paws"),
|
||||
V("reads with one black finger tracing each line", "reads beneath motionless dark facial markings"),
|
||||
V("gathers life through two-pawed feeling and precise pinches", "gathers life with sensitive fingers spread"),
|
||||
V("squats on plantigrade hind paws with ringed tail raised", "relieves itself while both forepaws stay planted"),
|
||||
V("sniffs faces and grooms with both paws", "mates on flat paws with ringed tail held aside"),
|
||||
V("sifts and turns with sensitive fingers", "presses crouched behind a masked face"),
|
||||
V("moves delicately with both black paws", "carries on sensitive fingers with ringed tail trailing"),
|
||||
V("chirrs and counts quickly on its fingers", "sits upright on flat haunches and spreads its fingers"),
|
||||
V("spreads sensitive forepaws and holds them hovering", "plunges both black paws together"),
|
||||
V("pulls with fingers hooked and arched back straining", "draws backward on nimble flat paws"),
|
||||
V("touches {target} carefully with both paws", "presses {target} fingertip-first beneath its mask"),
|
||||
V("holds black paws back and sweeps", "beats with its raised ringed tail"),
|
||||
V("gallops away arched-backed with tail streaming", "scampers off on nimble flat paws"),
|
||||
V("pats around with both sensitive paws before curling close", "turns and curls masked muzzle against ringed tail"),
|
||||
V("stands upright with black claws spread", "lunges from its haunches behind both grasping paws"),
|
||||
V("traces with one black finger held close", "holds still beneath motionless dark facial markings"),
|
||||
V("feels with both paws and pinches precisely", "spreads sensitive fingers while pinching"),
|
||||
V("squats on flat hind paws with ringed tail raised", "keeps both forepaws planted while its rear drops"),
|
||||
V("rubs its paws together, turns, and checks again", "reaches in opposite directions beneath a twitching mask"),
|
||||
V("recharges curled around its ringed tail", "rests on its side with black forepaws folded"),
|
||||
V("rubs its forepaws under a strange urge", "rolls and rights itself while ringed tail lashes"),
|
||||
V("steals with both sensitive paws and a quick tuck", "palms swiftly beneath its chest and scampers away"),
|
||||
V("curls around its ringed tail", "rests on its side with black forepaws folded"),
|
||||
V("rubs its forepaws in repeated rapid strokes", "rolls and rights itself while ringed tail lashes"),
|
||||
V("takes with both sensitive paws and tucks quickly", "palms swiftly beneath its chest and scampers away"),
|
||||
V("jerks upright with black fingers rigidly spread", "paddles both forepaws as its masked head snaps"),
|
||||
V("dreams with black paws rubbing and ringed tail twitching", "chirrs asleep while sensitive fingers flex"));
|
||||
|
||||
AddExtended(
|
||||
voices,
|
||||
"rat",
|
||||
V("sings in thin squeaks while whiskers keep rhythm", "chirps a quick tune between soft incisor bruxes"),
|
||||
V("courts through whisker contact and rapid close circling", "mates on small hind feet with bare tail extended"),
|
||||
V("farms by gnawing, scraping, and pressing with pink paws", "plants low behind chisel incisors"),
|
||||
V("sweeps pollen onward with fanned whiskers", "carries pollen across its pointed muzzle"),
|
||||
V("trades through rapid squeaks and clasped pink paws", "barters upright with bare tail balancing"),
|
||||
V("fishes with pointed muzzle low and paws hovering", "fishes by snapping with chisel incisors"),
|
||||
V("hauls with incisors locked and hind feet driving", "drags backward while bare tail braces each turn"),
|
||||
V("licks {target} between tiny paw presses", "heals {target} beneath a fan of trembling whiskers"),
|
||||
V("stokes fire with whiskers pulled back", "fans the flames through rapid forepaw strokes"),
|
||||
V("flees in a low scurry with bare tail streaming", "darts away through tight turns on close-set feet"),
|
||||
V("settles by scraping rapidly and curling around its tail", "turns in place before tucking pointed muzzle down"),
|
||||
V("stands warrior-upright with incisors bared", "rushes low behind whiskers and chisel teeth"),
|
||||
V("reads with pointed muzzle passing beneath each line", "reads while round ears hold still"),
|
||||
V("gathers life using pink paws and precise incisor nips", "gathers life with whiskers sweeping both sides"),
|
||||
V("squats on small hind feet with bare tail lifted", "relieves itself while forepaws hover at its chest"),
|
||||
V("sings in thin squeaks while whiskers keep rhythm", "chirps a quick tune between soft incisor grinds"),
|
||||
V("touches whiskers and circles rapidly close", "mates on small hind feet with bare tail extended"),
|
||||
V("gnaws, scrapes, and presses with pink paws", "presses low behind chisel incisors"),
|
||||
V("sweeps onward with fanned whiskers", "sweeps across its pointed muzzle"),
|
||||
V("squeaks rapidly with pink paws clasped", "stands upright with bare tail balancing"),
|
||||
V("holds pointed muzzle low with paws hovering", "snaps with chisel incisors"),
|
||||
V("pulls with incisors locked and hind feet driving", "drags backward while bare tail braces each turn"),
|
||||
V("licks {target} between tiny paw presses", "nuzzles {target} beneath a fan of trembling whiskers"),
|
||||
V("pulls its whiskers back and sweeps", "beats with rapid forepaw strokes"),
|
||||
V("scurries away low with bare tail streaming", "darts off through tight turns on close-set feet"),
|
||||
V("scrapes rapidly and curls around its tail", "turns in place before tucking pointed muzzle down"),
|
||||
V("stands upright with incisors bared", "rushes low behind whiskers and chisel teeth"),
|
||||
V("passes its pointed muzzle along in close sweeps", "holds round ears still above a lowered muzzle"),
|
||||
V("nips with pink paws and precise incisors", "sweeps whiskers both sides while nipping"),
|
||||
V("squats on small hind feet with bare tail lifted", "hovers forepaws at its chest while its rear drops"),
|
||||
V("scurries in two crossing arcs and freezes upright", "turns with whiskers aimed one way and ears another"),
|
||||
V("recharges curled tightly around its bare tail", "rests belly-down with pointed muzzle on pink paws"),
|
||||
V("bruxes rapidly under a strange urge and wheels", "clasps its paws while bare tail lashes in circles"),
|
||||
V("steals with a fast incisor grip and low retreat", "snatches between pink paws and scurries away"),
|
||||
V("curls tightly around its bare tail", "rests belly-down with pointed muzzle on pink paws"),
|
||||
V("grinds its incisors rapidly and wheels", "clasps its paws while bare tail lashes in circles"),
|
||||
V("grips fast with incisors and retreats low", "snatches between pink paws and scurries away"),
|
||||
V("jerks upright with incisors chattering hard", "runs in broken circles as its bare tail stiffens"),
|
||||
V("dreams with pink paws clasping and tail curling", "squeaks asleep while whiskers pulse rapidly"));
|
||||
|
||||
|
|
@ -410,24 +410,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"rhino",
|
||||
V("sings in rough squeals beneath a heavy horn", "rumbles a blunt tune through thick folded lips"),
|
||||
V("courts through horn-side rubbing and close scenting", "mates on three-toed feet with massive shoulders braced"),
|
||||
V("farms by pressing with broad lip and heavy feet", "plants through short, horn-led pushes"),
|
||||
V("sweeps pollen onward with its square lip", "carries pollen across thick folded lips"),
|
||||
V("trades through rough snorts and slow horn dips", "barters standing square on three-toed feet"),
|
||||
V("fishes with small ears fixed and broad lip low", "fishes beneath a level horn"),
|
||||
V("hauls with horn base low and shoulders driving", "leans its folded hide forward on stout legs"),
|
||||
V("heals {target} through broad-lip nudges", "heals {target} with heavy horn angled aside"),
|
||||
V("stokes fire with horn and muzzle lifted", "fans the flames through heavy head sweeps"),
|
||||
V("flees in a pounding charge on three-toed feet", "runs away with folded hide shaking over thick shoulders"),
|
||||
V("settles by folding stout legs beneath thick hide", "turns heavily and lowers horn and chin"),
|
||||
V("holds a warrior line with horn level", "charges forward behind massive skull and shoulders"),
|
||||
V("reads with square lip passing beneath each line", "reads through slow horned head sweeps"),
|
||||
V("gathers life with broad lip and careful foot pressure", "gathers life low beneath its heavy horn"),
|
||||
V("raises its short tail and bends thick hind legs", "relieves itself while three-toed feet stay spread"),
|
||||
V("rubs horn-side and scents close", "mates on three-toed feet with massive shoulders braced"),
|
||||
V("presses with broad lip and heavy feet", "pushes in short strokes led by its horn"),
|
||||
V("sweeps onward with its square lip", "sweeps across thick folded lips"),
|
||||
V("snorts rough and dips its horn slowly", "stands square on three-toed feet and dips its horn"),
|
||||
V("fixes small ears with broad lip low", "holds still beneath a level horn"),
|
||||
V("pulls with horn base low and shoulders driving", "leans its folded hide forward on stout legs"),
|
||||
V("nudges {target} with its broad lip", "nuzzles {target} with heavy horn angled aside"),
|
||||
V("lifts horn and muzzle and sweeps", "sweeps its heavy head in beating arcs"),
|
||||
V("charges away pounding on three-toed feet", "runs off with folded hide shaking over thick shoulders"),
|
||||
V("folds stout legs beneath thick hide", "turns heavily and lowers horn and chin"),
|
||||
V("holds a line with horn level", "charges forward behind massive skull and shoulders"),
|
||||
V("passes its square lip along in close sweeps", "sweeps its horned head in slow arcs"),
|
||||
V("scoops with broad lip and careful foot pressure", "scoops low beneath its heavy horn"),
|
||||
V("raises its short tail and bends thick hind legs", "keeps three-toed feet spread while its rear drops"),
|
||||
V("pivots heavily as small ears point opposite ways", "starts a charge, halts, and swings its horn aside"),
|
||||
V("recharges flank-down on thick folded hide", "rests with stout legs tucked and horn angled low"),
|
||||
V("bucks under a strange urge and tosses its horn", "stamps a tight pattern on three-toed feet"),
|
||||
V("steals with a quick square-lip grip and shoulder turn", "edges close beneath its horn and tramps away"),
|
||||
V("lies flank-down on thick folded hide", "rests with stout legs tucked and horn angled low"),
|
||||
V("bucks and tosses its horn", "stamps a tight pattern on three-toed feet"),
|
||||
V("grips quickly with its square lip and turns its shoulder", "edges close beneath its horn and tramps away"),
|
||||
V("lurches in rigid charges as its horn snaps sideways", "stamps unevenly beneath twitching folded hide"),
|
||||
V("dreams with three-toed feet pushing and horn shifting", "rumbles asleep while its thick lips pulse"));
|
||||
|
||||
|
|
@ -435,24 +435,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"sheep",
|
||||
V("sings in wavering bleats through a narrow muzzle", "threads soft nasal notes while dense fleece trembles"),
|
||||
V("courts through woolly cheek rubs and close circling", "mates on narrow hooves with fleece pressed close"),
|
||||
V("farms with split lip clipping and small hoof presses", "plants beneath a lowered woolly brow"),
|
||||
V("brushes pollen onward through its fleece", "carries pollen on its muzzle and wool"),
|
||||
V("trades through short baas and gentle forehead dips", "barters while standing square beneath its fleece"),
|
||||
V("fishes with narrow muzzle low and ears angled forward", "fishes on close-planted hooves"),
|
||||
V("hauls with fleece bunching over narrow shoulders", "draws steadily while small hooves brace"),
|
||||
V("heals {target} through careful muzzle nudges", "heals {target} with woolly forehead angled aside"),
|
||||
V("stokes fire with fleece held back", "fans the flames through quick muzzle dips"),
|
||||
V("flees in stiff, bouncing strides with wool shaking", "runs away on narrow hooves beneath dense fleece"),
|
||||
V("settles by folding slim legs beneath a round fleece", "turns once and tucks muzzle against wool"),
|
||||
V("takes a warrior stance behind lowered woolly brow", "drives forward from braced hooves with forehead first"),
|
||||
V("reads with narrow muzzle tracing below each line", "reads while ears angle from the fleece"),
|
||||
V("gathers life with split lip and delicate hoof placement", "gathers life beneath a curtain of wool"),
|
||||
V("raises its short tail over bent hind legs", "relieves itself with narrow forehooves together"),
|
||||
V("rubs woolly cheeks and circles close", "mates on narrow hooves with fleece pressed close"),
|
||||
V("clips with split lip and presses with small hooves", "presses beneath a lowered woolly brow"),
|
||||
V("brushes onward through its fleece", "sweeps across its muzzle and wool"),
|
||||
V("baas short and dips its forehead gently", "stands square beneath its fleece and dips its brow"),
|
||||
V("holds narrow muzzle low with ears angled forward", "holds still on close-planted hooves"),
|
||||
V("pulls with fleece bunching over narrow shoulders", "draws steadily while small hooves brace"),
|
||||
V("nudges {target} carefully with its muzzle", "nuzzles {target} with woolly forehead angled aside"),
|
||||
V("holds fleece back and sweeps", "dips its muzzle in quick beating strokes"),
|
||||
V("bounds away in stiff bouncing strides with wool shaking", "runs off on narrow hooves beneath dense fleece"),
|
||||
V("folds slim legs beneath a round fleece", "turns once and tucks muzzle against wool"),
|
||||
V("stands behind lowered woolly brow", "drives forward from braced hooves with forehead first"),
|
||||
V("traces with narrow muzzle held close", "angles its ears out from the fleece as its muzzle tracks"),
|
||||
V("clips with split lip and delicate hoof placement", "clips beneath a curtain of wool"),
|
||||
V("raises its short tail over bent hind legs", "sets narrow forehooves together while its rear drops"),
|
||||
V("steps in a tight square while ears angle apart", "lowers its forehead, checks, and turns again"),
|
||||
V("recharges round-bodied on folded legs", "rests muzzle-deep against fleece while sides slow"),
|
||||
V("springs stiff-legged under a strange urge", "thrusts its forehead forward and hops backward"),
|
||||
V("steals with split lips and a quick woolly turn", "nudges close, grips briefly, and trots away"),
|
||||
V("rests round-bodied on folded legs", "rests muzzle-deep against fleece while sides slow"),
|
||||
V("springs stiff-legged in sudden bursts", "thrusts its forehead forward and hops backward"),
|
||||
V("snatches with split lips and turns woolly-quick", "nudges close, grips briefly, and trots away"),
|
||||
V("bucks in rigid hops with fleece shuddering", "jerks its woolly forehead down as hooves cross"),
|
||||
V("dreams with narrow hooves twitching beneath fleece", "bleats faintly while its woolly cheek shifts"));
|
||||
|
||||
|
|
@ -460,24 +460,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"unicorn",
|
||||
V("sings in clear nickers beneath its spiral horn", "whinnies a bright tune while its long mane ripples"),
|
||||
V("courts through arched-neck passes and muzzle touches", "mates on bright cloven hooves with horn held high"),
|
||||
V("farms with precise hoof presses and horn-guided turns", "plants beneath a flowing mane"),
|
||||
V("pushes pollen onward with mobile lips", "carries pollen along its muzzle beneath a lifted horn"),
|
||||
V("trades through bell-like nickers and measured head dips", "barters with spiral horn upright"),
|
||||
V("fishes with horn angled aside and muzzle low", "fishes on motionless cloven hooves"),
|
||||
V("hauls with arched neck straightening into each pull", "draws steadily while bright hooves brace"),
|
||||
V("heals {target} through gentle touches of mobile lips", "heals {target} with spiral horn angled past one shoulder"),
|
||||
V("stokes fire with mane and tail drawn back", "fans the flames through high forehoof strokes"),
|
||||
V("flees in a light canter with mane streaming", "gallops away beneath a level spiral horn"),
|
||||
V("settles by folding bright legs and curving horn aside", "turns once before resting beneath its mane"),
|
||||
V("stands warrior-tall with spiral horn aligned", "surges forward behind high forehooves and lowered horn"),
|
||||
V("reads with muzzle following beneath each line", "reads through small, poised turns of its horn"),
|
||||
V("gathers life with mobile lips and exact hoof placement", "gathers life with spiral horn lifted"),
|
||||
V("raises its flowing tail and bends its hind legs", "relieves itself on balanced cloven hooves"),
|
||||
V("passes with arched neck and touches muzzles", "mates on bright cloven hooves with horn held high"),
|
||||
V("presses with precise hooves and turns horn-guided", "presses beneath a flowing mane"),
|
||||
V("pushes onward with mobile lips", "sweeps along its muzzle beneath a lifted horn"),
|
||||
V("nickers bell-like and dips its head in measure", "holds spiral horn upright and dips its head"),
|
||||
V("angles its horn aside with muzzle low", "holds still on motionless cloven hooves"),
|
||||
V("pulls with arched neck straightening into each tug", "draws steadily while bright hooves brace"),
|
||||
V("touches {target} gently with mobile lips", "nuzzles {target} with spiral horn angled past one shoulder"),
|
||||
V("draws mane and tail back and sweeps", "beats with high forehoof strokes"),
|
||||
V("canters away lightly with mane streaming", "gallops off beneath a level spiral horn"),
|
||||
V("folds bright legs and curves its horn aside", "turns once before resting beneath its mane"),
|
||||
V("stands tall with spiral horn aligned", "surges forward behind high forehooves and lowered horn"),
|
||||
V("follows with muzzle held close", "turns its horn in small poised sweeps"),
|
||||
V("clips with mobile lips and exact hoof placement", "clips with spiral horn lifted"),
|
||||
V("raises its flowing tail and bends its hind legs", "balances on cloven hooves while its rear drops"),
|
||||
V("steps high in crossing directions with ears flicking", "turns its arched neck twice and paws once"),
|
||||
V("recharges on folded legs with mane draped close", "rests muzzle-low while its spiral horn angles aside"),
|
||||
V("rears under a strange urge and paws in sequence", "canters a tight ring with mane and tail streaming"),
|
||||
V("steals with mobile lips and a light backward step", "dips beneath its horn, grips quickly, and canters away"),
|
||||
V("rests on folded legs with mane draped close", "rests muzzle-low while its spiral horn angles aside"),
|
||||
V("rears and paws in sequence", "canters a tight ring with mane and tail streaming"),
|
||||
V("snatches with mobile lips and steps lightly backward", "dips beneath its horn, grips quickly, and canters away"),
|
||||
V("moves in rigid high steps as its horn jerks", "rears abruptly with mane snapping across its neck"),
|
||||
V("dreams with bright hooves cantering against folded legs", "nickers asleep while spiral horn and ears shift"));
|
||||
|
||||
|
|
@ -485,24 +485,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"wolf",
|
||||
V("sings in a long howl with muzzle raised", "weaves yips into a tune while its chest expands"),
|
||||
V("courts through muzzle licks, circling, and tail signals", "mates on long braced legs with bushy tail aside"),
|
||||
V("farms with powerful forepaw scrapes and nose checks", "plants from an efficient, low stance"),
|
||||
V("pushes pollen onward through steady nose-led passes", "carries pollen across its muzzle with tail level"),
|
||||
V("trades through low whines and measured muzzle gestures", "barters seated tall on its haunches"),
|
||||
V("fishes from a flattened crouch with ears fixed", "fishes with a sudden snap after holding still"),
|
||||
V("hauls with jaws set and long legs driving", "draws backward while shoulders stay level"),
|
||||
V("licks {target} and nibbles with careful teeth", "heals {target} with ears held forward"),
|
||||
V("stokes fire with muzzle turned aside", "fans the flames with its bushy tail"),
|
||||
V("flees in a long, fully extended lope", "runs away with level back and ears swept flat"),
|
||||
V("settles by circling and scraping with strong forepaws", "folds chest-down with chin between extended paws"),
|
||||
V("takes a warrior stance with ears forward and jaws open", "rushes ahead from a level-backed crouch"),
|
||||
V("reads with muzzle tracking under each line", "reads while pointed ears remain fixed"),
|
||||
V("gathers life with nose close and forepaws precise", "gathers life from a long-legged crouch"),
|
||||
V("squats on bent hind legs with bushy tail raised", "relieves itself while forelegs remain straight"),
|
||||
V("licks muzzles, circles, and signals with its tail", "mates on long braced legs with bushy tail aside"),
|
||||
V("scrapes with powerful forepaws and checks with its nose", "presses from a low braced stance"),
|
||||
V("pushes onward through steady nose-led sweeps", "sweeps across its muzzle with tail level"),
|
||||
V("whines low and gestures with steady muzzle dips", "sits tall on its haunches and dips its muzzle"),
|
||||
V("holds a flattened crouch with ears fixed", "snaps suddenly after holding still"),
|
||||
V("pulls with jaws set and long legs driving", "draws backward while shoulders stay level"),
|
||||
V("licks {target} and nibbles with careful teeth", "nuzzles {target} with ears held forward"),
|
||||
V("turns its muzzle aside and sweeps", "beats with its bushy tail"),
|
||||
V("lopes away fully extended", "runs off with level back and ears swept flat"),
|
||||
V("circles and scrapes with strong forepaws before curling close", "folds chest-down with chin between extended paws"),
|
||||
V("stands with ears forward and jaws open", "rushes ahead from a level-backed crouch"),
|
||||
V("tracks with muzzle held close", "holds pointed ears fixed above a lowered muzzle"),
|
||||
V("scoops with nose close and forepaws precise", "scoops from a long-legged crouch"),
|
||||
V("squats on bent hind legs with bushy tail raised", "keeps forelegs straight while its rear drops"),
|
||||
V("fans between directions with nose and ears angled apart", "starts a lope, checks sharply, and circles"),
|
||||
V("recharges curled tightly beneath its bushy tail", "rests chest-down with chin over long forepaws"),
|
||||
V("bows and springs repeatedly under a strange urge", "circles in an efficient lope while snapping upward"),
|
||||
V("steals with a quick jaw grip and silent retreat", "stalks close nose-first, snatches, and lopes away"),
|
||||
V("curls tightly beneath its bushy tail", "rests chest-down with chin over long forepaws"),
|
||||
V("bows and springs repeatedly", "circles in a level lope while snapping upward"),
|
||||
V("grips quickly in its jaws and retreats silently", "stalks close nose-first, snatches, and lopes away"),
|
||||
V("paces in rigid lines with hackles lifted", "jerks its muzzle sideways while jaws snap shut"),
|
||||
V("dreams with long legs running beneath a curled body", "howls faintly while its bushy tail twitches"));
|
||||
|
||||
|
|
@ -510,24 +510,24 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"worm",
|
||||
V("sings as a faint rasp through contracting segments", "pulses a soft rhythm along its bristled underside"),
|
||||
V("courts by aligning and rippling beside another body", "mates through close segment contact and coordinated contractions"),
|
||||
V("farms by drawing its front segments forward", "plants through slow, bristle-anchored ripples"),
|
||||
V("pushes pollen onward through looping body contact", "carries pollen along its segments in forward pulses"),
|
||||
V("trades by curling close and tapping its tapered front", "barters through measured body pulses"),
|
||||
V("fishes with its tapered front held motionless", "fishes through a sudden full-body contraction"),
|
||||
V("hauls by anchoring bristles and shortening its body", "draws backward through wave after muscular wave"),
|
||||
V("heals {target} through gentle front-segment contact", "heals {target} through tiny controlled contractions"),
|
||||
V("stokes fire through short front-segment ripples", "fans the flames with its tapered front"),
|
||||
V("aligns and ripples beside another body", "mates through close segment contact and coordinated contractions"),
|
||||
V("draws its front segments forward and presses", "ripples slowly with bristles anchoring each push"),
|
||||
V("pushes onward through looping body contact", "carries along its segments in forward pulses"),
|
||||
V("curls close and taps its tapered front", "pulses its body in tight close curls"),
|
||||
V("holds its tapered front motionless", "contracts its full body in a sudden snap"),
|
||||
V("anchors bristles and shortens its body to pull", "draws backward through wave after muscular wave"),
|
||||
V("touches {target} gently with its front segments", "nuzzles {target} through tiny controlled contractions"),
|
||||
V("ripples its front segments in short beats", "beats with its tapered front"),
|
||||
V("flees through rapid contractions and flattened curves", "crawls away as bristles drive in quick succession"),
|
||||
V("settles by coiling segment over segment", "sweeps its tapered front once before relaxing"),
|
||||
V("takes a warrior coil with front segments lifted", "lashes forward from a bristle-anchored curve"),
|
||||
V("reads by passing its tapered front along each line", "reads through tiny lateral ripples"),
|
||||
V("gathers life with its mouth opening and controlled pulls", "gathers life through delicate front-segment contractions"),
|
||||
V("contracts its rear segments and holds still", "relieves itself while the tapered front remains extended"),
|
||||
V("coils segment over segment", "sweeps its tapered front once before relaxing"),
|
||||
V("coils with front segments lifted", "lashes forward from a bristle-anchored curve"),
|
||||
V("passes its tapered front along in tiny sweeps", "ripples sideways in tiny controlled waves"),
|
||||
V("opens its mouth and pulls in controlled draws", "contracts its front segments delicately while drawing breath"),
|
||||
V("contracts its rear segments and holds still", "holds the tapered front extended while its rear contracts"),
|
||||
V("crawls into a loop and reverses halfway", "points its tapered front one way as the body pulls another"),
|
||||
V("recharges in a loose coil with bristles relaxed", "lies extended while faint pulses travel end to end"),
|
||||
V("knots into repeated loops under a strange urge", "lashes and recoils while its rear segments stay fixed"),
|
||||
V("steals by hooking its front segments and contracting away", "creeps close, grips briefly, and ripples back"),
|
||||
V("looses into a coil with bristles relaxed", "lies extended while faint pulses travel end to end"),
|
||||
V("knots into repeated loops", "lashes and recoils while its rear segments stay fixed"),
|
||||
V("hooks its front segments and contracts away", "creeps close, grips briefly, and ripples back"),
|
||||
V("writhes in broken waves with bristles scraping", "stiffens segment by segment before snapping into a coil"),
|
||||
V("dreams as slow ripples pass along its resting body", "twitches its tapered front while loosely coiled"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"alpaca",
|
||||
V("blows through split lips until a small flame kindles", "breathes through split lips to spread the flame"),
|
||||
V("presses padded feet over the flame", "snuffs flame beneath a dense fold of fleece"),
|
||||
V("hums and folds into a shoulder-close herd", "threads its long neck among gathered kin"),
|
||||
V("draws visible life essence up its long neck into parted lips", "pulls glowing life essence through its fleece toward its chest"),
|
||||
V("hums and presses its fleece into the nearby group", "threads its long neck among the others until flanks touch"),
|
||||
V("draws life essence up its long neck into parted lips", "pulls glowing life essence through its fleece toward its chest"),
|
||||
V("probes for spoils with split lips and an extended neck", "reaches for spoils between careful padded feet"),
|
||||
V("wails through a raised muzzle in wavering breaths", "hums in long pulses with its neck stretched high"),
|
||||
V("pins its ears, stamps its padded feet, and spits", "jerks its long neck and grinds out a nasal rasp"));
|
||||
|
|
@ -22,8 +22,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"armadillo",
|
||||
V("rakes broad foreclaws together until flame kindles", "fans flame outward with rapid flexes of its armor bands"),
|
||||
V("curls its plated body over the flame to smother it", "scrapes flame flat beneath overlapping armor"),
|
||||
V("tucks its plated flank into a shell-close cluster of kin", "presses its plated flank among gathered kin"),
|
||||
V("draws visible life essence between its claws and under its plates", "pulls glowing life essence along its armor bands toward its chest"),
|
||||
V("tucks its plated flank into the nearby group", "presses its plated flank among the others"),
|
||||
V("draws life essence between its claws and under its plates", "pulls glowing life essence along its armor bands toward its chest"),
|
||||
V("sniffs for spoils with its pointed snout", "hooks toward spoils with one broad foreclaw"),
|
||||
V("squeals beneath a tightly folded plated brow", "chatters in dry bursts while its armor bands pulse"),
|
||||
V("hunches behind its plates and rakes both foreclaws", "snaps its pointed snout and chatters through clenched jaws"));
|
||||
|
|
@ -33,8 +33,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"bandit",
|
||||
V("rubs quick palms until flame kindles between them", "cups the flame and spreads it with flicking fingers"),
|
||||
V("claps both palms over the flame to smother it", "pinches the flame down between quick fingertips"),
|
||||
V("signals with two fingers and closes ranks with kin", "slips shoulder to shoulder among gathered kin"),
|
||||
V("draws visible life essence into cupped hands", "pulls glowing life essence along spread fingers toward the chest"),
|
||||
V("signals with two fingers and slips shoulder-close into the nearby group", "slips shoulder to shoulder among the others"),
|
||||
V("draws life essence into cupped hands", "pulls glowing life essence along spread fingers toward the chest"),
|
||||
V("searches for spoils with quick eyes and probing fingers", "reaches toward spoils with one hand held low"),
|
||||
V("cries out through cupped hands in a sharp broken call", "hunches with mouth open and breath pulsing audibly"),
|
||||
V("jabs two fingers outward and spits clipped syllables", "sets the jaw, bares the teeth, and hisses through them"));
|
||||
|
|
@ -44,8 +44,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"bear",
|
||||
V("rubs broad forepaws until flame kindles between the pads", "fans flame outward with heavy sweeps of both forepaws"),
|
||||
V("smothers flame beneath crossed forepaws", "presses a broad muzzle over the flame and huffs it out"),
|
||||
V("presses its heavy shoulder among gathered kin", "rises among gathered kin and draws them close with broad forepaws"),
|
||||
V("draws visible life essence between its claws and into its chest", "pulls glowing life essence through its broad muzzle with deep breaths"),
|
||||
V("presses its heavy shoulder into the nearby group", "rises among the others and draws them close with broad forepaws"),
|
||||
V("draws life essence between its claws and into its chest", "pulls glowing life essence through its broad muzzle with deep breaths"),
|
||||
V("sniffs for spoils with its broad muzzle sweeping", "reaches toward spoils with hooked foreclaws"),
|
||||
V("roars with its muzzle lifted and forepaws spread", "huffs in deep pulses while its shoulders heave"),
|
||||
V("bares its teeth and pounds both forepaws together", "rears with claws spread and growls in clipped bursts"));
|
||||
|
|
@ -55,8 +55,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"buffalo",
|
||||
V("snorts through broad nostrils until flame kindles beneath its muzzle", "sweeps its horned head to spread the flame"),
|
||||
V("stamps the flame beneath broad cloven hooves", "presses its heavy muzzle down and snorts the flame out"),
|
||||
V("pushes shoulder to shoulder into a close herd", "bellows and joins the gathered herd flank-first"),
|
||||
V("draws visible life essence along its horns into its brow", "pulls glowing life essence through its broad muzzle toward its chest"),
|
||||
V("pushes shoulder to shoulder into the nearby group", "bellows and presses flank-first among the others"),
|
||||
V("draws life essence along its horns into its brow", "pulls glowing life essence through its broad muzzle toward its chest"),
|
||||
V("sniffs for spoils beneath its horned brow", "reaches toward spoils with its broad muzzle"),
|
||||
V("bellows with its beard shaking beneath a raised muzzle", "moans in chest-deep pulses while its nostrils flare"),
|
||||
V("drops its horned brow, stamps, and snorts sharply", "swings its beard and grinds out a deep nasal rumble"));
|
||||
|
|
@ -66,8 +66,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"capybara",
|
||||
V("gnashes broad incisors until flame kindles", "fans flame outward with quick sweeps of its blunt muzzle"),
|
||||
V("presses webbed forefeet over the flame", "snuffs flame beneath its broad wet muzzle"),
|
||||
V("whistles and settles flank to flank among kin", "tucks its barrel-shaped body into a compact gathering of kin"),
|
||||
V("draws visible life essence between its orange incisors", "pulls glowing life essence along its whiskers toward its chest"),
|
||||
V("whistles and presses flank to flank into the nearby group", "tucks its barrel body among the others"),
|
||||
V("draws life essence between its orange incisors", "pulls glowing life essence along its whiskers toward its chest"),
|
||||
V("sniffs for spoils with whiskers spread", "reaches toward spoils with webbed forefeet"),
|
||||
V("whistles through a long piercing note", "squeals with its blunt muzzle lifted"),
|
||||
V("chatters its incisors and stamps both webbed forefeet", "bares broad incisors and barks in short bursts"));
|
||||
|
|
@ -77,8 +77,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"cat",
|
||||
V("scrapes tucked claws until flame kindles", "lashes its tail to fan flame outward"),
|
||||
V("pats the flame down with rapid sheathed paws", "covers the flame beneath crossed forepaws and snuffs it"),
|
||||
V("trills and threads into a tail-close gathering of kin", "presses flank to flank among gathered kin"),
|
||||
V("draws visible life essence along its whiskers into its chest", "pulls glowing life essence between curved claws"),
|
||||
V("trills and slips tail-first into the nearby group", "presses flank to flank among the others"),
|
||||
V("draws life essence along its whiskers into its chest", "pulls glowing life essence between curved claws"),
|
||||
V("sniffs for spoils with whiskers thrust forward", "reaches toward spoils with one careful paw"),
|
||||
V("yowls with its jaw wide and whiskers flared", "wails in rising notes with its tail held rigid"),
|
||||
V("flattens its ears, lashes its tail, and spits", "arches its back and growls through bared teeth"));
|
||||
|
|
@ -88,8 +88,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"cow",
|
||||
V("snorts through broad nostrils until flame kindles beneath its muzzle", "sweeps its broad muzzle to spread the flame"),
|
||||
V("stamps flame beneath a cloven forehoof", "presses its broad muzzle down and snorts the flame out"),
|
||||
V("lows and presses flank to flank into the herd", "presses its broad muzzle among gathered kin"),
|
||||
V("draws visible life essence along its horns into its chest", "pulls glowing life essence through its broad muzzle"),
|
||||
V("lows and presses flank to flank into the nearby group", "presses its broad muzzle among the others"),
|
||||
V("draws life essence along its horns into its chest", "pulls glowing life essence through its broad muzzle"),
|
||||
V("sniffs for spoils with its broad muzzle", "reaches toward spoils with a rough extended tongue"),
|
||||
V("lows in a long resonant call with its muzzle raised", "moans in deep pulses while its broad throat vibrates"),
|
||||
V("stamps a cloven hoof and bellows through flared nostrils", "swings its horned head and grinds out a rough lowing"));
|
||||
|
|
@ -99,8 +99,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"dog",
|
||||
V("scrapes its foreclaws until flame kindles", "pants across the flame and fans it outward"),
|
||||
V("pats the flame down with quick forepaws", "presses its muzzle close and huffs the flame out"),
|
||||
V("barks and folds into a shoulder-close pack", "presses its nose among gathered kin until flanks touch"),
|
||||
V("draws visible life essence along its whiskers into its chest", "pulls glowing life essence through its open jaws"),
|
||||
V("barks and presses shoulder-close into the nearby group", "presses its nose among the others until flanks touch"),
|
||||
V("draws life essence along its whiskers into its chest", "pulls glowing life essence through its open jaws"),
|
||||
V("sniffs for spoils with its nose sweeping", "reaches toward spoils with one extended forepaw"),
|
||||
V("howls with its muzzle lifted and throat stretched", "whines in repeated pulses while its chest trembles"),
|
||||
V("bares its teeth, stamps, and barks in clipped bursts", "bristles along the spine and growls through a fixed jaw"));
|
||||
|
|
@ -110,8 +110,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"fox",
|
||||
V("scratches narrow claws together until flame kindles", "sweeps its brush to spread the flame"),
|
||||
V("beats the flame down beneath quick forepaws", "wraps its broad brush over the flame and smothers it"),
|
||||
V("gekker-calls and slips into a brush-close gathering of kin", "circles once and presses flank to flank among kin"),
|
||||
V("draws visible life essence along its whiskers into its chest", "pulls glowing life essence through its pointed muzzle"),
|
||||
V("gekker-calls and slips brush-close into the nearby group", "circles once and presses flank to flank among the others"),
|
||||
V("draws life essence along its whiskers into its chest", "pulls glowing life essence through its pointed muzzle"),
|
||||
V("sniffs for spoils with its pointed muzzle low", "reaches toward spoils with a narrow forepaw"),
|
||||
V("screams through an open muzzle with its brush rigid", "yips in a rapid chain while its throat pulses"),
|
||||
V("pins its ears, lashes its brush, and gekkers sharply", "bares narrow teeth and spits a rasping bark"));
|
||||
|
|
@ -121,8 +121,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"goat",
|
||||
V("scrapes hard forehooves together until flame kindles", "snorts through split lips to spread the flame"),
|
||||
V("stamps the flame beneath hard cloven hooves", "presses its split lips over the flame and snorts it out"),
|
||||
V("bleats and shoulders into a horn-close herd", "presses its bearded chin among gathered kin"),
|
||||
V("draws visible life essence along its horns into its brow", "pulls glowing life essence through its split lips toward its chest"),
|
||||
V("bleats and shoulders horn-first into the nearby group", "presses its bearded chin among the others"),
|
||||
V("draws life essence along its horns into its brow", "pulls glowing life essence through its split lips toward its chest"),
|
||||
V("sniffs for spoils beneath its beard", "reaches toward spoils with mobile split lips"),
|
||||
V("bleats in a long broken call with its jaw trembling", "wails nasally while its beard shakes"),
|
||||
V("stamps both forehooves and jerks its horns forward", "bares its lower teeth and snorts in clipped bursts"));
|
||||
|
|
@ -132,8 +132,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"hyena",
|
||||
V("grinds heavy teeth until flame kindles", "pants over the flame and fans it outward"),
|
||||
V("pounds the flame beneath powerful forepaws", "presses its heavy muzzle close and huffs the flame out"),
|
||||
V("whoops and shoulders into a close clan of kin", "sets its high shoulders among gathered kin and presses flank to flank"),
|
||||
V("draws visible life essence between massive premolars", "pulls glowing life essence through its broad muzzle into its chest"),
|
||||
V("whoops and shoulders into the nearby group", "sets its high shoulders among the others and presses flank to flank"),
|
||||
V("draws life essence between massive premolars", "pulls glowing life essence through its broad muzzle into its chest"),
|
||||
V("sniffs for spoils with its heavy muzzle low", "reaches toward spoils with one powerful forepaw"),
|
||||
V("whoops in a rising cascade with jaws spread", "cackles in breathless bursts while its shoulders jolt"),
|
||||
V("raises its shoulders, bares its teeth, and chatters", "snaps its jaws and growls in broken pulses"));
|
||||
|
|
@ -143,8 +143,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"monkey",
|
||||
V("rubs nimble palms until flame kindles between them", "fans flame outward with quick alternating hands"),
|
||||
V("claps both hands over the flame to smother it", "beats the flame down with flat rapid palms"),
|
||||
V("hoots and presses shoulder to shoulder among kin", "reaches both arms into a gathering of kin and joins it"),
|
||||
V("draws visible life essence into cupped hands", "pulls glowing life essence along curled fingers toward its chest"),
|
||||
V("hoots and presses shoulder to shoulder into the nearby group", "swings both arms wide and presses among the others"),
|
||||
V("draws life essence into cupped hands", "pulls glowing life essence along curled fingers toward its chest"),
|
||||
V("searches for spoils with quick eyes and probing fingers", "reaches toward spoils with one long arm"),
|
||||
V("hoots with its mouth rounded and throat pulsing", "shrills in repeated notes while both hands clutch its chest"),
|
||||
V("bares its teeth, slaps both palms, and chatters", "jabs one hand outward and barks in clipped syllables"));
|
||||
|
|
@ -154,8 +154,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"rabbit",
|
||||
V("gnashes its incisors until flame kindles", "fans flame outward with rapid forepaw strokes"),
|
||||
V("pats the flame down with quick forepaws", "presses both forepaws over the flame and smothers it"),
|
||||
V("honks and settles into a flank-close cluster of kin", "tucks its long ears among gathered kin"),
|
||||
V("draws visible life essence between its incisors", "pulls glowing life essence along its long ears toward its chest"),
|
||||
V("honks and presses flank-close into the nearby group", "tucks its long ears among the others"),
|
||||
V("draws life essence between its incisors", "pulls glowing life essence along its long ears toward its chest"),
|
||||
V("sniffs for spoils with its nose pulsing", "reaches toward spoils with both small forepaws"),
|
||||
V("squeals with its ears rigid and mouth open", "honks in repeated breaths while its hind feet tremble"),
|
||||
V("thumps both hind feet and chatters its incisors", "pins its ears and grinds out a sharp nasal grunt"));
|
||||
|
|
@ -164,9 +164,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"raccoon",
|
||||
V("rubs sensitive forepaws until flame kindles", "fans flame outward with quick sweeps of its ringed tail"),
|
||||
V("claps black forepaws over the flame to smother it", "beats the flame down beneath nimble plantigrade paws"),
|
||||
V("trills and presses into a ringed-tail cluster of kin", "feels along nearby flanks and joins gathered kin"),
|
||||
V("draws visible life essence between sensitive fingers", "pulls glowing life essence along its ringed tail into its chest"),
|
||||
V("claps black forepaws over the flame to smother it", "beats the flame down beneath nimble flat paws"),
|
||||
V("trills and presses into the nearby group", "feels along nearby flanks and presses in among the others"),
|
||||
V("draws life essence between sensitive fingers", "pulls glowing life essence along its ringed tail into its chest"),
|
||||
V("feels and sniffs for spoils with spread black fingers", "reaches toward spoils with both nimble forepaws"),
|
||||
V("screeches with its pointed muzzle lifted", "trills in broken pulses while its forepaws clutch together"),
|
||||
V("arches its back, bares its teeth, and chatters", "slaps both forepaws down and growls in rasping bursts"));
|
||||
|
|
@ -176,8 +176,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"rat",
|
||||
V("gnashes orange incisors until flame kindles", "lashes its bare tail to fan flame outward"),
|
||||
V("pats the flame down with quick pink paws", "coils its bare tail over the flame and smothers it"),
|
||||
V("squeaks and huddles into a whisker-close knot of kin", "presses its whiskered muzzle among gathered kin"),
|
||||
V("draws visible life essence along its whiskers into its chest", "pulls glowing life essence between its orange incisors"),
|
||||
V("squeaks and huddles whisker-close into the nearby group", "presses its whiskered muzzle among the others"),
|
||||
V("draws life essence along its whiskers into its chest", "pulls glowing life essence between its orange incisors"),
|
||||
V("sniffs for spoils with whiskers sweeping", "reaches toward spoils with both pink forepaws"),
|
||||
V("squeals with whiskers flared and incisors bared", "chirps in rapid pulses while its bare tail coils tightly"),
|
||||
V("bruxes its incisors and lashes its bare tail", "rears with pink paws spread and hisses through bared teeth"));
|
||||
|
|
@ -187,8 +187,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"rhino",
|
||||
V("snorts through thick lips until flame kindles beneath its horn", "sweeps its massive horn to spread the flame"),
|
||||
V("stamps the flame beneath a broad three-toed foot", "presses its thick muzzle down and snorts the flame out"),
|
||||
V("grunts and presses thick shoulders into the herd", "presses its folded hide among gathered kin"),
|
||||
V("draws visible life essence along its horn into its brow", "pulls glowing life essence through its thick lips toward its chest"),
|
||||
V("grunts and presses thick shoulders into the nearby group", "presses its folded hide among the others"),
|
||||
V("draws life essence along its horn into its brow", "pulls glowing life essence through its thick lips toward its chest"),
|
||||
V("sniffs for spoils beneath its heavy horn", "reaches toward spoils with its broad square lip"),
|
||||
V("squeals with its horn raised and small ears spread", "moans in rough pulses while its thick throat vibrates"),
|
||||
V("stamps a three-toed foot and blasts a hard snort", "swings its horn and grinds out a chest-deep rasp"));
|
||||
|
|
@ -198,8 +198,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"sheep",
|
||||
V("scrapes narrow forehooves together until flame kindles", "snorts through split lips to spread the flame"),
|
||||
V("stamps the flame beneath narrow cloven hooves", "presses dense fleece over the flame and smothers it"),
|
||||
V("bleats and presses fleece to fleece into the flock", "tucks its woolly muzzle among gathered kin"),
|
||||
V("draws visible life essence along its curled horns", "pulls glowing life essence through its fleece toward its chest"),
|
||||
V("bleats and presses fleece to fleece into the nearby group", "tucks its woolly muzzle among the others"),
|
||||
V("draws life essence along its curled horns", "pulls glowing life essence through its fleece toward its chest"),
|
||||
V("sniffs for spoils through its woolly muzzle", "reaches toward spoils with a mobile split lip"),
|
||||
V("bleats in a long wavering call with its jaw trembling", "wails nasally while its dense fleece quivers"),
|
||||
V("stamps narrow hooves and jerks its curled horns", "bares its lower teeth and grinds out a broken baa"));
|
||||
|
|
@ -209,8 +209,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"unicorn",
|
||||
V("draws a spark down its spiral horn until flame kindles", "sweeps its spiral horn to spread the flame"),
|
||||
V("presses the flame flat beneath bright cloven hooves", "touches its spiral horn to the flame and snuffs it"),
|
||||
V("nickers and joins a mane-close herd of kin", "arches its neck among gathered kin until flanks touch"),
|
||||
V("draws visible life essence along its spiral horn into its brow", "pulls glowing life essence through its flowing mane toward its chest"),
|
||||
V("nickers and presses mane-close into the nearby group", "arches its neck among the others until flanks touch"),
|
||||
V("draws life essence along its spiral horn into its brow", "pulls glowing life essence through its flowing mane toward its chest"),
|
||||
V("searches for spoils with its horn angled low", "reaches toward spoils with mobile lips"),
|
||||
V("whinnies with its spiral horn raised and throat stretched", "cries in clear ringing notes while its mane trembles"),
|
||||
V("strikes a cloven forehoof and tosses its spiral horn", "pins its ears and snorts through bared teeth"));
|
||||
|
|
@ -220,8 +220,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
"wolf",
|
||||
V("scrapes strong foreclaws until flame kindles", "pants over the flame and fans it outward"),
|
||||
V("pounds the flame beneath broad forepaws", "presses its muzzle close and huffs the flame out"),
|
||||
V("howls and folds shoulder to shoulder into the pack", "sets its long-legged flank among gathered kin"),
|
||||
V("draws visible life essence along its muzzle into its chest", "pulls glowing life essence between its strong jaws"),
|
||||
V("howls and presses shoulder to shoulder into the nearby group", "sets its long-legged flank among the others"),
|
||||
V("draws life essence along its muzzle into its chest", "pulls glowing life essence between its strong jaws"),
|
||||
V("sniffs for spoils with its nose sweeping low", "reaches toward spoils with one broad forepaw"),
|
||||
V("howls with its muzzle lifted and throat extended", "whines in repeated breaths while its chest pulses"),
|
||||
V("raises its hackles, bares its teeth, and growls", "snaps its jaws and barks in hard clipped bursts"));
|
||||
|
|
@ -230,9 +230,9 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
voices,
|
||||
"worm",
|
||||
V("rasps its bristled underside until flame kindles", "whips its front segments to spread the flame"),
|
||||
V("coils its segmented body over the flame to smother it", "presses contracting segments across the flame and suppresses it"),
|
||||
V("twines into a close knot of gathered kin", "threads its tapered front between kin and presses segmented bodies together"),
|
||||
V("draws visible life essence along contracting segments toward its mouth opening", "pulls glowing life essence through rippling body bands"),
|
||||
V("coils its segmented body over the flame to smother it", "presses contracting segments across the flame until it dies"),
|
||||
V("twines segment by segment among the others", "threads its tapered front into the nearby group and presses bodies together"),
|
||||
V("draws life essence along contracting segments toward its mouth opening", "pulls glowing life essence through rippling body bands"),
|
||||
V("probes for spoils with its tapered front", "reaches toward spoils by extending its front segments"),
|
||||
V("rasps in long pulses through contracting segments", "rustles in repeated dry ripples with its front raised"),
|
||||
V("coils tightly, lashes its front segments, and rasps", "braces its tiny bristles and whips forward with a dry hiss"));
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("lashes out near {target} with a sharp forward kick", "braces its padded feet before {target} and spits"),
|
||||
V("touches noses beneath a pair of upright ears", "hums softly beside nearby company"),
|
||||
V("lets out a bright, breathy hum", "burbles while chewing cud"),
|
||||
V("carries the load on a straight, fleece-lined back", "kneels on padded joints beside the task"));
|
||||
V("carries the load on a straight, fleece-lined back", "kneels on padded joints to take the load"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -28,11 +28,11 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("scrabbles in a quick circle with oversized claws", "pops upright and paddles its foreclaws"),
|
||||
V("roots with a narrow snout and digs out each bite", "laps up morsels between rapid sniffs"),
|
||||
V("curls its plated body around its soft underside", "dozes with nose and feet tucked under armor"),
|
||||
V("samples scents near {target} with claws flexed", "searches around {target} with rapid sniffs"),
|
||||
V("sniffs near {target} with claws flexed", "searches around {target} with rapid sniffs"),
|
||||
V("hunkers near {target} behind its shell and drives forward", "swipes at {target} with powerful digging claws"),
|
||||
V("sniffs along another armored flank", "touches pointed snouts in a brief greeting"),
|
||||
V("chatters in a dry, rapid burst", "squeaks from beneath its plated brow"),
|
||||
V("excavates with alternating strokes of broad foreclaws", "pushes loose material aside with its armored shoulder"));
|
||||
V("excavates with alternating strokes of broad foreclaws", "shoves the load clear with its armored shoulder"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -41,18 +41,18 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("leans back and watches through narrowed eyes", "checks each side with short head turns"),
|
||||
V("rolls one wrist and flexes quick fingers", "practices a feint and a smooth retreat"),
|
||||
V("takes bites without lowering the guard", "eats quickly with one hand shielding the meal"),
|
||||
V("sleeps curled tightly with both hands tucked in", "rests lightly with chin lowered to the chest"),
|
||||
V("sleeps curled tightly with both hands tucked close", "rests lightly with chin lowered to the chest"),
|
||||
V("tracks movement near {target} from a crouch", "advances toward {target} with quick hands raised"),
|
||||
V("slashes toward {target} from a low stance and withdraws", "turns aside near {target} and counters with the off hand"),
|
||||
V("trades a brief hand sign at close range", "leans in to exchange a few short words"),
|
||||
V("gives a muffled chuckle through closed lips", "snickers and taps two fingers against the chin"),
|
||||
V("sorts material with quick fingertips", "checks the task with rapid hand movements"));
|
||||
V("picks through the load with quick fingertips", "pats the load into place with rapid hands"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"bear",
|
||||
V("lumbers forward with heavy shoulders rolling", "advances on broad plantigrade paws"),
|
||||
V("rises upright and works its broad nose", "sits back on its haunches with forepaws hanging"),
|
||||
V("lumbers forward with heavy shoulders rolling", "advances on broad flat paws"),
|
||||
V("rises upright and sniffs with its broad nose", "sits back on its haunches with forepaws hanging"),
|
||||
V("clasps both forepaws and rolls onto one shoulder", "rolls onto its back and bats with broad paws"),
|
||||
V("tears off a bite with strong jaws", "scoops the meal inward with long curved claws"),
|
||||
V("curls into a dense mound with paws over its muzzle", "settles heavily on its side and slows its breathing"),
|
||||
|
|
@ -60,17 +60,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("rears near {target} and brings both forepaws down", "drives at {target} behind a roar and a heavy swipe"),
|
||||
V("rubs muzzle and shoulder against another broad flank", "sniffs another face with small rounded ears forward"),
|
||||
V("huffs out a deep, rolling chortle", "grumbles in a sequence of breathy pulses"),
|
||||
V("hauls with both forepaws and a braced back", "shoves the task onward with massive shoulders"));
|
||||
V("hauls with both forepaws and a braced back", "shoves the load onward with massive shoulders"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"buffalo",
|
||||
V("moves in a heavy rolling stride beneath a horned brow", "trots with its shoulder hump rising and falling"),
|
||||
V("stands broadside while its tail flicks", "holds its head low and works its jaw"),
|
||||
V("stands broadside while its tail flicks", "holds its head low and chews"),
|
||||
V("bucks and twists with all four hooves briefly clear", "bounds forward and tosses its curved horns"),
|
||||
V("tears off a bite with a wide muzzle", "chews steadily while its beard brushes its chest"),
|
||||
V("folds its legs beneath a massive chest", "rests flank-down with its horned head upright"),
|
||||
V("works its broad nostrils near {target} and follows", "pushes toward {target} with muzzle low and horns level"),
|
||||
V("flares its broad nostrils near {target} and follows", "pushes toward {target} with muzzle low and horns level"),
|
||||
V("drops its horned head near {target} and drives forward", "swings its heavy skull at {target} in a short arc"),
|
||||
V("presses shoulder to shoulder with nearby company", "grooms a nearby hide with slow tongue strokes"),
|
||||
V("bellows in a deep, chesty rumble", "snorts and answers with a booming grunt"),
|
||||
|
|
@ -88,7 +88,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("bares broad incisors near {target} and lunges low", "braces before {target} and snaps sharply"),
|
||||
V("touches blunt muzzles and settles beside nearby company", "grooms a nearby coat with careful front teeth"),
|
||||
V("purrs in a bubbling series of soft clicks", "whistles once and follows with a throaty chuckle"),
|
||||
V("grips and shifts material with incisors and forefeet", "pushes the task ahead with a broad chest"));
|
||||
V("grips and shifts the load with incisors and forefeet", "pushes the load ahead with a broad chest"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -98,17 +98,17 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("pounces onto its forepaws and bats from side to side", "springs sideways with back arched and tail high"),
|
||||
V("pins a morsel with one paw and tears it with its teeth", "licks its lips before taking another bite"),
|
||||
V("curls nose to tail with paws hidden beneath", "kneads twice before folding into a compact curl"),
|
||||
V("stalks toward {target} with scapulae rising under the coat", "waits near {target} before a sudden pounce"),
|
||||
V("stalks toward {target} with shoulders rising under the coat", "waits near {target} before a sudden pounce"),
|
||||
V("lashes at {target} with unsheathed foreclaws", "flattens its ears near {target} and strikes rapidly"),
|
||||
V("greets with an upright tail and a cheek rub", "grooms a nearby coat with rough, measured licks"),
|
||||
V("chatters out a bright trill", "purrs around a short chirrup"),
|
||||
V("hooks the task closer with a careful paw", "inspects the work with whiskers forward and tail twitching"));
|
||||
V("hooks the load closer with a careful paw", "sniffs over the load with whiskers forward and tail twitching"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"cow",
|
||||
V("walks with an unhurried sway on cloven hooves", "steps forward while its broad muzzle bobs"),
|
||||
V("stands ruminating with its tail switching", "rests its weight on three legs and chews"),
|
||||
V("stands chewing with its tail switching", "rests its weight on three legs and chews"),
|
||||
V("kicks up its hind heels in a heavy skip", "dips its broad forehead and skips sideways"),
|
||||
V("draws in a bite with its rough tongue", "chews cud in slow circular strokes"),
|
||||
V("folds its legs and settles on a broad belly", "lies on its side with muzzle resting low"),
|
||||
|
|
@ -130,7 +130,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("bares its teeth near {target} and lunges from braced forelegs", "snaps at {target}, pivots, and drives in again"),
|
||||
V("greets with a nose touch and a broadly wagging tail", "sniffs closely before settling alongside"),
|
||||
V("pants through a breathy, barking chuckle", "lets out a short yip followed by a huff"),
|
||||
V("carries the task firmly between its jaws", "digs in with forepaws and pulls backward"));
|
||||
V("carries the load firmly between its jaws", "digs in with forepaws and pulls backward"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -144,7 +144,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("darts at {target} with a quick bite and springs clear", "twists near {target} and snaps from a narrow stance"),
|
||||
V("touches pointed muzzles and circles with brush raised", "grooms a nearby ear with delicate nibbles"),
|
||||
V("gekker-calls in a rapid, rasping burst", "lets out a high yip followed by a throaty chatter"),
|
||||
V("carries material delicately in its jaws", "scrapes at the task with quick alternating forepaws"));
|
||||
V("carries the load delicately in its jaws", "scrapes and digs with quick alternating forepaws"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -154,7 +154,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("hops onto stiff legs and twists in place", "rears briefly and taps its horns together"),
|
||||
V("takes a bite with mobile split lips", "strips off a bite and chews with a sideways jaw"),
|
||||
V("tucks its legs beneath a narrow, deep chest", "rests chin-down with horns angled back"),
|
||||
V("tests scents near {target} with quick sniffs", "bounds toward {target} with horns tipped forward"),
|
||||
V("sniffs near {target} in short bursts", "bounds toward {target} with horns tipped forward"),
|
||||
V("rears near {target} and crashes down behind its horns", "drives a compact headbutt at {target} from planted hooves"),
|
||||
V("rubs horn bases against a nearby neck", "nibbles carefully along another coat"),
|
||||
V("bleats in a broken, chuckling cadence", "snorts and answers with a nasal trill"),
|
||||
|
|
@ -166,13 +166,13 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("lopes ahead with high shoulders and a sloping back", "pads forward on powerful forequarters"),
|
||||
V("stands squarely with rounded ears tracking every sound", "sits back beneath a heavy neck and watches"),
|
||||
V("bounds in a crooked circle with jaws gaping", "feints forward and wheels away on long forelegs"),
|
||||
V("cracks a bite with massive premolars", "tears and swallows with rapid jaw strokes"),
|
||||
V("cracks a bite with massive back teeth", "tears and swallows with rapid jaw strokes"),
|
||||
V("lies belly-down with heavy jaws across its paws", "curls on one flank beneath raised shoulders"),
|
||||
V("quarters near {target} with nose low", "paces toward {target} in an endurance lope"),
|
||||
V("circles near {target} with nose low", "paces toward {target} in an endurance lope"),
|
||||
V("clamps onto {target} with crushing jaws and braces", "rushes at {target} behind powerful shoulders and snaps"),
|
||||
V("greets with muzzle low and measured flank sniffing", "grooms a nearby coat with short front-tooth nibbles"),
|
||||
V("whoops and cackles in a rising cascade", "chatters out a breathless, ringing laugh"),
|
||||
V("drags the task with jaws locked and shoulders driving", "crushes material between broad teeth"));
|
||||
V("drags the load with jaws locked and shoulders driving", "crushes the load between broad teeth"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -186,7 +186,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("grapples with {target} using both hands", "leaps at {target} with a slap before springing back"),
|
||||
V("picks carefully through a nearby coat", "touches faces and chatters at close range"),
|
||||
V("hoots through a rapid string of chattering notes", "bares its teeth in a breathy, bouncing chuckle"),
|
||||
V("turns and fits material with nimble fingers", "carries material clasped against its chest"));
|
||||
V("turns and fits each piece with nimble fingers", "carries the load clasped against its chest"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -200,12 +200,12 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("boxes at {target} with rapid forepaw strikes", "kicks toward {target} with both powerful hind feet"),
|
||||
V("touches noses and settles flank to flank", "grooms a nearby forehead with tiny licks"),
|
||||
V("honks softly and chatters its teeth", "lets out a bright squeal between quick nose twitches"),
|
||||
V("scrapes and gathers with alternating forepaws", "carries small material between its incisors"));
|
||||
V("scrapes and piles with alternating forepaws", "carries small pieces between its incisors"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"raccoon",
|
||||
V("ambles forward with masked face low and ringed tail trailing", "walks on nimble plantigrade paws with back arched"),
|
||||
V("ambles forward with masked face low and ringed tail trailing", "walks on nimble flat paws with back arched"),
|
||||
V("sits upright and rubs its sensitive forepaws together", "pauses with black fingers spread and ears forward"),
|
||||
V("rolls onto one shoulder with both paws raised", "pounces, tumbles, and rights its ringed tail"),
|
||||
V("feels over each morsel before taking a bite", "holds the meal in both forepaws and chews neatly"),
|
||||
|
|
@ -214,7 +214,7 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("grabs at {target} with both forepaws and bites sharply", "rears near {target} and slashes with black claws"),
|
||||
V("sniffs another marked face and explores a nearby coat with both paws", "sits close and grooms with careful fingerlike claws"),
|
||||
V("trills through a raspy series of chuckles", "chatters and chirrs beneath its dark facial markings"),
|
||||
V("sorts and turns material with deft black paws", "pries at the task with sensitive fingers"));
|
||||
V("turns and sorts the load with deft black paws", "pries the load apart with sensitive fingers"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -227,8 +227,8 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("searches near {target} with whiskers sweeping both sides", "scurries toward {target} with nose held low"),
|
||||
V("lunges at {target} and bites with chisel incisors", "rears near {target} to box rapidly with both forepaws"),
|
||||
V("touches noses and grooms around a nearby ear", "huddles close while whiskers cross and tails coil"),
|
||||
V("bruxes its incisors in a soft, crackling chuckle", "squeaks through a rapid series of chirps"),
|
||||
V("gnaws the task with tireless incisors", "carries material tucked beneath its chin"));
|
||||
V("grinds its incisors in a soft, crackling chuckle", "squeaks through a rapid series of chirps"),
|
||||
V("gnaws the load with tireless incisors", "carries the load tucked beneath its chin"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -242,21 +242,21 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("charges at {target} behind its lowered horn", "swings its massive skull near {target} and stamps forward"),
|
||||
V("touches horns lightly before standing side by side", "rubs thick shoulder hide against a nearby flank"),
|
||||
V("snorts in a rough, rumbling burst", "squeals once and follows with a throaty puff"),
|
||||
V("pushes the load with horn base and broad forehead", "leans its full weight into the task"));
|
||||
V("pushes the load with horn base and broad forehead", "leans its full weight into the load"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"sheep",
|
||||
V("walks in close steps beneath a thick fleece", "trots with narrow hooves and wool bouncing"),
|
||||
V("stands chewing with ears angled out from the wool", "settles squarely while its dense fleece rises and falls"),
|
||||
V("springs forward on stiff legs and lands together", "butts lightly, backs away, and hops again"),
|
||||
V("springs forward on stiff legs", "butts lightly, backs away, and hops again"),
|
||||
V("crops a bite with a split upper lip", "chews cud in slow sideways turns"),
|
||||
V("folds its legs beneath a round fleece-covered body", "rests with muzzle tucked against warm wool"),
|
||||
V("lifts its muzzle near {target} and follows", "advances toward {target} with woolly forehead lowered"),
|
||||
V("backs away from {target} and drives forward behind curled horns", "braces narrow hooves near {target} and strikes with its forehead"),
|
||||
V("presses into nearby company until fleeces touch", "nuzzles beneath a nearby woolly cheek"),
|
||||
V("bleats in a wavering, breathy cadence", "answers with a short nasal baa"),
|
||||
V("pulls steadily with fleece bunching over its shoulders", "nudges the task ahead with a woolly brow"));
|
||||
V("pulls steadily with fleece bunching over its shoulders", "nudges the load ahead with a woolly brow"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
|
|
@ -264,23 +264,23 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("canters with a single spiral horn cutting a clean line", "steps high on bright cloven hooves with mane flowing"),
|
||||
V("stands poised with horn upright and ears angled forward", "rests one hind hoof while its long mane settles"),
|
||||
V("arches its neck and bounds on light hooves", "rears, paws once, and lands beneath its streaming mane"),
|
||||
V("takes a bite with mobile lips", "chews slowly beneath the shadow of its spiral horn"),
|
||||
V("takes a bite with mobile lips", "chews slowly beneath its spiral horn"),
|
||||
V("folds its legs and rests with horn angled safely aside", "lies with its muzzle nestled against a flowing mane"),
|
||||
V("tracks movement near {target} with horn aligned", "surges toward {target} in a light canter"),
|
||||
V("drives at {target} with spiral horn lowered", "rears near {target} and strikes with both forehooves"),
|
||||
V("touches muzzles beneath an arched neck", "combs a nearby mane with careful teeth"),
|
||||
V("nickers in a clear, bell-like trill", "whinnies through a bright rippling cadence"),
|
||||
V("lifts and guides the task with the base of its horn", "pulls in a balanced stride on cloven hooves"));
|
||||
V("lifts and guides the load with the base of its horn", "pulls in a balanced stride on cloven hooves"));
|
||||
|
||||
Add(
|
||||
voices,
|
||||
"wolf",
|
||||
V("lopes forward with long legs and level back", "trots in an efficient line with tail held low"),
|
||||
V("stands with ears pricked and nose raised", "sits tall on its haunches and watches"),
|
||||
V("bows low on the forelegs before bounding sideways", "wrestles with open jaws and careful pawing"),
|
||||
V("bows low on its forelegs before bounding sideways", "wrestles with open jaws and careful pawing"),
|
||||
V("holds the meal between forepaws and tears sideways", "crunches the meal with strong jaws before licking its muzzle"),
|
||||
V("curls tightly with bushy tail over its nose", "lies chest-down with chin between outstretched paws"),
|
||||
V("runs toward {target} with nose low and stride lengthening", "fans out near {target} at an efficient lope"),
|
||||
V("runs toward {target} with nose low and stride lengthening", "closes on {target} at an efficient lope"),
|
||||
V("rushes at {target} with jaws open and shoulders braced", "bites at {target}, releases, and circles on quick paws"),
|
||||
V("greets with muzzle licks and a low sweeping tail", "leans flank-first against nearby company"),
|
||||
V("pants out a rough, breathy chuff", "breaks into a rising series of yips and howls"),
|
||||
|
|
@ -298,6 +298,6 @@ public static partial class ActivitySpeciesVoiceCatalog
|
|||
V("whips near {target} with its front segments and recoils", "braces near {target} and lashes forward"),
|
||||
V("presses along another segmented body", "twines briefly before crawling alongside"),
|
||||
V("makes a faint rasp through contracting segments", "rustles in a quick sequence of dry body ripples"),
|
||||
V("pulls loose material backward beneath its body", "works forward by bracing each band of tiny bristles"));
|
||||
V("drags the load backward beneath its body", "inches forward by bracing each band of tiny bristles"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,6 +109,8 @@ public static class ActivityVoiceHarness
|
|||
int terrainLeaks = 0;
|
||||
int variantBaseFail = 0;
|
||||
int authoredPhraseFail = 0;
|
||||
int targetBindFail = 0;
|
||||
int unloadPlaceFail = 0;
|
||||
int unmappedTasks = 0;
|
||||
int missingTaskBags = 0;
|
||||
int routedTasks = 0;
|
||||
|
|
@ -294,6 +296,8 @@ public static class ActivityVoiceHarness
|
|||
}
|
||||
|
||||
int pairFail = PairwiseFailures(ref sample);
|
||||
targetBindFail = ValidateTargetBinding(ref sample);
|
||||
unloadPlaceFail = ValidateUnloadPlace(ref sample);
|
||||
bool liveContextOk = VerifyLiveContext(ref sample);
|
||||
try
|
||||
{
|
||||
|
|
@ -324,6 +328,8 @@ public static class ActivityVoiceHarness
|
|||
&& unmappedTasks == 0
|
||||
&& missingTaskBags == 0
|
||||
&& pairFail == 0
|
||||
&& targetBindFail == 0
|
||||
&& unloadPlaceFail == 0
|
||||
&& liveContextOk;
|
||||
return new ActivityVoiceAuditResult
|
||||
{
|
||||
|
|
@ -348,6 +354,8 @@ public static class ActivityVoiceHarness
|
|||
+ " unmappedTasks=" + unmappedTasks
|
||||
+ " missingTaskBags=" + missingTaskBags
|
||||
+ " pairFail=" + pairFail
|
||||
+ " targetBindFail=" + targetBindFail
|
||||
+ " unloadPlaceFail=" + unloadPlaceFail
|
||||
+ " liveContextOk=" + liveContextOk
|
||||
+ " sample='" + sample + "'"
|
||||
};
|
||||
|
|
@ -371,14 +379,24 @@ public static class ActivityVoiceHarness
|
|||
continue;
|
||||
}
|
||||
|
||||
bool wantsPlace = verb == "farm" || verb == "trade" || verb == "settle";
|
||||
for (int p = 0; p < bag.Length; p++)
|
||||
{
|
||||
string phrase = bag[p] ?? "";
|
||||
bool targetMissing = (verb == "hunt" || verb == "fight")
|
||||
&& phrase.IndexOf("{target}", StringComparison.Ordinal) < 0;
|
||||
bool contextMissing = !phrase.EndsWith(
|
||||
"{place_at}{job_as}",
|
||||
StringComparison.Ordinal);
|
||||
bool hasJob = phrase.IndexOf("{job_as}", StringComparison.Ordinal) >= 0
|
||||
|| phrase.IndexOf("{job}", StringComparison.Ordinal) >= 0;
|
||||
bool hasPlaceAt = phrase.IndexOf("{place_at}", StringComparison.Ordinal) >= 0;
|
||||
bool placePolicyOk = wantsPlace
|
||||
? phrase.EndsWith("{place_at}", StringComparison.Ordinal)
|
||||
: !hasPlaceAt;
|
||||
bool jobPolicyOk = !hasJob;
|
||||
|
||||
string standalone = CollapseStandalone(phrase);
|
||||
string dangling = FindDanglingStandalone(standalone);
|
||||
bool incomplete = standalone.Length < 12 || standalone.IndexOf(' ') < 0;
|
||||
|
||||
bool actorLeak = phrase.IndexOf("{actor}", StringComparison.Ordinal) >= 0;
|
||||
bool speciesLeak = !string.IsNullOrEmpty(label)
|
||||
&& Regex.IsMatch(
|
||||
|
|
@ -387,7 +405,9 @@ public static class ActivityVoiceHarness
|
|||
RegexOptions.IgnoreCase);
|
||||
string awkward = FindAwkwardPhrase(phrase);
|
||||
string terrain = FindPhrase(phrase, UngroundedTerrainFragments);
|
||||
if (targetMissing || contextMissing || actorLeak || speciesLeak
|
||||
if (targetMissing || !placePolicyOk || !jobPolicyOk || incomplete
|
||||
|| !string.IsNullOrEmpty(dangling)
|
||||
|| actorLeak || speciesLeak
|
||||
|| !string.IsNullOrEmpty(awkward) || !string.IsNullOrEmpty(terrain))
|
||||
{
|
||||
failures++;
|
||||
|
|
@ -395,11 +415,15 @@ public static class ActivityVoiceHarness
|
|||
ref sample,
|
||||
baseSpeciesId + ":" + verb + ":" + p
|
||||
+ ":target=" + !targetMissing
|
||||
+ ":context=" + !contextMissing
|
||||
+ ":place=" + placePolicyOk
|
||||
+ ":job=" + jobPolicyOk
|
||||
+ ":standalone=" + !incomplete
|
||||
+ ":dangling=" + dangling
|
||||
+ ":actor=" + actorLeak
|
||||
+ ":species=" + speciesLeak
|
||||
+ ":awkward=" + awkward
|
||||
+ ":terrain=" + terrain);
|
||||
+ ":terrain=" + terrain
|
||||
+ ":text='" + standalone + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -407,6 +431,163 @@ public static class ActivityVoiceHarness
|
|||
return failures;
|
||||
}
|
||||
|
||||
private static string CollapseStandalone(string phrase)
|
||||
{
|
||||
string t = phrase ?? "";
|
||||
t = t.Replace("{place_at}", "");
|
||||
t = t.Replace("{job_as}", "");
|
||||
t = t.Replace("{job}", "");
|
||||
t = t.Replace("{with}", "");
|
||||
t = t.Replace("{place}", "");
|
||||
t = t.Replace("{carrying}", "goods");
|
||||
t = t.Replace("{target}", "Tomi");
|
||||
t = t.Replace("{actor}", "Actor");
|
||||
t = t.Replace("{species}", "creature");
|
||||
while (t.IndexOf(" ", StringComparison.Ordinal) >= 0)
|
||||
{
|
||||
t = t.Replace(" ", " ");
|
||||
}
|
||||
|
||||
return t.Trim();
|
||||
}
|
||||
|
||||
private static string FindDanglingStandalone(string standalone)
|
||||
{
|
||||
if (string.IsNullOrEmpty(standalone))
|
||||
{
|
||||
return "empty";
|
||||
}
|
||||
|
||||
if (Regex.IsMatch(
|
||||
standalone,
|
||||
@"\b(in|as|at|with|to|from|near|into|onto|for|of|by)\s*$",
|
||||
RegexOptions.IgnoreCase))
|
||||
{
|
||||
return "dangling-prep";
|
||||
}
|
||||
|
||||
if (Regex.IsMatch(standalone, @"\b(the|a|an|and|or)\s*$", RegexOptions.IgnoreCase))
|
||||
{
|
||||
return "dangling-article";
|
||||
}
|
||||
|
||||
if (standalone.IndexOf(" ", StringComparison.Ordinal) >= 0
|
||||
|| standalone.IndexOf(",,", StringComparison.Ordinal) >= 0)
|
||||
{
|
||||
return "dup-sep";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
private static int ValidateTargetBinding(ref string sample)
|
||||
{
|
||||
int failures = 0;
|
||||
string[,] cases =
|
||||
{
|
||||
{ "human", "BehSocializeTalk" },
|
||||
{ "dog", "BehSocializeTalk" },
|
||||
{ "human", "lover" }
|
||||
};
|
||||
|
||||
for (int i = 0; i < cases.GetLength(0); i++)
|
||||
{
|
||||
string species = cases[i, 0];
|
||||
string key = cases[i, 1];
|
||||
ActivityContext ctx = ActivityContext.ForHarness(
|
||||
"Woliek",
|
||||
"Tomi",
|
||||
species,
|
||||
place: "Celuford");
|
||||
ActivityProse.Format(
|
||||
ActivityKind.ActionBeat,
|
||||
key,
|
||||
ctx,
|
||||
"Talks",
|
||||
77,
|
||||
1,
|
||||
out string line,
|
||||
out _);
|
||||
if (string.IsNullOrEmpty(line))
|
||||
{
|
||||
failures++;
|
||||
AddSample(ref sample, "target-bind:" + species + ":" + key + ":empty");
|
||||
continue;
|
||||
}
|
||||
|
||||
bool hasName = line.IndexOf("Tomi", StringComparison.OrdinalIgnoreCase) >= 0;
|
||||
bool anonLeft = line.IndexOf("with another", StringComparison.OrdinalIgnoreCase) >= 0
|
||||
|| line.IndexOf("nearby company", StringComparison.OrdinalIgnoreCase) >= 0
|
||||
|| line.IndexOf("another presence", StringComparison.OrdinalIgnoreCase) >= 0;
|
||||
int withName = 0;
|
||||
int idx = 0;
|
||||
while (idx >= 0)
|
||||
{
|
||||
idx = line.IndexOf("with Tomi", idx, StringComparison.OrdinalIgnoreCase);
|
||||
if (idx < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
withName++;
|
||||
idx += "with Tomi".Length;
|
||||
}
|
||||
|
||||
// Plural group wording must stay plural (no personal-name rewrite).
|
||||
bool groupOk = true;
|
||||
if (line.IndexOf("among the others", StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& line.IndexOf("among Tomi", StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
groupOk = false;
|
||||
}
|
||||
|
||||
if (!hasName || anonLeft || withName > 1 || !groupOk)
|
||||
{
|
||||
failures++;
|
||||
AddSample(
|
||||
ref sample,
|
||||
"target-bind:" + species + ":" + key
|
||||
+ ":name=" + hasName
|
||||
+ ":anon=" + anonLeft
|
||||
+ ":withDup=" + withName
|
||||
+ ":group=" + groupOk
|
||||
+ ":line='" + line + "'");
|
||||
}
|
||||
}
|
||||
|
||||
return failures;
|
||||
}
|
||||
|
||||
private static int ValidateUnloadPlace(ref string sample)
|
||||
{
|
||||
ActivityContext ctx = ActivityContext.ForHarness(
|
||||
"Porter",
|
||||
"",
|
||||
"human",
|
||||
place: "Riverhold",
|
||||
carrying: "wheat");
|
||||
ActivityProse.Format(
|
||||
ActivityKind.ActionBeat,
|
||||
"BehUnloadResources",
|
||||
ctx,
|
||||
"Unloads wheat",
|
||||
88,
|
||||
1,
|
||||
out string line,
|
||||
out _);
|
||||
bool ok = !string.IsNullOrEmpty(line)
|
||||
&& line.IndexOf("wheat", StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& line.IndexOf("Riverhold", StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& line.IndexOf("while carrying", StringComparison.OrdinalIgnoreCase) < 0;
|
||||
if (!ok)
|
||||
{
|
||||
AddSample(ref sample, "unload-place:line='" + line + "'");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static string FindAwkwardPhrase(string fingerprint)
|
||||
{
|
||||
return FindPhrase(fingerprint, AwkwardProseFragments);
|
||||
|
|
|
|||
|
|
@ -32,13 +32,18 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
string target = ActivityInterestTable.TargetLabel(pActor);
|
||||
if (string.IsNullOrEmpty(target))
|
||||
string obj = ActivityInterestTable.PlaceOrObjectLabel(pActor);
|
||||
if (string.IsNullOrEmpty(obj))
|
||||
{
|
||||
target = "flower";
|
||||
obj = "flower";
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehPollinate", "Pollinates " + target, target);
|
||||
ActivityLog.NoteActionBeat(
|
||||
pActor,
|
||||
"BehPollinate",
|
||||
"Pollinates " + obj,
|
||||
actorTarget: "",
|
||||
placeHint: obj);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehUnloadResources), nameof(BehUnloadResources.execute))]
|
||||
|
|
@ -69,7 +74,8 @@ public static class ActorActivityPatches
|
|||
string fact = string.IsNullOrEmpty(carrying)
|
||||
? "Unloads resources"
|
||||
: "Unloads " + carrying;
|
||||
ActivityLog.NoteActionBeat(pActor, "BehUnloadResources", fact, "town");
|
||||
// Place comes from live context / city - never as a companion target.
|
||||
ActivityLog.NoteActionBeat(pActor, "BehUnloadResources", fact);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehAttackActorHuntingTarget), nameof(BehAttackActorHuntingTarget.execute))]
|
||||
|
|
@ -81,12 +87,12 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
string target = ActivityInterestTable.TargetLabel(pActor);
|
||||
string actorTarget = ActivityInterestTable.ActorTargetName(pActor);
|
||||
ActivityLog.NoteActionBeat(
|
||||
pActor,
|
||||
"BehAttackActorHuntingTarget",
|
||||
string.IsNullOrEmpty(target) ? "Hunts prey" : "Hunts " + target,
|
||||
target);
|
||||
string.IsNullOrEmpty(actorTarget) ? "Hunts prey" : "Hunts " + actorTarget,
|
||||
actorTarget: actorTarget);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehCityActorRemoveFire), nameof(BehCityActorRemoveFire.execute))]
|
||||
|
|
@ -98,7 +104,12 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehCityActorRemoveFire", "Fights fire", "blaze");
|
||||
ActivityLog.NoteActionBeat(
|
||||
pActor,
|
||||
"BehCityActorRemoveFire",
|
||||
"Fights fire",
|
||||
actorTarget: "",
|
||||
placeHint: "blaze");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehTryToSocialize), nameof(BehTryToSocialize.execute))]
|
||||
|
|
@ -110,12 +121,12 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
string target = ActivityInterestTable.TargetLabel(pActor);
|
||||
string actorTarget = ActivityInterestTable.ActorTargetName(pActor);
|
||||
ActivityLog.NoteActionBeat(
|
||||
pActor,
|
||||
"BehTryToSocialize",
|
||||
string.IsNullOrEmpty(target) ? "Tries to socialize" : "Tries to socialize with " + target,
|
||||
target);
|
||||
string.IsNullOrEmpty(actorTarget) ? "Tries to socialize" : "Tries to socialize with " + actorTarget,
|
||||
actorTarget: actorTarget);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehPlantCrops), nameof(BehPlantCrops.execute))]
|
||||
|
|
@ -127,7 +138,7 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehPlantCrops", "Plants crops", "");
|
||||
ActivityLog.NoteActionBeat(pActor, "BehPlantCrops", "Plants crops");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehCityActorFertilizeCrop), nameof(BehCityActorFertilizeCrop.execute))]
|
||||
|
|
@ -139,7 +150,7 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehCityActorFertilizeCrop", "Fertilizes crops", "");
|
||||
ActivityLog.NoteActionBeat(pActor, "BehCityActorFertilizeCrop", "Fertilizes crops");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehThrowResources), nameof(BehThrowResources.execute))]
|
||||
|
|
@ -170,7 +181,7 @@ public static class ActorActivityPatches
|
|||
string fact = string.IsNullOrEmpty(carrying)
|
||||
? "Throws resources"
|
||||
: "Throws " + carrying;
|
||||
ActivityLog.NoteActionBeat(pActor, "BehThrowResources", fact, "");
|
||||
ActivityLog.NoteActionBeat(pActor, "BehThrowResources", fact);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehBuildTarget), nameof(BehBuildTarget.execute))]
|
||||
|
|
@ -182,12 +193,13 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
string target = ActivityInterestTable.TargetLabel(pActor);
|
||||
string obj = ActivityInterestTable.PlaceOrObjectLabel(pActor);
|
||||
ActivityLog.NoteActionBeat(
|
||||
pActor,
|
||||
"BehBuildTarget",
|
||||
string.IsNullOrEmpty(target) ? "Works a build" : "Builds " + target,
|
||||
target);
|
||||
string.IsNullOrEmpty(obj) ? "Works a build" : "Builds " + obj,
|
||||
actorTarget: "",
|
||||
placeHint: obj);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehPoopOutside), nameof(BehPoopOutside.execute))]
|
||||
|
|
@ -199,7 +211,7 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehPoopOutside", "Private moment outdoors", "");
|
||||
ActivityLog.NoteActionBeat(pActor, "BehPoopOutside", "Private moment outdoors");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehPoopInside), nameof(BehPoopInside.execute))]
|
||||
|
|
@ -211,7 +223,7 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehPoopInside", "Private moment indoors", "");
|
||||
ActivityLog.NoteActionBeat(pActor, "BehPoopInside", "Private moment indoors");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehBoatFishing), nameof(BehBoatFishing.execute))]
|
||||
|
|
@ -223,7 +235,7 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehBoatFishing", "Fishes from the boat", "");
|
||||
ActivityLog.NoteActionBeat(pActor, "BehBoatFishing", "Fishes from the boat");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehBoatCollectFish), nameof(BehBoatCollectFish.execute))]
|
||||
|
|
@ -235,7 +247,7 @@ public static class ActorActivityPatches
|
|||
return;
|
||||
}
|
||||
|
||||
ActivityLog.NoteActionBeat(pActor, "BehBoatCollectFish", "Collects the catch", "");
|
||||
ActivityLog.NoteActionBeat(pActor, "BehBoatCollectFish", "Collects the catch");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BehClaimZoneForCityActorBorder), nameof(BehClaimZoneForCityActorBorder.execute))]
|
||||
|
|
@ -264,6 +276,7 @@ public static class ActorActivityPatches
|
|||
pActor,
|
||||
"BehClaimZoneForCityActorBorder",
|
||||
string.IsNullOrEmpty(place) ? "Claims border land" : "Claims border land for " + place,
|
||||
place);
|
||||
actorTarget: "",
|
||||
placeHint: place);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -344,6 +344,28 @@ public static class AgentHarness
|
|||
break;
|
||||
}
|
||||
|
||||
case "chronicle_milestone":
|
||||
{
|
||||
string kind = !string.IsNullOrEmpty(cmd.value)
|
||||
? cmd.value
|
||||
: (!string.IsNullOrEmpty(cmd.label) ? cmd.label : "kill");
|
||||
string other = cmd.expect ?? "";
|
||||
bool ok = Chronicle.ForceLifeMilestoneOnFocus(kind, other);
|
||||
if (ok)
|
||||
{
|
||||
_cmdOk++;
|
||||
}
|
||||
else
|
||||
{
|
||||
_cmdFail++;
|
||||
}
|
||||
|
||||
long id = Chronicle.CurrentHistorySubjectId();
|
||||
Emit(cmd, ok, detail:
|
||||
$"milestone={kind} history={Chronicle.HistoryCountFor(id)} activity={ActivityLog.CountFor(id)}");
|
||||
break;
|
||||
}
|
||||
|
||||
case "chronicle_clear":
|
||||
{
|
||||
Chronicle.ClearSession();
|
||||
|
|
@ -445,7 +467,24 @@ public static class AgentHarness
|
|||
}
|
||||
|
||||
WatchCaption.ForceRefreshHistory();
|
||||
bool ok = okN == n && id != 0;
|
||||
if (okN > 0)
|
||||
{
|
||||
_cmdOk++;
|
||||
}
|
||||
else
|
||||
{
|
||||
_cmdFail++;
|
||||
}
|
||||
|
||||
Emit(cmd, okN > 0, detail: $"forced={okN}/{n} key={key} activity={ActivityLog.CountFor(id)}");
|
||||
break;
|
||||
}
|
||||
|
||||
case "dossier_force_job":
|
||||
{
|
||||
string job = !string.IsNullOrEmpty(cmd.value) ? cmd.value : "farmer";
|
||||
string reason = cmd.label ?? "";
|
||||
bool ok = WatchCaption.ForceJobLabelOnFocus(job, reason);
|
||||
if (ok)
|
||||
{
|
||||
_cmdOk++;
|
||||
|
|
@ -455,8 +494,21 @@ public static class AgentHarness
|
|||
_cmdFail++;
|
||||
}
|
||||
|
||||
Emit(cmd, ok, detail:
|
||||
$"forced={okN}/{n} id={id} count={ActivityLog.CountFor(id)} shown={WatchCaption.LastActivityShown}");
|
||||
string shown = WatchCaption.Current?.ReasonLine ?? "";
|
||||
Emit(cmd, ok, detail: $"job='{job}' reasonOverride='{reason}' row='{shown}'");
|
||||
break;
|
||||
}
|
||||
|
||||
case "dossier_clear_job":
|
||||
{
|
||||
WatchCaption.ClearHarnessJobOverrides();
|
||||
if (MoveCamera.hasFocusUnit() && MoveCamera._focus_unit != null)
|
||||
{
|
||||
WatchCaption.SetFromActor(MoveCamera._focus_unit);
|
||||
}
|
||||
|
||||
_cmdOk++;
|
||||
Emit(cmd, true, detail: "job overrides cleared");
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1966,6 +2018,41 @@ public static class AgentHarness
|
|||
detail = $"hit={hit} needle='{needle}' sample='{sample}' count={entries.Count}";
|
||||
break;
|
||||
}
|
||||
case "activity_log_not_contains":
|
||||
{
|
||||
long id = WatchCaption.CurrentUnitId;
|
||||
string needle = string.IsNullOrEmpty(cmd.value) ? cmd.label : cmd.value;
|
||||
IReadOnlyList<ActivityEntry> entries =
|
||||
ActivityLog.LatestForSubject(id, ActivityLog.MaxLinesPerSubject);
|
||||
bool hit = false;
|
||||
string sample = "";
|
||||
for (int i = 0; i < entries.Count; i++)
|
||||
{
|
||||
ActivityEntry e = entries[i];
|
||||
if (e == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
string line = e.DisplayLine ?? e.Line ?? "";
|
||||
if (string.IsNullOrEmpty(sample))
|
||||
{
|
||||
sample = line;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(needle)
|
||||
&& line.IndexOf(needle, System.StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
hit = true;
|
||||
sample = line;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pass = !hit;
|
||||
detail = $"absent={!hit} needle='{needle}' sample='{sample}' count={entries.Count}";
|
||||
break;
|
||||
}
|
||||
case "activity_prose_sentence":
|
||||
{
|
||||
// Ensure mood/task labels become sentences, not "{name} laughing".
|
||||
|
|
@ -2049,7 +2136,9 @@ public static class AgentHarness
|
|||
&& waitLine.Length >= 18
|
||||
&& !waitLine.Equals(actorName + " waits", System.StringComparison.Ordinal);
|
||||
bool walkOk = !string.IsNullOrEmpty(walkLine)
|
||||
&& walkLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& walkLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& walkLine.IndexOf("farmer", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& walkLine.IndexOf(", a ", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& walkLine.Length >= 28;
|
||||
pass = moveOk && waitOk && walkOk;
|
||||
detail =
|
||||
|
|
@ -2164,13 +2253,85 @@ public static class AgentHarness
|
|||
&& humanLine.IndexOf(" the human", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
bool unloadOk = !string.IsNullOrEmpty(unloadLine)
|
||||
&& unloadLine.IndexOf("wheat", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& unloadLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) >= 0;
|
||||
&& unloadLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& unloadLine.IndexOf("while carrying", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
bool distinct = !dogLine.Equals(catLine, System.StringComparison.Ordinal);
|
||||
bool placeRejectOk = !string.IsNullOrEmpty(buffaloLine)
|
||||
&& buffaloLine.IndexOf(" in buffalo", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& buffaloLine.IndexOf(" the buffalo", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
// Play is not place-centric - city must not appear on play lines.
|
||||
bool placeKeepOk = !string.IsNullOrEmpty(buffaloTownLine)
|
||||
&& buffaloTownLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) >= 0;
|
||||
&& buffaloTownLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& humanLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
|
||||
ActivityProse.Format(
|
||||
ActivityKind.ActionBeat,
|
||||
"BehSocializeTalk",
|
||||
ActivityContext.ForHarness(actorName, "Tomi", "human", place: "Celuford"),
|
||||
"Talks",
|
||||
11,
|
||||
1,
|
||||
out string socialLine,
|
||||
out _);
|
||||
bool socialBindOk = !string.IsNullOrEmpty(socialLine)
|
||||
&& socialLine.IndexOf("Tomi", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& socialLine.IndexOf("with another", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& socialLine.IndexOf("nearby company", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
int withTomi = 0;
|
||||
int withIdx = 0;
|
||||
while (withIdx >= 0)
|
||||
{
|
||||
withIdx = socialLine.IndexOf(
|
||||
"with Tomi",
|
||||
withIdx,
|
||||
System.StringComparison.OrdinalIgnoreCase);
|
||||
if (withIdx < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
withTomi++;
|
||||
withIdx += "with Tomi".Length;
|
||||
}
|
||||
|
||||
socialBindOk = socialBindOk && withTomi <= 1;
|
||||
|
||||
// Building/place labels must never become companion "with …" on work/unload.
|
||||
ActivityContext bonfireCtx = ActivityContext.ForHarness(
|
||||
actorName,
|
||||
"bonfire",
|
||||
"human",
|
||||
place: "bonfire");
|
||||
ActivityProse.Format(
|
||||
ActivityKind.TaskStart,
|
||||
"type_bonfire",
|
||||
bonfireCtx,
|
||||
"Works a bonfire",
|
||||
12,
|
||||
1,
|
||||
out string bonfireLine,
|
||||
out _);
|
||||
bool bonfireOk = !string.IsNullOrEmpty(bonfireLine)
|
||||
&& bonfireLine.IndexOf("with bonfire", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
|
||||
ActivityContext unloadTownCtx = ActivityContext.ForHarness(
|
||||
actorName,
|
||||
"town",
|
||||
"human",
|
||||
place: "Riverhold",
|
||||
carrying: "wheat");
|
||||
ActivityProse.Format(
|
||||
ActivityKind.ActionBeat,
|
||||
"BehUnloadResources",
|
||||
unloadTownCtx,
|
||||
"Unloads wheat",
|
||||
13,
|
||||
1,
|
||||
out string unloadTownLine,
|
||||
out _);
|
||||
bool unloadTownOk = !string.IsNullOrEmpty(unloadTownLine)
|
||||
&& unloadTownLine.IndexOf("wheat", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& unloadTownLine.IndexOf("with town", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
|
||||
// Taxonomy kingdoms like "insect" must never become place clauses.
|
||||
string insectPlace = ActivityInterestTable.PickPlaceLabel(
|
||||
|
|
@ -2253,16 +2414,19 @@ public static class AgentHarness
|
|||
&& rhinoLine.IndexOf(" the rhino", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
|
||||
pass = dogOk && catOk && humanOk && unloadOk && distinct && placeRejectOk && placeKeepOk
|
||||
&& insectRejectOk && frogOk && frogJumpOk && liveTaxOk && rhinoOk;
|
||||
&& insectRejectOk && frogOk && frogJumpOk && liveTaxOk && rhinoOk && socialBindOk
|
||||
&& bonfireOk && unloadTownOk;
|
||||
detail =
|
||||
$"dogOk={dogOk} catOk={catOk} humanOk={humanOk} unloadOk={unloadOk} distinct={distinct} "
|
||||
+ $"placeRejectOk={placeRejectOk} placeKeepOk={placeKeepOk} insectRejectOk={insectRejectOk} "
|
||||
+ $"frogOk={frogOk} frogJumpOk={frogJumpOk} liveTaxOk={liveTaxOk} rhinoOk={rhinoOk} "
|
||||
+ $"socialBindOk={socialBindOk} bonfireOk={bonfireOk} unloadTownOk={unloadTownOk} "
|
||||
+ $"frogFamily={frogCtx.Family} frogClass={frogCtx.TaxonomicClass} "
|
||||
+ $"dogFamily={dogCtxLive.Family} dogTaxFamily={dogCtxLive.TaxonomicFamily} "
|
||||
+ $"dog='{dogLine}' cat='{catLine}' human='{humanLine}' unload='{unloadLine}' "
|
||||
+ $"buffalo='{buffaloLine}' buffaloTown='{buffaloTownLine}' beetle='{beetleLine}' "
|
||||
+ $"frog='{frogLine}' frogJump='{frogJumpLine}' rhino='{rhinoLine}'";
|
||||
+ $"frog='{frogLine}' frogJump='{frogJumpLine}' rhino='{rhinoLine}' social='{socialLine}' "
|
||||
+ $"bonfire='{bonfireLine}' unloadTown='{unloadTownLine}'";
|
||||
break;
|
||||
}
|
||||
case "activity_taxonomy_audit":
|
||||
|
|
@ -2497,25 +2661,32 @@ public static class AgentHarness
|
|||
|
||||
bool farmerOk = !string.IsNullOrEmpty(farmerLine)
|
||||
&& farmerLine.IndexOf("young", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& farmerLine.IndexOf("farmer", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& farmerLine.IndexOf("farmer", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& farmerLine.IndexOf(", a ", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& farmerLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& farmerLine.IndexOf("wheat", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& farmerLine.IndexOf("while carrying", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& farmerLine.IndexOf(" the human", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& farmerLine.IndexOf("curious", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
bool minerOk = !string.IsNullOrEmpty(minerLine)
|
||||
&& minerLine.IndexOf("miner", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& minerLine.IndexOf("miner", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& minerLine.IndexOf(", a ", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& minerLine.IndexOf("Ironford", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& minerLine.IndexOf("stone", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& minerLine.IndexOf("while carrying", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& minerLine.IndexOf("brave", System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
bool divergeOk = !farmerLine.Equals(minerLine, System.StringComparison.Ordinal);
|
||||
// Quiet kings: role stays off Activity; combat / target pressure still surfaces.
|
||||
bool kingOk = !string.IsNullOrEmpty(kingCombatLine)
|
||||
&& kingCombatLine.IndexOf("king", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& kingCombatLine.IndexOf("king", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& kingCombatLine.IndexOf("Riverhold", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& (kingCombatLine.IndexOf("combat", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
|| kingCombatLine.IndexOf("keeping", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
|| kingCombatLine.IndexOf("Barkley", System.StringComparison.OrdinalIgnoreCase) >= 0);
|
||||
bool huntPressureOk = !string.IsNullOrEmpty(huntCombatLine)
|
||||
&& huntCombatLine.IndexOf("Boortkin", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& huntCombatLine.IndexOf("Thasthuk", System.StringComparison.OrdinalIgnoreCase) >= 0
|
||||
&& huntCombatLine.IndexOf("Thasthuk", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& huntCombatLine.IndexOf("king", System.StringComparison.OrdinalIgnoreCase) < 0
|
||||
&& huntCombatLine.IndexOf(
|
||||
"under combat pressure",
|
||||
System.StringComparison.OrdinalIgnoreCase) < 0;
|
||||
|
|
|
|||
|
|
@ -1217,25 +1217,27 @@ public static class Chronicle
|
|||
ChronicleHud.UpdateLive();
|
||||
}
|
||||
|
||||
/// <summary>Killer POV - character history only.</summary>
|
||||
/// <summary>Killer POV - Chronicle Life when enabled; always mirrors to Activity.</summary>
|
||||
public static void NoteKill(Actor killer, Actor victim)
|
||||
{
|
||||
if (!ModSettings.ChronicleEnabled || killer == null || victim == null)
|
||||
if (killer == null || victim == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AppendHistory(
|
||||
ChronicleKind.Kill,
|
||||
killer,
|
||||
victim,
|
||||
$"Killed {SafeName(victim)} ({SpeciesOf(victim)})");
|
||||
string victimName = SafeName(victim);
|
||||
string line = $"Killed {victimName} ({SpeciesOf(victim)})";
|
||||
ActivityLog.NoteMilestone(killer, "milestone_kill", line, victimName);
|
||||
if (ModSettings.ChronicleEnabled)
|
||||
{
|
||||
AppendHistory(ChronicleKind.Kill, killer, victim, line);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Victim POV - cause of death on character history.</summary>
|
||||
/// <summary>Victim POV - Chronicle Life when enabled; always mirrors to Activity.</summary>
|
||||
public static void NoteDeath(Actor victim, AttackType attackType, Actor killer)
|
||||
{
|
||||
if (!ModSettings.ChronicleEnabled || victim == null)
|
||||
if (victim == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -1256,12 +1258,17 @@ public static class Chronicle
|
|||
}
|
||||
|
||||
string line = FormatDeathCause(victim, attackType, killer);
|
||||
AppendHistory(ChronicleKind.Death, victim, killer, line, attackType);
|
||||
string killerName = killer != null ? SafeName(killer) : "";
|
||||
ActivityLog.NoteMilestone(victim, "milestone_death", line, killerName);
|
||||
if (ModSettings.ChronicleEnabled)
|
||||
{
|
||||
AppendHistory(ChronicleKind.Death, victim, killer, line, attackType);
|
||||
}
|
||||
}
|
||||
|
||||
public static void NoteLovers(Actor a, Actor b)
|
||||
{
|
||||
if (!ModSettings.ChronicleEnabled || a == null || b == null)
|
||||
if (a == null || b == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -1274,13 +1281,22 @@ public static class Chronicle
|
|||
|
||||
CapPairKeys(LoverPairKeys);
|
||||
|
||||
AppendHistory(ChronicleKind.Lover, a, b, $"Became lovers with {SafeName(b)}");
|
||||
AppendHistory(ChronicleKind.Lover, b, a, $"Became lovers with {SafeName(a)}");
|
||||
string nameA = SafeName(a);
|
||||
string nameB = SafeName(b);
|
||||
string lineA = $"Became lovers with {nameB}";
|
||||
string lineB = $"Became lovers with {nameA}";
|
||||
ActivityLog.NoteMilestone(a, "milestone_lover", lineA, nameB);
|
||||
ActivityLog.NoteMilestone(b, "milestone_lover", lineB, nameA);
|
||||
if (ModSettings.ChronicleEnabled)
|
||||
{
|
||||
AppendHistory(ChronicleKind.Lover, a, b, lineA);
|
||||
AppendHistory(ChronicleKind.Lover, b, a, lineB);
|
||||
}
|
||||
}
|
||||
|
||||
public static void NoteBestFriends(Actor a, Actor b)
|
||||
{
|
||||
if (!ModSettings.ChronicleEnabled || a == null || b == null)
|
||||
if (a == null || b == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -1293,8 +1309,17 @@ public static class Chronicle
|
|||
|
||||
CapPairKeys(FriendPairKeys);
|
||||
|
||||
AppendHistory(ChronicleKind.Friend, a, b, $"Befriended {SafeName(b)}");
|
||||
AppendHistory(ChronicleKind.Friend, b, a, $"Befriended {SafeName(a)}");
|
||||
string nameA = SafeName(a);
|
||||
string nameB = SafeName(b);
|
||||
string lineA = $"Befriended {nameB}";
|
||||
string lineB = $"Befriended {nameA}";
|
||||
ActivityLog.NoteMilestone(a, "milestone_friend", lineA, nameB);
|
||||
ActivityLog.NoteMilestone(b, "milestone_friend", lineB, nameA);
|
||||
if (ModSettings.ChronicleEnabled)
|
||||
{
|
||||
AppendHistory(ChronicleKind.Friend, a, b, lineA);
|
||||
AppendHistory(ChronicleKind.Friend, b, a, lineB);
|
||||
}
|
||||
}
|
||||
|
||||
public static void NoteWorldLog(WorldLogMessage message, string label)
|
||||
|
|
@ -1364,6 +1389,139 @@ public static class Chronicle
|
|||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Harness: fire a real Life milestone path (Activity mirror + Chronicle when enabled).
|
||||
/// kind: kill | death | lover | friend
|
||||
/// </summary>
|
||||
public static bool ForceLifeMilestoneOnFocus(string kind, string otherName = "")
|
||||
{
|
||||
if (!MoveCamera.hasFocusUnit() || MoveCamera._focus_unit == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Actor focus = MoveCamera._focus_unit;
|
||||
Actor other = FindOtherLivingUnit(focus);
|
||||
string k = (kind ?? "").Trim().ToLowerInvariant();
|
||||
string label = string.IsNullOrEmpty(otherName)
|
||||
? (other != null ? SafeName(other) : "Barkley")
|
||||
: otherName;
|
||||
|
||||
switch (k)
|
||||
{
|
||||
case "kill":
|
||||
if (other != null)
|
||||
{
|
||||
NoteKill(focus, other);
|
||||
return true;
|
||||
}
|
||||
|
||||
ActivityLog.NoteMilestone(
|
||||
focus,
|
||||
"milestone_kill",
|
||||
$"Killed {label} (creature)",
|
||||
label);
|
||||
if (ModSettings.ChronicleEnabled)
|
||||
{
|
||||
AppendHistory(ChronicleKind.Kill, focus, null, $"Killed {label} (creature)");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
case "death":
|
||||
NoteDeath(focus, AttackType.Age, other);
|
||||
return true;
|
||||
|
||||
case "lover":
|
||||
if (other != null)
|
||||
{
|
||||
// Allow re-force across scenario steps by clearing this pair first.
|
||||
LoverPairKeys.Remove(PairKey(focus.getID(), other.getID()));
|
||||
NoteLovers(focus, other);
|
||||
return true;
|
||||
}
|
||||
|
||||
ActivityLog.NoteMilestone(
|
||||
focus,
|
||||
"milestone_lover",
|
||||
$"Became lovers with {label}",
|
||||
label);
|
||||
if (ModSettings.ChronicleEnabled)
|
||||
{
|
||||
AppendHistory(ChronicleKind.Lover, focus, null, $"Became lovers with {label}");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
case "friend":
|
||||
if (other != null)
|
||||
{
|
||||
FriendPairKeys.Remove(PairKey(focus.getID(), other.getID()));
|
||||
NoteBestFriends(focus, other);
|
||||
return true;
|
||||
}
|
||||
|
||||
ActivityLog.NoteMilestone(
|
||||
focus,
|
||||
"milestone_friend",
|
||||
$"Befriended {label}",
|
||||
label);
|
||||
if (ModSettings.ChronicleEnabled)
|
||||
{
|
||||
AppendHistory(ChronicleKind.Friend, focus, null, $"Befriended {label}");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static Actor FindOtherLivingUnit(Actor exclude)
|
||||
{
|
||||
try
|
||||
{
|
||||
long excludeId = 0;
|
||||
try
|
||||
{
|
||||
excludeId = exclude != null ? exclude.getID() : 0;
|
||||
}
|
||||
catch
|
||||
{
|
||||
excludeId = 0;
|
||||
}
|
||||
|
||||
foreach (Actor unit in WorldActivityScanner.EnumerateAliveUnitsPublic())
|
||||
{
|
||||
if (unit == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (unit.getID() == excludeId)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
return unit;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// skip
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static long _orphanSeq = -1000;
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1373,7 +1373,8 @@ public static class ChronicleHud
|
|||
kindIcon.raycastTarget = false;
|
||||
HudIcons.Apply(
|
||||
kindIcon,
|
||||
HudIcons.FromUiIcon("iconClock")
|
||||
HudIcons.ForActivityKey(entry.TaskId)
|
||||
?? HudIcons.FromUiIcon("iconClock")
|
||||
?? HudIcons.FromUiIcon("iconTask")
|
||||
?? HudIcons.ForChronicleKind(ChronicleKind.Other));
|
||||
|
||||
|
|
|
|||
|
|
@ -497,8 +497,21 @@ internal static class HarnessScenarios
|
|||
Step("act16e", "assert", expect: "activity_prose_variety", value: "2"),
|
||||
Step("act16f", "activity_force", asset: "BehUnloadResources", label: "wheat@Riverhold", tier: "beat", value: "human"),
|
||||
Step("act16g", "assert", expect: "activity_log_contains", value: "wheat"),
|
||||
Step("act16g2", "assert", expect: "activity_log_contains", value: "Riverhold"),
|
||||
Step("act16g3", "assert", expect: "activity_log_not_contains", value: "while carrying"),
|
||||
Step("act16h", "activity_force", asset: "BehSocializeTalk", label: "Talks", count: 1, tier: "beat", expect: "Barkley"),
|
||||
Step("act16i", "assert", expect: "activity_log_contains", value: "Barkley"),
|
||||
Step("act16i2", "assert", expect: "activity_log_not_contains", value: "with another"),
|
||||
// JobLabel on dossier reason row (deterministic harness force).
|
||||
Step("act16j", "dossier_force_job", value: "farmer"),
|
||||
Step("act16k", "assert", expect: "dossier_contains", value: "farmer"),
|
||||
Step("act16l", "screenshot", value: "hud-dossier-job-only.png"),
|
||||
Step("act16m", "wait", wait: 0.45f),
|
||||
Step("act16n", "dossier_force_job", value: "farmer", label: "Story"),
|
||||
Step("act16o", "assert", expect: "dossier_contains", value: "Story · farmer"),
|
||||
Step("act16p", "screenshot", value: "hud-dossier-reason-job.png"),
|
||||
Step("act16q", "wait", wait: 0.45f),
|
||||
Step("act16r", "dossier_clear_job"),
|
||||
Step("act17", "activity_force", asset: "BehPollinate", label: "Works the flower", count: 3, tier: "beat"),
|
||||
Step("act17b", "activity_force", asset: "zzz_harness_act", label: "Harness pollen trail", count: 1),
|
||||
Step("act18", "wait", wait: 0.25f),
|
||||
|
|
@ -506,6 +519,13 @@ internal static class HarnessScenarios
|
|||
Step("act20", "assert", expect: "activity_prose_variety", value: "2"),
|
||||
Step("act20b", "assert", expect: "activity_names_colored"),
|
||||
Step("act20c", "assert", expect: "activity_log_contains", value: "Barkley"),
|
||||
// Life milestones mirror into Activity (kill + Became lovers) while Life stays on Chronicle.
|
||||
Step("act20d", "chronicle_milestone", value: "kill"),
|
||||
Step("act20e", "assert", expect: "activity_log_contains", value: "killed"),
|
||||
Step("act20f", "assert", expect: "chronicle_latest_contains", value: "Killed"),
|
||||
Step("act20g", "chronicle_milestone", value: "lover"),
|
||||
Step("act20h", "assert", expect: "activity_log_contains", value: "Became lovers"),
|
||||
Step("act20i", "assert", expect: "chronicle_latest_contains", value: "Became lovers"),
|
||||
Step("act21", "assert", expect: "dossier_history_shown", value: "1", label: "min", tier: "activity"),
|
||||
Step("act22", "assert", expect: "dossier_history_not_contains", value: "Harness pollen"),
|
||||
Step("act23", "assert", expect: "caption_layout_ok"),
|
||||
|
|
@ -518,6 +538,9 @@ internal static class HarnessScenarios
|
|||
Step("act29", "assert", expect: "dossier_history_shown", value: "1", label: "min", tier: "life"),
|
||||
Step("act29b", "screenshot", value: "hud-activity-life-split.png"),
|
||||
Step("act29c", "wait", wait: 0.45f),
|
||||
// Mixed activity icons + kill/lover milestones in dossier peek.
|
||||
Step("act29d", "screenshot", value: "hud-activity-icons-milestones.png"),
|
||||
Step("act29e", "wait", wait: 0.45f),
|
||||
// Books: Activity / Life tabs.
|
||||
Step("act40", "lore_open_focus"),
|
||||
Step("act41", "wait", wait: 0.25f),
|
||||
|
|
@ -568,6 +591,14 @@ internal static class HarnessScenarios
|
|||
Step("ch15b", "assert", expect: "chronicle_latest_contains", value: "auto"),
|
||||
Step("ch15c", "wait", wait: 0.2f),
|
||||
Step("ch15d", "assert", expect: "dossier_history_contains", value: "Killed"),
|
||||
// Real kill / lover milestones also land in Activity.
|
||||
Step("ch15d2", "chronicle_milestone", value: "kill"),
|
||||
Step("ch15d3", "assert", expect: "activity_log_contains", value: "killed"),
|
||||
Step("ch15d4", "assert", expect: "chronicle_latest_contains", value: "Killed"),
|
||||
Step("ch15d5", "chronicle_milestone", value: "lover"),
|
||||
Step("ch15d6", "assert", expect: "activity_log_contains", value: "Became lovers"),
|
||||
Step("ch15d7", "wait", wait: 0.2f),
|
||||
Step("ch15d8", "assert", expect: "dossier_history_shown", value: "1", label: "min", tier: "activity"),
|
||||
|
||||
// Long event wraps in the narrow dossier history column (no wider panel).
|
||||
Step("ch15e", "chronicle_force",
|
||||
|
|
|
|||
|
|
@ -161,6 +161,116 @@ public static class HudIcons
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Activity row icon from a task id, Beh* key, or milestone_* key.
|
||||
/// </summary>
|
||||
public static Sprite ForActivityKey(string key)
|
||||
{
|
||||
if (string.IsNullOrEmpty(key))
|
||||
{
|
||||
return Task() ?? FromUiIcon("iconClock");
|
||||
}
|
||||
|
||||
string k = key.ToLowerInvariant();
|
||||
if (k == "milestone_kill")
|
||||
{
|
||||
return ForChronicleKind(ChronicleKind.Kill);
|
||||
}
|
||||
|
||||
if (k == "milestone_death")
|
||||
{
|
||||
return ForChronicleKind(ChronicleKind.Death);
|
||||
}
|
||||
|
||||
if (k == "milestone_lover")
|
||||
{
|
||||
return ForChronicleKind(ChronicleKind.Lover);
|
||||
}
|
||||
|
||||
if (k == "milestone_friend")
|
||||
{
|
||||
return ForChronicleKind(ChronicleKind.Friend);
|
||||
}
|
||||
|
||||
string verb = ActivityVerbMap.Resolve(key);
|
||||
if (string.IsNullOrEmpty(verb))
|
||||
{
|
||||
verb = k;
|
||||
}
|
||||
|
||||
switch (verb)
|
||||
{
|
||||
case "fight":
|
||||
case "warrior":
|
||||
return FromUiIcon("iconAttack") ?? FromUiIcon("iconKills") ?? Task();
|
||||
case "hunt":
|
||||
return FromUiIcon("iconKills") ?? FromUiIcon("iconAttack") ?? Task();
|
||||
case "lover":
|
||||
return FromUiIcon("iconArrowLover") ?? Task();
|
||||
case "social":
|
||||
case "cry":
|
||||
case "swear":
|
||||
return FromUiIcon("iconTalk") ?? FromUiIcon("iconSpeech") ?? FromUiIcon("iconSocial")
|
||||
?? FromUiIcon("iconArrowLover") ?? Task();
|
||||
case "eat":
|
||||
return FromUiIcon("iconFood") ?? FromUiIcon("iconHunger") ?? Task();
|
||||
case "sleep":
|
||||
case "dream":
|
||||
return FromUiIcon("iconSleep") ?? FromUiIcon("iconRest") ?? FromUiIcon("iconClock") ?? Task();
|
||||
case "farm":
|
||||
return FromUiIcon("iconFarm") ?? FromUiIcon("iconCrops") ?? FromUiIcon("iconWheat") ?? Task();
|
||||
case "work":
|
||||
case "haul":
|
||||
return FromUiIcon("iconShowTasks") ?? FromUiIcon("iconHammer") ?? FromUiIcon("iconWalker") ?? Task();
|
||||
case "fire":
|
||||
case "ignite":
|
||||
case "extinguish":
|
||||
return FromUiIcon("iconFire") ?? FromUiIcon("iconLava") ?? Task();
|
||||
case "flee":
|
||||
return FromUiIcon("iconFlee") ?? FromUiIcon("iconRun") ?? FromUiIcon("iconDanger")
|
||||
?? FromUiIcon("iconAttack") ?? Task();
|
||||
case "play":
|
||||
case "laugh":
|
||||
case "sing":
|
||||
return FromUiIcon("iconHappy") ?? FromUiIcon("iconFun") ?? FromUiIcon("iconMusic")
|
||||
?? FromUiIcon("iconFavoriteStar") ?? Task();
|
||||
case "read":
|
||||
return FromUiIcon("iconBooks") ?? FromUiIcon("iconBook") ?? Task();
|
||||
case "heal":
|
||||
case "recharge":
|
||||
return FromUiIcon("iconHealth") ?? FromUiIcon("iconHeal") ?? FromUiIcon("iconHeart") ?? Task();
|
||||
case "pollinate":
|
||||
return FromUiIcon("iconFlower") ?? FromUiIcon("iconBee") ?? FromUiIcon("iconNature") ?? Task();
|
||||
case "fish":
|
||||
return FromUiIcon("iconFish") ?? FromUiIcon("iconFishing") ?? FromUiIcon("iconWater") ?? Task();
|
||||
case "trade":
|
||||
return FromUiIcon("iconTrade") ?? FromUiIcon("iconCoin") ?? FromUiIcon("iconGold") ?? Task();
|
||||
case "settle":
|
||||
case "group":
|
||||
return FromUiIcon("iconCity") ?? FromUiIcon("iconHome") ?? FromUiIcon("iconKingdom") ?? Task();
|
||||
case "relieve":
|
||||
return FromUiIcon("iconPoop") ?? FromUiIcon("iconToilet") ?? Task();
|
||||
case "confused":
|
||||
case "strange_urge":
|
||||
case "possessed":
|
||||
return FromUiIcon("iconConfused") ?? FromUiIcon("iconMadness") ?? FromUiIcon("iconPossessed")
|
||||
?? FromUiIcon("iconQuestionMark") ?? Task();
|
||||
case "steal":
|
||||
case "loot":
|
||||
return FromUiIcon("iconSteal") ?? FromUiIcon("iconLoot") ?? FromUiIcon("iconBag") ?? Task();
|
||||
case "harvest_life":
|
||||
case "gather_life":
|
||||
return FromUiIcon("iconSoulHarvested") ?? FromUiIcon("iconSoul") ?? FromUiIcon("iconSkulls")
|
||||
?? FromUiIcon("iconDead") ?? Task();
|
||||
case "move":
|
||||
return FromUiIcon("iconWalker") ?? FromUiIcon("iconShowTasks") ?? Task();
|
||||
case "wait":
|
||||
return FromUiIcon("iconClock") ?? Task();
|
||||
default:
|
||||
return Task() ?? FromUiIcon("iconClock");
|
||||
}
|
||||
}
|
||||
|
||||
public static Sprite ForDeathManner(DeathManner manner)
|
||||
{
|
||||
switch (manner)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ public sealed class UnitDossier
|
|||
public string ReasonLine = "";
|
||||
public string DetailLine = "";
|
||||
public string CaptionText = "";
|
||||
public string JobLabel = "";
|
||||
public float Score;
|
||||
public int Kills;
|
||||
public int Age;
|
||||
|
|
@ -42,6 +43,18 @@ public sealed class UnitDossier
|
|||
public ActorTrait Trait;
|
||||
}
|
||||
|
||||
/// <summary>Harness: force JobLabel on the next dossier build (no live citizen_job).</summary>
|
||||
public static string HarnessJobLabelOverride = "";
|
||||
|
||||
/// <summary>Harness: optional watch-reason fragment used with <see cref="HarnessJobLabelOverride"/>.</summary>
|
||||
public static string HarnessReasonOverride = "";
|
||||
|
||||
public static void ClearHarnessOverrides()
|
||||
{
|
||||
HarnessJobLabelOverride = "";
|
||||
HarnessReasonOverride = "";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Minimal dossier for archive subjects with no living unit (harness orphans / legacy deaths).
|
||||
/// </summary>
|
||||
|
|
@ -100,6 +113,7 @@ public sealed class UnitDossier
|
|||
d.TaskText = SafeTask(actor);
|
||||
FillTopTraits(d, actor);
|
||||
CollectReasons(d, actor, speciesCounts);
|
||||
d.JobLabel = ResolveJobLabel(actor);
|
||||
|
||||
// Species icon is shown separately; keep id in the title for scanability.
|
||||
d.Headline = string.IsNullOrEmpty(d.SpeciesId)
|
||||
|
|
@ -111,6 +125,17 @@ public sealed class UnitDossier
|
|||
return d;
|
||||
}
|
||||
|
||||
private static string ResolveJobLabel(Actor actor)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(HarnessJobLabelOverride))
|
||||
{
|
||||
return HarnessJobLabelOverride.Trim();
|
||||
}
|
||||
|
||||
string jobId = ActivityInterestTable.SafeJobId(actor);
|
||||
return ActivityProse.HumanizeJobPublic(jobId);
|
||||
}
|
||||
|
||||
public bool ContainsIgnoreCase(string needle)
|
||||
{
|
||||
if (string.IsNullOrEmpty(needle))
|
||||
|
|
@ -191,7 +216,11 @@ public sealed class UnitDossier
|
|||
{
|
||||
string tierPart = watchTier.HasValue ? watchTier.Value.ToString() : "";
|
||||
string why = "";
|
||||
if (!string.IsNullOrEmpty(watchLabel))
|
||||
if (!string.IsNullOrEmpty(HarnessReasonOverride))
|
||||
{
|
||||
why = HarnessReasonOverride.Trim();
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(watchLabel))
|
||||
{
|
||||
why = ShortenWatchLabel(watchLabel, d);
|
||||
}
|
||||
|
|
@ -211,17 +240,45 @@ public sealed class UnitDossier
|
|||
why = "";
|
||||
}
|
||||
|
||||
string watchReason;
|
||||
if (string.IsNullOrEmpty(tierPart))
|
||||
{
|
||||
return why ?? "";
|
||||
watchReason = why ?? "";
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(why) || why.IndexOf(tierPart, System.StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
else if (string.IsNullOrEmpty(why) || why.IndexOf(tierPart, System.StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
return IsShownTraitName(d, tierPart) ? "" : tierPart;
|
||||
watchReason = IsShownTraitName(d, tierPart) ? "" : tierPart;
|
||||
}
|
||||
else
|
||||
{
|
||||
watchReason = tierPart + " · " + why;
|
||||
}
|
||||
|
||||
return tierPart + " · " + why;
|
||||
return ComposeReasonWithJob(watchReason, d.JobLabel);
|
||||
}
|
||||
|
||||
/// <summary>Watch reason + job on the dossier row; job alone when reason is empty.</summary>
|
||||
private static string ComposeReasonWithJob(string watchReason, string jobLabel)
|
||||
{
|
||||
string reason = (watchReason ?? "").Trim();
|
||||
string job = (jobLabel ?? "").Trim();
|
||||
if (string.IsNullOrEmpty(job))
|
||||
{
|
||||
return reason;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(reason))
|
||||
{
|
||||
return job;
|
||||
}
|
||||
|
||||
if (reason.Equals(job, System.StringComparison.OrdinalIgnoreCase)
|
||||
|| reason.IndexOf(job, System.StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
return reason;
|
||||
}
|
||||
|
||||
return reason + " · " + job;
|
||||
}
|
||||
|
||||
private static string FirstFlavorTag(UnitDossier d)
|
||||
|
|
|
|||
|
|
@ -666,6 +666,28 @@ public static class WatchCaption
|
|||
RefreshHistoryIfChanged();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Harness: force JobLabel (and optional watch reason) onto the focused dossier reason row.
|
||||
/// </summary>
|
||||
public static bool ForceJobLabelOnFocus(string jobLabel, string reasonOverride = "")
|
||||
{
|
||||
if (!MoveCamera.hasFocusUnit() || MoveCamera._focus_unit == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
UnitDossier.HarnessJobLabelOverride = jobLabel ?? "";
|
||||
UnitDossier.HarnessReasonOverride = reasonOverride ?? "";
|
||||
SetFromActor(MoveCamera._focus_unit);
|
||||
return _current != null
|
||||
&& (!string.IsNullOrEmpty(_current.JobLabel) || !string.IsNullOrEmpty(_current.ReasonLine));
|
||||
}
|
||||
|
||||
public static void ClearHarnessJobOverrides()
|
||||
{
|
||||
UnitDossier.ClearHarnessOverrides();
|
||||
}
|
||||
|
||||
private static void RefreshHistoryIfChanged()
|
||||
{
|
||||
if (!_visible || _current == null)
|
||||
|
|
@ -988,7 +1010,7 @@ public static class WatchCaption
|
|||
|
||||
_historyCol.SetActive(true);
|
||||
|
||||
var lines = new List<(string rich, string plain, bool isActivity, ChronicleKind? kind)>(HistoryPeekMax);
|
||||
var lines = new List<(string rich, string plain, bool isActivity, ChronicleKind? kind, string activityKey)>(HistoryPeekMax);
|
||||
if (activity != null)
|
||||
{
|
||||
for (int i = 0; i < activity.Count && lines.Count < HistoryPeekMax; i++)
|
||||
|
|
@ -1006,7 +1028,7 @@ public static class WatchCaption
|
|||
}
|
||||
|
||||
string rich = !string.IsNullOrEmpty(e.DisplayLineRich) ? e.DisplayLineRich : plain;
|
||||
lines.Add((rich, plain, true, null));
|
||||
lines.Add((rich, plain, true, null, e.TaskId ?? ""));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1027,7 +1049,7 @@ public static class WatchCaption
|
|||
continue;
|
||||
}
|
||||
|
||||
lines.Add((rich, plain, false, e.Kind));
|
||||
lines.Add((rich, plain, false, e.Kind, ""));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1068,7 +1090,7 @@ public static class WatchCaption
|
|||
}
|
||||
|
||||
private static void ApplyCombinedSlotContents(
|
||||
List<(string rich, string plain, bool isActivity, ChronicleKind? kind)> lines,
|
||||
List<(string rich, string plain, bool isActivity, ChronicleKind? kind, string activityKey)> lines,
|
||||
float colW)
|
||||
{
|
||||
float labelW = Mathf.Max(24f, colW - HistoryIcon - 2f);
|
||||
|
|
@ -1098,8 +1120,8 @@ public static class WatchCaption
|
|||
_historySlotIsActivity[i] = row.isActivity;
|
||||
slot.Root.SetActive(true);
|
||||
Sprite icon = row.isActivity
|
||||
? (HudIcons.FromUiIcon("iconClock")
|
||||
?? HudIcons.FromUiIcon("iconTask")
|
||||
? (HudIcons.ForActivityKey(row.activityKey)
|
||||
?? HudIcons.FromUiIcon("iconClock")
|
||||
?? HudIcons.ForChronicleKind(ChronicleKind.Other))
|
||||
: HudIcons.ForChronicleKind(row.kind ?? ChronicleKind.Other);
|
||||
HudIcons.Apply(slot.Icon, icon);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "IdleSpectator",
|
||||
"author": "dazed",
|
||||
"version": "0.12.84",
|
||||
"version": "0.12.91",
|
||||
"description": "AFK Idle Spectator (I) + Lore (L). Detailed living activity prose by default.",
|
||||
"GUID": "com.dazed.idlespectator"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue