Game Development Community

Network water missing on client

by CdnGater · in Torque Game Engine Advanced · 07/02/2008 (12:33 pm) · 3 replies

I have found an issue and am not sure how to fix it yet.

I take the stock tgea 1.7.1.

I start one instance the Stronghold demo and enable multiplayer when creating the server.
I start another instance of the Stronghold demo and join the first one as a client.

The water shows up on the server/client but does NOT show up on the stand alone client.

Has anyone ran across this before?

I have put console messages in the rendering loops and I DO see the messages, I am thinking its a shader issue, but have not found it yet.

Thanks.

EDIT:

I have found that the Client NetConnection::HandleConnectionMessage in netGost.cpp is not receiving the message ReadyForNormalGhosts yet the Server NetConnection::HandleConnectionMessage does. This is what is suppose to trigger the creating of the vertex buffer on the client. With the vertex buffer missing, the water is missing.

#1
08/16/2008 (8:21 am)
Ive noticed the same thing, if you run down into where the water is suppose to be it makes it look like your in the water. I haven't worked on it yet but did notice it.
#2
08/16/2008 (7:45 pm)
I also see this happening. I made a change which appears to fix it but I haven't thoroughly tested it to see if anything else is effected by this change.

What I did was, in sim\netGhost.cpp is in void NetConnection::handleConnectionMessage(U32 message, U32 sequence, U32 ghostCount) move NetConnection::smGhostAlwaysDone.trigger(); from
[b]case ReadyForNormalGhosts:[/b]
         if(sequence != mGhostingSequence)
            return;
         Con::executef(this, "onGhostAlwaysObjectsReceived");
         Con::printf("Ghost Always objects received.");
         [b]NetConnection::smGhostAlwaysDone.trigger();[/b]
         mGhosting = true;
         for(i = 0; i < mGhostFreeIndex; i++)
         {
            if(mGhostArray[i]->flags & GhostInfo::ScopedEvent)
               mGhostArray[i]->flags &= ~(GhostInfo::Ghosting | GhostInfo::ScopedEvent);
         }
         break;

to

[b]case GhostAlwaysDone:[/b]
         mGhostingSequence = sequence;
         // ok, all the ghost always objects are now on the client... but!
         // it's possible that there were some file load errors...
         // if so, we need to indicate to the server to restart ghosting, after
         // we download all the files...
         sv.ghost = NULL;
         mGhostAlwaysSaveList.push_back(sv);
         if(mGhostAlwaysSaveList.size() == 1)
            loadNextGhostAlwaysObject(true);

         [b]NetConnection::smGhostAlwaysDone.trigger();[/b]
         break;
#3
08/20/2008 (6:41 am)
My "fix" above apparently did have some negative consequences. While water re-appeared in a dedicated client / server environment, groundCover failed to work.

I restored the NetConnection::smGhostAlwaysDone.trigger(); line back to the ReadyForNormalGhosts case and also put it into the GhostAlwaysDone case (as I demonstrated above) and everything works from what I can see.