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

Assassin's Creed Valhalla: veja os primeiros 15 minutos de O Cerco de Paris

Do START, em São Paulo

11/08/2021 07h00

O Cerco de Paris é a segunda grande expansão para Assassin's Creed Valhalla e adiciona uma nova área ao game, com missões, segredos e atividades para Eivor.

É possível explorar não só Paris, que na época era basicamente uma ilha no Rio Sena, como uma grande região em volta.

Mapa do jogo Assassin's Creed O Cerco de Paris - Reprodução/START - Reprodução/START
Mapa da expansão O Cerco de Paris
Imagem: Reprodução/START

Nos primeiros 15 minutos já dá para ter uma boa ideia também da narrativa: Para proteger o clã do Corvo, Eivor se envolve no conflito do chefe viking Sigfred com o rei franco Carlos, o Gordo - ambas figuras históricas reais.

Além deles, outros personagens reais importante na expansão são Eudo, o Conde de Paris, e a rainha Ricarda.

Rei Carlos, o Gordo, ao lado da rainha Ricarda em Assassin's Creed - Divulgação/Ubisoft - Divulgação/Ubisoft
Rei Carlos, o Gordo, ao lado da rainha Ricarda em Assassin's Creed
Imagem: Divulgação/Ubisoft

Do lado do gameplay, a principal novidade vem na forma de ratos! Sim, pois será possível usar os roedores que infestam Paris como arma para atacar inimigos. Inclusive, com a adição de uma nova habilidade que "invoca" os bichos.

Apesar dos primeiros minutos não demonstrarem essa nova mecânica, ela deve ganhar importância na hora de invadir bases para matar os alvos de Eivor. Afinal, ainda estamos falando de Assassin's Creed.

Para quem está preocupado em ter que "rushar" a campanha principal de Valhalla para poder aproveitar O Cerco de Paris, calma, não precisa.

O conteúdo fica disponível logo depois de completar um dos dois primeiros arcos de história após chegar na Inglaterra, quando dois personagens, Toka e Pierre, aparecem na base do jogador em Revensthorpe.

O nível de poder exigido para se aventurar por Paris é só de 200, bem tranquilo, e uma vez por lá, também é possível voltar a qualquer momento para a Inglaterra e continuar a campanha principal, caso precise.

Assassin's Creed Valhalla: O Cerco de Paris será lançado em 12 de agostos para PS4, PS5, Xbox One, Xbox Series X e S e PC, totalmente localizados para português.

Compre Assassin's Creed Valhalla

*A cópia do jogo foi enviada pela Ubisoft ao START

**O UOL pode receber uma parcela das vendas pelos links recomendados neste conteúdo. Preços e ofertas da loja não influenciam os critérios de escolha editorial.

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