;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL

Topo

Japão Feudal encontra seres cósmicos no game brasileiro Musashi vs Cthulhu

Mais um dia na vida de um ronin mantenedor da paz - Reprodução
Mais um dia na vida de um ronin mantenedor da paz
Imagem: Reprodução

Makson Lima

Colaboração para o START

31/01/2020 04h00

H.P. Lovecraft anda em alta nos games, e não só nos jogos de terror. Os monstros do escritor norte-americano de Providence, pai do indizível e de terrores cósmicos e abissais, aparecem até em um game indie brasileiro que vem de Florianópolis.

"Musashi vs Cthulhu" (PC) entrou em o antecipado no Steam em janeiro deste ano, e o START entrou em contato com um de seus idealizadores, o game designer Sandro Tomasetti, para entender as influências e os planos do estúdio até o lançamento do produto final.

O estúdio Cyber Rhino investiu no panteão de monstros de Lovecraft, misturando a coisa toda com o ronin mais poderoso do Japão Feudal, Musashi, e o resultado é um jogo arcade divertido e desafiador.

START: Depois de "Gryphon Knight Epic" em 2015, a Cyber Rhino Studios investiu em jogos de tabuleiro, certo? Como foi essa mudança?

Sandro: Sim, entramos também no mercado de Board Games com o Pit Crew. Até vou dizer que nem foi uma mudança. Fazer essa variação sempre foi um dos nossos objetivos. A Cyber tem como foco dar vazão a qualquer tipo de jogo. A recepção do Pit Crew foi bem boa, e logo tem mais Boards vindo por aí.

START: E o que fez vocês voltarem aos jogos de videogame de novo? E ainda com uma ideia tão inusitada quanto Japão Feudal e Lovecraft. De onde saiu essa doideira?

Sandro Musashi - Arquivo pessoal - Arquivo pessoal
Sandro Tomasetti é um dos designers de "Musashi vs. Cthulhu"
Imagem: Arquivo pessoal
Sandro: O "Musashi vs Cthulhu" é uma história antiga, foi um projeto concebido durante a adaptação para consoles do "Gryphon Knight Epic". Ele havia sido engavetado, mas decidimos participar do Edital da Ancine de 2016 e fomos contemplados. Isso nos deu gás para produzir a versão final do jogo. Nas primeiras discussões, o jogo chamava "Musashi Zombie Slayer" e, como na época (2015), o mercado estava supersaturado de zumbis, resolvemos trocar os inimigos para algo que (ainda) não estava sendo muito usado. Como todos os integrantes eram superfãs do Cthulhu, pensamos como seria se a influência do Cthulhu fosse feita no Japão Feudal e não nos Estados Unidos dos anos 20.

Gryphon Knight Epic - Divulgação - Divulgação
"Gryphon Knight Epic", da Cyber Rhino Studios, foi lançado em 2015
Imagem: Divulgação

START: A gente tem vivido uma banalização de Lovecraft nos últimos anos. Como você enxerga isso? Estou exagerando?

Lovecraft - Reprodução - Reprodução
O escritor norte-americano H.P. Lovecraft
Imagem: Reprodução
Sandro: Não acho que está exagerando, não. Acho que, como qualquer mythos que cai na mão de muita gente, ele vai acabar tendo diversas leituras, e nem todo mundo vai saber (ou querer) respeitar o foco das obras originais. No nosso jogo, duas regras básicas que quisemos transmitir foram: a eficácia do Samurai mais conhecido do mundo e a inevitabilidade do Grande Antigo. Logo, o jogador deve ser muito preciso para matar 100, 200 ou 1000 inimigos? Mas o destino dele sempre vai ser terminar ajoelhado diante de Cthulhu. Como todo humano que enfrentou Cthulhu, a questão não é vencer, é ver até onde você consegue lutar contra ele. Nós pretendemos, se as estrelas estiverem corretas, fazer um modo história para o jogo onde isso pode mudar um pouco, mas a essência sempre será essa.

