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

BGS: 5 games indies que você não pode perder

Em "Out of Space" você precisa manter a ordem em uma nave espacial com amigos - Divulgação
Em "Out of Space" você precisa manter a ordem em uma nave espacial com amigos Imagem: Divulgação

Letícia Wexell

Colaboração para o START

13/10/2019 10h22

A Brasil Game Show 2019 traz muitas novidades bacanas na Avenida Indie, que é o ponto de encontro da feira para os jogos nacionais de destaque. Ali estão desde estúdios brasileiros já reconhecidos na área, até outros que tentam emplacar seu primeiro game.

Se você já reservou espaço na agenda para conferir os indies da BGS este ano, listamos 5 boas indicações para começar. E, se você não teve chance este ano, sem problemas: esses jogos continuam em desenvolvimento, e você pode acompanhar novidades sobre eles mesmo depois da BGS.

Eternal Hope

A demo de Eternal Hope disponível na BGS 2019 sintetiza muito bem o projeto da Doublehit Games: um puzzle plataforma com uma narrativa chamativa e sensível, em que o jogador acompanha a história de um casal apaixonado, mas que está separado pela morte. Os pequenos puzzles lembram muito jogos como "Limbo" e "Ori and the Blind Forest", inteligentes porém não complexos demais.

"Nossa ideia, como fãs de Limbo também, é resgatar os jogadores desamparados que não tiveram um sucessor à altura", diz Gabriel Oliveira, sound designer do jogo.

Eternal Hope abrirá uma campanha no Indiegogo no dia 22 de outubro, com previsão de lançamento para 2020.

The Monstrous Frontier

Ainda em pré-alpha, "The Monstrous Frontier" é um RTS com mecânicas singulares e criativas da Software WA. O jogador toma o papel de um aventureiro aposentado, que funda uma vila mas não quer ser o responsável por fazer tudo. Assim, chegamos na estratégia mais interessante do jogo: designar tarefas - cortar madeira, caçar monstros, construir coisas - para os "aventureiros" que habitam a vila por meio de Quests criadas pelo jogador.

"Um dos grandes temas do jogo é sobre como ar adiante o protagonismo. Essa foi a mecânica que encontramos para isso.", explica o concept artist Thiago Morais.

Inicialmente, a previsão de lançamento de "The Monstrous Frontier" é para junho de 2020.

Out of Space

"Você está se mudando para um apartamento espacial, e precisa deixar aquele local habitável enquanto lida com os alienígenas que estão ali com você", explica Hugo Vaz, diretor de arte da Behold Studios. O partygame frenético é gerado proceduralmente e comporta até quatro jogadores, que precisam se organizar para arrumar a nave espacial onde vivem. O game lembra um "Overcooked", porém com muito mais funções, fases (devido à geração procedural) e ainda uma aba de Compras em que o jogador pode personalizar e otimizar totalmente o espaço da partida.

Atualmente em early-access, o game já está na Steam e pretende ser lançado também para Xbox, PS4 e Switch.

Out of Space - Divulgação - Divulgação
Imagem: Divulgação

Gravity Heroes

Derrote hordas de inimigos que surgem de qualquer lado da tela! Em "Gravity Heroes", a principal mecânica é a mudança de gravidade súbita que você, seus companheiros e seus inimigos podem fazer a qualquer momento, resultando em partidas animadas com até quatro jogadores em co-op ou versus. Financiado pela Ancine, o jogo tem um espaço chamativo na área indie que faz jus à sua qualidade.

"Buscamos alcançar esse público potencial da BGS para que eles tenham mais qualidade, mais jogos, mais diversidade com os indies", diz Hugo Campos, diretor tecnico do Studica Solution.

"Gravity Heroes" tem previsão para lançamento em 2020 para PS4, Xbox e PC; e futuramente Nintendo Switch.

Gravity Heroes - Divulgação - Divulgação
Imagem: Divulgação

Planeteer

Um dos únicos games VR da área indie, "Planeteer" chama atenção por unir comédia e ação em um game VR de tiro, sobrevivência de ondas e crafting.

"Escolhemos o VR por ser um nicho mais fechado e controlado, que tem uma comunidade que abraça pessoas e jogos novos e independentes. É uma tecnologia nova. Quando você desenvolve em VR você tem muito mais chances de fazer uma coisa nova do que quando você vai para o plataforma 2D", explica Gabriel Marques, da United Games.

"Planeteer" tem uma demo curta disponível na BGS, mas que garante boas risadas e uma ótima oportunidade de jogar em VR para aqueles que ainda não tiveram a experiência.

O jogo deve sair no segundo semestre de 2020, para Oculus Rift, com outros Headsets VRs na mira do estúdio.

START na BGS 2019

Confira os pro-players e streamers que estarão no estande do START:

Brasil Game Show 2019

Quando: 10 a 13 de outubro (dia 9 exclusivo para imprensa)
Onde: Expo Center Norte - Rua José Bernardo Pinto, 333 - Vila Guilherme, São Paulo - SP
Ingressos: opções de pacotes disponíveis no site oficial

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