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

OPINIÃO

"Star Wars: Battlefront" tem pouco conteúdo, mas visual e controles agradam

Divulgação
Imagem: Divulgação

Claudio Prandoni

Do UOL, em São Paulo

18/11/2015 16h31

"Star Wars: Battlefront" ainda não é o jogo dos sonhos de qualquer fã da saga espacial de uma galáxia muito, muito distante, mas certamente é um ótimo cartão de visita do que podemos esperar da franquia pelos próximos anos.

Produzido pela DICE, mesmo estúdio da consagrada série "Battlefield" e do excelente "Mirror's Edge", "Battlefront" chegou nesta semana ao PlayStation 4, Xbox One e PC e permite participar de batalhas online em cenários icônicos da trilogia original de filmes - episódios IV, V e VI - assim como assumir o controles de figuras conhecidas, como Darth Vader e Luke Skywalker.

Em linhas gerais, o game cumpre bem a promessa: os combates são rápidos, frenéticos e divertidos. Os controles são fáceis de aprender e os gráficos e efeitos sonoros fazem um trabalho incrível de transportar qualquer um para os desertos de Tatooine, as planícies geladas de Hoth ou as florestas de Endor e outros lugares.

Difícil apontar qualquer outro game de "Guerra nas Estrelas" mais bonito que "Battlefront". O estúdio DICE é conhecido por seu primor técnico e isso brilha como nunca aqui.

Vale lembrar, a equipe de desenvolvimento teve o aos próprios arquivos da Lucasfilm para escanear em 3D artigos originais utilizados nos filmes, como miniaturas das naves X-Wing e TIE Fighter ou o próprio capacete de Darth Vader.

O problema é que todo o resto é raso demais. Insípido, sem complexidade.

Quase tudo que aparece em "Battlefront" já foi feito melhor em algum outro jogo da série, seja em termos de complexidade, fidelidade ou ambos - inclusive nos "Battlefront" anteriores.

Star Wars Battlefront Review 1 - Divulgação - Divulgação
Imagem: Divulgação

As batalhas entre caças, por exemplo, divertem a princípio pela simplicidade, mas rapidamente cansam pela falta de profundidade e possibilidade de criar estratégias.

As naves X-Wing não podem abrir e fechar suas asas para alternar entre modos de alta velocidade e combate. Por sua vez, a icônica derrubada de Walkers AT-AT em Hoth, com os cabos das naves Snowspeeders, virou um minigame pálido e sem graça em relação à tensão vista na mesma cena em jogos como "Rogue Squadron" e "Shadows of the Empire" - ambos com mais de dez anos nas costas.

Os modos de partida apostam em fórmulas consagradas que agradam bastante, mas também pouco exploram as possibilidades do universo criado por George Lucas.

Star Wars: Battlefront

Ao menos, "Battlefront" se esforça para ser ível tanto nos controles quanto em opções pouco utilizadas hoje em dia.

Pesa muito a falta de uma campanha com história, mas para compensar há missões offline, para jogar sozinho ou com um amigo em tela dividida, que servem como ótimos tutoriais e treinos para as partidas pela internet. Elas variam desde objetivos específicos, como perseguir soldados rebeldes em motos Speeder Bike pelas florestas de Endor até combates mais longos de sobrevivência, ao estilo 'Horda'.

Na edição brasileira frustra ainda o trabalho ruim de dublagem. O game não conta com as mesmas vozes que dublaram Han, Leia e os outros (poucos) heróis no cinema e as vozes que aparecem pouco lembram o que ouvimos nos longa-metragens, ando a impressão de um trabalho genérico com as figuras conhecidas.

Star Wars Battlefront Review 2 - Divulgação - Divulgação
Imagem: Divulgação

Perguntamos à Electronic Arts por qual motivo as vozes do game são diferentes das vozes dos filmes e a empresa disse não saber explicar. Por sinal, no iminente "O Despertar da Força" os personagens clássicos contam com os mesmos dubladores que os interpretaram nos filmes anteriores.

Em resumo, "Star Wars: Battlefront" se apoia bastante (talvez demais) na força da marca e toda a nostalgia associada à trilogia clássica. A produção é caprichada e os combates divertem muito, mas a falta de profundidade pode decepcionar fãs mais exigentes e o salgado preço inicial sugerido de R$ 280 (R$ 130) certamente não compensa pelo tanto de conteúdo presente.

Aliás, a própria EA faz questão de deixar claro que o conteúdo é pouco e muito mais vem pela frente, visto que (a exemplo do que já rola com "Battlefield") uma das opções do menu principal é o e de Temporada, que garante o a conteúdo adicional, como novos mapas e heróis, quando saírem no futuro. No Brasil, o e de Temporada sai por R$ 192 no PS4, R$ 200 no Xbox One e R$ 100 no PC.

Relembre os jogos mais importantes da franquia Star Wars

** Este texto não reflete, necessariamente, a opinião do UOL