3 pontos por GN⁺ 2024-01-30 | 1 comentários | Compartilhar no WhatsApp
  • Boardzilla é um framework que permite jogar e desenvolver jogos de tabuleiro no navegador, com o objetivo de reduzir a barreira de entrada para a criação de jogos de tabuleiro digitais
  • A proposta é que os desenvolvedores consigam expressar as regras do jogo, enquanto os jogadores veem as opções disponíveis por meio de uma interface simples
  • Entre os jogos de exemplo publicados estão 7 Wonders Duel, Cursed, Dyngus Day, 27Panic, Hearts, Hex, Power Grid, Skirma e Stunt Kites
  • O número de jogadores suportado varia de acordo com o jogo, de modo solo até 4 jogadores; 7 Wonders Duel, Hex e Skirma são para 2 jogadores, e Hearts é para 4 jogadores
  • Usuários que quiserem criar seu próprio jogo de tabuleiro podem começar o desenvolvimento pela documentação e pela página de apresentação fornecidas

O que o Boardzilla oferece

  • Boardzilla é um ambiente baseado na web para facilitar a criação de jogos de tabuleiro digitais
  • É possível jogar e desenvolver jogos de tabuleiro dentro do navegador
  • Ele facilita a expressão das regras do jogo e apresenta aos jogadores as opções possíveis em uma interface simples

Exemplos de jogos jogáveis

Como começar a desenvolver

