Ok, I've got a skybox 3do that goes around my entire level. All sky surfaces are flagged to geo 0. The 3do basically blocks out the hom from the level. But it needs a flicker cog to render, since it spans multiple sectors. Not a problem, Iv'e done this before.
This time, I've run into a problem where the player being on the surface of water, will not render the 3do. So I fixed it by getting the sector of a point just above the player (the view sector, thanks to Sige for the code )
Now here's where the craziness starts. It works perfect for the host, but a client joining the game will hom like crazy. I think its not getting the right sector for the client (as ocassionally the sky will show up, untill you move from a "stable" sector)
I also just added "nolink" to the flicker things... I'm not 100% sure what thats for :p anyway, here is the cog:
This time, I've run into a problem where the player being on the surface of water, will not render the 3do. So I fixed it by getting the sector of a point just above the player (the view sector, thanks to Sige for the code )
Now here's where the craziness starts. It works perfect for the host, but a client joining the game will hom like crazy. I think its not getting the right sector for the client (as ocassionally the sky will show up, untill you move from a "stable" sector)
I also just added "nolink" to the flicker things... I'm not 100% sure what thats for :p anyway, here is the cog:
Code:
flags=0x240 symbols int ObjCount local thing ObjThng0 nolink thing ObjThng1 nolink thing ObjThng2 nolink thing ObjThng3 nolink thing ObjThng4 nolink thing ObjThng5 nolink thing ObjThng6 nolink thing ObjThng7 nolink thing ObjThng8 nolink thing ObjThng9 nolink int running=0 local int sectorid local int sectorcount local int surfacecount local int s local int f local flex dot1 local flex dot2 local vector testpt local template ObjTpl0 local template ObjTpl1 local template ObjTpl2 local template ObjTpl3 local template ObjTpl4 local template ObjTpl5 local template ObjTpl6 local template ObjTpl7 local template ObjTpl8 local template ObjTpl9 local vector ObjPos0 local vector ObjPos1 local vector ObjPos2 local vector ObjPos3 local vector ObjPos4 local vector ObjPos5 local vector ObjPos6 local vector ObjPos7 local vector ObjPos8 local vector ObjPos9 local vector ObjLook0 local vector ObjLook1 local vector ObjLook2 local vector ObjLook3 local vector ObjLook4 local vector ObjLook5 local vector ObjLook6 local vector ObjLook7 local vector ObjLook8 local vector ObjLook9 local message newplayer message pulse end code newplayer: //Sleep while the level loads sleep(0.25); player=GetLocalPlayerThing(); ObjCount=0; for(x=0; x<10; x=x+1) {if(ObjThng0[x] != -1) ObjCount=ObjCount+1;} //Get the rotation and position and template of the object for(x=0; x<ObjCount; x=x+1) { ObjPos0[x]=GetThingPos(ObjThng0[x]); ObjLook0[x]=GetThingLVec(ObjThng0[x]); ObjTpl0[x]=GetThingTemplate(ObjThng0[x]); } //Start our pulse SetPulse(0.01); return; pulse: testpt = VectorAdd(GetThingPos(player), VectorSet(0,0,0.037)); //actual camera position vector sectorid = -1; sectorcount = GetSectorCount(); for (s = 0; s < sectorcount; s = s + 1) { surfacecount = GetNumSectorSurfaces(s); for (f = 0; f < surfacecount; f = f + 1) { dot1 = VectorDot(testpt, GetSurfaceNormal(GetSectorSurfaceRef(s, f))); dot2 = VectorDot(GetSurfaceVertexPos(GetSectorSurfaceRef(s, f), 0), GetSurfaceNormal(GetSectorSurfaceRef(s, f))); // outside of the sector if (dot1 < dot2) { f = 9999999; } } if (f != 10000000) { sectorid = s; s = 9999999; } } for(x=0; x<ObjCount; x=x+1) { //Printint(GetThingSector(Player)); //Printint(sectorid); //Printint(ObjThng0[x]); //Destroy the 3do DestroyThing(ObjThng0[x]); //Recreate the 3do ObjThng0[x]=CreateThingAtPos(ObjTpl0[x], sectorid, ObjPos0[x], ObjLook0[x]); SetThingLook(ObjThng0[x], ObjLook0[x]); } return; end