Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

I have never seen such a feature before, but it should provide an interesting gameplay opportunity.

So yes, in a multiplayer/real-time environment (imagine FPS), how could I implement a slow motion/bullet time effect?

Something like an illusion for the player that's currently slo-mo'ed. So everybody sees him "real-time", but he sees everything slowed down.

Update

A sidenote: keep in mind that a FPS game has to be balanced in order for it to be fun. So yes, this bullet time feature has to be solid, giving a small advantage to the "player", while not taking away from other players.

Plus, there is a possibility that two players could activate their bullet time at the same time.

Furthermore:

I'm going to implement this in the future no matter what it takes. And, the idea is to build a whole new game engine for all this. If that gives new options, I'm more then interested in hearing the ideas.

Meanwhile, here with my team we're thinking about this too, when our theory will be crafted, I'm going to share it here.

Is this even possible? So, the question on "is this even possible" has been answered, now it's time to find the best solution.

I'm keeping the "answer" until something exceptionally good comes up, like a prototype theory with something close to working pseudo code.

What the physicists and philosophers say:

The links are for you interest, because topics are closed.

http://physics.stackexchange.com/questions/17118/time-traveling-and-time-dilation-within-a-multiplayer-videogame

http://philosophy.stackexchange.com/questions/1704/seeing-everything-in-slow-motion-but-being-real-time

The conditions I thought about when writing the question on physics site (copied):

  1. The player under the effects of slow motion has an advantage to make more precise actions (shooting, movement etc.), due to seeing everything in a much slower pace.
  2. His actions should affect the other players in real-time.
  3. The players looking upon our affected player, do not see any difference, except they can experience the actions he have done (like, player gets shot/affected dodges a rocket).
  4. When the player comes out of this effect, he simply continues in the same pace as usual. (If this is not possible, then I guess he'll have to suffer until the time gets synced back)

References on bullet time (slow motion):

Sadly, most of implementations are single-player only

http://www.gamesradar.com/a-videogame-history-of-bullet-time/

share|improve this question
3  
This was already successfully done in the MMORPG The Matrix Online. You experienced bullet time while fighting with opponents when you went into "Interlock" fighting with them. This was done with both PvE and PvP opponents. Everyone else outside of Interlock saw "real-time speed." Commenting instead of answering because I don't have the expertise or knowledge to explain how they did it, I merely know what occurred from a player standpoint. –  FallenAngelEyes Nov 16 '11 at 14:40
3  
This was also present in F.E.A.R. Combat. In the multiplayer, there was a game mode called SloMoDeathmatch. This is a free game if i remember correctly, so if you want to try it download it and see if there are still a few servers left. –  alextsc Nov 16 '11 at 18:37
3  
I don't think stating that you're waiting for pseudocode is going to help answers. Once the design you want is solidified enough the code should be obvious. –  Tetrad Nov 16 '11 at 20:27
1  
Also, "No matter what it takes" reeks of bad design philosophy. It seems like you should only do that once you have proven out (via prototype or a working example in another game) the method you're planning on using before going forward. –  Tetrad Nov 16 '11 at 20:31
4  
-1 for "I'm keeping the 'answer' until something exceptionally good comes up, like a prototype with something close to working pseudo code." Don't be a jerk. –  Trevor Powell Nov 17 '11 at 9:51
show 4 more comments

13 Answers

up vote 16 down vote accepted

It has been done before. :) Check out the specialists, a half life mod that has two different bullet time powerups.

EDIT to include zzzzbov's info below

The way bullet time worked in "The Specialists" from a gameplay perspective was that the player could get powerups that would give limited amounts of "bullet time". When used, a bubble around the player would have its physics slowed down.

Players far away would move at normal speed, but anything in the bubble (bullets, players, explosions) would slow down. The player that used the power-up would move slightly faster, allowing them to run away or use stunts to dodge bullets.

Anyone else caught in the "bullet-time" bubble still has the advantage of being able to see what's about to happen, but the relative speed difference between a caught player and bullets remains the same, so that the ability to react is practically nonexistent.

share|improve this answer
    
Nice, downloading now to see it! :) –  joltmode Nov 16 '11 at 13:39
    
@Tom IIRC, it's open source, so you should be able to see how they did it. –  Spencer Rathbun Nov 16 '11 at 13:41
    
