;(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

Sky Racket: o game brasileiro que mistura "Pong" com naves espaciais

"Sky Racket" é colorido, agitado e non-sense (do jeito que a gente gosta) - Divulgação
"Sky Racket" é colorido, agitado e non-sense (do jeito que a gente gosta) Imagem: Divulgação

Giovanna Breve

Colaboração para o START

10/11/2019 04h00

Blocos coloridos, pipocas voadoras, gatos-sanduíches atirando para todo lado e guaxinins raivosos. São alguns dos inimigos que RacketBoy e RacketGirl devem combater a serviço da Capivara Deusa para derrotar o mal que se alastra no universo. Sim, é muita coisa doida de uma vez só, mas essa é a proposta do agitado, colorido e surreal "Sky Racket", o novo jogo da Double Dash Studio, lançado no final de outubro para PC (Steam).

Com uma temática futurista, o estúdio indie carioca mistura elementos de shoot 'em up ? jogo de tiro geralmente protagonizado por naves, como "Space Invaders" e "R-Type" ? com o Block Breaker ? destruir blocos como em "Arkanoid". Nessa combinação de gêneros que marcaram os anos 80 e90, "Sky Racket" se declara o primeiro (até onde se sabe) "Shmup Breaker" do mundo.

Sky Racket intro - Divulgação - Divulgação
Aquele caos simpático dos "jogos de navinha" faz parte de Sky Racket
Imagem: Divulgação

Da Jam para canais de streaming

Você já viu que grandes jogos tiveram seu começo humilde nas game jams, e "Sky Racket" faz parte do clube. Foi em 2015, durante a "Indie vs Gamers", promovida pelos youtubers e streamers famosos Pewdiepie, Markplier e Jacksepticeye. Os participantes precisavam desenvolver, online, um jogo no período de três dias.

O tema daquele ano era arcade, e a Double Dash era formada por quatro pessoas. Dentre elas Jandê Saavedra, diretor de arte, que conta que a ideia de criar um jogo que misturasse os gêneros clássicos dos anos 80 e 90 veio de muito antes. "A ideia de um menino voando com uma raquete e rebatendo os tiros dos inimigos já existia há muito tempo. Foi um conceito que o game designer Lucas Thiers tinha pensado, e quando teve essa game jam a gente teve a oportunidade de desenvolver", diz Saavedra ao START.

Equipe Double Dash - Divulgação - Divulgação
Equipe da Double Dash começou com quatro pessoas e foi crescendo
Imagem: Divulgação

Como o tema era fliperama a gente pegou esses dois gêneros, que vieram do arcade, juntou e deu muito certo
Jandê Saavedra, diretor de arte da Double Dash Studio

O protótipo foi entregue com o nome de "RacketBoy", um single player em que o jogador, sem poder de ataque, deve rebater os tiros dos inimigos. Dentre os 600 participantes inscritos na game jam, o game com o tenista espacial foi o primeiro colocado. Apesar de não ter um prêmio em dinheiro, "RacketBoy" apareceu no canal dos três youtubers organizadores, tornando-se um sucesso instantâneo pela divulgação.

Jandê conta que foi uma correria, pois eles não imaginavam que o game recebesse essa repercussão tão cedo. "Foram dois meses que a gente teve que acompanhar as redes sociais, pois saia vídeo todo dia de gente jogando o protótipo."

Recaídas e viradas

Uma vez na crista da onda com a enorme repercussão, a Double Dash decidiu fazer uma campanha de financiamento coletivo, mas não atingiu a quantia necessária.

"Essas campanhas precisam de muito planejamento, e a gente fez uma coisa muito corrida, até pela nossa inexperiência", explica o diretor de arte. O estúdio, então, optou por dar uma pausa no desenvolvimento e focar mais na divulgação do protótipo em eventos e feiras de jogos.

Em 2017, a Ancine (Agência Nacional do Cinema) abriu o primeiro edital de jogos eletrônicos do Programa Brasil de Todas as Telas, que investiu cerca de R$ 10 milhões na produção de games independentes brasileiros. "A gente viu uma oportunidade de ter o financiamento necessário para desenvolver o 'Racket Boy' da forma que a gente queria", afirma Jandê.

A Double Dash foi uma das selecionadas e voltou com tudo para a produção do protótipo. Com a ajuda do financiamento, a empresa expandiu o número de funcionários, manteve a essência principal do jogo de rebater adversários e acrescentou a personagem jogável RacketGirl, criando um "Shmup Breaker cooperativo".

Bastidores

Uma das maiores dificuldades durante a produção de "Sky Racket", além de obter financiamento, foi manter o equilíbrio constante entre o 'Shmup ' e Block Breaker, além de oferecer uma dificuldade de forma progressiva.

Além desse novo gênero, há o fato de a RacketGirl ser uma personagem feminina negra, algo ainda pouco explorado em jogos eletrônicos. Jandê explica que, como a Double Dash é composta pela diversidade das pessoas, seja por gênero ou raça, foi natural. "Isso é uma coisa veio da gente. Nossa equipe é bem diversa então acho que faz sentido ter essa diversidade em nosso jogo".

Double Dash produção - Divulgação - Divulgação
Diversidade é uma das características do estúdio carioca, e algo que eles tentaram mostrar no jogo
Imagem: Divulgação

Non-Sense no Espaço

Assim que entra o trailer animado de "Sky Racket", é claro como o personagem masculino lembra o protagonista do clássico anime AstroBoy, com seu topete geométrico. O diretor confessa que essa é uma clara referência, mas que é apenas uma das diversas influências do jogo. "Pong", pinball e até desenhos animados como A Hora de Aventura e Steven Universe fazem parte do pacote.

"Cresci jogando Master System e Mega Drive, então trouxe muito da SEGA para o projeto. O próprio jogo se assemelha ao 'Fantasy Zone' e 'Parodius', que são jogos de fliperama de nave que têm esse visual completamente non-sense, que mistura coisa bonitinha e colorida que a gente sempre quis desde o começo."

Jandê afirma que produzir um jogo com essa temática fez com que a equipe de arte pudesse trabalhar livremente, pensando em inimigos e cenários dos mais criativos.

Como o jogo tem esse visual, a gente não fica preso, amarrado ao que pode e não pode. Então quando vem a ideia de fazer um gato-sanduíche não tem nada que segure a gente
Jandê Saavedra, diretor de arte da Double Dash Studio

A descrição do jogo no Steam diz que ele é "baseado em uma história real". Questionado sobre qual elemento de realidade podemos encontrar ali, Jandê respondeu rindo que "faz parte da comédia non-sense".

Sky Racket - Divulgação - Divulgação
Imagem: Divulgação

SIGA O START NAS REDES SOCIAIS

Twitter: https://twitter.com/start_uol
Instagram: https://www.instagram.com/start_uol/
Facebook: https://www.facebook.com/startuol/
TikTok: http://vm.tiktok.com/Rqwe2g/
Twitch: https://www.twitch.tv/start_uol