--
[ Picked text/plain from multipart/alternative ]
Thanks for bringing this function to my attention, I was able to add another
origin point to the PVS system however i still get some minor flickers. I'd
still like to find a way to enter individual entities into the list of
displayed entities, clientside if possible, since theres no possible
cheating that can be done by displaying the entity I want.
On 11/29/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
> What you need to do is merge the PVS/PAS of the bot and the
> player. SetupVisibility() is where the server DLL can set the PVS to be
> used in AddToFullPack(). The default implementation just asks the engine to
> calculate the PVS for the current view entitity. You could ask the engine
> to calculate the PVS for two viewpoints, but if the engine's implementation
> of SV_SetFatPVS() is the same as Quake's then this won't work: the PVS is
> cleared at the start of each call. What you can do is memcopy() the PVS
> calculated into a buffer and bitwise-or each additional PVS you need, then
> return a pointer to the buffer. I'm almost certain this would work,
> although I haven't tested it :)
>
> Something like this (again, untested):
>
> void SetupVisibility( edict_t *pViewEntity, edict_t *pClient, unsigned
> char **pvs, unsigned char **pas )
> {
> Vector org;
> edict_t *pView = pClient;
> static unsigned char visBuffer[MAX_MAP_LEAFS / 8];
>
> // Find the client's PVS
> if ( pViewEntity )
> {
> pView = pViewEntity;
> }
>
> org = pView->v.origin + pView->v.view_ofs;
> if ( pView->v.flags & FL_DUCKING )
> {
> org = org + ( VEC_HULL_MIN - VEC_DUCK_HULL_MIN );
> }
>
> *pvs = ENGINE_SET_PVS ( (float *)&org );
> *pas = ENGINE_SET_PAS ( (float *)&org );
>
> memcpy( visBuffer, pvs, MAX_MAP_LEAFS / 8 );
>
> for (/* each additional viewpoint */)
> {
> *pvs = ENGINE_SET_PVS( /* viewpoint */ );
> for (int i = 0; i < sizeof pvsBuffer; i++)
> pvsBuffer[i] |= pvs[i];
> }
>
> *pvs = pvsBuffer;
> }
>
> > From: TheLazy1 <[EMAIL PROTECTED]>
> > What I'm trying to do is add split screen play to half-life deathmatch,
> > currently I have the client rendering from the view of a bot which in
> > the future will be controlled by additional players through player 1.
> > The problem is that once player one leaves the area of the player two
> > bot, the entities in the bot's view disappear.
> >
> > // Ignore if not the host and not touching a PVS/PAS leaf
> > // If pSet is NULL, then the test will always succeed and the entity
> > will be added to the update
> > if ( ent != host )
> > {
> > if ( !ENGINE_CHECK_VISIBILITY( (const struct edict_s *)ent, pSet
> ) )
> > {
> > return 0;
> > }
> > }
> >
> > Commenting that code "fixes" the problem but also causes the client to
> > render every entity in the level causing a noticable drop in
> performance.
> > Are there any ways around this?
> >
> >
> > _______________________________________________
> > To unsubscribe, edit your list preferences, or view the list archives,
> please visit:
> > http://list.valvesoftware.com/mailman/listinfo/hlcoders
> >
> >
>
> -----------------------------------------
> Email sent from www.ntlworld.com
> Virus-checked using McAfee(R) Software
> Visit www.ntlworld.com/security for more information
>
>
> _______________________________________________
> To unsubscribe, edit your list preferences, or view the list archives,
> please visit:
> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>
>
--
_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders