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

Katamari Damacy continua tão bizarro e encantador quanto há 15 anos

Katamary Demacy foi lançado originalmente para o PS2 - Divulgação
Katamary Demacy foi lançado originalmente para o PS2 Imagem: Divulgação

Makson Lima

Colaboração para o START, em São Paulo

27/09/2019 04h00

Falar em "Katamari" é, automaticamente, cantarolar a música tema que reflete tão bem o nível de esquisitice pela qual a franquia ficou famosa. São 14 jogos lançados numa janela de 15 anos e nas mais diversas plataformas, mas sempre fiéis à premissa inicial: coletar coisas para refazer outras coisas (normalmente, constelações ou então galáxias inteiras).

Celebrar o aniversário de "Katamari Damacy" (18 de março no Japão, 21 de setembro nos Estados Unidos), é celebrar a riqueza de ideias e todo potencial do game design japonês.

Katamari 02 - Reprodução - Reprodução
O príncipe e sua Katamari de 6cm de altura
Imagem: Reprodução

O que é Katamari?

A grande protagonista da franquia da Namco é um artefato místico e de difícil manuseio (e que significa, literalmente, "amontoado"). Há quem reclame do gameplay, que estranhe como ambos os analógicos devem conversar entre si para movimentar a Katamari, mas nunca vi ninguém resmungar do comando específico para acelerá-la. É preciso pensar em como funciona a mente de uma criança, segurando o controle de videogame pela primeira vez. Aí, sim, começamos a entender Katamari.

A bola do cosmo tem a capacidade de se conectar a tudo que toca, quando as devidas proporções são respeitadas. Mais para "grude", talvez, e o senso de escala faz total sentido dentro da proposta: a Katamari, por vezes diminuta, conversa com botões de camisa, formigas, clipes de papel e farelos de pão, mas isso num primeiro momento. O tamanho estipulado pelo King of All Cosmos (que também é o grande responsável pela bagunça no espaço sideral e além), pode chegar a centenas de quilômetros. E o sacana ainda tem pressa, estipula tempo limite para o serviço ser concluído e, vez ou outra, até exige o que devemos ou não assimilar. Sendo assim, grudar continentes inteiros a Katamari faz algum sentido?

Katamari 03 - Divulgação - Divulgação
A família de todos os cosmos
Imagem: Divulgação

Seu usuário (aquele serzinho verde, aparentemente inofensivo e que, na verdade, é o Prince of All Cosmos, o filho do King of All Cosmos, caso não consiga associar um ao outro - é que eles são um pouco diferentes) pode parecer inexperiente, até despreparado, movendo os braços aleatoriamente a fim de fazê-la rodar por aí, inadvertido até mesmo do que está a sua frente, afinal, a bola sempre obstrui sua visão. Pessoas, animais, árvores e o que mais surgir: tudo é assimilado pela Katamari, devoradora de mundos, só que amigavelmente. O que se a na cabeça de quem concebeu essa ideia?!

Pessoas, animais, árvores e o que mais surgir: tudo é assimilado pela Katamari, devoradora de mundos, só que amigavelmente

Quem é Keita Takahashi?

Katamari 05 - Reprodução - Reprodução
Keita Takashi e o Príncipe
Imagem: Reprodução
Formado em artes pela Universidade Musashino e com diploma em escultura, Keita Takahashi não ou na sua primeira entrevista na Namco, isso lá pelo final dos anos 1990. Foi chamado um tempo depois e conseguiu vender sua ideia divertida e única. Na verdade, pela perspectiva de Takahashi, "Katamari Damacy" existe só e somente para trazer a ingenuidade pelas quais os videogames foram concebidos em primeiro lugar. Diversão acima de tudo, e da forma mais simples e ível possível.

Deu muito certo.

Takahashi nunca quis continuações, e só participou de algumas delas, como, por exemplo, "We Love Katamari", para se certificar de que sua visão seria mantida, já que houve sucesso comercial e, com isso, invariavelmente, novos jogos. Quem assumiu algumas das continuações mais aclamadas, como "Beautiful Katamari", foi o co-criador do conceito e parceiro de Takahashi, Jun Moriwaki. A última iteração, "Reroll", serviu como uma celebração ao original e a tudo que a franquia representou em todo esse tempo.

Keita Takahashi, na verdade, quer criar um parque de diversões especificamente para crianças. No final dos anos 2000, revelou em diversas entrevistas, como ao site Gamasutra, sobre esse sonho. Seria em Nottingham, no Reino Unido. Será que ainda vai acontecer?

O que é Wattam?

Katamari 06 - Divulgação - Divulgação
"Wattam" promove a amizade entre vaso sanitário e dejetos
Imagem: Divulgação

Takahashi nunca teve interesse na evolução tecnológica dos videogames, em gráficos fotorrealistas, em taxa de quadros por segundo e todas essas coisas. Ele prefere enxergar o lado mais simples desse entretenimento interativo, e gosta de conectar os seres de seus jogos para, quem sabe, haver repercussão no mundo real. Foi assim com o excelente "Noby Noby Boy", será assim com o recém-anunciado "Wattam".

É engraçado: bastam alguns minutos de trailer para logo associarmos o jogo a Keita, Katamari e todo esse legado mágico criado pela franquia mais bizarramente adorável dos videogames. Tem algo nas cores, na música, na infantilidade da coisa toda, tem algo na forma de se controlar aqueles carismáticos personagens, que forçam um sorriso no rosto. Se era esse o objetivo de Keita e seus colegas de desenvolvimento, posso afirmar que foi atingido com sucesso.

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