Musashi Game Over - Reprodução - Reprodução
Não importa quantos inimigos você derrote, sua hora vai chegar
Imagem: Reprodução

Como todo humano que enfrentou Cthulhu, a questão não é vencer, é ver até onde você consegue lutar contra ele
Sandro Tomasetti, designer da Cyber Rhino

START: "Musashi vs Cthulhu" é bem mais arcade que seu jogo anterior, tem foco em pontuações e leaderboards. Quais as dificuldades e facilitações inerentes a esse tipo de desenvolvimento?

Sandro: Um jogo arcade desse estilo tem um ciclo de desenvolvimento menor em termos de features, com certeza. Porém, existe a necessidade de que o jogo se mantenha só com a mecânica principal, sem ajuda de roteiro e objetivos maiores para manter o jogador dentro do jogo. A atenção a aspectos como comandos e curva de dificuldade deve ser redobrada. É um balanço difícil de ser feito, por isso recorremos ao Early Access, para trazer a comunidade para nos ajudar com isso!

Musashi placar - Reprodução - Reprodução
Como todo bom jogo Arcade, "Musashi" tem um placar dos melhores samurais
Imagem: Reprodução

START: Quando comecei "Musashi vs Cthulhu", imediatamente pensei em "Kung Fury: Street of Rage". Foi uma das inspirações? Como é lidar com esse tipo de concorrência?

Sandro: Com certeza é uma das inspirações, assim como "One Finger Death Punch". Para nos diferenciar, decidimos nos aprofundar um pouco na mecânica básica do jogo para ilustrar mais a precisão esperada de um samurai. Os próximos os são rechear o jogo com mais opções de inimigos e modos de jogo.

Musashi vs. Cthulhu

START: "Musashi vs Cthulhu" está em o antecipado, certo? Por que esse caminho? Quais são as vantagens de seguir essa linha de negócio?

Sandro: O nosso grande objetivo é incluir a comunidade no processo. Nós esperamos que o Early Access traga pessoas interessadas em dar e ajudar a moldar o jogo. Além disso, caso gere bom interesse, podemos angariar mais recursos para expandir o conteúdo do jogo.

START: Depois de jogar algumas horas, fiquei bem curioso em como seria o modo campanha, já que ele é tão arcade na sua espinha dorsal. Conta um pouco?

Sandro: A diferença principal seria dividir o Modo Campanha em fases e entregar o conteúdo ao jogador aos poucos, amarrados por um roteiro interessante. Mas a feature planejada que mais vai diferenciar a jogabilidade do jogo arcade, seria a adição de chefões e uma árvore de habilidades. Claro, tudo isso, se implementado, será moldado pela comunidade.

START: Vou confessar que me assustei quando vi o Cthulhu pela primeira vez. Me pegou de surpresa! Tem mais surpresas desse tipo aos jogadores que alcançarem grandes pontuações?

Sandro: Espero que tenha sido um susto interessante. O Cthulhu tá ali pra isso mesmo, pegar o jogador desprevenido. Para essa versão, além de encontrar o Cthulhu, o foco está nos Leaderboards. Será que muita gente vai bater o recorde dos devs?

Musashi controles - Reprodução - Reprodução
É isso mesmo, você não tem como se mover: sua espada é o único comando possível
Imagem: Reprodução

START: E pra fechar: é muito Kurosawa vs Lovecraft esse jogo, não? Num confronto entre Os Sete Samurais e O Chamado de Cthulhu, quem leva?

Sandro: Meu pai me colocou para assistir Os Sete Samurais quando eu era bem novo, não é qualquer obra que segura uma criança/adolescente por 3+ horas? eu adoro os filmes do Kurosawa. Com certeza os camponeses contratariam samurais para lutar contra os monstros do Mythos de Lovecraft, mas se esse embate acontecesse? infelizmente, o grande Cthulhu é inevitável! Iä! Iä! Cthulhu fhtagn!