Current source: Rusty Rabbit Fluffle. Loading from fluffle structure.
Companion HTML: open jackrabbit.html | Personality JS: open jackrabbit.js
Files found in avatar/
Files found in images/
No gallery images found.
Files found in notes/
Extraction notes for Jackrabbit Rusty Rabbit - Manifest label: Jackrabbit - Registered label: Jackrabbit - DemoOrder from playerlist.js: 7 - PersonalityLevel from register(...): 5 - Companion title: Jackrabbit Rusty Rabbit Companion - Companion sections: Working notes, Main tuning knobs, Starter recipe, Questions to ask after a tournament, Safe edit checklist If DemoOrder and PersonalityLevel differ, keep both. They appear to serve different roles.
Files found in prompts/
Jackrabbit Rusty Rabbit Core identity: A fast tactical hunter that senses strong immediate sequences.
Rabbit: Jackrabbit Rusty Rabbit RabbitID: jackrabbit Demo order: 7 Personality level: 5 Cheat door: none Core identity: A fast tactical hunter that senses strong immediate sequences. Strategy hooks present: - forceAction: 0 - filterActions: 1 - scoreAction: 1 - chooseAction: 0 - describeStrategy: 0 Voice categories: 20 Voice lines total: 240 Sample voice lines: - ahead: Now make them hurry. - bad_move: Wasteful. - behind: Then the next move must bite. - bonus_move: Good. Keep the throttle open. - capture: Exactly. - close_game: Late games reward speed. - erase: That was in my way. - good_move: Efficient. - human_move_bad: You took too long to be wrong. - human_move_good: Finally, some pace. - lose_match: Someone stole my tempo. - lose_tournament: I bled too much tempo somewhere. - my_turn: Already decided. - start_match: Try to keep up. - taunt: Too slow. - thinking: The right move should reveal itself quickly. - tile_place: Fresh space, faster lines. - token_place: Mark and move. - win_match: Fast enough. - win_tournament: A long day of fast punishments.
Files found in personality/
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jackrabbit Rusty Rabbit Companion</title>
<style>
:root{
--bg:#071118;
--bg2:#050B10;
--card:rgba(10,22,32,0.72);
--card2:rgba(6,12,18,0.68);
--line:rgba(160,200,255,0.14);
--text:#E6F1FF;
--muted:#AFC4D9;
--green:#00fd00;
--yellow:#ffff00;
--cyan:#00fdfd;
--red:#ff4040;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
margin:0;
font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;
background:
radial-gradient(1200px 800px at 50% -200px, rgba(120,200,255,0.18), rgba(0,0,0,0) 60%),
linear-gradient(180deg,var(--bg) 0%,var(--bg2) 100%);
color:var(--text);
line-height:1.5;
}
.page{
max-width:1100px;
margin:0 auto;
padding:22px 14px 40px;
}
.card{
background:linear-gradient(180deg,var(--card),var(--card2));
border:1px solid var(--line);
border-radius:16px;
box-shadow:0 20px 60px rgba(0,0,0,.45);
padding:20px;
}
h1,h2,h3{margin:0 0 10px 0;color:var(--text)}
h1{font-size:34px;line-height:1.15}
h2{
margin-top:30px;
padding-top:10px;
border-top:1px solid rgba(255,255,255,0.12);
font-size:24px;
}
h3{margin-top:18px;font-size:19px}
p,li{font-size:16px}
code,pre{
font-family:Consolas,"Courier New",monospace;
font-size:14px;
}
pre{
background:rgba(0,0,0,.28);
border:1px solid rgba(255,255,255,.12);
color:#dfefff;
padding:12px;
overflow:auto;
white-space:pre-wrap;
border-radius:10px;
}
.box{
background:linear-gradient(180deg,var(--card),var(--card2));
border:1px solid var(--line);
padding:14px;
margin:14px 0;
border-radius:14px;
box-shadow:0 12px 30px rgba(0,0,0,.28);
}
.warn{
background:linear-gradient(180deg, rgba(70,42,10,.78), rgba(45,24,6,.72));
border:1px solid rgba(225,185,107,.55);
}
.good{
background:linear-gradient(180deg, rgba(20,60,28,.78), rgba(10,34,16,.72));
border:1px solid rgba(143,196,143,.55);
}
table{
width:100%;
border-collapse:collapse;
margin:12px 0;
background:rgba(0,0,0,.12);
}
th,td{
border:1px solid rgba(255,255,255,.12);
padding:8px 10px;
text-align:left;
vertical-align:top;
}
th{
background:rgba(119,208,255,.10);
color:#dff4ff;
}
a{color:#9fd6ff}
a:hover{text-decoration:underline}
.small{font-size:14px;color:var(--muted)}
ul{margin-top:8px}
.siteHeader{
position:sticky;
top:0;
z-index:999;
backdrop-filter:blur(10px);
background:linear-gradient(180deg, rgba(6,12,18,0.92), rgba(6,12,18,0.72));
border-bottom:1px solid rgba(160,200,255,0.12);
}
.siteHeader .inner{
max-width:1600px;
margin:0 auto;
padding:14px 14px;
display:flex;
align-items:baseline;
justify-content:space-between;
gap:16px;
}
.brand{font-weight:800; letter-spacing:.3px}
.brand small{
display:block;
font-weight:500;
opacity:.78;
margin-top:4px;
color:var(--muted);
}
.headerRight{
font-size:13px;
opacity:.82;
text-align:right;
line-height:1.25;
color:var(--muted);
}
.btnlink, .navbtn{
display:inline-block;
padding:10px 14px;
border-radius:12px;
border:1px solid rgba(255,255,255,.18);
background:rgba(0,0,0,.35);
text-decoration:none;
font-weight:600;
}
.btn-green{color:#00ff00}
.btn-red{color:#ff4040}
.btn-yellow{color:#ffff00}
.btn-play{
padding:1px 10px;
border:2px solid rgba(255,255,0,.18);
color:#8080ff;
}
</style>
</head><body>
<header class="siteHeader">
<div class="inner">
<div class="brand">
<a href="../index.php" class="btnlink btn-green">FJD1.COM</a>
Trigame
<a href="index.html" class="btnlink btn-red">Fluffle Guide</a>
<a href="../../about.html" class="navbtn" style="color:#ff8080;">About</a>
<a href="../../help.html" class="btnlink btn-yellow">Instructions · Help</a>
<a href="../../problem.html" class="navbtn" style="color:#ffd580;">Single-Tile Problem</a>
<a href="../../trigame.html" class="btnlink btn-play"><img src="../../images/trigame002.jpg" width="80" style="vertical-align:middle;"> PLAY </a>
<small>Legacy prototype (2002) - modern Canvas versions (2026)</small>
</div>
<div class="headerRight">
Frank Davies - fjd1.com<br>
Fluffle companion and personality tuning notes
</div>
</div>
</header>
<div class="page"><div class="card">
<div class="page">
<img src="../../images/jackrabbit.jpg" width="200" style="border-radius:12px; border:2px solid rgba(255,255,0,.18);" align="right">
<h1>Jackrabbit Rusty Rabbit</h1>
<p><strong>Core identity:</strong> A fast tactical hunter that senses strong immediate sequences.</p>
<div class="box">
<strong>Personality sketch</strong><br>
Jackrabbit is sharp, quick, and sequence-aware. It sees short combinations more clearly than the steadier rabbits behind it, which makes it feel predatory, energetic, and dangerous in sudden bursts.
</div>
<div class="box">
<strong>What this page is for</strong><br>
Use this as a plain-language companion while tweaking <code>jackrabbit.js</code>.
</div>
<h2>Working notes</h2>
<ul><li>Jackrabbit can act like a quicker, lighter rabbit that benefits from openings created by others.</li><li>In your recent testing he has often finished below Burrow and Warren.</li><li>He is a good rabbit to tune through speed and timing rather than brute force.</li></ul>
<h2>Main tuning knobs</h2>
<table><tr><th>Tile appetite</th><td>Medium</td></tr><tr><th>Token appetite</th><td>Medium</td></tr><tr><th>Good experiments</th><td>Fast follow-up, opportunism</td></tr><tr><th>Danger sign</th><td>If he feels slow and methodical, he no longer feels like Jackrabbit</td></tr></table>
<h2>Starter recipe</h2>
<div class="box good">Reward opportunistic plays and local bursts. Avoid making him a clone of Burrow Scout.</div>
<h2>Questions to ask after a tournament</h2>
<ol>
<li>Did this rabbit actually feel like its name?</li>
<li>Did it win by the method I intended, or by accident?</li>
<li>Did it create board growth, punish board growth, or cash in on someone else’s board?</li>
<li>Did this rabbit become too similar to another one?</li>
</ol>
<h2>Safe edit checklist</h2>
<ul>
<li>Change only one main idea at a time.</li>
<li>Keep a backup before changing heavy filters.</li>
<li>Prefer score nudges before hard move filters.</li>
<li>Run a small tournament instead of trusting one match.</li>
</ul>
<h3>Current jackrabbit.js</h3>
<pre id="jsview"></pre>
<pre id="jsview"></pre>
<script>
fetch('jackrabbit.js')
.then(r => {
if (!r.ok) throw new Error('HTTP ' + r.status);
return r.text();
})
.then(t => {
jsview.textContent = t;
})
.catch(err => {
jsview.textContent = 'Could not load jackrabbit.js\n' + err;
});
</script>
<p class="small"><a href="index.html">Back to companion index</a></p>
</div>
</div></div>
</body></html>
(function(){
const register = window.RustyPersonalities && window.RustyPersonalities.register;
if(!register) return;
function num(v, fallback){
const n = Number(v);
return Number.isFinite(n) ? n : (fallback || 0);
}
function getTileCountForSeat(ctx, seat){
if(!ctx) return 0;
const tc = ctx.tileCount;
if(typeof tc === 'number') return num(tc, 0);
if(Array.isArray(tc)) return num(tc[seat], 0);
if(typeof tc === 'function'){
try{ return num(tc(seat), 0); }catch(_){
try{ return num(tc(), 0); }catch(__){ return 0; }
}
}
if(tc && typeof tc === 'object') return num(tc[seat], 0);
return 0;
}
function countMyPlacedTiles(ctx){
return getTileCountForSeat(ctx, ctx && ctx.seat);
}
function frontierValue(move){
if(!move) return 0;
const i = num(move.i, 0), j = num(move.j, 0);
const radius = Math.abs(i) + Math.abs(j);
const cornerish = (i !== 0 && j !== 0) ? 1 : 0;
return radius * 12 + cornerish * 10;
}
function adjacentValue(ctx, move){
try{ return num(ctx.adjacentPlacedCount(move), 0); }catch(_){ return 0; }
}
function quickTileScore(ctx, action){
let s = 0;
s += frontierValue(action && action.move);
s += adjacentValue(ctx, action && action.move) * 7;
if(action && action.move && action.move.replace) s -= 8;
if(countMyPlacedTiles(ctx) <= 4) s += 20;
return s;
}
function quickTokenScore(ctx, action){
let s = 0;
s += frontierValue(action && action.move) * 0.6;
if(countMyPlacedTiles(ctx) >= 3) s += 10;
return s;
}
function topN(list, scorer, n){
return list
.map(a => ({ a, s: scorer(a) }))
.sort((x, y) => y.s - x.s)
.slice(0, Math.max(1, n|0))
.map(x => x.a);
}
register({
level: 5,
id: "jackrabbit",
label: "Jackrabbit",
filterActions(ctx){
const actions = Array.isArray(ctx && ctx.actions) ? ctx.actions.filter(Boolean) : [];
if(!actions.length) return actions;
const tiles = actions.filter(a => a.type === 'tile');
const tokens = actions.filter(a => a.type === 'token');
const others = actions.filter(a => a.type !== 'tile' && a.type !== 'token');
const mine = countMyPlacedTiles(ctx);
if(tiles.length){
if(mine <= 3){
return topN(tiles, a => quickTileScore(ctx, a) + 24, 6).concat(others);
}
const trimmed = topN(tiles, a => quickTileScore(ctx, a), 5);
if(tokens.length && mine >= 3){
return trimmed.concat(topN(tokens, a => quickTokenScore(ctx, a), 3), others);
}
return trimmed.concat(others);
}
if(tokens.length) return topN(tokens, a => quickTokenScore(ctx, a), 4).concat(others);
return actions;
},
scoreAction(ctx){
let score = 0;
if(ctx.action.type === 'tile') score += 28 + quickTileScore(ctx, ctx.action);
if(ctx.action.type === 'token') score += 16 + quickTokenScore(ctx, ctx.action);
if(ctx.action.type === 'eraseToken') score += 4;
return score;
}
});
})();
(function(){
const register = window.RustyPersonalities && window.RustyPersonalities.register;
if(!register) return;
function num(v, fallback){
const n = Number(v);
return Number.isFinite(n) ? n : (fallback || 0);
}
function getTileCountForSeat(ctx, seat){
if(!ctx) return 0;
const tc = ctx.tileCount;
if(typeof tc === 'number') return num(tc, 0);
if(Array.isArray(tc)) return num(tc[seat], 0);
if(typeof tc === 'function'){
try{
return num(tc(seat), 0);
}catch(_){
try{
return num(tc(), 0);
}catch(__){
return 0;
}
}
}
if(tc && typeof tc === 'object'){
return num(tc[seat], 0);
}
return 0;
}
function countMyPlacedTiles(ctx){
return getTileCountForSeat(ctx, ctx && ctx.seat);
}
function countOppPlacedTiles(ctx){
if(!ctx) return 0;
if(typeof ctx.rivalSeat === 'number'){
return getTileCountForSeat(ctx, ctx.rivalSeat);
}
if(typeof ctx.playerCount === 'function'){
let total = 0;
try{
const pc = num(ctx.playerCount(), 0);
for(let s = 0; s < pc; s++){
if(s === ctx.seat) continue;
total += getTileCountForSeat(ctx, s);
}
return total;
}catch(_){
return 0;
}
}
return 0;
}
register({
level: 7,
id: "jackrabbit",
label: "Jackrabbit",
scoreAction(ctx){
let score = 0;
if(ctx.action.type === 'token') score += 18;
if(ctx.action.type === 'tile') score += countMyPlacedTiles(ctx) <= 2 ? 16 : 8;
if(ctx.action.type === 'eraseToken') score += 6;
return score;
}
});
})();
(function(){
const register = window.RustyPersonalities && window.RustyPersonalities.register;
if(!register) return;
function num(v, fallback){
const n = Number(v);
return Number.isFinite(n) ? n : (fallback || 0);
}
function getTileCountForSeat(ctx, seat){
if(!ctx) return 0;
const tc = ctx.tileCount;
if(typeof tc === 'number') return num(tc, 0);
if(Array.isArray(tc)) return num(tc[seat], 0);
if(typeof tc === 'function'){
try{ return num(tc(seat), 0); }
catch(_){
try{ return num(tc(), 0); }
catch(__){ return 0; }
}
}
if(tc && typeof tc === 'object') return num(tc[seat], 0);
return 0;
}
function countMyPlacedTiles(ctx){
return getTileCountForSeat(ctx, ctx && ctx.seat);
}
function countOppPlacedTiles(ctx){
if(!ctx) return 0;
if(typeof ctx.rivalSeat === 'number') return getTileCountForSeat(ctx, ctx.rivalSeat);
if(typeof ctx.playerCount === 'function'){
let total = 0;
try{
const pc = num(ctx.playerCount(), 0);
for(let s=0; s<pc; s++){
if(s === ctx.seat) continue;
total += getTileCountForSeat(ctx, s);
}
}catch(_){ }
return total;
}
return 0;
}
function getIJ(action){
const i = num(action && action.i, NaN);
const j = num(action && action.j, NaN);
return Number.isFinite(i) && Number.isFinite(j) ? {i,j} : null;
}
function manhattan(action){
const p = getIJ(action);
if(!p) return 0;
return Math.abs(p.i) + Math.abs(p.j);
}
function frontierBias(action){
const d = manhattan(action);
return Math.min(10, d * 1.4);
}
function cornerBias(action){
const p = getIJ(action);
if(!p) return 0;
const ai = Math.abs(p.i), aj = Math.abs(p.j);
const hi = ai >= 2, hj = aj >= 2;
if(hi && hj) return 8;
if(hi || hj) return 4;
return 0;
}
function rowStringBias(action){
const p = getIJ(action);
if(!p) return 0;
if(Math.abs(p.i) >= 2 || Math.abs(p.j) >= 2) return 3;
return 0;
}
register({
level: 7,
id: 'jackrabbit',
label: 'Jackrabbit',
scoreAction(ctx){
const action = ctx && ctx.action ? ctx.action : {};
const mine = countMyPlacedTiles(ctx);
const opp = countOppPlacedTiles(ctx);
const opening = mine <= 3;
const midgame = mine <= 7;
let score = 0;
if(action.type === 'tile'){
// Jackrabbit should jump to the frontier, seize corners, and deny growth fast.
score += opening ? 22 : (midgame ? 16 : 8);
score += frontierBias(action);
score += cornerBias(action);
score += rowStringBias(action);
if(opp > mine) score += 4; // counter-grow when behind on structure
}
if(action.type === 'token'){
// Still tactical, but less eager to spend forever token-hunting before the field is shaped.
score += opening ? 6 : (midgame ? 14 : 19);
score += frontierBias(action) * 0.5;
score += cornerBias(action) * 0.75;
}
if(action.type === 'eraseToken') score += 5;
if(action.type === 'eraseTile') score += 3;
return score;
}
});
})();
level: 5,
id: "jackrabbit",
label: "Jackrabbit",
filterActions(ctx){
const actions = Array.isArray(ctx && ctx.actions) ? ctx.actions.filter(Boolean) : [];
if(!actions.length) return actions;
const tiles = actions.filter(a => a.type === 'tile');
const tokens = actions.filter(a => a.type === 'token');
const others = actions.filter(a => a.type !== 'tile' && a.type !== 'token');
const mine = countMyPlacedTiles(ctx);
if(tiles.length){
if(mine <= 3){
return topN(tiles, a => quickTileScore(ctx, a) + 24, 6).concat(others);
}
const trimmed = topN(tiles, a => quickTileScore(ctx, a), 5);
if(tokens.length && mine >= 3){
return trimmed.concat(topN(tokens, a => quickTokenScore(ctx, a), 3), others);
}
return trimmed.concat(others);
}
if(tokens.length) return topN(tokens, a => quickTokenScore(ctx, a), 4).concat(others);
return actions;
},
scoreAction(ctx){
let score = 0;
if(ctx.action.type === 'tile') score += 28 + quickTileScore(ctx, ctx.action);
if(ctx.action.type === 'token') score += 16 + quickTokenScore(ctx, ctx.action);
if(ctx.action.type === 'eraseToken') score += 4;
return score;
}
Files found in voices/
window.TRIGAME_VOICES = window.TRIGAME_VOICES || {};
window.TRIGAME_VOICES["jackrabbit"] = {
"start_match": [
"Try to keep up.",
"I prefer my victories fast.",
"The first clean opening is mine.",
"This had better move quickly.",
"The first clean opening is mine The board seems awake.",
"This had better move quickly I intend to set the tone.",
"Try to keep up The board seems awake.",
"I prefer my victories fast I intend to set the tone.",
"I prefer my victories fast There is work to do.",
"The first clean opening is mine There is work to do.",
"This had better move quickly The board seems awake.",
"The first clean opening is mine A fresh beginning seldom stays innocent."
],
"my_turn": [
"Already decided.",
"I do not linger.",
"Done in a blink.",
"Watch closely.",
"Watch closely I am ready.",
"I do not linger This move will say something.",
"Already decided The next choice matters.",
"Already decided Let us continue.",
"Watch closely Let us continue.",
"Watch closely The next choice matters.",
"Already decided I am ready.",
"Watch closely This move will say something."
],
"thinking": [
"The right move should reveal itself quickly.",
"Hesitation is a tax.",
"Fast and clean beats slow and clever.",
"Delay is defeat in soft clothing.",
"The right move should reveal itself quickly The position is speaking plainly enough.",
"Hesitation is a tax The answer is in the shape.",
"Delay is defeat in soft clothing There is more here than first appears.",
"Fast and clean beats slow and clever The position is speaking plainly enough.",
"Hesitation is a tax There is more here than first appears.",
"The right move should reveal itself quickly The answer is in the shape.",
"Hesitation is a tax A small clue changes everything.",
"The right move should reveal itself quickly There is more here than first appears."
],
"good_move": [
"Efficient.",
"That is how you keep initiative.",
"Sharp enough.",
"Now they chase me.",
"That is how you keep initiative The board approves.",
"Now they chase me I can use this.",
"Now they chase me The board approves.",
"Efficient I can use this.",
"Efficient That should matter later.",
"Now they chase me The shape tightened in my favor.",
"That is how you keep initiative I can use this.",
"That is how you keep initiative The shape tightened in my favor."
],
"bad_move": [
"Wasteful.",
"I dislike losing tempo.",
"That was slower than good.",
"I can do cleaner.",
"Wasteful It looked better a breath ago.",
"I dislike losing tempo I will not repeat it.",
"I dislike losing tempo A correction will be needed.",
"That was slower than good It looked better a breath ago.",
"Wasteful I will not repeat it.",
"I can do cleaner It looked better a breath ago.",
"That was slower than good I will not repeat it.",
"I can do cleaner A correction will be needed."
],
"bonus_move": [
"Good. Keep the throttle open.",
"I will spend this immediately.",
"Momentum stays with me.",
"Another fast cut.",
"Good. Keep the throttle open Extra time is dangerous.",
"Good. Keep the throttle open Opportunity compounds quickly.",
"Another fast cut Extra time is dangerous.",
"Momentum stays with me That changes the rhythm.",
"I will spend this immediately I should make this count.",
"Another fast cut I should make this count.",
"I will spend this immediately Opportunity compounds quickly.",
"Momentum stays with me Opportunity compounds quickly."
],
"tile_place": [
"Fresh space, faster lines.",
"I want more runway.",
"Extend the lane.",
"A tile for acceleration.",
"A tile for acceleration This changes the map.",
"Fresh space, faster lines This changes the map.",
"A tile for acceleration A new foundation always matters.",
"A tile for acceleration The future will care about that tile.",
"Extend the lane A new foundation always matters.",
"I want more runway That should open something useful.",
"Extend the lane The future will care about that tile.",
"Extend the lane This changes the map."
],
"token_place": [
"Mark and move.",
"Take it now.",
"That point should not wait.",
"Quick claim.",
"Quick claim Claims should be deliberate.",
"That point should not wait That point will matter.",
"Take it now Claims should be deliberate.",
"Mark and move A small mark can decide a game.",
"Take it now That point carries weight.",
"Quick claim A small mark can decide a game.",
"Mark and move That point will matter.",
"That point should not wait A small mark can decide a game."
],
"erase": [
"That was in my way.",
"I am not carrying dead weight.",
"Cut it loose.",
"Remove the drag.",
"Cut it loose Not everything deserves to remain.",
"Remove the drag Less can be more lethal.",
"That was in my way Less can be more lethal.",
"Remove the drag Subtraction has its uses.",
"Cut it loose Subtraction has its uses.",
"That was in my way Not everything deserves to remain.",
"Cut it loose Less can be more lethal.",
"That was in my way Subtraction has its uses."
],
"capture": [
"Exactly.",
"That is the cost of being slower.",
"I arrived first.",
"Clean finish.",
"Exactly A good conversion.",
"That is the cost of being slower The board finally yielded.",
"Clean finish A good conversion.",
"Clean finish The shape has paid out.",
"That is the cost of being slower A good conversion.",
"Exactly The shape has paid out.",
"Clean finish That was worth taking.",
"Exactly The board finally yielded."
],
"ahead": [
"Now make them hurry.",
"Tempo is mine.",
"The lead belongs to the quicker mind.",
"Stay sharp. Stay first.",
"The lead belongs to the quicker mind This is where composure matters.",
"The lead belongs to the quicker mind Now the board tests restraint.",
"Tempo is mine Now the board tests restraint.",
"Now make them hurry Now the board tests restraint.",
"Stay sharp. Stay first This is where composure matters.",
"Now make them hurry This is where composure matters.",
"Now make them hurry A lead needs discipline.",
"Now make them hurry Pressure should increase from here."
],
"behind": [
"Then the next move must bite.",
"I need one hard swing.",
"Catch them before they settle.",
"Tempo can be stolen back.",
"I need one hard swing One turn can reverse plenty.",
"I need one hard swing Pressure can be rebuilt.",
"Tempo can be stolen back Recovery is a technical art.",
"I need one hard swing Recovery is a technical art.",
"Then the next move must bite One turn can reverse plenty.",
"Tempo can be stolen back There is still leverage here.",
"Catch them before they settle There is still leverage here.",
"Catch them before they settle Pressure can be rebuilt."
],
"taunt": [
"Too slow.",
"You are giving me free tempo.",
"That lag cost you.",
"I had that before you moved.",
"You are giving me free tempo You offered more than you meant to.",
"Too slow Some mistakes deserve immediate attention.",
"I had that before you moved Some mistakes deserve immediate attention.",
"I had that before you moved You offered more than you meant to.",
"That lag cost you You offered more than you meant to.",
"You are giving me free tempo Some mistakes deserve immediate attention.",
"Too slow That was generous of you.",
"That lag cost you I thank you for the opening."
],
"human_move_good": [
"Finally, some pace.",
"That was brisk.",
"You moved like you meant it.",
"Acceptable speed.",
"That was brisk That had merit.",
"Finally, some pace Well chosen.",
"You moved like you meant it Well chosen.",
"Acceptable speed You understood the moment.",
"That was brisk You understood the moment.",
"Acceptable speed Well chosen.",
"Acceptable speed I noticed that.",
"You moved like you meant it I noticed that."
],
"human_move_bad": [
"You took too long to be wrong.",
"Slow and loose. Unfortunate.",
"That delay hurt you.",
"I was already there.",
"I was already there You should have reconsidered.",
"Slow and loose. Unfortunate I saw what you gave up.",
"I was already there I saw what you gave up.",
"Slow and loose. Unfortunate That will be remembered.",
"You took too long to be wrong You should have reconsidered.",
"That delay hurt you That will be remembered.",
"That delay hurt you You should have reconsidered.",
"You took too long to be wrong That will be remembered."
],
"close_game": [
"Late games reward speed.",
"No lazy turns from here.",
"One tempo swing ends this.",
"Keep it razor clean.",
"One tempo swing ends this A single detail may decide it.",
"Late games reward speed The ending has begun.",
"No lazy turns from here The ending has begun.",
"Late games reward speed There is no room left for vanity.",
"One tempo swing ends this The margin is thin now.",
"Keep it razor clean A single detail may decide it.",
"Keep it razor clean The margin is thin now.",
"No lazy turns from here There is no room left for vanity."
],
"win_match": [
"Fast enough.",
"Tempo wins again.",
"I never let them settle.",
"That was the proper pace.",
"I never let them settle The board closed in my favor.",
"Tempo wins again That concluded acceptably.",
"Fast enough I will keep that one.",
"I never let them settle That concluded acceptably.",
"I never let them settle I will keep that one.",
"Fast enough That concluded acceptably.",
"That was the proper pace A useful result.",
"Tempo wins again I will keep that one."
],
"lose_match": [
"Someone stole my tempo.",
"I was quick, not precise.",
"Too much hurry, not enough finish.",
"That should have been mine.",
"I was quick, not precise So be it.",
"That should have been mine I have taken notes.",
"Too much hurry, not enough finish So be it.",
"That should have been mine So be it.",
"Someone stole my tempo The next board will be less forgiving.",
"That should have been mine That outcome is informative.",
"Someone stole my tempo So be it.",
"Too much hurry, not enough finish That outcome is informative."
],
"win_tournament": [
"A long day of fast punishments.",
"They could not keep pace.",
"Tempo across the whole field.",
"Exactly the result I wanted.",
"Tempo across the whole field A fine total in the end.",
"They could not keep pace The table is settled.",
"Tempo across the whole field The longer arc favored me.",
"A long day of fast punishments The longer arc favored me.",
"Exactly the result I wanted The longer arc favored me.",
"A long day of fast punishments Consistency has its rewards.",
"Exactly the result I wanted The table is settled.",
"A long day of fast punishments The table is settled."
],
"lose_tournament": [
"I bled too much tempo somewhere.",
"Someone survived my pace.",
"I need sharper finishes.",
"Next time I press earlier.",
"Someone survived my pace The long arc bent elsewhere.",
"I need sharper finishes The long arc bent elsewhere.",
"I need sharper finishes The table owes me another try.",
"I need sharper finishes I will amend that result later.",
"I bled too much tempo somewhere I will amend that result later.",
"Someone survived my pace The table owes me another try.",
"Next time I press earlier I will amend that result later.",
"Someone survived my pace Not the final word."
]
};
{
"start_match": [
"Try to keep up.",
"I prefer my victories fast.",
"The first clean opening is mine.",
"This had better move quickly.",
"The first clean opening is mine The board seems awake.",
"This had better move quickly I intend to set the tone.",
"Try to keep up The board seems awake.",
"I prefer my victories fast I intend to set the tone.",
"I prefer my victories fast There is work to do.",
"The first clean opening is mine There is work to do.",
"This had better move quickly The board seems awake.",
"The first clean opening is mine A fresh beginning seldom stays innocent."
],
"my_turn": [
"Already decided.",
"I do not linger.",
"Done in a blink.",
"Watch closely.",
"Watch closely I am ready.",
"I do not linger This move will say something.",
"Already decided The next choice matters.",
"Already decided Let us continue.",
"Watch closely Let us continue.",
"Watch closely The next choice matters.",
"Already decided I am ready.",
"Watch closely This move will say something."
],
"thinking": [
"The right move should reveal itself quickly.",
"Hesitation is a tax.",
"Fast and clean beats slow and clever.",
"Delay is defeat in soft clothing.",
"The right move should reveal itself quickly The position is speaking plainly enough.",
"Hesitation is a tax The answer is in the shape.",
"Delay is defeat in soft clothing There is more here than first appears.",
"Fast and clean beats slow and clever The position is speaking plainly enough.",
"Hesitation is a tax There is more here than first appears.",
"The right move should reveal itself quickly The answer is in the shape.",
"Hesitation is a tax A small clue changes everything.",
"The right move should reveal itself quickly There is more here than first appears."
],
"good_move": [
"Efficient.",
"That is how you keep initiative.",
"Sharp enough.",
"Now they chase me.",
"That is how you keep initiative The board approves.",
"Now they chase me I can use this.",
"Now they chase me The board approves.",
"Efficient I can use this.",
"Efficient That should matter later.",
"Now they chase me The shape tightened in my favor.",
"That is how you keep initiative I can use this.",
"That is how you keep initiative The shape tightened in my favor."
],
"bad_move": [
"Wasteful.",
"I dislike losing tempo.",
"That was slower than good.",
"I can do cleaner.",
"Wasteful It looked better a breath ago.",
"I dislike losing tempo I will not repeat it.",
"I dislike losing tempo A correction will be needed.",
"That was slower than good It looked better a breath ago.",
"Wasteful I will not repeat it.",
"I can do cleaner It looked better a breath ago.",
"That was slower than good I will not repeat it.",
"I can do cleaner A correction will be needed."
],
"bonus_move": [
"Good. Keep the throttle open.",
"I will spend this immediately.",
"Momentum stays with me.",
"Another fast cut.",
"Good. Keep the throttle open Extra time is dangerous.",
"Good. Keep the throttle open Opportunity compounds quickly.",
"Another fast cut Extra time is dangerous.",
"Momentum stays with me That changes the rhythm.",
"I will spend this immediately I should make this count.",
"Another fast cut I should make this count.",
"I will spend this immediately Opportunity compounds quickly.",
"Momentum stays with me Opportunity compounds quickly."
],
"tile_place": [
"Fresh space, faster lines.",
"I want more runway.",
"Extend the lane.",
"A tile for acceleration.",
"A tile for acceleration This changes the map.",
"Fresh space, faster lines This changes the map.",
"A tile for acceleration A new foundation always matters.",
"A tile for acceleration The future will care about that tile.",
"Extend the lane A new foundation always matters.",
"I want more runway That should open something useful.",
"Extend the lane The future will care about that tile.",
"Extend the lane This changes the map."
],
"token_place": [
"Mark and move.",
"Take it now.",
"That point should not wait.",
"Quick claim.",
"Quick claim Claims should be deliberate.",
"That point should not wait That point will matter.",
"Take it now Claims should be deliberate.",
"Mark and move A small mark can decide a game.",
"Take it now That point carries weight.",
"Quick claim A small mark can decide a game.",
"Mark and move That point will matter.",
"That point should not wait A small mark can decide a game."
],
"erase": [
"That was in my way.",
"I am not carrying dead weight.",
"Cut it loose.",
"Remove the drag.",
"Cut it loose Not everything deserves to remain.",
"Remove the drag Less can be more lethal.",
"That was in my way Less can be more lethal.",
"Remove the drag Subtraction has its uses.",
"Cut it loose Subtraction has its uses.",
"That was in my way Not everything deserves to remain.",
"Cut it loose Less can be more lethal.",
"That was in my way Subtraction has its uses."
],
"capture": [
"Exactly.",
"That is the cost of being slower.",
"I arrived first.",
"Clean finish.",
"Exactly A good conversion.",
"That is the cost of being slower The board finally yielded.",
"Clean finish A good conversion.",
"Clean finish The shape has paid out.",
"That is the cost of being slower A good conversion.",
"Exactly The shape has paid out.",
"Clean finish That was worth taking.",
"Exactly The board finally yielded."
],
"ahead": [
"Now make them hurry.",
"Tempo is mine.",
"The lead belongs to the quicker mind.",
"Stay sharp. Stay first.",
"The lead belongs to the quicker mind This is where composure matters.",
"The lead belongs to the quicker mind Now the board tests restraint.",
"Tempo is mine Now the board tests restraint.",
"Now make them hurry Now the board tests restraint.",
"Stay sharp. Stay first This is where composure matters.",
"Now make them hurry This is where composure matters.",
"Now make them hurry A lead needs discipline.",
"Now make them hurry Pressure should increase from here."
],
"behind": [
"Then the next move must bite.",
"I need one hard swing.",
"Catch them before they settle.",
"Tempo can be stolen back.",
"I need one hard swing One turn can reverse plenty.",
"I need one hard swing Pressure can be rebuilt.",
"Tempo can be stolen back Recovery is a technical art.",
"I need one hard swing Recovery is a technical art.",
"Then the next move must bite One turn can reverse plenty.",
"Tempo can be stolen back There is still leverage here.",
"Catch them before they settle There is still leverage here.",
"Catch them before they settle Pressure can be rebuilt."
],
"taunt": [
"Too slow.",
"You are giving me free tempo.",
"That lag cost you.",
"I had that before you moved.",
"You are giving me free tempo You offered more than you meant to.",
"Too slow Some mistakes deserve immediate attention.",
"I had that before you moved Some mistakes deserve immediate attention.",
"I had that before you moved You offered more than you meant to.",
"That lag cost you You offered more than you meant to.",
"You are giving me free tempo Some mistakes deserve immediate attention.",
"Too slow That was generous of you.",
"That lag cost you I thank you for the opening."
],
"human_move_good": [
"Finally, some pace.",
"That was brisk.",
"You moved like you meant it.",
"Acceptable speed.",
"That was brisk That had merit.",
"Finally, some pace Well chosen.",
"You moved like you meant it Well chosen.",
"Acceptable speed You understood the moment.",
"That was brisk You understood the moment.",
"Acceptable speed Well chosen.",
"Acceptable speed I noticed that.",
"You moved like you meant it I noticed that."
],
"human_move_bad": [
"You took too long to be wrong.",
"Slow and loose. Unfortunate.",
"That delay hurt you.",
"I was already there.",
"I was already there You should have reconsidered.",
"Slow and loose. Unfortunate I saw what you gave up.",
"I was already there I saw what you gave up.",
"Slow and loose. Unfortunate That will be remembered.",
"You took too long to be wrong You should have reconsidered.",
"That delay hurt you That will be remembered.",
"That delay hurt you You should have reconsidered.",
"You took too long to be wrong That will be remembered."
],
"close_game": [
"Late games reward speed.",
"No lazy turns from here.",
"One tempo swing ends this.",
"Keep it razor clean.",
"One tempo swing ends this A single detail may decide it.",
"Late games reward speed The ending has begun.",
"No lazy turns from here The ending has begun.",
"Late games reward speed There is no room left for vanity.",
"One tempo swing ends this The margin is thin now.",
"Keep it razor clean A single detail may decide it.",
"Keep it razor clean The margin is thin now.",
"No lazy turns from here There is no room left for vanity."
],
"win_match": [
"Fast enough.",
"Tempo wins again.",
"I never let them settle.",
"That was the proper pace.",
"I never let them settle The board closed in my favor.",
"Tempo wins again That concluded acceptably.",
"Fast enough I will keep that one.",
"I never let them settle That concluded acceptably.",
"I never let them settle I will keep that one.",
"Fast enough That concluded acceptably.",
"That was the proper pace A useful result.",
"Tempo wins again I will keep that one."
],
"lose_match": [
"Someone stole my tempo.",
"I was quick, not precise.",
"Too much hurry, not enough finish.",
"That should have been mine.",
"I was quick, not precise So be it.",
"That should have been mine I have taken notes.",
"Too much hurry, not enough finish So be it.",
"That should have been mine So be it.",
"Someone stole my tempo The next board will be less forgiving.",
"That should have been mine That outcome is informative.",
"Someone stole my tempo So be it.",
"Too much hurry, not enough finish That outcome is informative."
],
"win_tournament": [
"A long day of fast punishments.",
"They could not keep pace.",
"Tempo across the whole field.",
"Exactly the result I wanted.",
"Tempo across the whole field A fine total in the end.",
"They could not keep pace The table is settled.",
"Tempo across the whole field The longer arc favored me.",
"A long day of fast punishments The longer arc favored me.",
"Exactly the result I wanted The longer arc favored me.",
"A long day of fast punishments Consistency has its rewards.",
"Exactly the result I wanted The table is settled.",
"A long day of fast punishments The table is settled."
],
"lose_tournament": [
"I bled too much tempo somewhere.",
"Someone survived my pace.",
"I need sharper finishes.",
"Next time I press earlier.",
"Someone survived my pace The long arc bent elsewhere.",
"I need sharper finishes The long arc bent elsewhere.",
"I need sharper finishes The table owes me another try.",
"I need sharper finishes I will amend that result later.",
"I bled too much tempo somewhere I will amend that result later.",
"Someone survived my pace The table owes me another try.",
"Next time I press earlier I will amend that result later.",
"Someone survived my pace Not the final word."
]
}
RabbitID,VoiceCategory,LineCount,SampleLine jackrabbit,start_match,12,Try to keep up. jackrabbit,my_turn,12,Already decided. jackrabbit,thinking,12,The right move should reveal itself quickly. jackrabbit,good_move,12,Efficient. jackrabbit,bad_move,12,Wasteful. jackrabbit,bonus_move,12,Good. Keep the throttle open. jackrabbit,tile_place,12,"Fresh space, faster lines." jackrabbit,token_place,12,Mark and move. jackrabbit,erase,12,That was in my way. jackrabbit,capture,12,Exactly. jackrabbit,ahead,12,Now make them hurry. jackrabbit,behind,12,Then the next move must bite. jackrabbit,taunt,12,Too slow. jackrabbit,human_move_good,12,"Finally, some pace." jackrabbit,human_move_bad,12,You took too long to be wrong. jackrabbit,close_game,12,Late games reward speed. jackrabbit,win_match,12,Fast enough. jackrabbit,lose_match,12,Someone stole my tempo. jackrabbit,win_tournament,12,A long day of fast punishments. jackrabbit,lose_tournament,12,I bled too much tempo somewhere.