Tetgame mark
Tetgame deep-code room

The Diamond Mine

Inspect Tetgame Rabbot behavior files and prepare the future safe editor for strategy tuning.

Welcome guest — sign in through the Trigame front door when you are ready.
Log in via Trigame

Diamond Mine

The Tetgame answer to the Gold Room.

Read-only starter

The Diamond Mine is intended to expose the deeper machinery of Tetgame Rabbots: behavior files, scoring nudges, strategy filters, voice loaders, backups, and eventually safe editing tools.

Current pass: this page only lists and displays local Tetgame JS/JSON files from js/rabbots, js/personalities, and js/voices. It does not save changes yet.

Behavior / voice file viewer

js/voices/silver_kahuna.js

/*
 * Tetgame Voice Loader: Silver Kahuna
 *
 * Editable voice text lives in js/voices/silver_kahuna.json.
 * This wrapper registers a fallback copy immediately, then refreshes from
 * the JSON file when served normally.
 */
(function(global){
  'use strict';

  const fallbackVoiceData = {
  "meta": {
    "key": "silver_kahuna",
    "id": "silver_kahuna",
    "name": "Silver Kahuna",
    "gender": "",
    "style": "balanced flow strategist",
    "format": "tetgame_voice_v1",
    "notes": "Editable voice data. js/voices/silver_kahuna.js registers this same data for browser use."
  },
  "move": {
    "start_tet": [
      "The first wave decides the rhythm.",
      "I will let the board breathe.",
      "A calm beginning can carry far."
    ],
    "tet": [
      "That face catches the next wave.",
      "I will open the flow there.",
      "The board wants room to move."
    ],
    "token_center": [
      "The center is the calm under the wave.",
      "I will set the balance point.",
      "The rhythm turns from the middle."
    ],
    "token_high_score": [
      "That line has good surf.",
      "Several currents meet here.",
      "A strong wave should be ridden."
    ],
    "token": [
      "A smooth claim.",
      "I will follow the current there.",
      "This point keeps the rhythm."
    ],
    "pass": [
      "No wave worth forcing.",
      "I will wait for the set.",
      "The board will come back around."
    ],
    "default": [
      "Play the rhythm, not the noise."
    ]
  }
};

  const dataRegistry = global.TetgameRabbotVoiceData = global.TetgameRabbotVoiceData || {};
  const voiceRegistry = global.TetgameRabbotVoices = global.TetgameRabbotVoices || {};

  function pick(lines, seed){
    if (!Array.isArray(lines) || !lines.length) return '';
    const n = Number(seed || 0);
    const index = Math.abs(Math.floor(n)) % lines.length;
    return lines[index] || lines[0] || '';
  }

  function moveBucket(move){
    if (!move) return 'pass';
    if (move.type === 'start_tet') return 'start_tet';
    if (move.type === 'tet') return 'tet';
    if (move.type === 'token') {
      const reason = String(move.reason || '').toLowerCase();
      if (reason.includes(':10') || reason.includes('center')) return 'token_center';
      if (Number(move.score || 0) >= 8) return 'token_high_score';
      return 'token';
    }
    if (move.type === 'pass') return 'pass';
    return 'default';
  }

  function registerVoiceData(data){
    const voiceData = data && data.move ? data : fallbackVoiceData;
    dataRegistry.silver_kahuna = voiceData;
    voiceRegistry.silver_kahuna = {
      key:'silver_kahuna',
      id:'silver_kahuna',
      name:(voiceData.meta && voiceData.meta.name) || 'Silver Kahuna',
      gender:(voiceData.meta && voiceData.meta.gender) || '',
      style:(voiceData.meta && voiceData.meta.style) || '',
      data:voiceData,

      lineForMove(move, ctx){
        const bucket = moveBucket(move);
        const lines = (voiceData.move && (voiceData.move[bucket] || voiceData.move.default)) || [];
        const seed = (move && move.score ? move.score * 100 : 0) + (ctx && ctx.playerId ? String(ctx.playerId).length : 0);
        return pick(lines, seed);
      }
    };
  }

  registerVoiceData(fallbackVoiceData);

  if (global.fetch) {
    fetch('js/voices/silver_kahuna.json', {cache:'no-store'})
      .then(response => response && response.ok ? response.json() : null)
      .then(data => { if (data) registerVoiceData(data); })
      .catch(() => {});
  }
})(window);

Future safe editor shape

Borrowing the Gold Room idea without mixing Trigame and Tetgame logic.

Read original

Keep an original snapshot before the first edit.

Edit safe sections

Expose selected behavior sections without letting the page damage wrapper code.

Test in Tetgame

Save, then jump back to the Blue Room or board to test the Rabbot live.