[EN/PT-BR] Horizon Forge: Updates of version v1.4.0 >> Mobile ON! <<

divisor.jpeg

Hi everyone, sorry for disappearing and lacking news, but I was working hard to implement some improvements and also with the help of @acidyo, we made a good Audit, raising some critical and medium errors for resolution.

I was focused most of the time on the mobile layout, which is turning out sensational. Much better than I had imagined, this part is fully operational and ready for you to use.

I checked a few more things here and there and I can say that it's finally ready! Whether on the browser or on your mobile phone, are you and your friends ready to wage the most epic battles the world has ever seen? :D



Audit

  • The server trusts all the statistics that the client sends – full PvP cheat. It only validates Array.isArray(board) && board.length === 9 and then delivers the board directly to simulate(). The simulator reads atk, maxHp, hp, skillPower, critChance, critRate, lv, tp directly from each unit.
  • All the match/pay state is only RAM: a failure burns the bets. ActiveMatches is a process-in-memory map. The server's own comment admits: "survives reboots only if there is a single Railway instance". If Railway is redeployed or the OOMs box is reset after a player has paid, but before resolution, m.payments will expire, the refund timeout will never be triggered, and the user will pay into a black hole. With real money deposit, this is a disaster for customer trust. Fix: persist payment confirmations + match Postgres status on each transition and rehydrate activeMatches on startup.
  • The Paladin's Sacred Aura is applied twice in PvP mode and only once in the vs. Bot mode. This was a critical bug, after all, whoever used the paladin would have a huge advantage over their opponent.
  • The Matchmaker ignored the format of pairs by bet. Two players who chose BO3 and BO7 with the same bet were matched, that is, they would be placed against each other. The first player's format was being silently selected. The fix was quite simple: e1.format === e2.format. This error is almost funny because it was one of the first things I asked Claude to implement: searching for players with the same format and bet amount.
  • POST /api/migrate is not authenticated; anyone on the internet could propagate DDL+ to the production database. The fix was to apply a gate requiring "requireAdmin".
  • The operator could place bets even without Hive credentials. Therefore, HIVE_GAME_ACCOUNT is not defined, and players could queue "10 HIVE" in matches that don't require payment and don't pay out prizes. Fix: reject bets greater than zero on the server side when Hive credentials are missing and hide the options on the client side via /api/version.
  • /api/auth/verify accepts any 5-minute signature, validating only the "time stamp" within the memo. There was no nonce issued by the server, so a captured signature could be replayed against the API for 5 minutes. The fix applied was to issue a single nonce in /api/auth/challenge and require the memo to incorporate it.


Mobile

I finally managed to come up with a cool layout for mobile. Now we can play Horizon Forge on our phones without problems. With all the main fields visible, mainly the battlefield (3x3 grid), the recruitment tab, tents, log, and options menu.

Speaking of options, to make the game better and more fluid, when entering a battle, there will be a question about putting the screen in fullscreen. After the user accepts this, all battles will be done in fullscreen, making it much better to see all the necessary elements.

image.png

When tested via browser with DevTools, the game is already in fullscreen, so this caused a certain difference compared to the mobile version, since for now Horizon Forge is a browser game and not an app. Because it runs in a browser, you have the link bar at the top and the mobile navigation bar at the bottom (I can only test on Androids for now), and with that, the actual game area is quite reduced.

Perhaps I could add an option to the main menu, in the "CONFIG" tab, to always run the game in fullscreen; this would certainly make everything more enjoyable, both for browsing and battling. Of course, I need to think: what if the user wants to exit the browser? Will the options appear below? Will they have to keep going into CONFIG all the time? Well, there are many things to think about.

image.png

Anyway, after weeks, now we have a stable version that works and is good to play. From now on, it's about refining and improving what we can offer with the game. Adding more things, more heroes, and so on.

divisor.jpeg

ATTENTION

Of course, bugs, errors, and strange things may still be present. Anything you find or suspect is out of the ordinary, please tag me in my posts or snaps and include a screenshot if possible so I can validate if it's a genuine error. If it's a real error, I might even send some $hive tokens as a reward!

So, your help will be rewarded! I don't have much to offer, but I'm keen to help everyone who is helping me!

Thank you very much and until next time, everyone!

sun_divisor.webp

divisor.jpeg

Olá pessoal, desculpem o sumiço e falta de noticias, mas estava trabalhando pesado para aplicar algumas melhorias e também com a ajuda do @acidyo, fizemos uma boa auditoria, levantando alguns erros críticos e médios para resolução.

Eu estava focado a maior parte do tempo com o layout do mobile, que está ficando sensacional. Bem melhor do que havia imaginado, essa parte está totalmente operante e pronta para ser usada por vocês.

Conferi mais algumas coisas aqui e ali e posso dizer que finalmente está pronto! Seja no navegador ou no celular, você e seus amigos, estão prontos para realizar as batalhas mais épicas que o mundo já viu? :D



