Um sistema completo de mesa virtual para RPG com mapas interativos, personagens customizáveis e chat em tempo real.
- Sobre o Projeto
- Features
- Tecnologias
- Instalação
- Configuração
- Uso
- Estrutura do Projeto
- Sistema de Mapas
- Sistema de Chat
- Sistema de Dados
- API
- Contribuindo
- Roadmap
- Licença
O RPG Table Top é uma plataforma web completa para jogar RPG de mesa online. Desenvolvido com Node.js, Phaser 3 e Socket.IO, o sistema oferece uma experiência imersiva com mapas 2D isométricos, personagens customizáveis, sistema de chat em tempo real, rolagem de dados e muito mais.
- ✅ Gratuito e Open Source: Sem custos de licença
- ✅ Multiplayer em Tempo Real: Sincronização instantânea via WebSocket
- ✅ Mapas Personalizados: Suporte para múltiplos mapas com diferentes horários
- ✅ Chat Integrado: Sistema de chat com histórico persistente
- ✅ Rolagem de Dados: Sistema completo de rolagem com análise estatística
- ✅ Visual Customizável: Múltiplas skins de personagens (Warrior, Ranger, Mage, etc.)
- ✅ Responsivo: Funciona em desktop e mobile
- Movimento em Tempo Real: Sistema de física com colisão pixel-perfect
- Múltiplos Personagens: Escolha entre Warrior, Ranger, Mage e outros sprites
- Sincronização Multiplayer: Veja outros jogadores se movendo em tempo real
- Nomes Acima dos Personagens: Identificação visual de cada jogador
- Sistema de Animações: Animações de movimento (walk, idle) sincronizadas
- Câmera Dinâmica: Follow camera suave que acompanha o jogador
- Mapas Dinâmicos: Sistema de carregamento de mapas do banco de dados
- Múltiplos Cenários: Hospital, Escola, Floresta, Selva, Porto, etc.
- Sistema de Horários: Mapas com variações (Dia/Tarde/Noite)
- Camadas Visuais: Background, limites de colisão, telhados e efeitos
- Portas Interativas: Sistema de portas que abrem automaticamente
- Texturas Dinâmicas: Carregamento de texturas via MinIO/S3
- Dimensões Personalizadas: Cada mapa pode ter tamanho diferente
- Chat em Tempo Real: Comunicação instantânea entre jogadores
- Histórico Persistente: Mensagens salvas no banco de dados MySQL
- Sistema de Dados Integrado: Rolagem de dados direto no chat
- Múltiplas Mesas: Suporte para várias mesas simultâneas
- Timestamps: Horário de cada mensagem
- UI Moderna: Interface limpa e responsiva
- Rolagem Simples: D4, D6, D8, D10, D12, D20, D100
- Rolagem Múltipla: Role múltiplos dados de uma vez (ex: 3d6)
- Análise Estatística: Soma, média, mínimo, máximo
- Resultados Críticos: Destaque visual para 1 (crítico) e valor máximo
- Histórico de Rolagens: Todas as rolagens são salvas
- Visual Feedback: Cores diferentes para resultados especiais
- Sprites Animados: Personagens com 8 direções de movimento
- Depth Sorting: Objetos renderizados na ordem correta
- Tela de Carregamento: Loading screen customizável por mesa
- Transições Suaves: Fade in/out entre cenas
- Controles Mobile: Joystick virtual para dispositivos touch
- Zoom Dinâmico: Ajuste de câmera responsivo
- WebSocket Real-time: Socket.IO para comunicação bidirecional
- Banco de Dados: MySQL para persistência
- Armazenamento de Arquivos: MinIO para assets (S3-compatible)
- Sistema de Mesas: Múltiplas mesas/campanhas simultâneas
- Auto-recovery: Sistema de reconexão automática
- Logs Detalhados: Sistema de diagnóstico completo
- Node.js - Runtime JavaScript
- Express.js - Framework web
- Socket.IO - WebSocket em tempo real
- MySQL - Banco de dados relacional
- MinIO - Object storage (S3-compatible)
- PM2 - Process manager
- Phaser 3 - Game engine HTML5
- HTML5/CSS3 - Interface web
- JavaScript (ES6+) - Lógica cliente
- Bootstrap - Framework CSS (componentes)
- Git - Controle de versão
- PM2 - Gerenciamento de processos
- Linux - Servidor de produção
- Node.js (v18 ou superior)
- MySQL (v8.0 ou superior)
- MinIO ou AWS S3 (para armazenamento de assets)
- Git
-
Clone o repositório ```bash git clone https://github.com/IrvingSamuel/RPG-Table-Top.git cd RPG-Table-Top ```
-
Instale as dependências ```bash npm install ```
-
Configure o banco de dados ```bash
mysql -u seu_usuario -p nome_do_banco < database_setup.sql mysql -u seu_usuario -p nome_do_banco < database_add_map_dimensions.sql mysql -u seu_usuario -p nome_do_banco < database_update_loadscreen.sql mysql -u seu_usuario -p nome_do_banco < database_update_rooftops.sql ```
- Configure as credenciais
Edite o arquivo `server.js` com suas credenciais do MySQL: ```javascript const connection = mysql.createConnection({ host: 'localhost', user: 'seu_usuario', password: 'sua_senha', database: 'seu_banco' }); ```
Edite o arquivo `config/minio.js` com suas credenciais do MinIO: ```javascript const minioClient = new Minio.Client({ endPoint: 'seu-endpoint.com', port: 9000, useSSL: true, accessKey: 'sua_access_key', secretKey: 'sua_secret_key' }); ```
- Inicie o servidor ```bash
node server.js
pm2 start server.js --name rpg pm2 save ```
- Acesse o sistema ``` http://localhost:3000 ```
As mesas são configuradas no banco de dados na tabela `mesas`:
```sql INSERT INTO mesas (table_name, load_screen, is_active) VALUES ('Nome da Mesa', 'assets/loading/custom-loading.svg', 1); ```
Mapas são adicionados na tabela `mapas`:
```sql INSERT INTO mapas (nome, largura, altura, dia, tarde, noite, limits, roofs_dia, roofs_tarde, roofs_noite, doors_dia, doors_tarde, doors_noite) VALUES ('hospital', 1920, 1920, 'https://minio.com/maps/hospital-dia.png', 'https://minio.com/maps/hospital-tarde.png', 'https://minio.com/maps/hospital-noite.png', 'https://minio.com/maps/hospital-limits.png', 'https://minio.com/maps/hospital-roofs-dia.png', 'https://minio.com/maps/hospital-roofs-tarde.png', 'https://minio.com/maps/hospital-roofs-noite.png', 'https://minio.com/maps/hospital-doors-dia.png', 'https://minio.com/maps/hospital-doors-tarde.png', 'https://minio.com/maps/hospital-doors-noite.png' ); ```
- Login: Escolha seu personagem (sprite) na tela inicial
- Movimento: Use WASD ou setas para mover
- Chat: Clique no ícone de chat (💬) para abrir
- Dados: Use os botões de dados na barra lateral
Desktop:
- `W/↑` - Mover para cima
- `S/↓` - Mover para baixo
- `A/←` - Mover para esquerda
- `D/→` - Mover para direita
- `Enter` - Abrir chat
Mobile:
- Joystick virtual no canto inferior esquerdo
- Sistema básico de multiplayer
- Chat em tempo real
- Sistema de dados
- Mapas dinâmicos
- Múltiplos personagens
- Nomes acima dos personagens
- Sistema de colisão
- Portas interativas
- Suporte mobile
- Sistema de combate
- Inventário de itens
- Fichas de personagem completas
- Sistema de habilidades/magias
- Fog of War (névoa de guerra)
- Sistema de iluminação dinâmica
- Sistema de som ambiente
- Música de fundo por mapa
- Sistema de quests
- Sistema de níveis/XP
- Voice chat integrado
- Modo espectador para mestres
Contribuições são bem-vindas! Para contribuir:
- Fork o projeto
- Crie uma branch para sua feature (`git checkout -b feature/NovaFeature`)
- Commit suas mudanças (`git commit -m 'Adiciona nova feature'`)
- Push para a branch (`git push origin feature/NovaFeature`)
- Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Irving Samuel - Desenvolvedor Principal - @IrvingSamuel
⭐ Se você gostou deste projeto, considere dar uma estrela no GitHub! ⭐
Feito com ❤️ para a comunidade RPG