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 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-08 14:54:54 +00:00
co-authored by Claude Opus 4.6
parent 6658212e9f
commit da14ca81ee
4 changed files with 75 additions and 121 deletions
+32 -61
View File
@@ -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.
+34 -52
View File
@@ -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.
+6 -5
View File
@@ -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():
+3 -3
View File
@@ -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.',
},
],
},