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

Estúdio indie de games não tem chefe e paga o mesmo a todos funcionários

Dead Cells (PC, PS4, Switch, XONE) - Divulgação
Dead Cells (PC, PS4, Switch, XONE)
Imagem: Divulgação

Do GameHall

01/08/2018 13h07

O quadro de funcionários de um estúdio de desenvolvimento de games se alterna de acordo com o seu porte na indústria, variando entre quatro pessoas a centenas. Em sua grande maioria, como em outros setores, são atribuídos diferentes cargos e salários para fazer a empresa funcionar – o que nem sempre acontece, sendo que algumas am por crises e acabam com demissões em massa ou até fechando as portas.

Mas o pequeno estúdio francês Motion Twin, responsável pelo metroidvania “Dead Cells”, lançado para PC no ano ado e que chega nas principais plataformas de videogames em agosto, está tentando algo diferente neste cenário: os funcionários possuem e istram a empresa. Não há patrão.

VEJA TAMBÉM

De acordo com a empresa (via Kotaku), todos os seus 11 empregados são, em teoria, iguais. Recebem o mesmo pagamento e tratamento.

“Na verdade, usamos uma fórmula super básica: se um projeto é bem-sucedido, as pessoas recebem basicamente mais bônus, e todos são pagos da mesma maneira”, disse Sébastien Bénard, game designer da Motion Twin. “Os desenvolvedores e os artistas recebem a mesma quantia de dinheiro, e pessoas como eu que estão aqui há 17 anos recebem o mesmo valor que as pessoas que foram recrutadas no ano ado”.

Bénard ainda explica que o sistema de pagamento constitui “um desafio direto, não apenas às práticas de exploração que você vê em muitas outras empresas, mas também às velhas estruturas corporativas do mundo antigo”.

O espírito de equipe vai além dos pagamentos. A tomada de decisões também é um processo realizado em grupo, sendo que questões de pequena escala podem ser resolvidas “ao redor da máquina de café”, enquanto mudanças mais importantes resultam em reuniões de equipe completas. Caso não cheguem a um consenso, é feito uma votação.

Quando isso acontece, nem todas as pessoas envolvidas saem satisfeitas e não conseguem o que querem, tendo que “aceitar que, às vezes, você estará certo e suas propostas serão escolhidas e, às vezes, sua ideia super-revolucionária bem-intencionada será descartada pela equipe. É assim que funciona, e todo mundo tem que aceitar que as decisões resultantes foram tomadas por pessoas que entenderam seu ponto de vista, mas decidiram abandoná-lo de qualquer maneira”.

Dead Cells - Imagem - Divulgação - Divulgação
O jogo traz elementos de "Castlevania" e "Dark Souls", com o jogador encarando cenários distintos em ordem linear, mas que são gerados de maneira procedural.
Imagem: Divulgação

Um dos maiores problemas no desenvolvimento de jogos, especialmente de grande porte, que envolvem também publishers e executivos, além dos estúdios, é o prazo de entrega, que se estiver atrasado, pode gerar um enorme desgaste dos envolvidos.

Falando sobre isso, Bénard realça que para conseguir uma boa harmonia é importante ter um tempo para descansar e não ficar sempre focado em um projeto, evitar o desgaste. Quando algum funcionário parece estar esgotado, é mandado para casa. “Obviamente, é melhor perder algumas horas de trabalho do que um colega. Não há absolutamente nenhuma discussão sobre isso”.

É claro que, por se tratar de uma empresa relativamente pequena, é mais fácil para a Motion Twin ter essa estrutura mais maleável e que funciona bem para eles. Para um estúdio com um maior número de pessoas e obter resultados equivalentes “seriam necessários sistemas inovadores para manter todos envolvidos”.

“Provavelmente vamos fazer piada sobre as condições de trabalho da indústria de jogos em alguns anos, porque é obviamente ridículo e ineficiente. As pessoas simplesmente não são recursos descartáveis”, concluiu.

Dead Cells chegará para PC, PlayStation 4, Nintendo Switch e Xbox One.