cancelar
Showing results for 
Search instead for 
Do you mean 

Saiu no Reddit! - PQC - Engenheiros do Jogo

Moderador

Saiu no Reddit! - PQC - Engenheiros do Jogo


Hey pessoal,

Tivemos outro PQC uns dias antes da festa de 10 anos do League of Legends, desta vez sobre os Engenheiros por trás da programação do jogo, a discussão foi focada no funcionamento das habilidades, funcionalidades, bugs estranhos, tft, entre outros. Algumas perguntas e reposta foram bem focadas em programação, assim caso curta o assunto ou queira entender melhor como funciona este mundo misterioso, venha conferir!

Para quem não conhece o Ask Me Anything(AMA)/ Pergunte Qualquer Coisa(PQC), um indivíduo ou grupo que participou de uma experiência se dispõe para responder perguntas relacionadas ao assunto em pauta, pratica que é bem comum lá no Reddit. Como este conteúdo é feito apenas em Inglês pela Riot Central, achamos interessante trazer este tipo de informação para nossa região também.


Este tópico foi um pouco complicado, foi necessário dar uma buscada em termos e outras coisas bem específicas de programação, então se você tem familiaridade neste mundo e percebeu um termo que não faz sentido, me dê um toque (:. Fora isso ignorei brincadeiras, memes internos do NA, coisas irrelevantes para o assunto para evitar um tópico gigante, então se quiser ver na íntegra, dê uma passada no post original do Reddit.




Kkoucher:
TFT mobile é possível? Ou seria necessário alterar a mecânica de alguma forma?


Penrif:
Sim, TFT mobile pode acontecer. Nossa engine nunca entrou em contato com estas plataformas, então seria necessário muito trabalho em cima disso, mas com esforço suficiente pode ser feito.



McFroggers:
Então vocês mentiram na cara dura assim?
Honestamente estou impressionado kkkkk .


Penrif:
Hey, eu não disse que não estávamos neste processo de colocar esforços em cima do projeto Smiley Wink



FinitoHere:
Os objetos do League são geralmente memes chamados de “programados em minions” (coded as minions), no qual é bem estranho, poderia falar o que é a coisa mais bizarra programado em cima de um minion?


Penrif:
Existem vários exemplo, mas o primeiro que vem em mente sendo bizarro é o R da Lux. Ele utiliza cerca de 8 minions.


RiotNullarbor:
Praticamente tudo no TFT é uma Tropa. As unidades, itens, juros, os hexágonos brilhantes. Os minions viraram praticamente peças de Lego reutilizáveis no League. Com isso conseguimos fazer várias coisas, malhas animadas, buffs, vfx, barras de vida entre outras coisas que são bem úteis para mostrar no jogo.



WhinyADCMain:
O que exatamente significa este meme de “programado em minion”? Sei que o desenvolvimento de jogos em alguns casos utiliza abstração (behavioral abstraction), não sei muito bem do que estou falando.


Penrif:
Um artigo inteiro pode ser escrito sobre as várias utilizações de um minion, mas podemos reduzir isso em uma necessidade de ter um objeto que consegue armazenar dados e realizar ações - algo que uma Tropa pode fazer muito bem.



FrankTheBoxMonster:
  1. Como a ultimate do Mordekaiser funciona? No vídeo de making of feito em seu lançamento falava de várias camadas de interação, mas o que rolou para construir estas separações? Aquele “reino” é incluído em todas as posições do mapa? Existe um loop como ForEachUnitInXXX para verificar onde deve aparecer? Foi necessário realizar várias mudanças no código para as unidades serem movidas a diferentes reinos?
  2. Como o Q da Yuumi funciona em relação ao cursor?
  3. Como vocês conseguiram fazer aquele espaço extra nas magias do Sylas funcionar? Era ajustando apenas antes de conjurar?
  4. Qual o motivo da passiva do Aurelion Sol possuir tipos diferentes de projétil.
  5. Vocês arrumaram o problema do servidor cair quando o jogo chega nos 25000 segundos de jogo? Não é algo fácil de se checar, mas você sabe exatamente o que causa este crash?


Shaqfuuuuu:
1 - Então, as camadas de interações, ou dimensões como foram nomeadas. Elas são propriedades que vivem em todos os objetos do jogo. Um Objeto do jogo é uma base primitiva que todos os minions, campeões, torres, Teemos, misseis, e praticamente tudo no league recebe de herança. As propriedades das dimensões permitem que dois objetos do jogo se perguntem - “Oww você está na mesma dimensão que eu? Sim - legal vamos interagir, ou Não - ih deixa para lá vou ver o próximo”. O sistema de visão, névoa de guerra, também respeitam estas dimensões, assim você só enxerga objetos que estão na mesma dimensão que você. Com estas duas coisas combinadas nós temos o Reino da Morte do Mordekaiser em sua forma e glória.



RiotLtRandolph:
2 - Era necessário ter certeza que a habilidade funcionasse direito mesmo com Lag. Desta forma existe um atraso entre quando o seu mouse se move para uma nova posição e quando o projétil começa a seguir aquela posição.

O seu client envia 3 posições recentes do mouse para o servidor do jogo, junto com o tempo de cada um deles. A cada 1/10 segundos mais ou menos ele envia uma nova atualização da posição do cursor.

O servidor pega estas 3 posições do mouse e o tempo, usa a amostra mais recente que possui do mouse, no caso mais antiga que da compensação de lag mencionado acima.

Então se a conexão estiver vindo sem atrasos para o client, ele utilizará a amostra do “tempo atual”. Mas se possui algum tipo de atraso, ele continuará utilizando a amostra mais recente que foi enviada.

O servidor por sua vez envia o caminho que o projétil fará para todos os outros jogadores da partida, isso acontece um pouco depois do projétil realmente se mover, assim todos podem visualizá-lo no local correto.

Diferente da maioria dos projéteis, o cliente do jogo não consegue adivinhar para onde o projétil irá. Isso ocorre porque todas as minhas tentativas de configurar previsões adivinhava errado a maior parte do tempo. Portanto, renderizamos o projétil se movendo apenas onde ele realmente está indo.



RiotLtRandolph:
3- Dando um pouco de contexto, estas habilidades que você tem em mente, na verdade são feitas de várias outras habilidades, algumas são utilizadas automaticamente pelo jogo. Exemplo, o Caprichos da Lulu possui duas habilidades uma para aliados e outra para inimigos. Estas habilidades extras são colocadas em “espaços escondidos”, como se fossem dos atalhos QWEDF, porém não são acessíveis para os jogadores utilizarem.

Mudamos nossas “boas práticas” para espaços extras de habilidade por vários motivos, o Sylas foi um deles, criando esta necessidade de modificar funções por não funcionar corretamente com o personagem. Desta forma ao invés de apenas falar “Conjure o espaço extra 4” nos scripts, fazendo a pessoa ir até o local procurar que habilidade era, mudamos para “Coloque LuluCaprichoInimigo no espaço extra 4. Conjure o espaço extra 4”.

E assim o Sylas foi construído bem cuidadosamente com seus espaços extras de habilidade para ter certeza que as ultimates roubadas utilizem estes espaços extras livremente.



Penrif:
4 - A passiva do Aurelion Sol quebrou muitas suposições que nossa engine tinha sobre projéteis - a mais importante é que todas são de curta duração e rápidas. A única que possuía aspectos similares era o Q da Diana que também tinha um curto tempo de duração, então pequenos erros na física entre o client e server não eram tão aparentes. Entretanto se você colocar estes pequenos erros em um espaço de 1 minuto, eles se tornam gigantes.

Fizemos um novo tipo de integração de física para seus projéteis, conseguindo manter uma bela sincronização durante longos períodos de tempo, assim resolvendo o problema. Era uma solução de baixo risco na época, evitando quebrar a física já existente, possuir duas mecânicas similares de simulação circular não é algo que me incomoda muito, atualmente não é algo que vale a pena voltar e perder tempo integrando os dois de volta.



Spawndog:
5 - Dependendo do hardware podemos rodar mais de 100 jogos em apenas uma máquina. Existe um único processo chamado “Local Server Manager” que é responsável por todos estes jogos. Uma de suas tarefas é encerrar qualquer jogo que parece estar errado. Se um jogo utiliza 100% de CPU por um longo tempo, ou parece que há um jogo fantasma rodando, este processo fará o encerramento. Então se você manter o jogo aberto por muito tempo, recomendo que feche ou o LSM vai te julgar.



Cezaros:
Onde fica a coordenada 0.0.0 no jogo? Fica abaixo do mapa, um lugar onde não podemos ver, ou algo parecido?


RiotLtRandolph:
O (0, 0, 0) de Summoner’s Rift fica um pouco abaixo do chão fora do mapa no sudoeste. Qualquer hora que vejo um bug onde as coisas se movem para baixo e para a esquerda, primeira coisa que eu verifico é entender se nenhum valor foi colocado acidentalmente como ponto de origem.



The_impussible:
O que vocês fazem no seu dia a dia como um engenheiro de jogos?


RiotEntquine:
Para engenheiros de campeões, o dia é um misturado destas coisas:

  • Discutir possibilidades com outros engenheiros;
  • Implementar ideias e funções para os designers conseguirem adicionar coisas legais no jogo;
  • Reuniões para ter certeza que todos estão alinhados nos planos que estamos trabalhando;
  • Arrumar bugs;
  • Revisão de código.


Baseballlover723:
Qual é o bug mais estranho que vocês já viram?


NoopMoney:
Hmmm, o mais estranho que eu já trabalhei foi o que campeões ás vezes davam “dano infinito”, isso em 2014.

Resumindo, nós encontramos alguns vídeos de campeões como Leblanc dando “one-shot”/abatendo campeões com apenas 1 auto ataque. Ficamos extremamente perplexos e perdidos durante um tempo realizando vários testes, isso se persistiu até pedirmos ajuda para o setor de BigData/Análise.

Começamos a analisar todos os históricos de jogos para encontrar partidas em que um jogador deu mais de 2 milhões de dano (ou algum valor absurdo). Esperávamos encontrar um jogador em comum, composições ou algo do gênero, entretanto percebemos que todos os jogos em que isso ocorreu foi no (novo) servidor do EUW!

No fim das contas, hardwares com defeito não são coisas tão raras assim, então quando estiver instalando centenas de novos servidores, a chance de um deles estar com problemas pode acontecer. Assim substituímos aquele servidor com defeito e todos viveram felizes para sempre (:



Hobbsgoblin123:
Vamos falar sobre minion block. Eu entendo que isso deveria existir, mas atualmente é absurdamente frustrante e algumas vezes você fica preso sem ter como sair. Não existe alguma forma de reduzir o tamanho desses blocos, pois não é uma mecânica muito legal..


RiotScruffy:
Minions afetando o posicionamento de jogadores de alto nível é um bom sistema, algo que possivelmente queremos manter ao longo termo.


  • Adiciona contexto e diferentes posicionamentos de campeões durante o combate.
  • Ajuda a dar um toque um pouco mais realista ao mundo. (as coisas ficam bem estranhas quando todos começam “deslizar” de ponto a ponto)

Dito isso - existem alguns casos que podem criar momentos chocantes/não intuitivos/frustrantes causados pela nossa execução em criar caminhos ao redor das tropas.


  • As tropas formando uma “parede” que não parecem realmente estar bloqueando seu caminho.
  • Minions andando durante minha movimentação, então meu caminho inicial que deveria ter passado por eles, agora é bloqueado. Isso só piora quando as tropas sofrem pequenas movimentações, fazemdp o campeão ficar preso e mudar de caminho repetidas vezes.

Concluindo - os minions possivelmente vão continuar afetando o caminho, porém podemos trabalhar futuramente em maneiras de deixar isso mais previsível, consistente e alinhar com suas expectativas como um jogador.



Hobbsgoblin123:
Queria saber o que estava acontecendo na programação com aquele bug do Q do Xerath, caso a habilidade fosse utilizada em um ponto específico do mapa, todos eram acertados.


RiotLtRandolph:
Este é um dos vários bugs que encontramos caso as habilidades de disparo de precisão (skill shot) vão para “cima”. Possuímos vários blocos de códigos que forçam o programar a ter certeza que está trabalhando apenas em XZ, ignorando o Y. Entretanto existem diversos componentes que operam em XYZ. Então se você perguntar algo como “o quão distante este inimigo está ao longo desta linha” e se a linha estiver apontando para cima, a resposta será “não tão longe” já que as outras duas unidades estarão no chão.

Esta explicação é meio estranha e mais simples do que o real problema matemático envolvido, mas é a base da ideia.

Para evitar mais bugs assim, foi necessário revisar vários códigos impedindo que utilizassem vetores contendo apenas o componente Y.



Hobbsgoblin123:
  1. Qual engine o League utiliza? 100% feito a mão?
  2. Vocês possuem editor de mapa?
  3. Seria possível abrir o League para a criação de mods, assim como o Dota 2 e Warcraft 3 fizeram?


RiotLtRandolph:
1- League foi criado na League Engine. É uma engine customizada em C++.

2- Nestes últimos anos montamos um editor de mapa, especificamente voltado para deixar a criação de modos de jogos mais fácil. Na época em que foi feita a atualização de Summoner’s Rift, existia um processo complicado de magia negra um exportador de Maya que era necessário para criar tudo aquilo. Agora com o Maps Mountain é possível realizar diversas modificações sem muita complicação.

3- Dar suporte para mods é uma decisão bem grande para um estúdio tomar. Requer grandes esforços e suporte para criar algo estável o suficiente para que criadores externos trabalhem em cima. Além de ser bem fácil, se você souber o que está fazendo, destruir o League fazendo coisas erradas com seus dados. Este lado pode até ser benéfico, pois os criadores de conteúdo podem fornecer suporte na parte de artes, tecnologias e engenharias e vão querer fazer seu trabalho funcionar, seja estável, não quebre, etc. Entretanto se for realmente dar suporte aos mods, será necessário nos comprometer e arrumar tudo para que o programa seja o mais estável possível. Sem mencionar as documentações, adicionar ferramentas que os modders queiram utilizar, versificação, implicações com o anti-cheat, hardware dos servers, etc.

Este tipo de trabalho, particularmente em uma engine que não foi construída com mods em mente desde o primeiro dia, pode levar um tempo absurdo.



BruC0Ndr:
Qual foi a habilidade mais difícil de se fazer?


RiotLtRandolph:
Os mais difíceis que experienciei até hoje foram: Ultimate do Sylas, passiva da Neeko, e a ultimate do Mordekaiser. Todas estas habilidades são casos que possuem elementos bem específicos que as tornam mais difíceis que as habilidade normais. Ult do Sylas - Foi necessário ter uma definição clara da pergunta “o que é uma habilidade?” Não tinha como ser apenas algumas linhas de código.

Passiva da Neeko - Rolaram vários casos especiais como os projéteis do Aurelion Sol, auto ataque do Graves, DJ Sona, etc. Onde uma interação maior foi feita com o objetivo de deixar as cópias se comportando de forma idêntica aos personagens normais.

Ult do Mordekaiser - Nós especificamente precisávamos pensar no que aconteceria com todas as habilidade do jogo caso fossem conjuradas enquanto você entrava ou deixava o Reino dos Mortos. Tentamos criar soluções para todas as habilidades sem precisar de trabalho extra, mas claro sempre existem exceções.



mTiks_:
Qual o motivo de ainda estar utilizando DirectX 9?


Riot_DarthBatman:
Nosso suporte ao DirectX 9 é consequência de duas coisas: tentar garantir uma experiência consistente aos jogadores de vários hardwares, e o tempo que levou para os jogadores (e para nós) finalmente migrarem para o Windows XP. Agora que deixamos o Windows 7 como nosso requerimento mínimo da versão do Windows, podemos investigar novas APIs para serem adotadas.



ReCrisis:
Atualmente estou como estagiário em Engenheiro de Software e fiquei curioso como funciona este lado de engenharia nos jogos. Que tipo de currículo um membro do time precisa ter? O que você recomendaria para alguém ter como habilidades básicas para começar neste ramo?


Spawndog:
Meu conselho principal é aprender fundamentos de como a CPU se comporta com o compilador e o que o OS(sistema operacional) está fazendo com o seu código. Você consegue aplicar este tipo conhecimento em toda sua carreira relacionada a tecnologia, mesmo que este mercado sofra mudanças constantes. Segundo, algo que admiro em alguém é quando uma pessoa têm seus próprios projetos pessoais. Mostra sua paixão pelo trabalho e vontade de ver aquilo funcionar.

League possui a maior diversificação de profissionais no ramo de engenheiro de jogos que já trabalhei. Temos veteranos com mais de 25 anos de experiência até pessoas sem nenhum histórico de jogos e trabalhando pela primeira vez nisso. O elemento comum é o desejo em trabalhar de forma colaborativa com os outros, a fim de criar ótimas experiências (também ser bom em programar).



Não vou mentir, este PQC foi bem pesado, mas espero que tenha lido até o fim e agora conheça um pouco mais sobre este mundo maravilhoso de código e bugs que o pessoal enfrenta. Como sempre foram apenas algumas perguntas, se mesmo assim tudo isso não foi suficiente para você e quer mais detalhes do que houve, não se esqueça de conferir a discussão original do Reddit.

Então é isso pessoal, até a próxima!


10 RESPOSTAS
Aronguejo

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

Muito massa, trabalho como programador web e foi legal ver como eles fazem algumas coisas que parecem muito complexas de fora da riot
Privatiza tudo ! Twitter: @_bevilaquaBruno

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

Eu como aspirante a engenheiro de software fiquei beeeeem SEM ENTENDER NADA ahauahauayausys
Mas saber que o league foi feito em C++ e interessante achei que era Java com o eclipse ou o netbeans

''Me mostre á sua força, lute pela sua vida ao contrário ápenas morra..."

Dragão

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

Interessante, os minions são mais relevantes do que parecem muahahahah.

"Alguma vez você já escutou o chamado?"
Kn7 Aronguejo
Aronguejo

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

Eu achei muito bom esse PQC, mesmo não entendendo nada, é incrível que quando você está lendo algo assim você percebe que tem uma parcela de pessoas que tem a mesma dúvida que você, um exemplo foi as coordenadas 0.0.0, eu mesmo já me indaguei por isso. E a habilidade mais difícil de fazer também foi algo que eu fiquei com muita dúvida mas... Ainda bem que foi respondido.
Omae Wa Mou Shindeiru !
(sempre quis ter uma dessas)
Moderador

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo


@Cunha Livre  escreveu:
Muito massa, trabalho como programador web e foi legal ver como eles fazem algumas coisas que parecem muito complexas de fora da riot

SHaushaiushaiusahiu obrigado, achei que saber JS ia me ajudar em algo também, mas fiquei bem perdido nas coisas.

Aronguejo

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

Não entendi nada, até porque sou de biológica e não de tecnologia, mais amei a atenção que a Riot deu.
Tropa

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

Mto daora, como um cara que tá aprendendo programação agora e querendo ser gamedev, ler esse tipo de post sempre da umas boas dicas do que fazer
Failure is a blessing in disguise
Aronguejo

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

Trabalham então com linguagem bem de maquina msm(quase baixo nivel), o famoso "C with Classes" um clássico de fato. Eu realmente preciso criar meus projetos pessoais, minha faculdade ja esta terminando e eu ainda não produzi nada realmente meu, acabei tendo meu tempo mt sugado pelo lolzinho e estágio, agora que ja peguei meu d4 posso focar mais nas minha atividades curriculares.

Arauto

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

E o bug de freeze fps entre 6-10 minutos por um minuto como fica?
"O lance não é quanto tempo você tem, e sim como o usa!"
Highlighted
Tropa

Re: Saiu no Reddit! - PQC - Engenheiros do Jogo

manero