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

Left 4 Dead

27/11/2008 14h01

Cenas da abertura
A Valve ficou famosa por seus constantes atrasos, mais ou menos como a Blizzard e a Id Software, com uma política de não se limitar a datas de lançamento enquanto seus jogos não pareçam bons o suficiente - que digam os fãs que esperaram ansiosamente por anos até colocar as mãos em "Half-Life 2". Mas o ritmo lento parece ter ficado para trás após o lançamento do Steam, serviço de venda de jogos e conteúdo online. Como uma popular plataforma de distribuição, a produtora encontrou uma verdadeira máquina de imprimir dinheiro e, mesmo trabalhando em conjunto com outras fornecedoras, viu a necessidade de agilizar sua produção de jogos próprios para aumentar seu acervo e presença na mídia.

A Valve, então, acionou seu motor gráfico proprietário, o Source, que serviu como base não só para "Half-Life 2", mas para outros produtos derivados, como as expansões "Episode 1" e "Episode 2", o incrivelmente popular "Counter-Strike: Source" e "Day of Defeat: Source". Da tecnologia também nasceram dois jogos inéditos sensacionais, "Portal" e "Team Fortress 2", lançados no ano ado, o que provou que mesmo em o ritmo acelerado - ao menos para os padrões da empresa - boas coisas estavam saindo.

Com esta seqüência de sucessos, as expectativas em torno de "Left 4 Dead" foram lá em cima. E, mesmo utilizando o mesmo artifício de aproveitar o Source, que já começa a mostrar a idade, a Valve conseguiu cumprir sua meta e entregar um jogo com multiplayer cooperativo inovador, em um clima de terror bastante envolvente.

Noite dos mortos-vivos

Apesar da proposta de inovar o esquema de cooperação entre os jogadores, "Left 4 Dead" não parece ter outras grandes ambições. Não há uma grande história por trás da ação, apenas um cenário genérico de infestação de zumbis, que bebe em fontes clássicas como os longas do diretor George A. Romero, em produtos mais recentes como o filme "Extermínio" e traz até mesmo referências à série "Resident Evil". Também não há maiores preocupações com críticas sociais, constantes nas obras que serviram como referência, ou mesmo um roteiro elaborado com uma série de reviravoltas.

Ruas infestadas
Tudo gira em torno da luta pela sobrevivência e da camaradagem. São quatro protagonistas: Bill, um veterano de guerra; Francis, um motoqueiro; a estudante Zoey; e o executivo Louis. No modo single-player, o jogador encarna um deles enquanto o computador controla os outros três durante as missões, que foram divididas entre quatro campanhas que imitam filmes (com direito a pôster e tudo mais): No Mercy, em um cenário urbano nas imediações de um hospital, Dead Air, que se a em um aeroporto, Death Toll, que segue até um porto, e Blood Harvest, com uma investida em uma fazenda. São cenários criados para esconder criaturas em todos os cantos, mas que poderiam ter mais variedade e, principalmente, maior quantidade, mas é um fator de menor importância diante da tensão e imprevisibilidade da dinâmica.

Com os controles em mãos, "Left 4 Dead" funciona como jogo de tiro em primeira pessoa comum, em que você deve abrir caminho entre as hordas de mortos-vivos na base da bala, utilizando pistolas, espingardas e metralhadoras. Mas é necessário trabalhar em conjunto com seus aliados para escapar inteiro, pois em determinados momentos as ondas de inimigos são simplesmente gigantescas e sufocantes - sem contar os monstros que têm alguns poderes especiais e requerem uma sincronia mais apurada para serem despachados.

O fato de poder avistar seus companheiros através das paredes - as silhuetas dos quatro heróis brilham para indicar sua posição - é um sinal claro da importância de avançar de forma ordenada para obter sucesso. Em certos ataques, com dezenas de zumbis correndo em sua direção e até mesmo escalando muros e saltando de telhados para te devorar, é um alívio ver alguém limpando sua barra justamente naquele momento em suas balas acabam e você tem que perder segundos vitais para recarregar.

Inimigos dinâmicos

O computador até faz um trabalho decente no modo para um jogador, mas é óbvio que "Left 4 Dead" foi feito para ser jogado em times de seres humanos. O próprio comportamento da inteligência artificial, chamada de Director, foi moldado levando em conta o entrosamento (ou sua falta) em times formados por quatro pessoas reais para posicionar os inimigos de formas diferentes durante as partidas. Assim, caso você resolva jogar certo cenário novamente, não saberá de onde os monstros irão sair ou como irão atacar. E este balanceamento também ocorre no decorrer da ação, calibrando a quantidade de oponentes na tela de acordo com a performance do grupo, deixando tudo cada vez mais imprevisível e sufocante.

Além do modo cooperativo contra o computador, que tem e a partidas locais ou online, há também um competitivo, na forma do Versus para até oito participantes. Um grupo joga com os tradicionais heróis humanos enquanto o outro encarna os tais monstros especiais, que têm habilidades únicas como lançar carros ou vomitar um líquido tóxico. Os times então se revezam nestes papéis até o fim de cada campanha e ganha quem tiver mais pontos no final.

Imitando um filme

Luta por sua vida
Com a divisão das campanhas como filmes, fica óbvio que os produtores evocaram um espírito cinematográfico para modelar a ação e, mesmo com muitos anos na praça, o Source não faz feio. Os modelos dos quatro heróis são especialmente memoráveis, com muitos detalhes e uma movimentação impressionante, mas o jogo também conta com ótimos efeitos de luz e explosões. E o melhor, por se tratar de um motor antigo e já bem aperfeiçoado, o jogo roda de forma bastante leve nos PCs e não apresenta problemas técnicos incômodos no Xbox 360.

O som do jogo também é de primeira linha. Além de uma trilha sonora que consegue ar um clima de tensão, há simplesmente centenas de diálogos gravados entre os personagens, deixando-os com um aspecto mais humano e realista. E cuidado ao jogar com o volume mais alto, pois os berros dos zumbis correndo pelas ruas podem assustar os vizinhos, pois são daqueles que garantem alguns sustos que acompanham um palavrão de espanto.

Nota: 9 (Excelente)