Hmm, a Google search didn't return any results about source code. (plus the awful lot of information about The Specialists: Source is displayed too). Got a link or something? –  joltmode Nov 16 '11 at 13:48
    
@Tom I'd thought it was on their website, which should be linked in the wikipedia article. If not, they may have taken it down, since they moved over to the HL2 engine a few years ago. You might need to send the devs an email to get access. Of course, I could be washed up too. –  Spencer Rathbun Nov 16 '11 at 13:54
5  
I was going to add the same answer until I found this one. The way bullet time worked in "The Specialists" from a gameplay perspective was that the player could get powerups that would give limited amounts of "bullet time". When used, a bubble around the player would have its physics slowed down. Players far away would move at normal speed, but anything in the bubble (bullets, players, explosions) would slow down. The player that used the power-up would move slightly faster, allowing them to run away or use stunts to dodge bullets. –  zzzzBov Nov 16 '11 at 15:12
show 7 more comments

It would be very awkward. Without even looking at the problem of time dilation, imagine that you're the player who just spent 4 seconds in bullet time, whereas everyone else in the game spent 2 seconds in real time. Since the same time passed for everyone in reality, you'd have to "gain back" those two seconds in-game somehow. So at some point you'd need to "skip" 2 seconds of game time, or spend a bit of time running faster than normal, or something else that would probably make the bullet time kind of a waste.

Plus, there's the whole bit about having to send what you do at at 2 seconds in your time back in time 1 second to everyone else.

share|improve this answer
add comment

I can't think of any game that has bullet time in single player that transitioned it successfully to multiplayer in any meaningful way. There might be a few of them that solved it by speeding up the player using it, but that kind of defeats the point.

Bullet time exists because you want to make the player feel like a badass. You're giving the player a seemingly unfair advantage through simulating higher level perception. The end result of this is that players can aim while doing cool things like jumping out from cover and so forth. If you just sped up the player while they have bullet time enabled then you give them less time to react, which is the opposite of what you want.

In a synchronous multiplayer environment, there really isn't any solution for user-activated "time slows down" that simulates the feeling that comes from using it in a single player environment. If time itself were slowed, then everybody's perception goes up. Especially in a PC game where mouse aiming is generally instantly, everybody would get the benefit of slower moving targets.

Now if you were dead set on this, my suggestion would be to, instead of making it a player-activated feature, make it sort of an encounter "state". Think like a John Woo movie where it's the good guy vs the bad guy and everything seems to slow down as they're shooting at each other. So when an "encounter" starts, turn on slo-mo and you can get some interesting effects. Guys jumping around and stuff ricocheting from missed bullet hits floating in mid air, and all that stuff. Of course, this would only really work for a 1 on 1 game. You wouldn't get the one-sided benefit of the bullet time like in a single player game, but it might be an interesting play experience.

share|improve this answer
1  
It could possibly be extended to more than 1 vs 1 by only slowing down people who could see eachother, then as soon as someone else would see them, slow them down too. That way everyone else is normal speed, until they get into a fight. –  George Duckett Nov 16 '11 at 8:07
    
You could get around the instant aim problem by limiting the turn rate - the real problem is that in a correct system nobody else should be affected by the new frame of reference; the should only see the player in bullet time being sped up. –  Jonathan Dickinson Nov 16 '11 at 10:13
    
Don't slow down everyone. Freeze the other players until the bullet time almost runs out. You want to time it such that when the bullet time ends, the time lines are re-synchronised again. –  Martin Sojka Nov 16 '11 at 14:45
    
This is the only answer so far that covers the relevant point: you're not speeding up or slowing down time. You're slowing down the simulation speed so that players have more time to react and plan out moves which, if done in real-time, would happen to fast to control. To make this work from a gameplay point of view, all players involved (either watching or participating in the action) must be slowed down, and all unrelated players (the ones not nearby to witness the slowdown) will continue on at normal speed. If you don't slow everyone who can see the event down, it will look stupid. –  MrCranky Nov 16 '11 at 15:06
    
The Max Payne video games use "bullet-time" as an in-game ability. Certain of the Star Wars Jedi games (Jedi Knight II for sure) also have "Force Speed", which speeds you up by slowing everyone else down (except another Force Speed user). –  KeithS Nov 16 '11 at 15:23
add comment