Auditoria

  • O servidor confia em todas as estatísticas que o cliente envia – cheat PvP completo. Valida apenas Array.isArray(board) && board.length === 9 e depois entrega o tabuleiro diretamente para simular(). O simulador lê atk, maxHp, hp, skillPower, critChance, critRate, lv, tp diretamente de cada unidade.
  • Todo o estado de correspondência/pagamento é apenas RAM: uma falha queima as apostas. ActiveMatches é um mapa na memória do processo. O próprio comentário do servidor admite: "sobrevive às reinicializações apenas se houver uma única instância Railway". Se o Railway for reimplantado ou a caixa OOMs depois que um jogador tiver pago, mas antes da resolução, m.payments acabará, o tempo limite de reembolso nunca será acionado e o usuário pagará em um buraco negro. Com o depósito em dinheiro real, isso é um desastre para a confiança do cliente. Correção: persista as confirmações de pagamento + corresponda ao status do Postgres em cada transição e reidrate os activeMatches na inicialização.
  • A Aura Sagrada do Paladino é aplicada duas vezes no modo PvP e somente uma vez no modo contra o Bot. Esse era um erro critico, afinal, quem usasse o paladino teria uma vantagem enorme sobre o oponente.
  • O Matchmaker ignorava o formato dos pares por aposta. Dois jogadores que escolheram BO3 e BO7 com a mesma aposta eram correspondidos, ou seja, seriam colocados um contra o outro. O formato do primeiro jogador era selecionado de forma silenciosa. Com isso, a correção era bem simples: e1.format === e2.format. Esse erro chega a ser engraçado, porque foi uma das primeiras coisas que pedi para a Claude implementar, que seria buscar jogadores com o mesmo formato e valor apostado.
  • POST /api/migrate não é autenticado, qualquer pessoa na Internet poderia propagar DDL + no banco de dados de produção. A correção foi aplicar um portão que requeria "requireAdmin".
  • O operador podia implantar apostas, mesmo sem as credenciais da Hive. Desta forma, HIVE_GAME_ACCOUNT não está definido e os jogadores podiam enfileirar "10 HIVE" nas partidas que não exigem pagamento e não pagam prêmio. Correção: rejeitar as aposta maiores que zero do lado do servidor quando as credenciais da Hive estão faltando e ocultar as opções do lado do cliente via /api/version.
  • /api/auth/verify aceita qualquer assinatura de 5 minutos, validando apenas o carimbo de "data/hora" dentro do memorando. Não tinha um nonce emitido pelo servidor, então uma assinatura capturada pode ser reproduzida contra a API por 5 min. A correção aplicada foi emitir um nonce único em /api/auth/challenge e exijir o memorando para incorporá-lo.


Mobile

Finalmente consegui chegar em um layout maneiro para o mobile. Agora podemos jogar o Horizon Forge pelo celular sem problemas. Com todos os campos principais visíveis, sendo principalmente o campo de batalha (grid 3x3), a aba de recrutamento, barracas, log e menu de opções.

Falando em opções, para o jogo ficar melhor e mais fluido, quando entrar na batalha, haverá uma pergunta sobre colocar a tela em fullscreen, após o usuário aceitar isso, é para todas as batalhas serem feitas em tela cheia, assim, vai ficar muito melhor para ver todos os elementos necessários.

image.png

Quando testado via navegador com o DevTools, o jogo já está em tela cheia, então isso causava uma certa diferença entre o celular, já que por enquanto Horizon Forge é um jogo de navegador e não um aplicativo. Por rodar em um navegador, você têm a barra de link em cima e a barra de navegação do celular embaixo (eu só consigo testar em androids por enquanto) e com isso, a área do jogo mesmo é bem reduzida.

Talvez eu possa adicionar no menu principal, na aba "CONFIG", uma opção para rodar o jogo sempre em fullscreen, isso com certeza torna tudo mais agradável, tanto para navegar quanto para batalhar. Claro que preciso pensar: e se o usuário quiser sair do navegador? As opções vão aparecer embaixo? Ele vai ter que ficar indo em CONFIG a todo momento? Bem, são muitas coisas para pensar.

image.png

Enfim, depois de semanas, agora sim uma versão estável, que funciona e que está boa para jogar. Agora daqui para frente, é lapidar e melhorar cada vez mais o que podemos oferecer com o jogo. Colocar mais coisas, mais heróis e assim por diante.

divisor.jpeg

ATENÇÃO

Claro que bugs, erros e coisas estranhas ainda podem estar no ar, qualquer coisa que você encontrar ou suspeitar que seja fora do normal, por favor me marque em meus posts ou nos snaps e coloque um print se possível para que eu possa validar se é um erro mesmo ou não. Se for algo realmente com erro, posso até enviar alguns token $hive como recompensa!

Então, sua ajuda será recompensada! Não tenho muito a oferecer, mas faço questão de ajudar a todos que estão me ajudando!

Muito obrigado e até a próxima pessoal!

divisor.jpeg

banner_hiver_br_01.png


Horizon Forge >>Discord<< | Follow on X

🔥Please, consider helping by using my reference links🔥

Post To EarnDePINWin SATSWin SATSHave Fun To Earn
Publish0xHoneygainSliceZBDRumble Arcade
0.32397676 BEE
3 comments

This post was curated by @hive-br team!

banner_hiver_br_01.png

Delegate your HP to the hive-br.voter account and earn Hive daily!

🔹 Follow our Curation Trail and don't miss voting! 🔹

0.00000000 BEE

time to check the game! :)

0.00000000 BEE

https://www.reddit.com/r/web3gaming/comments/1t5vrg4/new_game_on_hive/
This post has been shared on Reddit by @buratus through the HivePosh initiative.

0.00000000 BEE