Página 1 de 1

Como funcionam os replays em jogos?

Enviado: Ter Mai 17, 2016 1:15 am
por GabrielXavier
Boa noite, gostaria de saber a teoria de como funcionam os replays de jogos como os do Clash of Clans e do Clash Royale desenvolvidos pela Supercell.

Ambos os jogos são mobile, e são de batalhas multiplayers online, e são gerados replays dessas batalhas.

Sei que o replay não é um arquivo de vídeo pois é possível dar zoom em áreas especificas da tela no Clash of Clans e os replays ficam armazenados nos servidores do jogo e não no dispositivo, se fosse um arquivo de vídeo consumiria muita memoria do aparelho e bastante banda de internet já que são jogos mobile. (Ou será que seriam arquivos de vídeo? :scratch:)
Então eu gostaria de saber (em teoria) como são armazenados e reproduzidos esses replays.

Re: Como funcionam os replays em jogos?

Enviado: Ter Mai 17, 2016 2:08 am
por thyago
 . Nesses casos especificos eu não sei, mas eu utilizo array para salvar posição, sprite, image_angle e qualquer outra informação grafica necessaria, quando o replay estiver rodando o ideal é bloquear os eventos, você pode adicionar um duble para cada objeto e desativar os verdadeiros e muitas outras coisas.
 Aqui um exemplo basico, um exemplo de plataforma e uma camera para você adicionar ao seu jogo, no formato gmrs.
 .Tudo feito no gm 8.0.
https://www.dropbox.com/s/lcml89901rq34 ... y.rar?dl=1

Re: Como funcionam os replays em jogos?

Enviado: Ter Mai 17, 2016 5:42 am
por Ciro
Um método mais "cru" seria você detectar cada ação do personagem e sua respectiva frame, guardá-los numa array e salvar o estado inicial de todos objetos da cena, de forma que a mesma cena seria rejogada durante o replay, só que não recebendo comandos do jogador e sim da array.

Re: Como funcionam os replays em jogos?

Enviado: Ter Mai 17, 2016 7:55 am
por Mr.Rafael
Basicamente, um replay é a gravação de estados de uma mesma cena em vários frames diferentes. Quando executado, o resultado esperado é a reprodução exata do que aconteceu durante o gameplay.

Como o Ciro mencionou, o método mais básico seria você salvar todas as posições de objetos e afins em uma array de objetos. O problema é que na prática isso fica estranho. Se o seu personagem correr demais, por exemplo, no replay vai parecer que ele estava "teleportando" entre os lugares.

Outro meio que você pode fazer é, ao invés das posições, salvar o input que o jogador faz. Um exemplo clássico desse uso é na feature de replays existentes em emuladores, que é frequentemente usado para fazer os tão famosos TASes (Tool-Assisted Speedruns). A ideia é que, se os controles forem pressionados em uma ordem exata de forma consistente, você conseguirá reproduzir o gameplay de alguém diretamente, em qualquer lugar.

Para finalizar, você também pode dar uma olhada no formato *.dem, que é um arquivo usado em jogos da Valve para gravar replays. Você pode, por exemplo, gravar uma partida inteira de CS e depois assistir explorando o mapa ou observando os movimentos de outros jogadores que você não viu. Aqui um link: https://developer.valvesoftware.com/wiki/DEM_Format

Ah, sim: e quanto ao Clash of Clans... bem, eu nunca joguei, mas de certeza eles usam arquivos próprios para isso. O que acontece é que o arquivo é passado para o seu dispositivo via streaming e vai rodando as partes que já foram recebidas. Arquivos de vídeo são um tiro no pé: é mais trabalhoso para o servidor gravar um vídeo inteiro de uma partida que ele sequer está vendo (o servidor só manda e recebe dados, ele não tem nada do jogo carregado internamente) do que simplesmente ir salvando as posições e os inputs dos jogadores. :)

o/

Re: Como funcionam os replays em jogos?

Enviado: Ter Mai 17, 2016 8:26 am
por Ciro
MrRafael escreveu:Outro meio que você pode fazer é, ao invés das posições, salvar o input que o jogador faz. Um exemplo clássico desse uso é na feature de replays existentes em emuladores, que é frequentemente usado para fazer os tão famosos TASes (Tool-Assisted Speedruns). A ideia é que, se os controles forem pressionados em uma ordem exata de forma consistente, você conseguirá reproduzir o gameplay de alguém diretamente, em qualquer lugar.
Foi esse tipo de replay no qual me referi.
Acho que preciso melhorar minhas palavras. E meu sono.

Re: Como funcionam os replays em jogos?

Enviado: Ter Mai 17, 2016 11:15 am
por thyago
 . Na verdade se correr de mais ou não é um teletransporte de qualquer forma, o personagem muda de posição pouco ou muito a cada frame vai ficar a mesma coisa no repla e em tempo real .

Re: Como funcionam os replays em jogos?

Enviado: Ter Mai 17, 2016 1:18 pm
por gabrielsch
thyago escreveu: . Na verdade se correr de mais ou não é um teletransporte de qualquer forma, o personagem muda de posição pouco ou muito a cada frame vai ficar a mesma coisa no repla e em tempo real .
Nesses casos é possível usar a técnica de interpolação entre as posições, para dar suavidade nos movimentos mais drásticos, a própria Source Engine usada no CS:GO e CS:S tem essa funcionalidade que mascara a baixa taxa de atualização das posições dependendo do replay.

Re: Como funcionam os replays em jogos?

Enviado: Ter Mai 24, 2016 8:05 am
por Rodrigo Santiago
Bem, é improvável que seja da forma que vocês suponham. Nesses tipo ÚNICO o replay é dado apenas pela interação do jogador, nenhuma posição é salva, apenas e unicamente o input do jogador.
No clash of Clans - Ele salva onde e quando você enviou uma tropa
No Clash royale - Ele salva onde e quando você pôs uma carta
No demais, todo o resto é calculado normalmente, como se um jogo estivesse ocorrendo. (
Obs .: é uma teoria claro, não tenho acesso ao código fonte do servidor )

Re: Como funcionam os replays em jogos?

Enviado: Qui Jun 16, 2016 11:13 am
por GabrielXavier
@thyago
Baixei sua engine cara vou estudar o funcionamento dela, obrigado pela ajuda cara

@MrRafael
Muito interessante esse arquivo da Valve, gostei bastante, vou dar uma estudada mais a fundo em como ele funciona, e muito obrigado pela explicação

@Rodrigo Santiago
No caso de salvar apenas os inputs do jogador em um jogo como o Clash of Clans, será que replay seria executado sempre como foi realizado na partida real?
Não tem o risco de a ia dos personagens "pensar diferente" alguma vez?

Pelo que entendi o método que menos consome dados e processamento do servidor e pode ser mais eficiente seria salvar apenas os inputs dos jogadores, me corrijam se estiver errado

Obrigado pela ajuda de todos vocês!

Re: Como funcionam os replays em jogos?

Enviado: Qui Jun 16, 2016 3:24 pm
por Rodrigo Santiago
É realmente impossível que a ia haja de forma diferente. Caso tenha alguma coisa "aleatória" então basta salvar a seed inicial :blz: !