F.E.A.R. had bullet time in multiplayer, but it applied to the whole team and it slowed down everyone on the other team.

Bullet time in real-time multiplayer without actually slowing down the others would desynchronize the clients, the slow-motion player would be reacting to events the other players did long ago while they would be reacting to current events.

share|improve this answer
1  
While it is a solution; I don't like it - the only person who should be affected is the player in bullet time - just because satellites observe you as moving slower does not mean you move slower in your own frame of reference. –  Jonathan Dickinson Nov 16 '11 at 9:09
    
Sorry, my previous edit sounded a bit juvenile. 'Real-time bullet time' sounded like a contradiction, though. –  Hamster Nov 17 '11 at 1:49
add comment

No it is not possible. Imagine one player flips to slow motion, what would the other players see? You'd want them to see the bullet time player moving normally but having lightning reflexes, right? But unfortunately everyone playing the game will be playing the game in the same real-time. Therefore the only way of doing it would be to slow the whole game down, getting rid of any advantage it brings as everyone would be in bullet time. Also it would be fairly annoying to have the game slow down all the time when anyone pushed that button.

There are work arounds which would result in players having a similar advantage (one of being able to move faster etc) by for example slowing everyone ELSE down and letting you move normally (then in a replay you could speed them to normal and you'd be reacting fast) but I don't think that's really what you want.

share|improve this answer
    
It's been done before, so to say that it's not possible is a glaring fallacy. –  zzzzBov Nov 16 '11 at 15:13
    
@zzzBov it is literally impossible to implement bullet time in a multiplayer game in its true form. You would have to first slow down the entire game, then slow down the actual time for all the other players in the real world. Just think about it. As a work around you would need to implement some pausing / catch up stuff, but in it's true form it's not possible. –  Asher Einhorn Nov 16 '11 at 16:04
    
You're right, the truest form of bullet time where one user runs at normal speed and another in bullet time is not possible, however OP was after "...[implementing] a slow motion/bullet time effect", which has been done before. –  zzzzBov Nov 16 '11 at 16:18
    
@zzzBov "Something like an illusion for the player that's currently slo-mo'ed. So everybody sees him "real-time", but he sees everything slowed down." Quoted from the original question. He is asking specifically for one user running at normal speed and another another in bullet time. That's almost word for word what he asked for, in fact. –  Trevor Powell Nov 17 '11 at 9:43
add comment

General Thoughts

This is a problem that is best described using general relativity - take for instance the fact that you can see the effects of bullet time by just looking through your telescope at a satellite (the cause of the infamous neutrino travelling faster than light problem) - equations that are solvable exist under these conditions; meaning it's completely possible.

Your game will need to be able to handle separate frames of reference - as far as I know the net effect of this would be ('player' being the person with bullet time active):

  • The people seeing the player would see them move extremely quickly.
  • The player would see people move extremely slowly.
  • The player would be moving into the past/future in reference to everyone else.

Luckily for you this means that a player in bullet time does have an advantage over everyone else; they can't possibly aim at him - however it wouldn't be convincing because the average person would expect to see no discernible difference when observing time dilation.

I strongly recommend you post this on physics (indicate it is a game, but you need real theoretical knowledge) and ask for ideas how you would approximate the effect in a concurrent simulation.

One possible solution I would look at is having the world catch up with the player (as he has moved into the future) by having everyone experience a progressive amount (far less than the actual bullet time) of bullet time depending on far behind (in time) they are. This way you could approximate time differences without actually having to deal with storing past state etc. You would need some way to explain this effect, 'time rebound' or something, because it's not physically correct.

Another idea is to abuse the most basic physics equations (s = d/t), when a player goes into bullet time everything becomes smaller - if you halve the size of everything from his perspective but keep his speed the same according to his original frame of reference, (effectively double it) the equation will still balance. Warp drive sequences in space films use this space dilation to portray the effect - so people are used to seeing it.

Actual Solution

I have given this even further thought. If you look at how the Steamworks network system works (does someone have a link?) the server is constantly ahead in time by a certain amount; and each client knows about the 'next' frame that it needs to interpolate to.

Let's say for instance that the server is 20ms ahead of all the players. When a player enters bullet time change his update interval to 40ms (his simulation will run at 40ms time-steps and the server will queue his actions 40ms into the future) - which will basically push into the future in reference to other players: in addition to making him move faster from their reference and making them move slower from his. Once he leaves bullet time give everyone else a 5ms advantage over him so that they can play 'catch up' (this is your time rebound, coincidentally smart players will bullet time during these catch-up periods). It might look a little better if you map a parabola to his time step - this will make things slow down, stop and then gradually speed up again.

Disclaimer: I am no physicist, but I do have a workable knowledge of relativity.

share|improve this answer
2  
@downvoter I would really appreciate some feedback about why you downvoted this. –  Jonathan Dickinson Nov 16 '11 at 18:14
add comment

Just slow everyone else down execpt the player experiancing bullet time. You could do this by just decreasing their mouse sensitivty.

share|improve this answer
    
And how would this translate to "balanced gameplay"? :D –  joltmode Nov 16 '11 at 14:56
    
It is balanced, instead of the player speeding up, the surrounding world slows down. The player would have the same advantage if he speeded up, but this way is more plausable. –  Deza Nov 16 '11 at 14:57
add comment

Not really bullet time, but could be fun:

What about something similar to the way Braid does the time-slowing down thing? I.e. the closer to the person who is experiencing the bullet time, the slower things go... and if you're outside of the sphere of influence, time flows normally.

... for example, if Player A goes bullet time, it puts up a gradated sphere of "slow time" around him so he can aim properly, but not necessarily move around any faster - then Player B firing bullets at him would have to over-predict where the bullet will hit, as it will slow down the closer it gets to him.

Although, the more I think about this, the less I think it would work, because it could just make Player A an easy target (as his head would slow down?) - but it would be interesting to see it in 3D anyway.

share|improve this answer
1  
Interesting indeed, but if the bullets slow down the closer they get to the player, he should be able to dodge 'em. –  joltmode Nov 16 '11 at 15:42
    
Yes, but as in Braid, the player himself slows down too - i.e. the players turning speed could still be fast, so blocking, or shields would be easier to deploy to avoid bullets, but the actual movement of flying through the air to get out of the way of bullets would be slower... –  Seb Nov 25 '11 at 11:33
add comment

Let's say we have player A in bullet time and player B in real time. And they do the following from player B's point of view:

  • Time 0s - Player A activated bullet time
  • Time 2s - Player A shoots at player B
  • Time 3s - Player B shoots at player A

Now from player A's point of view this will take twice as long - since the world is moving slower for him:

  • Time 0s - Player A activated bullet time
  • Time 4s - Player A shoots at player B
  • Time 6s - Player B shoots at player A

Finally the server has the following events coming into it:

  • Time 0s - Player A activates bullet time
  • Time 3s - Player B shoots at player A (B initiates this action so it follows his timeline)
  • Time 4s - Player A shoots at player B (A initiates this action)

So, we have two initial problems. The first is that A is now 3 seconds of game time behind everyone else. This could be an interesting game mechanic if you had a concept that meant he had to pay this debt back. Imagine a cover based shooter where you can activate bullet time to break across open ground, but once you are safely under cover you have to stand still until the rest of the world catches up with you (the three seconds of time that you missed is replayed)

The second problem is much larger. The server needs to reorganise the events chronologically for each player and figure out the outcome. Firstly B shoots at A - this happens three seconds into the game, and A sees it at 6 seconds - no problem so far. At 4 seconds player A shoots at B. In B's timeline this happened two seconds ago. So what do we do with the two seconds of gameplay that has already passed for him including his shot at A?

We could nullify it - basically say "I know player B thinks he shot that guy, but it turns out he was already dead so let's pretend that never happened" This would be a crappy experience, very similar to lag, but would solve the problem.

We could make both timelines gospel - use the servers point of view as the whole truth and worry about each persons timeline independently. At 3 seconds B shots at A and kills him. At 4 seconds A shoots at B and kills him. Both players die from shots that they didn't see. Doesn't sound good, but maybe there is a good way of doing this after giving all the players a brief course in the crazy world of relativity.

We could have a pseudo-realtime system - a turn based game where you plan your moves first and then trigger a simultaneous calculation of events. A good solution that fixes all the problems other than it not being the type of game that you want to write.

Long story short I don't think there is a good way to implement bullet time treating it in the classical sense the effect being on the person using it - they move faster, they see the world as slower, everyone else carries on as normal. If we reverse it and everyone else gets thrust into the bullet-timer's point of view and see themselves as moving slower and their controls become sluggish then it all happens in sync and there are no problems. But is that really bullet time? While it might look like it to an outside observer (and in match replays) neither of the participants would get the effect they expect.

share|improve this answer
add comment

Throw mini quick time-like events at the player to dodge bullets or auto-track enemy targets, while making your player's movements look blurry or "phased" to the other players (so they don't scratch their heads as to why their bullets aren't hitting). That seems like the simplest, most practical translation you could make for multiplayer.

Any other solution involves some physical element of the game being changed for one or more players that doesn't apply parallel for the others, I would imagine.

share|improve this answer
add comment

I wanted to add my $0.02, as I implemented a prototype bullet-time mode that worked in multiplayer games for Heroes Over Europe.

In single-player, a button press at the right moment would slow down time, and zoom in on your intended target. I didn't want to slow time down globally in multiplayer to replicate the feature (as the game was to support 16 simultaneous players!), so I used a "bubble" method.

Specifically, when bullet-time mode was triggered, a sphere was created around the target airplane. The rate of passage of time changed depending the distance to the sphere's centre; time degraded linearly from its surface to a minimum value somewhere near the centre. The rate also changed as a function of how long the sphere had existed, and how long the sphere had left before it "evaporated".

This was synchronised across machines by sending a packet which defined a future start time for the bubble; this allowed the effect to stay in sync in spite of latency. (Similarly, when the effect was to end early, a packet would declare the future time at which it was to end.)

The rate of passage of time was always functionally defined: given a sphere's definition, the current time and a position, it was possible to determine how fast time was flowing.

To make the effect work, several game systems had to be adapted to this "functional" definition of time. Airplanes, bullets, missiles and other effects each used an individual dt that was worked out by calling the appropriate function. Most of the work in getting the prototype working was spent here.

The result worked reasonably well: a player targeted by bullet-time would noticeably slow down, and have a (small) chance to manoeuvre their way out of their aggressor's cross-hairs and away from a hail of slow-motion bullets. Nearby players could see planes and bullets dodging one another in slow motion, but were otherwise unaffected.

Note that the triggering player was also slowed, but wasn't strictly disadvantaged by it: they had a zoomed-in view of their target and could affect one-shot kills on their prey. Another player could attempt to kill you (or kill steal!) in this state, but their plane (and their bullets) would be affected when entering the bubble, giving you time to escape.

Unfortunately, while it worked, we never had time to complete and polish the feature for multiplayer, so it was dropped. (Single player still kept the feature, as "Ace Kill".)

share|improve this answer
add comment

Perhaps you should arrange the equipment necessary to shoot the player at the PC who triggered bullet-time into space at near light-speed velocities.

This would solve all of your problems but may generate higher ping/latency.

share|improve this answer
add comment

I know this is an old question but I had a hard time not mentioning the issue with most of the answers dealing with relativity

Implemented with the effects as described in the question, bullet time in multiplayer is not possible.

The reason for with is how relativity works; some of you here have mentioned it and obviously understand relativity, but the issue is that your models are set up incorrectly.

Many people have used "Player A's reference vs Player B's" in your answers but sadly neither of those things really exist. Yes you have players, maybe even many of them, and yes they can control and interact with their world and have their own perspective of the game, but perspective is not a point of reference in time: it's just an X Y Z space projected into the X Y plane.

There is only a single point of reference of time and that is the server (or host). There is only one view of the physical state of the world and therefore only one reference point. What players see on their screen are different graphical views of the same physical simulation.

To have one player view a simulation run at one speed and another view the same simulation at another speed and not have a desync just isn't possible. Somewhere, something has to give.

Any effort to have multiple simulations or have the server run ahead of the clients just doesn't make sense. The effect as described in the post just can't be done without either forcing the single reference point or letting thinks become desynced and telling players that their actions didn't really happen after the fact.

I think the best solution is similar to one already given which is to have a braid like effect where your speed is changed in a bubble around the player. That being said, the player would not slow down and the bubble would always be positioned and moved with him at the centre. This makes it so that the player moves at full speed while those closest to him feel slowed down. He gets his power up advantage and people far from that area don't feel effect. Those who are close are slowed down but it would be obvious that somebody is using the power up (I would suggest highlighting the player somehow who is using it so that opposing players fully understand what is happening and why).

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.