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

START Explica: GG! Entre a provocação e o fair play nos jogos online

Eryk Souza/UOL
Imagem: Eryk Souza/UOL

Gabriel Francisco Ribeiro

Do START, em São Paulo

18/07/2019 17h00

Jogar videogame é entrar em uma cultura com sua própria linguagem e termos que, para um iniciante, muitas vezes pode parecer coisa de outro mundo. Um dos exemplos dessa linguagem própria está em expressões usadas pela comunidade - como o famoso "GG".

Você está lá jogando uma partida de "Fifa" ou "League of Legends" e lá vem a mensagem no fim do jogo: "GG". Em um "Callf of Duty", principalmente se tem gringos na sala, alguém pode soltar em voz alta: "GG!".

Mas WTF isso significa? Relaxa que não tem nada a ver com tamanho de roupa - e, no universo dos jogos, pode significar muito mais do que a definição original.

via GIPHY

O que é GG?

"GG", no sentido original, quer dizer "good game" - ou "bom jogo", na tradução literal em inglês. Ela funciona, na maioria das vezes, como um aperto de mãos digital entre dois oponentes, demonstrando respeito.

Depois de terminar uma agitada e disputada partida de algum game online, em vez de fazer o "trash talking" com xingamentos e provocações, muitos preferem soltar simplesmente um "GG", algo que soa muito mais civilizado e respeitável.

A origem do "GG", é claro, vem de longe dos videogames: esportes em geral, na língua inglesa, contam com esse cumprimento de "bom jogo" entre adversários ao fim de uma partida há tempos.

Como nos games precisamos de comandos mais rápidos, fáceis de digitar, e que cruzem barreiras linguísticas, o GG foi eternizado.

Existem diferenças

Mas nem sempre o GG tem o significado original. Ele pode vir acompanhado de outras letrinhas que podem render sentidos diferentes para a sigla. Alguns exemplos:

  • GGWP: "good game, well played". Ainda é um termo respeitoso, que significa "bom jogo, bem jogado". Usado quando a pessoa quer elogiar o oponente.
  • GG NO RE: "good game, no rematch". Neste caso, o elogio ao jogo é acompanhado pelo recado de que não haverá uma nova partida entre os dois adversários. Mas a implicação disso, na prática, é de que o oponente não é bom o suficiente para merecer uma nova disputa. Isso era mais popular antes dos jogos terem os sistemas de arranjos automáticos de partidas.
  • GG EZ: "good game, easy". Essa é uma das principais provocações para o uso de GG. O termo é acompanhado de um complemento para dizer que o jogo foi fácil - ou seja, a outra pessoa é ruim. Essa provocação também pode surgir na tela como "ez game","ez life" ou "izi pizi".

Essa última variação do "gg" se tornou tão comum em "Overwatch" que a Blizzard ou a trollar os jogadores que usavam o termo para provocar depois de uma vitória: quando uma pessoa digitava "gg ez" no chat do jogo, a mensagem era trocada por frases como "Desejo tudo de bom" ou "Isso foi divertido".

GG EZ -  -
Em vez de "gg ez", uma mensagem positiva aparece no chat de "Overwatch"

Como "GG" era atribuído ao final de uma partida, ele acabou virando uma expressão de derrota ou incentivo em games como "League of Legends". É comum, por exemplo, um jogador pessimista reagir com "desiste, já perdemos, GG" diante de alguma jogada ruim do time, ou ainda vermos o "GG" aparecer como incentivo, na linha de "vem comigo e faz Barão que é GG".

Linguagem universal

Na Coreia do Sul, berço dos eSports, o "GG" é quase um patrimônio cultural. A tradição oriental acolheu o termo a tal ponto que falar "GG" antes de deixar a sala de uma partida era uma coisa praticamente obrigatória entre oponentes.

A sigla, é claro, saiu dos teclados e telas para a voz de muitos narradores de campeonatos - seja em "Starcraft", antigamente, ou atualmente com "League of Legends". Não é raro você encontrar por aí os caras gritando "GG" (lê-se "didi") com a maior empolgação do mundo.

E, é claro, não poderiam faltar os narradores brasileiros: eis aí o Gruntar narrando a vitória da Havan Liberty no Circuito Desafiante de LoL.

Para ficar por dentro de mais notícias, gameplays insanos e também trocar uma ideia com o START, é só seguir a gente no Twitter e no Instagram!