On Feb 10, 2008 9:34 AM, Sandra et Yannig <[EMAIL PROTECTED]> wrote:
> Le Sunday 10 February 2008 00:08:06 RCL, vous avez écrit :
>
> > On Feb 9, 2008 7:09 PM, Sandra et Yannig <[EMAIL PROTECTED]> wrote:
> > > Le Saturday 09 February 2008 13:13:00 Kurosu, vous avez écrit :
> > > > Hi,
> > > >
> > > > in RandomSync::Init(), a first seed is set, then if the computer is a
> > > > server, another one is generated and sent to the clients.
> > > >
> > > > Network works, so there's probably more to it than just this. Could
> > > > some senior (or knowledgeable) wormux developper explain me why (and
> > > > possibly add a comment in the code to make sense of this)?
> > >
> > > As far as I know, gentildemon as work on this part but he tells me that
> > > we don't need to store an array of random values synced up with the
> > > server. You
> > > just need a initial seed, next value are provided using a very simple
> > > function (in network/randomsync.cpp) :
> > >
> > > ....
> > > /* RAND_MAX assumed to be 32767 */
> > > static inline uint wormux_rand(void)
> > > {
> > >  next = next * 1103515245 + 12345;
> > >  return((uint)(next/65536) % 32768);
> > > }
> > > ....
> > >
> > > So, you just need to send the initial seed, next value are available
> > > using this function.
> > >
> > >
> > >
> > >
> > >
> > >
> > > To keep everybody sync, you send the original seed and you don't have to
> > > send
> > > a complete array.
> >
> > That is only true if the function is called the same number of times on
> > each client machine.
> >
> > Right now, I used randomSync for making camera shake, and that means, that
> > every client will make different number of calls depending on its FPS.
>
> I have to say, It's not the good way to achieve this ...
>
> Wormux use 2 number generators : random sync and random (aka without sync).
> And we use them for different things :
> - things that need to be sync (weapon interaction against ground, character
> position, wind direction and strength etc)
> - things that don't need it (every thing else like wind particles, camera
> shake ;) ).
>
> So, a camera shake is obvously falling in the 2nd type.

Yes, I felt that I'm doing something wrong, because it shouldn't stay
in sync, but because of my internal laziness I failed to search for
more suitable random function :>

But my guilty conscience made me warn you about that here on the list :)

> >
> > It is probably not the only case where number of randomSync calls can
> > differ, depending on client's performance... I guess that there can be (or
> > might be) weapons calling randomSync() on each update, and that means that
> > someone who plays with 50fps will get two times more random values than
> > someone who plays with 25 fps...
> >
>
> About our internal physical engine, we are not limited about the FPS. the
> physical engine is working at a fixed rate of 50 Hz. To see how we achieve
> this, take a look at game/game.cpp in void Game::MainLoop() method.
>
> In every Refresh methods, we don't use a direct access to the computer timer
> but our own value that we try to keep as close as possible to the real
> computer clock.
>
> To get an idea of the ratio of processing between all Refresh methods
> (RefreshClock(), RefreshInput(), RefreshObject() and world.Refresh()) and
> CallDraw() (which is drawing everything on screen), CallDraw is something
> like almost 10 times CPU consuming compare to Refresh* (we can call it
> physical engine).
>
> But to be honest, I cannot say that there's no place where we don't call more
> often randomsync on the client or server side.
>

Thanks for clearing how the game engine works. Does it mean that if
someone's computer is weak enough not to be able to update physics 50
times a second, the network play for him/her won't be possible?

Could you tell me more about the logic of network play? Am I right
that it's just relying on the fact that both parties run the same code
and syncronizes only occasional data like random seed and player's
initial positions?

I haven't noticed traditional quake-like separation into "server" and
"client" code (even when running singleplayer) with server entities
being just "replayed" on each client (including local one). Or am I
wrong?

 > Is it somehow accounted for?
> >
> > Best regards,
> > RCL
>
>
> Regards,
>
> Yannig
>

Best regards,
Dmitry 'RCL' Rekman

_______________________________________________
Wormux-dev mailing list
Wormux-dev@gna.org
https://mail.gna.org/listinfo/wormux-dev

Répondre à