1 comentários

 
GN⁺ 2024-01-30
Comentários no Hacker News
  • Acho que a mensagem mais chamativa da landing page não deveria ser um chamado para “entrar no Discord”
    Links para exemplos e para o código-fonte/documentação deveriam aparecer primeiro. Em projetos assim, quando “entrar no Discord” é enfatizado demais, pessoalmente isso até me afasta. Acho que não sou o único

    • Eu também sou assim
      Realmente odeio Discord a menos que seja só uma plataforma casual de comunicação entre amigos. Mas as pessoas têm a tendência de usar o Discord como plataforma principal não só para perguntas de suporte, mas até para documentação. A qualidade de busca é ruim e os mecanismos de busca nem indexam direito, então quando você precisa encontrar uma solução, é realmente o pior cenário
  • Parece bom. Como o escopo de funcionalidades é amplo e deve haver muitas partes móveis, imagino que a carga de trabalho tenha sido bem grande. Pelo menos, é bom ver um motor de jogo focado em jogos de tabuleiro, mas não apenas na renderização em si
    Dito isso, como alguém que já fez jogos de cartas e dados jogáveis online em HTML/JavaScript puro, ainda não entendi bem como eu recriaria a mesma coisa com esse sistema. Pela documentação, ele oferece suporte a cartas, e a abstração parece genérica o suficiente para servir a vários tipos de jogo, mas um tutorial passo a passo ajudaria muito. Entendo por que escolheram abstrações como Actions, Flows, selections, conditions e prompts, mas, sem ver como isso tudo se encaixa na prática, fica difícil ter noção de onde eu deveria alterar o que eu quisesse mudar. Sem tutorial, pessoalmente acho difícil avançar muito

    • No contexto de jogos de tabuleiro físicos, o núcleo parece se basear em duas classes principais. A estrutura lida com Piece, isto é, coisas que ficam na mão ou se movem entre Player e são colocadas em espaços (Space) na mesa
      Cartas e dados são definidos herdando de Piece, os jogadores herdam de Player, e algo como um carteador que gerencia o baralho também pode ser tratado como Player. Depois disso, basta pensar em como posicionar no tabuleiro as instâncias de Space de que as regras precisam. As regras ficam dentro de uma instância da classe Game, e nela existe o conceito de ações, que são instâncias da classe Action. Essas ações recebem argumentos que definem prompts ao usuário, condições de execução válidas e efeitos da execução. Fora isso, há várias funções utilitárias esperadas para localizar peças, comparar coisas e afins, e o resto depende da lógica do jogo. Pelos exemplos, também há funções para filtrar Space e Piece, então parece dar para montar rapidamente a lógica de UI
    • Quero expandir mais a documentação, mas isso consome muito tempo. Entendo que até jogos que parecem simples podem ser intimidantes de transportar para uma API formalizada. Não sei se ajuda, mas tenho uma gravação em vídeo de parte da criação de um jogo
      https://docs.boardzilla.io/game/creating-a-game
  • É melhor não colocar *Zilla no nome do projeto. Os detentores dos direitos de Godzilla são conhecidos por perseguir ativamente quem tenta usar o sufixo “Zilla”. A Mozilla também aprendeu isso há muito tempo e teve de fazer um acordo separado

    • Eu não fazia ideia. Eu tinha deixado separados alguns outros nomes de domínio bem bons, então talvez agora eu tenha de tomar uma decisão
    • Não entendo como isso teria qualquer relação, por menor que seja, com Godzilla ou com seus direitos autorais. Não tem nada a ver com um monstro nuclear gigante
      O único caso de marca registrada que a Toho perdeu foi contra uma empresa de sacos de lixo chamada ‘trashzilla’, e um dos motivos também foi que isso não representava risco aos interesses comerciais da Toho. Edit: eu não tinha visto o logo. Isso definitivamente pode ser um problema
    • Isso é bem surpreendente. Eu não sabia que os direitos autorais sobre *Zilla eram tão agressivos
    • A Meta também faz valer agressivamente sua marca contra pedidos de registro terminados em ‘book’
    • Revzilla e Partzilla também passaram por longas disputas legais por causa de nomes em *zilla
  • Então estão usando TypeScript + CSS. Eu esperava suporte a Python no servidor para a lógica do jogo. O momento é bom, mas desenvolvedores e publishers que usavam o BGA estão apreensivos por causa do modelo de negócios da Asmodee
    A stack do BGA Studio é JS/CSS + PHP (cliente e servidor) + MySQL [0]
    O Yucata.de usa JS + HTML + .NET 4.5 no servidor [1]
    O TTS usava Lua, mas, olhando mais de perto, pareceu algo peculiar e limitado. Nem é orientada a objetos, então não entendo por que escolher uma linguagem não orientada a objetos para jogos de tabuleiro. A análise de 2021 do site/framework, “VassalEngine: Survey of other boardgame software”, também é útil [2]
    Seria realmente ótimo se houvesse integração com Python no servidor
    [0]: https://boardgamearena.com/doc/Studio
    [1]: https://www.yucata.de/en/FAQ#t17
    [2]: https://forum.vassalengine.org/t/survey-of-other-boardgame-s...

    • Sobre “por que escolher uma linguagem não orientada a objetos para jogos de tabuleiro”, Lua historicamente foi uma escolha bem popular entre desenvolvedores de jogos. Um dos motivos é que é fácil embutir uma linguagem de script dentro do jogo
      Programação orientada a objetos é possível mesmo sem classes [0]. E esperar que o desenvolvedor porte e mantenha o projeto inteiro em Python só porque você não quer aprender outra linguagem de programação é pedir demais
      [0]: https://en.wikipedia.org/wiki/Lua_(programming_language)#Obj...
    • O motivo de o servidor não ser em Python é que, no boardzilla, o jogo não é expresso duas vezes, uma para o cliente e outra para o servidor. Em vez disso, ele é escrito uma única vez em TypeScript, e esse código é realmente usado tanto no servidor quanto no cliente. O cliente funciona como um servidor sem as informações ocultas
    • Fico curioso sobre por que você quer tanto Python no backend. TypeScript é uma escolha bastante lógica, já que roda no backend e em vários frontends. Pode ser usado não só na web, mas também em engines de jogo como Unity. E o sistema de tipos também é melhor que o do Python
    • Fiquei curioso sobre qual é o modelo de negócios da Asmodee e o que isso tem a ver com o BGA
    • Não tenho problema com TypeScript em si, mas a parte em React me preocupa. Para frontend de jogos, talvez não fosse melhor algo mais leve como Svelte, Marko ou Solid do que React?
  • Legal. Tenho muitos protótipos de jogos de tabuleiro que um dia gostaria de transformar em jogos web, então já cheguei a escrever algumas funções de biblioteca genéricas para criação de jogos de tabuleiro. Parei em coisas como geração de grade, rolagem de dados customizada, compra de cartas, funções de torneio, testes mostrando vários cenários e mais algumas coisas, mas, tocando isso junto com outros projetos, provavelmente nunca vou ter tempo de fazer direito. Vou ter que ver como é fácil usar essa biblioteca
    Concordo que aprender a plataforma do BGA é bem doloroso. 1) você fica preso à plataforma e não pode publicar o jogo em outro lugar, 2) é tudo em PHP, que hoje eu já não tenho muita vontade de usar, e 3) a documentação está espalhada em vários lugares e inclui até apresentações em PowerPoint

  • Se você estiver procurando algo mais de baixo nível, posso recomendar o boardgame.io
    [1] https://boardgame.io/

    • O boardgame.io também é totalmente recomendável. O Nicolo é realmente gentil e muito prestativo. Vale a pena conferir também o outro projeto dele, https://boardgamelab.app/
  • Essa área é realmente difícil. Para ter sucesso, acho que você precisa ter um jogo que vire sucesso imediato, ou então investir um esforço enorme de comunidade para reunir jogadores todos os dias, o ano inteiro
    Tentei a sorte com https://acos.games no começo, quando quase não havia alternativas ao BGA. Até hoje continuo desenvolvendo por trás de vez em quando quando estou entediado. Meu maior fracasso foi UI/UX. As pessoas não ligam tanto assim para a tecnologia bacana escondida por trás

    • Parece muito bem feito. A documentação também está muito bem escrita. Não tenho uso para isso agora, mas foi interessante só ler a documentação para ver o que é possível. Os recursos de gerenciamento de estado e replay de partidas pareceram muito legais. Eu também estou montando meu próprio conjunto de jogos, e só pensar em tornar o sistema flexível o bastante para que outras pessoas possam integrar já parece um grande trabalho. O esforço investido é impressionante
  • Parece muito legal, e parabéns pelo lançamento
    Pode ser excelente para desenvolver protótipos, mas, para criar uma alternativa ao BGA, você provavelmente vai precisar obter permissão dos publishers para implementar/publicar os jogos. Como o BGA é tão grande e pertence à Asmodee, imagino que isso não seja fácil. Espero estar errado

    • Não sou especialista em direito, mas, ao que parece, mecânicas de jogo não são protegidas por direitos autorais, desde que você não use as mesmas imagens das cartas/tabuleiro nem copie o livro de regras literalmente
      “Em resumo, nomes e logotipos podem ser protegidos por marcas registradas, e a arte tem direitos autorais (incluindo possivelmente o próprio tabuleiro como obra artística). Mecânicas, procedimentos e regras não podem ser protegidos por direitos autorais. É por isso que existem clones de Monopoly/Scrabble.”
      https://www.reddit.com/r/gamedev/comments/10f2nov/comment/j4...
      Aqui ele faz referência a este vídeo do YouTube
      https://www.youtube.com/watch?v=iZQJQYqhAgY
    • Concordo totalmente que a Asmodee, na prática, impediu a entrada de concorrentes reais no mercado. Em vez de bater de frente com o BGA, tenho a ideia de olhar para jogos menores de publishers independentes. Não sei o quanto isso é viável, mas também não sei muito bem o que mais fazer
  • Parece realmente muito legal. Estou ansioso para experimentar com as próprias mãos
    Fico feliz em ver que existe o comando de fluxo everyPlayer, que permite ações simultâneas. É um recurso que faltava em outros frameworks de jogos de tabuleiro que já usei
    [1]: https://docs.boardzilla.io/game/flow#everyplayer

  • Todos os jogos de exemplo estão dando erro
    Object.hasOwn is not a function. (In 'Object.hasOwn(e,A.from)', 'Object.hasOwn' is undefined)
    O stack trace é o seguinte
    su@https://www.boardzilla.io/build/_shared/chunk-ZEYFFM3P.js:16:114536
    Fs@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:9:128279
    Ch@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11:180657
    Acho que precisa adicionar um polyfill

    • Adicionei o polyfill. Seria bom saber se foi corrigido
    • Vou adicionar o polyfill em breve