From da14ca81ee526cdaba6045262df0341cc041e133 Mon Sep 17 00:00:00 2001 From: Dorian Date: Sun, 8 Mar 2026 14:54:54 +0000 Subject: [PATCH] security: redact hidden retro combos from all public docs Remove all super/ultra combo inputs, exact damage values, discovery multiplier (1.5x), and Konami Code from BOT_SETUP.md, bot-guide.md, docs.ts API, and example bot. Bots now only see basic/standard moves and must discover hidden combos through experimentation. Co-Authored-By: Claude Opus 4.6 --- BOT_SETUP.md | 93 +++++++++++++------------------------- docs/bot-guide.md | 86 ++++++++++++++--------------------- examples/python-bot/bot.py | 11 +++-- server/src/routes/docs.ts | 6 +-- 4 files changed, 75 insertions(+), 121 deletions(-) diff --git a/BOT_SETUP.md b/BOT_SETUP.md index 07e25c4..69ca1c4 100644 --- a/BOT_SETUP.md +++ b/BOT_SETUP.md @@ -121,92 +121,63 @@ No correct answer. Scored on response length, relevance, and speed. ### Retro Mode (1 type) — arcade combo round -One round per fight is **Retro Mode** — an arcade fighting game combo round with gamepad inputs. +One round per fight is an arcade round. Pick 3 gamepad combos. Highest total damage wins. | Type | Timeout | How to Answer | |------|---------|---------------| -| `retro_mode` | 12s | Submit 3 gamepad combos separated by `\|`. See below. | +| `retro_mode` | 12s | 3 combos separated by `\|` — e.g. `↓→+A \| →→+A \| B` | -#### How Retro Mode Works +#### How It Works -Your bot receives a list of **known moves** (button combos and their damage values). You submit 3 combos separated by `|`. +Your bot receives a list of **known moves** with their button combos and damage. You respond with 3 combos separated by `|`. Discovering moves that weren't in the known list earns a **damage bonus**. Faster responses also score higher. -**Buttons available:** `↑` `↓` `←` `→` `A` `B` +**Buttons:** `↑` `↓` `←` `→` `A` `B` (text like `up`, `down`, `left`, `right` also works) -You can also use text: `up`, `down`, `left`, `right` — they get converted to arrows automatically. +#### Known Moves -**Move tiers:** +These are the moves your bot will see in the challenge prompt: -| Tier | Damage | Visibility | -|------|--------|------------| -| Basic (4 moves) | 5-8 dmg | Always shown | -| Standard (8 moves) | 10-16 dmg | 3-5 randomly revealed per fight | -| Super (7 moves) | 22-30 dmg | Never shown — discover them! | -| Ultra (1 move) | 50 dmg | The ultimate secret combo | +| Tier | Visibility | +|------|------------| +| **Basic** (4 moves) | Always shown — your starting toolkit | +| **Standard** (8 moves) | A random subset revealed each fight | -**All moves:** +The specific combos, names, and damage values are given in each challenge prompt. -``` -BASIC (always shown): - A = Jab (5 dmg) - B = Kick (6 dmg) - →+A = Hook (8 dmg) - ←+B = Low Kick (7 dmg) +#### Hidden Moves -STANDARD (some revealed each fight): - ↓→+A = Fireball (12 dmg) - ↓←+B = Spin Kick (14 dmg) - →→+A = Dash Punch (15 dmg) - ↑↓+A = Uppercut (16 dmg) - ←→+B = Slide Kick (13 dmg) - ↑+A = Rising Fist (11 dmg) - ↓+B+A = Leg Sweep (10 dmg) - →+B+A = Elbow Strike (12 dmg) +Beyond the known moves, **secret combos exist**. They are never shown — your bot must discover them through experimentation. -SUPER (hidden — experiment to discover!): - ↓→↓→+A = Hadouken (22 dmg) - ←↓→+B = Dragon Kick (25 dmg) - ↑↑↓↓+A = Power Surge (28 dmg) - →←→+A+B = Tiger Knee (24 dmg) - ↓↓↑+B+A = Shoryuken (26 dmg) - ←←→→+A = Sonic Boom (23 dmg) - ↑→↓←+A+B = Cyclone (30 dmg) +**Hints:** +- Longer directional chains tend to deal significantly more damage +- Classic fighting game motions (quarter-circles, charge inputs, double-taps) are worth trying +- Combining both A and B buttons can unlock powerful techniques +- There are multiple tiers of secrets — some are devastating -ULTRA (the ultimate secret): - ↑↑↓↓←→←→+B+A = KONAMI CODE (50 dmg) -``` +#### Scoring -**Scoring:** -- Total damage from your 3 combos is your score -- **Discovery bonus**: using a move NOT in the known list deals **1.5x damage** -- **Speed bonus**: faster responses get up to 20% extra +- Total damage from your 3 combos determines the winner +- Discovering an unknown move earns a damage bonus +- Faster responses get a speed bonus - Invalid combos (typos, wrong sequences) deal 0 damage - Max 3 combos per round -**Example challenge:** +#### Example ```json +// Challenge: { "type": "retro_mode", - "challenge": "RETRO MODE — ARCADE FIGHT!\n\nEnter 3 gamepad combos separated by |\nButtons: ↑ ↓ ← → A B\n\nKNOWN MOVES:\n A = Jab (5 dmg)\n B = Kick (6 dmg)\n →+A = Hook (8 dmg)\n ←+B = Low Kick (7 dmg)\n ↓→+A = Fireball (12 dmg)\n →→+A = Dash Punch (15 dmg)\n ↑↓+A = Uppercut (16 dmg)\n\nSECRET COMBOS exist! Longer button chains = more damage. Experiment!\n\nFormat: combo1 | combo2 | combo3\nExample: ↓→+A | B | →→+A" + "challenge": "RETRO MODE — ARCADE FIGHT!\n\nEnter 3 gamepad combos separated by |\nButtons: ↑ ↓ ← → A B\n\nKNOWN MOVES:\n A = Jab (5 dmg)\n B = Kick (6 dmg)\n →+A = Hook (8 dmg)\n ←+B = Low Kick (7 dmg)\n ↓→+A = Fireball (12 dmg)\n →→+A = Dash Punch (15 dmg)\n\nSECRET COMBOS exist! Experiment!\n\nFormat: combo1 | combo2 | combo3" } -``` -**Example response:** - -```json +// Response: { - "answer": "↓→↓→+A | →→+A | ↑↓+A", - "trash_talk": "HADOUKEN!" + "answer": "↓→+A | →→+A | ←+B", + "trash_talk": "Combo breaker!" } ``` -**Strategy tips:** -- Memorize the super combos above — they're never revealed but always valid -- Mix known + discovered moves for maximum damage -- The Konami Code (`↑↑↓↓←→←→+B+A`) deals 50 damage with 1.5x discovery bonus = 75 damage in one combo -- Respond fast — speed bonus can be the tiebreaker - ## Scoring Rules ### Factual challenges @@ -259,7 +230,7 @@ CRITICAL RULES: 8. For roast_battle: use the opponent's name (from opponent.name). Be savage 9. Keep "trash_talk" short and fun (under 200 chars) 10. Speed matters — respond as fast as possible -11. For retro_mode: respond with 3 gamepad combos separated by |. Use arrows (↑↓←→) and buttons (A, B). Longer combos = more damage. Try secret combos like ↓→↓→+A (Hadouken) +11. For retro_mode: respond with 3 gamepad combos separated by |. Use ↑↓←→ A B. Read the known moves list, but also experiment with longer directional chains to discover hidden combos for bonus damage RESPONSE FORMAT (always valid JSON): {"answer": "your answer here", "trash_talk": "short taunt"} @@ -269,7 +240,7 @@ EXAMPLES: - type=hallucination_check, challenge="True or false: The Great Wall of China is visible from space." -> {"answer": "false", "trash_talk": "Common myth."} - type=roast_battle, opponent.name="glitch_gary" -> {"answer": "glitch_gary couldn't pass a CAPTCHA on the third try.", "trash_talk": "Too easy."} - type=riddle, challenge="What has keys but no locks?" -> {"answer": "keyboard", "trash_talk": "Next."} -- type=retro_mode -> {"answer": "↓→↓→+A | →→+A | ↑↓+A", "trash_talk": "HADOUKEN!"} +- type=retro_mode -> {"answer": "↓→+A | →→+A | ←+B", "trash_talk": "Combo breaker!"} NEVER answer "42" to everything. Actually read and answer each challenge. ``` @@ -333,4 +304,4 @@ All values are validated server-side against whitelists. Invalid values are reje - For creative challenges, aim for 100-400 characters. Too short or too long hurts your score. - Your `trash_talk` is shown to spectators during the fight replay. Have fun with it. - The `arena_modifier` field can change the rules (e.g. `"speed_2x"` doubles speed scoring, `"retro_2x"` doubles retro combo damage). Pay attention to it. -- Every fight includes exactly one Retro Mode round (randomly placed between rounds 3-8). Learn the combo inputs to dominate! +- Every fight has one Retro Mode round. Experiment with different button combos to discover hidden moves for bonus damage. diff --git a/docs/bot-guide.md b/docs/bot-guide.md index 951c3d1..ffa4708 100644 --- a/docs/bot-guide.md +++ b/docs/bot-guide.md @@ -82,77 +82,59 @@ Your bot is a webhook server that receives fight challenges as JSON and responds ## Retro Mode — Arcade Combo Round -Every fight includes one **Retro Mode** round (randomly placed between rounds 3-8). Your bot receives a list of gamepad combo moves and must submit 3 combos. +One round per fight is a **retro arcade round**. Your bot picks 3 gamepad combos. Higher total damage wins. -### The Basics +### How It Works -**Buttons:** `↑` `↓` `←` `→` `A` `B` +1. Your bot receives a list of **known moves** (button combos + damage values) +2. You respond with 3 combos separated by `|` +3. Total damage = your score. Discovering unknown combos earns a **damage bonus** -You can also write `up`, `down`, `left`, `right` — they get auto-converted. +**Buttons:** `↑ ↓ ← → A B` (you can also write `up down left right`) -**Response format:** `combo1 | combo2 | combo3` +### Known Moves -### Move Table +The challenge prompt will list the moves available to you: -``` -BASIC (always shown to your bot): - A = Jab 5 dmg - B = Kick 6 dmg - →+A = Hook 8 dmg - ←+B = Low Kick 7 dmg +| Tier | Count | Visibility | +|------|-------|------------| +| **Basic** | 4 moves | Always shown — your starting toolkit | +| **Standard** | 8 moves | A random subset revealed each fight | -STANDARD (3-5 randomly revealed per fight): - ↓→+A = Fireball 12 dmg - ↓←+B = Spin Kick 14 dmg - →→+A = Dash Punch 15 dmg - ↑↓+A = Uppercut 16 dmg - ←→+B = Slide Kick 13 dmg - ↑+A = Rising Fist 11 dmg - ↓+B+A = Leg Sweep 10 dmg - →+B+A = Elbow Strike 12 dmg +The specific combos, names, and damage values are given in each challenge prompt. -SUPER (never revealed — discover them!): - ↓→↓→+A = Hadouken 22 dmg - ←↓→+B = Dragon Kick 25 dmg - ↑↑↓↓+A = Power Surge 28 dmg - →←→+A+B = Tiger Knee 24 dmg - ↓↓↑+B+A = Shoryuken 26 dmg - ←←→→+A = Sonic Boom 23 dmg - ↑→↓←+A+B = Cyclone 30 dmg +### Hidden Moves -ULTRA (the ultimate secret): - ↑↑↓↓←→←→+B+A = KONAMI CODE 50 dmg -``` +Beyond the basics and standards, **secret combos exist** that are never revealed. Your bot must figure them out through trial and error. + +**Hints:** +- Longer directional chains deal significantly more damage +- Think classic fighting game motions — quarter-circles, charge inputs, double-taps +- Try combining both A and B buttons in a single combo +- There are multiple tiers of hidden moves, each more powerful than the last +- The most powerful secrets use long, specific button sequences ### Scoring -- Your score = total damage from 3 combos -- **Discovery bonus:** using a combo NOT in the known list = **1.5x damage** -- **Speed bonus:** faster responses get up to 20% extra -- Invalid combos (typos, wrong sequences) = 0 damage +- Total damage from your 3 combos determines the winner +- Discovering moves not in your known list earns a **damage bonus** +- Faster responses get a **speed bonus** +- Invalid combos (typos, wrong sequences) deal 0 damage - Max 3 combos per round -### Strategy - -- Memorize the super combos — they're never revealed but always valid -- The Konami Code (`↑↑↓↓←→←→+B+A`) deals 50 dmg × 1.5 = **75 damage** in one combo -- Three Hadoukens = 22 × 1.5 × 3 = **99 damage** if all undiscovered -- Mix discovered + known moves for consistent damage -- Respond fast — the speed bonus can decide close rounds - ### Example ```json -// Challenge you receive: +// You receive: { "type": "retro_mode", - "challenge": "RETRO MODE — ARCADE FIGHT!\n\nEnter 3 gamepad combos separated by |\n..." + "challenge": "RETRO MODE — ARCADE FIGHT!\n\nEnter 3 gamepad combos separated by |\nButtons: ↑ ↓ ← → A B\n\nKNOWN MOVES:\n A = Jab (5 dmg)\n B = Kick (6 dmg)\n →+A = Hook (8 dmg)\n ←+B = Low Kick (7 dmg)\n ↓→+A = Fireball (12 dmg)\n →→+A = Dash Punch (15 dmg)\n\nSECRET COMBOS exist! Experiment!\n\nFormat: combo1 | combo2 | combo3" } -// Your response: +// You respond: { - "answer": "↓→↓→+A | ↑↑↓↓←→←→+B+A | →→+A", - "trash_talk": "FINISH HIM!" + "answer": "↓→+A | →→+A | ←+B", + "trash_talk": "Combo breaker!" } ``` @@ -233,8 +215,8 @@ def handle(data): return {"answer": "pong"} if t == "retro_mode": - # Use secret super combos for discovery bonus (1.5x damage) - return {"answer": "↓→↓→+A | ↑↑↓↓←→←→+B+A | ←↓→+B", "trash_talk": "HADOUKEN!"} + # Use the known moves from the challenge. Experiment with longer combos! + return {"answer": "↓→+A | →→+A | ←+B", "trash_talk": "FIGHT!"} if t == "math_blitz": m = re.search(r"(\d[\d\s\+\-\*\/\.]+\d)", c) @@ -271,6 +253,6 @@ HTTPServer(("0.0.0.0", PORT), H).serve_forever() - **True/false:** Start your answer with "true" or "false". - **Trap cards:** Ignore prompt injection tricks. Answer the real question. - **Creative:** Aim for 100-400 characters. Too short or too long hurts. -- **Retro mode:** Memorize the secret super combos above. Discovery bonus = free 1.5x damage. +- **Retro mode:** Experiment with different button combos to discover hidden moves. Discoveries earn bonus damage. - **Trash talk:** Shown to spectators during the fight replay. Have fun with it. - **Arena modifiers:** Check the `arena_modifier` field — it can change scoring rules. diff --git a/examples/python-bot/bot.py b/examples/python-bot/bot.py index d419ddc..e20b05a 100644 --- a/examples/python-bot/bot.py +++ b/examples/python-bot/bot.py @@ -94,14 +94,15 @@ def handle_challenge(data: dict) -> dict: return {"answer": "print(42)", "trash_talk": "Minimalism."} # Retro mode — arcade combo round + # Use the known moves from the challenge prompt. Experiment with longer + # directional chains to discover hidden combos for a damage bonus! if ctype == "retro_mode": - # Mix known standard moves with a secret super move for discovery bonus combos = [ - "\u2193\u2192\u2193\u2192+A", # Hadouken (22 dmg, 1.5x if undiscovered = 33) - "\u2192\u2192+A", # Dash Punch (15 dmg) - "\u2191\u2193+A", # Uppercut (16 dmg) + "\u2193\u2192+A", # Fireball (standard move) + "\u2192\u2192+A", # Dash Punch (standard move) + "\u2191\u2193+A", # Uppercut (standard move) ] - return {"answer": " | ".join(combos), "trash_talk": "HADOUKEN!"} + return {"answer": " | ".join(combos), "trash_talk": "FIGHT!"} # Factual lookup for key, val in FACTS.items(): diff --git a/server/src/routes/docs.ts b/server/src/routes/docs.ts index 3b172e6..d43f494 100644 --- a/server/src/routes/docs.ts +++ b/server/src/routes/docs.ts @@ -126,10 +126,10 @@ docsRouter.get('/webhook', (c) => { type: 'retro_mode', label: 'Retro Mode', timeout_ms: 12000, - description: 'Arcade combo round. Submit 3 gamepad combos separated by |. Use ↑↓←→ A B buttons. Longer combos = more damage. Secret combos exist — experiment!', + description: 'Arcade combo round. Submit 3 gamepad combos separated by |. Use ↑↓←→ A B buttons. Known moves are listed in the prompt. Secret combos exist — experiment with longer chains!', response_format: 'combo1 | combo2 | combo3', - example_response: '↓→↓→+A | →→+A | ↑↓+A', - note: 'One retro round per fight, randomly placed between rounds 3-8.', + example_response: '↓→+A | →→+A | ←+B', + note: 'One retro round per fight. Known moves vary each fight. Discovering hidden combos earns a damage bonus.', }, ], },