← back to Neon Baguette Battle
Broaden P1 controls: arrows move; Space/Return/Cmd/Option/Ctrl/Shift/Delete all fire
a39d05a5afbf37f74418c47c0154b651953b4559 · 2026-08-31 13:56:17 -0700 · Steve Abrams
- fire[] now includes enter, backspace, delete, meta, control, alt, shift (+ J/K/L jab/whack/launch)
- preventDefault backspace/delete so they do not navigate back
- add #debug test hook (window.__bb) — inert during normal play
- verified: arrows move+face both ways; every requested fire key triggers an attack (0 errors)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Files touched
Diff
commit a39d05a5afbf37f74418c47c0154b651953b4559
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Aug 31 13:56:17 2026 -0700
Broaden P1 controls: arrows move; Space/Return/Cmd/Option/Ctrl/Shift/Delete all fire
- fire[] now includes enter, backspace, delete, meta, control, alt, shift (+ J/K/L jab/whack/launch)
- preventDefault backspace/delete so they do not navigate back
- add #debug test hook (window.__bb) — inert during normal play
- verified: arrows move+face both ways; every requested fire key triggers an attack (0 errors)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
README.md | 8 +++++---
index.html | 13 ++++++++++---
2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index eba191e..2e3e034 100644
--- a/README.md
+++ b/README.md
@@ -38,9 +38,11 @@ also click a card to choose P1's fighter. `Enter`/`Space` or **START FIGHT** beg
| Mute (audio + voice) | `M` | |
**1-player alternate scheme (P1):** you can also play with the **arrow keys**
-(`←`/`→` move, `↑` jump, `↓` block) and **fire** with **`Space`**, **`⌘`
-Command**, or **`Ctrl`** — fire launches the baguette missile when the meter is
-full, otherwise it does a whack. (In 2-player the arrows belong to Player 2.)
+(`←`/`→` move, `↑` jump, `↓` block) and **fire** with almost any big key —
+**`Space`, `Return`/Enter, `⌘` Command, `⌥` Option, `Ctrl`, `Shift`, or
+`Delete`/Backspace**. Fire launches the baguette missile when the meter is full,
+otherwise it does a whack. (`J`/`K`/`L` also jab/whack/launch.) In 2-player the
+arrows belong to Player 2.
## Features
- **Real combat**: startup/active/recovery attack frames, blocking with chip
diff --git a/index.html b/index.html
index b2ba00e..dd0d0d8 100644
--- a/index.html
+++ b/index.html
@@ -126,7 +126,7 @@
</table>
</div>
</div>
- <div class="tiny">1-Player also: <span class="key">←</span><span class="key">→</span> move · <span class="key">↑</span> jump · <span class="key">↓</span> block · <span class="key">Space</span>/<span class="key">⌘</span>/<span class="key">Ctrl</span> fire · <span class="key">P</span> pause · <span class="key">M</span> mute</div>
+ <div class="tiny">1-Player also: <span class="key">←</span><span class="key">→</span> move · <span class="key">↑</span> jump · <span class="key">↓</span> block · <span class="key">Space</span> <span class="key">Return</span> <span class="key">⌘</span> <span class="key">⌥</span> <span class="key">Ctrl</span> <span class="key">⌫</span> fire · <span class="key">P</span> pause · <span class="key">M</span> mute</div>
</div>
<!-- CHARACTER SELECT -->
@@ -300,14 +300,19 @@
// ---------- Input ----------
const keys = {};
// maps are arrays so an action can have several keys. 'fire' = launch missile if meter full, else whack.
- const P1_ATTACK = { poke:['f'], swing:['g'], blast:['h'], fire:[' ','meta','control'] };
+ const P1_ATTACK = {
+ poke: ['f','j'],
+ swing: ['g','k'],
+ blast: ['h','l'],
+ fire: [' ','enter','backspace','delete','meta','control','alt','shift'] // Space/Return/Delete/⌘/Ctrl/⌥/⇧
+ };
const P1MAP_1P = { left:['a','arrowleft'], right:['d','arrowright'], jump:['w','arrowup'], block:['s','arrowdown'], ...P1_ATTACK };
const P1MAP_2P = { left:['a'], right:['d'], jump:['w'], block:['s'], ...P1_ATTACK }; // arrows belong to P2 in 2P
const P2MAP = { left:['arrowleft'], right:['arrowright'], jump:['arrowup'], block:['arrowdown'], poke:[','], swing:['.'], blast:['/'] };
let p1map = P1MAP_1P;
addEventListener('keydown', e => {
const k = e.key.toLowerCase();
- if (['arrowup','arrowdown','arrowleft','arrowright',' ','/'].includes(k)) e.preventDefault();
+ if (['arrowup','arrowdown','arrowleft','arrowright',' ','/','backspace','delete'].includes(k)) e.preventDefault();
if (!keys[k]) keys['_pressed_'+k] = true; // edge trigger
keys[k] = true;
if (state === 'select'){
@@ -1298,6 +1303,8 @@
}
buildRoster();
+ // tiny test hook (only when the URL ends in #debug) — no effect on normal play
+ if (location.hash === '#debug') window.__bb = { get f1(){ return f1; }, get f2(){ return f2; }, get state(){ return state; } };
// La Marseillaise on load — try immediately; browsers gate autoplay, so also fire on the first interaction
Audio.startAnthem();
const kickAnthem = () => Audio.startAnthem();
← 125754f Play La Marseillaise on load + cobblestone street floor stre
·
back to Neon Baguette Battle
·
Weapon loadout: Space=poke, Return=throw baguette, R=rocket, e6c5071 →