# Street Célula — O lutador da igreja

A partir de 26/10/2026, o projeto evolui somente como jogo web. As versões nativas
e suas auditorias permanecem como histórico de origem das artes e regras.

## Como jogar

```sh
.venv/bin/python tools/build_web_game.py
python3 tools/serve_web_game.py
```

Abra **http://localhost:8080**. No celular conectado ao mesmo Wi-Fi, abra
`http://IP-DO-COMPUTADOR:8080`. Recarregue a página após atualizar o build.
Salve esse endereço nos favoritos ou use o menu do Chrome → **Adicionar à tela inicial**.
O endereço não precisa de códigos de versão: basta recarregar após uma atualização.
O servidor evita guardar a página de entrada em cache.
Mantenha o computador ligado enquanto ele serve o jogo.

O ZIP fica em `build/StreetCelula-Web-0.1.zip`. Depois de extrair, abra o terminal
na pasta `StreetCelula-Web` e execute `python3 -m http.server 8080`.
Use HTTP: abrir o HTML diretamente por `file://` não carrega os recursos.

A abertura começa automaticamente. **Aperte uma tecla de jogo ou toque na imagem
para jogar.** Não há escolha de resolução nem fichas. A imagem se adapta à
janela; **F11** usa a tela cheia do próprio navegador. Personagens e HUD mantêm
proporção, e uma extensão suave do cenário preenche o espaço restante. A arte
original ampliada não ganha detalhes novos.

- **Setas** movimentam e selecionam. **Z/X/C/V** são os quatro golpes.
- **1/2** permite entrar como P1/P2; **Enter** inicia ou continua como P1.
- **F1/F2** abrem configurações e remapeamento na abertura.
- **P** pausa; **G** mostra os golpes na luta; **−/+** ajusta velocidade.
- O menu **☰** dá acesso ao som, toque, configurações e demais opções.

No celular, os controles transparentes aparecem sobre a imagem:

| Símbolo | Função |
|---|---|
|□|Soco fraco / confirmar (Z)|
|△|Soco forte (C)|
|○|Chute forte (V)|
|×|Chute fraco (X)|
|START|Iniciar ou continuar como jogador selecionado|
|P2|Entrada do segundo jogador|
|P1/P2|Alternar jogador controlado pelo toque|
|Ⅱ|Pausar/retomar|

Use dois contatos direcionais para diagonais; mantenha direção e ação com dedos
independentes. Um toque curto é entregue uma vez. Cancelar um contato não solta
os demais. Rotação, troca de jogador e perda de foco liberam entradas. Gamepad
padrão controla P2 e precisa passar pelo neutro ao conectar ou retomar.
O primeiro gesto apenas inicia a seleção: solte antes de selecionar/confirmar.

A continuação mantém a contagem existente, mas dispensa créditos. As músicas,
falas, cenários, elenco, campanha, recordes da sessão e finais estão no pacote.
Toque em um controle para liberar áudio; o menu permite ligar/desligar o som.
Falhas de recursos têm **TENTAR NOVAMENTE**, sem iniciar jogo incompleto.

As prévias técnicas continuam em `?preview=roster`, `?preview=pair` e
`?preview=charles`; a rota de jogo é `/`. Não são modos adicionais de campanha.

## Validação

```sh
node --test web-game/tests/*.test.mjs
```

Ensaios de interface com Playwright e servidor em8080:
`web-experience-browser.mjs`, `web-controls-browser.mjs`,
`menu-entry-browser.mjs`, `selection-entry-browser.mjs`,
`prebattle-entry-browser.mjs` e `recovery-browser.mjs` em `web-game/tests/`.
Defina `PLAYWRIGHT_MODULE` se necessário. A experiência aceita
`BROWSER_ENGINE=firefox|webkit` e `PLAYWRIGHT_ENGINE_EXECUTABLE` para binário
alternativo; Chromium aceita `PLAYWRIGHT_CHROMIUM_EXECUTABLE`.
`WEB_GAME_URL` permite outro endereço de servidor.

A mudança está em `openspec/changes/browser-fullscreen-freeplay-controls/` e
`docs/specs/0008-browser-fullscreen-freeplay-controls.md`. Relatórios ficam em
`docs/web/`. Testes de viewport e gamepad simulado são identificados como tais.
O usuário relatou funcionamento da entrega anterior no S24; esse relato não
substitui nova conferência física dos controles modificados nem valida iOS.

O pacote não usa CDN, emulador ou EXE. As artes e dados históricos permanecem
intactos; manifesto SHA-256 acompanha o build. Há um defeito conhecido nos
resultados espanhol/Tifane, herdado da origem, registrado nas auditorias antigas.

As vitórias de Charles, Jeferson, Railson, Stéfano, Jéssica Tavares e Larissa têm frases e falas personalizadas.
Os outros 10 personagens mostram “...” nos dois idiomas e ficam sem áudio de
vitória até receberem suas personalizações. A lista de exceções fica em
`CUSTOM_VICTORY_FIGHTERS`, em `tools/web_scene_assets.py`; os áudios históricos
continuam preservados fora do pacote web.

Durante qualquer fala de vitória, a música desce suavemente para 30% em 150 ms.
Após terminar a última fala, retorna ao volume normal em 600 ms. A regra também
vale para futuras falas personalizadas.

A faixa 09 é **Que Frescura, Stéfano**, completa (cerca de 2min42s), adicionada
à seleção de músicas das batalhas. As oito faixas anteriores continuam disponíveis.

Stéfano tem duas falas de vitória (3 s e 1,58 s) e as frases
**Bordas?! Tô fora!!** e **Eu só como de garfo e faca!**, nos dois idiomas.

Jéssica Tavares tem a fala de 2,48 segundos e a frase
**Não to brava mano, só acho que…**, nas três opções de texto nos dois idiomas.
Tifane continua com “...” e sem áudio de vitória.

Larissa tem a fala de 1,18 segundo e a frase **Não pode, nego...**, nas três
opções de texto nos dois idiomas.

## Créditos

Criador desta versão: **Weslão**.

Jogo original: **Cyber Gamba (2003/2004)**.

## Publicação no Cloudflare Pages

A publicação usa somente `build/web-game`, por Direct Upload com Wrangler.
A configuração fica em `wrangler.jsonc`. A pasta do repositório completo não
deve ser usada como diretório de publicação.

Na primeira publicação, autentique sua conta e crie o projeto:

```sh
npx --yes wrangler@4.161.0 login
npx --yes wrangler@4.161.0 pages project create street-celula --production-branch main --force
```

Na versão 4.161.0, `--force` é necessário apenas na criação inicial para
selecionar Pages diretamente em vez da delegação automática a Workers.
Nas atualizações do projeto existente, não use esse argumento.

Para gerar, verificar e publicar a versão atual:

```sh
bash tools/deploy_cloudflare.sh
```

O script verifica manifesto, limite de 20 mil arquivos e 25 MiB por arquivo.
A CLI informa o endereço HTTPS após publicar. O projeto `street-celula` foi criado na conta do usuário; seu endereço de
produção é `https://street-celula.pages.dev/`.
Recarregue o jogo após atualizações; `_headers` exige revalidação dos arquivos.
O computador não precisa permanecer ligado depois da publicação.

Com mais de mil arquivos, use Wrangler: o envio por arrastar e soltar no painel
não comporta o pacote atual. Direct Upload não pode ser convertido diretamente
em integração Git; automação futura pode usar Wrangler em CI.

Documentação: https://developers.cloudflare.com/pages/get-started/direct-upload/
