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:
co-authored by
Claude Opus 4.6
parent
6658212e9f
commit
da14ca81ee
+32
-61
@@ -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
@@ -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.
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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.',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user