Eu nunca vi esse recurso antes, mas deve oferecer uma oportunidade interessante de jogo.
Então, sim, em um ambiente multiplayer / em tempo real (imagine FPS), como eu poderia implementar um efeito de câmera lenta / tempo de bala?
Algo como uma ilusão para o jogador que está atualmente slo-mo'ed. Então todo mundo o vê "em tempo real", mas ele vê tudo mais lento.
Atualizar
Uma nota lateral: lembre-se de que um jogo FPS precisa ser equilibrado para que seja divertido. Então, sim, esse recurso de tempo de bala deve ser sólido, dando uma pequena vantagem ao "jogador", sem afastar outros jogadores.
Além disso, existe a possibilidade de dois jogadores poderem ativar seu tempo de bala ao mesmo tempo.
Além disso:
Vou implementar isso no futuro, não importa o que for preciso. E a idéia é construir um novo mecanismo de jogo para tudo isso. Se isso oferece novas opções, estou mais interessado em ouvir as idéias.
Enquanto isso, aqui com minha equipe, estamos pensando nisso também, quando nossa teoria for criada, vou compartilhar aqui.
Isso é possível? Portanto, a pergunta "isso é possível" foi respondida, agora é hora de encontrar a melhor solução.
Mantenho a "resposta" até que algo excepcionalmente bom apareça, como uma teoria de protótipo com algo próximo do pseudo-código em funcionamento.
O que dizem os físicos e filósofos:
Os links são do seu interesse, porque os tópicos estão fechados.
As condições em que pensei ao escrever a pergunta no site de física (copiado):
- O jogador sob os efeitos de câmera lenta tem a vantagem de realizar ações mais precisas (tiro, movimento etc.), devido a ver tudo em um ritmo muito mais lento.
- Suas ações devem afetar os outros jogadores em tempo real.
- Os jogadores que olham para o nosso jogador afetado não vêem diferença, exceto que podem experimentar as ações que ele realizou (como, por exemplo, o jogador leva um tiro / é afetado por um foguete).
- Quando o jogador sai desse efeito, ele simplesmente continua no mesmo ritmo de sempre. (Se isso não for possível, acho que ele terá que sofrer até que o tempo seja sincronizado de volta)
Referências sobre o tempo do marcador (câmera lenta):
Infelizmente, a maioria das implementações é apenas para um jogador
http://www.gamesradar.com/a-videogame-history-of-bullet-time/
fonte
Respostas:
Já foi feito antes. :) Confira os especialistas , um mod de meia-vida que tem dois upgrades de tempo de bala diferentes.
EDITAR para incluir as informações de zzzzbov abaixo
A maneira como o tempo de bala funcionava em "The Specialists" da perspectiva do jogo era que o jogador podia receber powerups que dariam quantidades limitadas de "tempo de bala". Quando usada, uma bolha ao redor do jogador diminui sua física.
Jogadores distantes se moveriam na velocidade normal, mas qualquer coisa na bolha (balas, jogadores, explosões) diminuiria a velocidade. O jogador que usava o power-up se movia um pouco mais rápido, permitindo que fugissem ou usassem acrobacias para desviar de balas.
Qualquer outra pessoa presa na bolha do tempo de bala ainda tem a vantagem de poder ver o que está para acontecer, mas a diferença de velocidade relativa entre um jogador pego e balas permanece a mesma, de modo que a capacidade de reagir é praticamente inexistente.
fonte
Não consigo pensar em nenhum jogo que tenha um tempo de bala no modo single player que o tenha transposto com sucesso para o multiplayer de maneira significativa. Pode haver alguns deles que o resolveram acelerando o uso do jogador, mas isso acaba com o ponto.
Existe um tempo de bala porque você quer fazer o jogador se sentir mal. Você está dando ao jogador uma vantagem aparentemente injusta ao simular uma percepção de nível superior. O resultado final disso é que os jogadores podem mirar enquanto fazem coisas legais, como pular da cobertura e assim por diante. Se você apenas acelerou o jogador enquanto o tempo de bala estava ativado, você oferece menos tempo para reagir, o que é o oposto do que você deseja.
Em um ambiente multiplayer síncrono, não há realmente nenhuma solução para o "tempo mais lento" ativado pelo usuário que simula a sensação resultante de usá-lo em um ambiente para um jogador. Se o tempo em si diminuiu, a percepção de todos aumenta. Especialmente em um jogo para PC em que a mira do mouse é geralmente instantânea, todo mundo se beneficiaria de alvos em movimento mais lento.
Agora, se você estivesse decidido a isso, minha sugestão seria, em vez de torná-lo um recurso ativado por jogador, torná-lo uma espécie de "estado" de encontro. Pense como um filme de John Woo, em que ele é o mocinho versus o bandido e tudo parece diminuir quando eles estão filmando um ao outro. Portanto, quando um "encontro" começar, ative o slo-mo e você poderá obter alguns efeitos interessantes. Caras pulando e coisas ricocheteando de tiros de balas perdidos flutuando no ar, e tudo isso. Obviamente, isso realmente funcionaria apenas para um jogo 1 contra 1. Você não obteria o benefício unilateral do tempo de bala como em um jogo para um jogador, mas pode ser uma experiência de jogo interessante.
fonte
Pensamentos Gerais
Esse é um problema que é melhor descrito usando a relatividade geral - considere, por exemplo, o fato de que você pode ver os efeitos do tempo da bala apenas olhando através do seu telescópio para um satélite (a causa do infame neutrino viajando mais rápido que o problema da luz) - equações que são solucionáveis existem nessas condições; o que significa que é completamente possível.
Seu jogo precisará ser capaz de lidar com quadros de referência separados - até onde eu sei, o efeito líquido disso seria ('jogador' sendo a pessoa com tempo de bala ativo):
Felizmente para você, isso significa que um jogador em tempo de bala tem uma vantagem sobre todos os outros; eles não podem apontar para ele - no entanto, não seria convincente porque a pessoa comum esperaria não ver diferença discernível ao observar a dilatação do tempo.
Eu recomendo fortemente que você publique isso na física (indique que é um jogo, mas você precisa de conhecimento teórico real) e peça idéias sobre como você aproximaria o efeito em uma simulação simultânea.
Uma solução possível que eu consideraria é ter o mundo em dia com o jogador (como ele se mudou para o futuro), fazendo com que todos experimentem uma quantidade progressiva (muito menor que o tempo real da bala) de tempo da bala, dependendo de muito atrasado (em tempo) eles são. Dessa forma, você pode aproximar as diferenças de tempo sem precisar lidar com o armazenamento do estado passado, etc. Você precisaria de alguma maneira de explicar esse efeito, 'recuperação do tempo' ou algo assim, porque não é fisicamente correto.
Outra idéia é abusar das equações mais básicas da física (
s = d/t
), quando um jogador entra em uma bala, tudo fica menor - se você reduzir pela metade o tamanho de tudo da perspectiva dele, mas manter a velocidade igual à de acordo com o quadro de referência original (efetivamente dobrar) a equação ainda será equilibrada. As seqüências de distorção no filme espacial usam essa dilatação espacial para retratar o efeito - então as pessoas estão acostumadas a vê-lo.Solução real
Eu pensei nisso ainda mais. Se você observar como o sistema de rede Steamworks funciona ( alguém tem um link? ), O servidor está constantemente adiantado em uma certa quantidade; e cada cliente conhece o quadro 'próximo' ao qual ele precisa interpolar.
Digamos, por exemplo, que o servidor esteja 20ms à frente de todos os jogadores. Quando um jogador entra em tempo de bala, altere seu intervalo de atualização para 40ms (sua simulação será executada em intervalos de 40ms e o servidor enfileirará suas ações em 40ms no futuro) - o que basicamente fará avançar no futuro em referência a outros jogadores: além disso para fazê-lo se mover mais rápido a partir da referência deles e fazê-los se mover mais devagar do dele. Uma vez que ele deixe o tempo de bala, dê a todos os outros uma vantagem de 5ms sobre ele, para que eles possam jogar 'recuperar o atraso' (este é o seu
time rebound
, coincidentemente jogadores inteligentes acertarão o tempo durante esses períodos de recuperação). Pode parecer um pouco melhor se você mapear uma parábola para a etapa de seu tempo - isso fará com que as coisas diminuam a velocidade, parem e depois acelere gradualmente novamente.Disclaimer: Eu não sou físico, mas tenho um conhecimento prático da relatividade.
fonte
Queria adicionar meus US $ 0,02, ao implementar um protótipo do modo bullet-time que funcionava em jogos multiplayer para Heroes Over Europe .
No modo single-player, pressionar o botão no momento certo reduziria o tempo e aumentaria o zoom no alvo pretendido. Eu não queria diminuir o tempo globalmente no modo multiplayer para replicar o recurso (como o jogo suportava 16 jogadores simultâneos!), Então usei um método de "bolha".
Especificamente, quando o modo de tempo de bala foi acionado, uma esfera foi criada ao redor do avião de destino. A taxa de passagem do tempo mudou dependendo da distância do centro da esfera; o tempo diminuiu linearmente de sua superfície para um valor mínimo em algum lugar próximo ao centro. A taxa também mudou em função de quanto tempo a esfera existia e quanto tempo havia deixado antes que "evaporasse".
Isso foi sincronizado entre as máquinas, enviando um pacote que definiu uma hora de início futura para a bolha; isso permitiu que o efeito permanecesse sincronizado, apesar da latência. (Da mesma forma, quando o efeito deveria terminar mais cedo, um pacote declararia o horário futuro em que deveria terminar).
A taxa de passagem do tempo sempre foi definida funcionalmente: dada a definição de uma esfera, o tempo atual e uma posição, foi possível determinar com que rapidez o tempo estava fluindo.
Para fazer o efeito funcionar, vários sistemas de jogo tiveram que ser adaptados a essa definição "funcional" de tempo. Aviões, balas, mísseis e outros efeitos usaram um indivíduo
dt
que foi treinado chamando a função apropriada. A maior parte do trabalho para fazer o protótipo funcionar foi gasta aqui.O resultado funcionou razoavelmente bem: um jogador visado pelo tempo de bala diminuiria visivelmente e teria uma (pequena) chance de sair da mira do agressor e se afastar de uma bala em câmera lenta. Jogadores próximos podiam ver aviões e balas se esquivando em câmera lenta, mas não eram afetados.
Observe que o jogador que desencadeou também foi desacelerado, mas não foi estritamente prejudicado por ele: eles tinham uma visão ampliada de seu alvo e podiam afetar mortes de um tiro em suas presas. Outro jogador poderia tentar matá-lo (ou roubar!) Nesse estado, mas o avião (e as balas) seria afetado ao entrar na bolha, dando-lhe tempo para escapar.
Infelizmente, enquanto funcionava, nunca tivemos tempo de concluir e aperfeiçoar o recurso para multiplayer, então ele foi descartado. (Um jogador ainda manteve o recurso, como "Ace Kill".)
fonte
Não é realmente o tempo de bala, mas pode ser divertido:
Que tal algo semelhante à maneira como Braid faz a coisa que desacelera o tempo? Ou seja, quanto mais perto da pessoa que está enfrentando o tempo da bala, as coisas ficam mais lentas ... e se você estiver fora da esfera de influência, o tempo flui normalmente.
... por exemplo, se o Jogador A passar o tempo em balas, ele coloca uma esfera graduada de "tempo lento" ao seu redor para que ele possa mirar corretamente, mas não necessariamente se mover mais rápido - então o Jogador B disparando balas nele teria que prever demais onde a bala atingirá, pois diminuirá a velocidade mais perto dele.
Embora, quanto mais eu penso sobre isso, menos eu acho que funcionaria, porque poderia fazer do Jogador A um alvo fácil (pois sua cabeça diminuiria?) - mas seria interessante vê-lo em 3D de qualquer maneira.
fonte
Sei que essa é uma pergunta antiga, mas tive dificuldade em não mencionar o problema com a maioria das respostas relacionadas à relatividade
Implementado com os efeitos descritos na pergunta, o tempo de bala no multiplayer não é possível.
A razão para com é como a relatividade funciona; alguns de vocês aqui mencionaram e obviamente entendem a relatividade, mas o problema é que seus modelos estão configurados incorretamente.
Muitas pessoas usaram "a referência do jogador A versus o jogador B" em suas respostas, mas, infelizmente, nenhuma dessas coisas realmente existe. Sim, você tem jogadores, talvez até muitos deles, e sim, eles podem controlar e interagir com seu mundo e ter sua própria perspectiva do jogo, mas a perspectiva não é um ponto de referência no tempo: é apenas um espaço XYZ projetado no XY avião.
Há apenas um único ponto de referência de tempo e esse é o servidor (ou host). Existe apenas uma visão do estado físico do mundo e, portanto, apenas um ponto de referência. O que os jogadores veem na tela são diferentes visualizações gráficas da mesma simulação física.
Ter um jogador visualizando uma simulação em uma velocidade e outro visualizando a mesma simulação em outra velocidade e não ter uma dessincronização simplesmente não é possível. Em algum lugar, algo tem que dar.
Qualquer esforço para ter várias simulações ou fazer o servidor correr à frente dos clientes simplesmente não faz sentido. O efeito descrito no post simplesmente não pode ser feito sem forçar o ponto de referência único ou deixar as idéias se tornarem dessincronizadas e dizer aos jogadores que suas ações realmente não aconteceram após o fato.
Eu acho que a melhor solução é semelhante a uma já fornecida, que é ter um efeito de trança, onde sua velocidade é alterada em uma bolha ao redor do jogador. Dito isto, o jogador não diminuiu a velocidade e a bolha sempre seria posicionada e movida com ele no centro. Isso faz com que o jogador se mova a toda velocidade, enquanto os mais próximos dele se sentem mais lentos. Ele obtém vantagem de poder e as pessoas distantes dessa área não sentem efeito. Aqueles que estão próximos são mais lentos, mas seria óbvio que alguém está usando a energia (eu sugeriria destacar o jogador de alguma forma quem o está usando, para que os jogadores opostos compreendam completamente o que está acontecendo e por quê).
fonte
Seria muito estranho. Sem sequer olhar para o problema da dilatação do tempo, imagine que você é o jogador que passou apenas 4 segundos em tempo de bala, enquanto todos os outros jogadores passaram 2 segundos em tempo real. Como o mesmo tempo passou para todos na realidade, você teria que "recuperar" esses dois segundos no jogo de alguma forma. Então, em algum momento, você precisará "pular" 2 segundos do tempo do jogo, ou gastar um pouco de tempo correndo mais rápido que o normal, ou qualquer outra coisa que provavelmente faria com que o tempo da bala fosse um desperdício.
Além disso, é preciso enviar o que você faz em 2 segundos no seu tempo de volta no tempo 1 segundo para todos os outros.
fonte
Lance mini eventos rápidos e parecidos com o tempo no jogador para desviar de balas ou rastrear automaticamente alvos inimigos, enquanto faz com que os movimentos do jogador pareçam embaçados ou "faseados" para os outros jogadores (para que eles não arranhem a cabeça sobre o motivo de suas balas não serem Não estou batendo). Essa parece ser a tradução mais simples e prática que você pode fazer para o multiplayer.
Qualquer outra solução envolve a alteração de algum elemento físico do jogo para um ou mais jogadores que não se aplica paralelamente aos outros, eu imagino.
fonte
Apenas reduza a velocidade de todos os demais, executando o tempo de bala do jogador. Você pode fazer isso apenas diminuindo a sensibilidade do mouse.
fonte
Digamos que temos o jogador A em tempo de bala e o jogador B em tempo real. E eles fazem o seguinte do ponto de vista do jogador B:
Agora, do ponto de vista do jogador A, isso levará o dobro do tempo - já que o mundo está se movendo mais devagar para ele:
Finalmente, o servidor tem os seguintes eventos:
Então, nós temos dois problemas iniciais. A primeira é que A está agora com 3 segundos de tempo de jogo atrás de todos os outros. Isso poderia ser uma mecânica de jogo interessante se você tivesse um conceito que significasse que ele teria que pagar essa dívida de volta. Imagine um jogo de tiro com cobertura onde você pode ativar o tempo da bala para romper o campo aberto, mas quando estiver em segurança, precisará ficar parado até o resto do mundo o alcançar (os três segundos que você perdeu são repetidos )
O segundo problema é muito maior. O servidor precisa reorganizar os eventos cronologicamente para cada jogador e descobrir o resultado. Primeiramente, B atira em A - isso acontece três segundos no jogo e A vê em 6 segundos - não há problema até agora. Aos 4 segundos, o jogador A atira na linha do tempo de B. In B, isso aconteceu dois segundos atrás. Então, o que fazemos com os dois segundos de jogo que já passaram por ele, incluindo sua chance de A?
Poderíamos anulá-lo - basicamente dizer "Eu sei que o jogador B acha que ele atirou naquele cara, mas acontece que ele já estava morto, então vamos fingir que nunca aconteceu" Isso seria uma experiência ruim, muito semelhante ao atraso, mas resolveria o problema .
Poderíamos tornar as duas linhas do tempo evangélicas - usar o ponto de vista dos servidores como toda a verdade e nos preocupar com a linha do tempo de cada pessoa independentemente. Aos 3 segundos, B atira em A e o mata. Aos 4 segundos, A atira em B e o mata. Ambos os jogadores morrem de tiros que não viram. Não parece bom, mas talvez haja uma boa maneira de fazer isso depois de dar a todos os jogadores um breve curso no mundo louco da relatividade.
Poderíamos ter um sistema pseudo-em tempo real - um jogo baseado em turnos em que você planeja seus movimentos primeiro e depois aciona um cálculo simultâneo de eventos. Uma boa solução que resolve todos os problemas, além de não ser o tipo de jogo que você deseja escrever.
Longa história curta eu não acho que há uma boa maneira de implementar bullet time tratá-la no sentido clássico sendo o efeito sobre a pessoa a usá-lo - eles se movem mais rapidamente, eles vêem o mundo como mais lento, todo mundo continua como normal. Se o revertermos e todos os outros forem empurrados para o ponto de vista do cronômetro e se virarem mais devagar e seus controles se tornarem lentos, tudo acontece em sincronia e não há problemas. Mas isso é realmente tempo de bala? Embora possa parecer para um observador externo (e em replays de partidas), nenhum dos participantes terá o efeito que espera.
fonte
Não, não é possível. Imagine um jogador virar para câmera lenta, o que os outros jogadores verão? Você gostaria que eles vissem o jogador do tempo da bala se movendo normalmente, mas com reflexos de raios, certo? Mas, infelizmente, todos os que jogam o jogo estarão jogando no mesmo tempo real. Portanto, a única maneira de fazer isso seria desacelerar o jogo inteiro, se livrando de qualquer vantagem que ele traga, como todos estariam em tempo de bala. Também seria bastante irritante ter o jogo lento o tempo todo quando alguém apertasse esse botão.
Existem soluções alternativas que resultariam em jogadores com uma vantagem semelhante (uma de poder se mover mais rápido etc.), por exemplo, diminuindo a velocidade de todos os outros e deixando você se mover normalmente (então, em um replay, você poderia colocá-los na velocidade normal e você estar reagindo rápido), mas não acho que seja isso que você realmente deseja.
fonte
O FEAR teve tempo de bala no modo multiplayer, mas foi aplicado a todo o time e diminuiu a velocidade de todos no outro time.
O tempo de bala no modo multiplayer em tempo real, sem desacelerar os outros, dessincronizaria os clientes, o jogador em câmera lenta reagiria aos eventos que os outros jogadores faziam há muito tempo enquanto reagiria aos eventos atuais.
fonte
Talvez você deva providenciar o equipamento necessário para atirar no jogador no PC que disparou o tempo da bala no espaço a velocidades próximas à velocidade da luz.
Isso resolveria todos os seus problemas, mas pode gerar ping / latência mais alta.
fonte
bem, não seria um problema se todos eles se movessem mais devagar do que o habitual, mas não muito devagar, e quem o ativasse poderia se mover mais rápido, como submergir o jogo inteiro debaixo d'água ou levá-lo ao espaço sideral com aquele que ativava o movimento tão pacificamente como sempre
fonte