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

Conheça "171", o "GTA Brasileiro" que se a em Sumaré

O game 171 está em produção desde 2015 pelo Betagames Group. A história se a em em Sumariti, cidade baseada em Sumaré (SP) - Divulgação
O game 171 está em produção desde 2015 pelo Betagames Group. A história se a em em Sumariti, cidade baseada em Sumaré (SP) Imagem: Divulgação

Bruno Izidro

Do START, em São Paulo

22/10/2019 04h00Atualizada em 26/02/2020 12h06

Resumo da notícia

  • Projeto começou em 2015 e arrecadou R$ 68 mil em campanha de financiamento coletivo
  • Os carros são inspirados em modelos populares no Brasil, como Monza e Chevette
  • Objetivo é criar mais duas cidades paulistas para o lançamento do jogo

Esqueça Los Santos, San Andreas e os rumores sobre GTA VI no Rio de Janeiro. A próxima parada é a cidade de Sumaré, no interior de São Paulo, com chão de terra, orelhão na calçada e um Chevette estiloso na esquina. Estamos falando de "171", o "GTA Brasileiro" que estava em demonstração na BGS 2019.

O game independente, que está em desenvolvimento desde 2015, e já ou por aqui em 2017, vai retratar como é viver em uma versão virtual de um bairro de periferia da cidade paulista. O START conversou com um dos criadores de "171", que falou das ambições do jogo, que são tão grandes quanto o estado de São Paulo.

Lá vamos nós de novo

"171" é um jogo de aventura e ação em mundo aberto que está sendo feito desde 2015 pelo estúdio Betagames Group. Atualmente, ele é composto por seis pessoas espalhadas por diversos estados do Brasil.

"A ideia do '171' surgiu ao vermos mods de games que traziam conteúdos e ambientes inspirados naquilo que se vê no Brasil", disse o idealizador do projeto, Diogo Moraes, ao UOL, em 2017.

De lá pra cá, o game conseguiu acelerar seu desenvolvimento graças a uma campanha de financiamento coletivo realizada no fim de 2018. O estúdio pediu R$ 58 mil e conseguiu arrecadar mais de R$ 68 mil.

Assim, eles demonstraram uma versão pré-alpha de "171" para o público que visitou a BGS 2019. A versão era um modo exploração que durava cinco minutos e deixava o jogador livre para testar as mecânicas básicas de tiro, movimentação e direção do carro em um ambiente aberto.

Apesar das limitações, a sensação é que realmente estamos jogando um GTA, só que com uma brasilidade que conhecemos bem. Um detalhe interessante, por exemplo, eram os carros disponíveis, que representavam modelos bem conhecidos dos brasileiros, como Chevette, Golf e Monza, mas que no game são chamados de Tenente ou Bayser.

Segundo Kleverson Vieira, responsável pela modelagem 3D e level design do jogo, o grupo conseguiu sair com bons resultados do teste com o público. "A BGS é um evento em que a visibilidade que a gente tem é grande. Várias pessoas têm a chance de conhecer o jogo, testar e dar um retorno ali pra gente", disse em entrevista ao START.

GTA São Paulo

171 GTA BR - Divulgação - Divulgação
Ambientação do jogo é de um bairro de periferia
Imagem: Divulgação

Em todo "GTA", um dos elementos mais importantes é a cidade (ou cidades), que acaba sendo protagonista do jogo. A Liberty City de "GTA IV" é uma representação de Nova York, enquanto a Los Santos de "GTA V" é baseada em Los Angeles.

No caso de "171", o idealizador Diogo Moraes só precisou olhar em volta para buscar inspiração em Sumaré, cidade em que mora. Assim surgiu a fictícia cidade de Sumariti, em que o game acontece.

Kleverson Vieira, que é o modelador do grupo, mas mora em Maceió, Alagoas, usa de pesquisa na internet para recriar a cidade, já que ele nunca visitou o lugar.

Dou uma olhada na ambientação, nas ruas, para ter uma base pra poder criar da maneira mais fidedigna possível ela no jogo
Kleverson, sobre recriar Sumaré no jogo sem ter visitado a cidade

"171" ainda está na fase inicial de desenvolvimento, mas o mundo aberto já apresenta até pontos conhecidos do município paulista.

Kleverson cita, por exemplo, a região do Seminário de Nova Veneza, uma das áreas turísticas de Sumaré recriadas em Sumariti. "É um prédio histórico bem grande e tem palmeiras por perto. É um lugar bem conhecido por quem mora por lá".

Kleverson GTA BR - Bruno Izidro/UOL - Bruno Izidro/UOL
Kleverson é um dos desenvolvedores de "171"
Imagem: Bruno Izidro/UOL

O desenvolvedor também revela que a ambição do estúdio é que o game tenha mais duas cidades, representando o Estado de São Paulo, da mesma forma em que o mapa de "GTA San Andreas" é uma versão virtual do estado da Califórnia e seus arredores, com as cidades de Los Santos (Los Angeles), San Fierro (São Francisco) e Las Venturas (Las Vegas).

"Por enquanto só tem Sumaré, mas até o final do (desenvolvimento) do jogo a gente pensa em colocar mais duas ou três cidades para fazer uma versão simplificada de São Paulo, que abrange diversas partes, como o litoral, a capital...".
Kleverson, sobre as ambições do estúdio para o game

"171" ainda deve demorar alguns anos para chegar à sua versão definitiva. De acordo com o estúdio, uma versão beta só deve ficar pronta em 2021 ou 2022. Antes disso, porém, ainda este ano, os apoiadores que contribuíram para o financiamento coletivo do jogo receberão uma cópia da versão pré-alpha de "171", por meio do o Antecipado no Steam.

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