BOOLEAN BinkPollFlics(void) { UINT32 uiCount; BOOLEAN fFlicStatus=FALSE; DDSURFACEDESC SurfaceDescription; BINKFLIC *pBink=NULL; UINT32 uiCopyToBufferFlags = guiBinkPixelFormat; //loop through all the open flics for(uiCount=0; uiCount < BINK_NUM_FLICS; uiCount++) { pBink = &BinkList[uiCount]; if( pBink->uiFlags & BINK_FLIC_PLAYING ) { fFlicStatus = TRUE; //do we still have to wait for the frame to be finished being displayed if( !( BinkWait( pBink->BinkHandle ) ) ) { DDLockSurface( pBink->lpDDS, NULL, &SurfaceDescription, 0, NULL); BinkDoFrame( pBink->BinkHandle ); BinkCopyToBuffer( pBink->BinkHandle, SurfaceDescription.lpSurface, SurfaceDescription.lPitch, pBink->BinkHandle->Height, pBink->uiLeft, pBink->uiTop, uiCopyToBufferFlags ); DDUnlockSurface( pBink->lpDDS, SurfaceDescription.lpSurface); // Check to see if the flic is done the last frame if( pBink->BinkHandle->FrameNum == ( pBink->BinkHandle->Frames-1 ) ) { // If flic is looping, reset frame to 0 if( pBink->uiFlags & BINK_FLIC_LOOP) { BinkGoto( pBink->BinkHandle, 0, 0 ); } else if( pBink->uiFlags & BINK_FLIC_AUTOCLOSE) { BinkCloseFlic( pBink ); } } else { BinkNextFrame( BinkList[uiCount].BinkHandle ); } } } } return( fFlicStatus ); }
void BinkRedraw2(void) { if(!iPlaying) return; if(iBinkStop && iBinkLoop) { iBinkLoop = 0; iPlaying = 0; iBinkStop = 0; return; } if(g_flTime - fStartTime > ( float(hBink->FrameRateDiv)/ float(hBink->FrameRate))) { if(iBinkIsScope) { if(!g_BinkScopeColor) { goto SKIP_FRAME; } } iFrame ++; SKIP_FRAME: fStartTime = g_flTime; if(iFrame> hBink->Frames) { if(!iBinkLoop) { iPlaying = 0; BinkClose(hBink); return; } else { iFrame = 1; } } BinkGoto(hBink, iFrame, 0); BinkCopyToBuffer(hBink, pBinkMem, hBink->Width * 4, hBink->Height, 0, 0, BINKSURFACE32RA); Tri_BindTexture(GL_TEXTURE_2D, iBinkTextureID); Tri_SetTextureParam(); Tri_TexImage2D(GL_TEXTURE_2D, 0, 4, hBink->Width, hBink->Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pBinkMem); } int iX ,iY,iWidth,iHeight; iWidth = hBink->Width; iHeight = hBink->Height; if(Bink_iCenter) { iX = Bink_iX - iWidth/2; iY = Bink_iY - iHeight/2; } else { iX = Bink_iX ; iY = Bink_iY ; } float LENGTH_SCOPE = g_sScreenInfo.iWidth / 3.3; if(iBinkIsScope && fCurrentFOV<=40.0) { if(!g_BinkScopeColor) { BinkColor[0] = 171; BinkColor[1] = 89 ; BinkColor[2] = 78; // LOCKED! #define LENGTH_SCOPE_TARGET 120 #define LENGTH_SCOPE_BORDER 75 Tri_Enable(GL_TEXTURE_2D); Tri_Enable(GL_BLEND); Tri_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Tri_BindTexture(GL_TEXTURE_2D, g_MHTga[g_tga_Scope_Target].texid); if(g_iVideoMode) { glColor4ub(255,255,255,255); } else gEngfuncs.pTriAPI->Color4ub(255,255,255,255); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_BORDER, 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_BORDER,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_TARGET,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_TARGET,0); gEngfuncs.pTriAPI->End(); // 2 gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_BORDER, 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_BORDER,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_TARGET,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE_TARGET,0); gEngfuncs.pTriAPI->End(); // 3 gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2 + LENGTH_SCOPE_BORDER , 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2 + LENGTH_SCOPE_BORDER,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2 + LENGTH_SCOPE_TARGET,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2 + LENGTH_SCOPE_TARGET,0); gEngfuncs.pTriAPI->End(); // 4 gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2+LENGTH_SCOPE_TARGET, 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE_BORDER,g_sScreenInfo.iHeight/2 + LENGTH_SCOPE_BORDER,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2+LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2+ LENGTH_SCOPE_BORDER,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE_TARGET,g_sScreenInfo.iHeight/2+LENGTH_SCOPE_TARGET,0); gEngfuncs.pTriAPI->End(); } else { BinkColor[0] = 84; BinkColor[1] = 135; BinkColor[2] = 130; } // Draw SCOPR // 1024 -- 240 // 800 -- 187.5 //#define LENGTH_SCOPE 240 Tri_Enable(GL_TEXTURE_2D); Tri_Enable(GL_BLEND); Tri_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Tri_BindTexture(GL_TEXTURE_2D, g_MHTga[g_tga_Scope].texid); if(g_iVideoMode) { glColor4ub(255,255,255,255); } else gEngfuncs.pTriAPI->Color4ub(255,255,255,255); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE,g_sScreenInfo.iHeight/2, 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE,0); gEngfuncs.pTriAPI->End(); // 2 gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE,g_sScreenInfo.iHeight/2, 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE,0); gEngfuncs.pTriAPI->End(); // 3 gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE,g_sScreenInfo.iHeight/2, 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2 + LENGTH_SCOPE,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE,g_sScreenInfo.iHeight/2 + LENGTH_SCOPE,0); gEngfuncs.pTriAPI->End(); // 4 gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2+LENGTH_SCOPE, 0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2,g_sScreenInfo.iHeight/2,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2+LENGTH_SCOPE,g_sScreenInfo.iHeight/2,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE,g_sScreenInfo.iHeight/2+LENGTH_SCOPE,0); gEngfuncs.pTriAPI->End(); } Tri_Enable(GL_TEXTURE_2D); Tri_Enable(GL_BLEND); Tri_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Tri_BindTexture(GL_TEXTURE_2D, iBinkTextureID); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->Color4ub(BinkColor[0],BinkColor[1],BinkColor[2],255); gEngfuncs.pTriAPI->TexCoord2f(0,1); gEngfuncs.pTriAPI->Vertex3f(iX,iY+iHeight,0); gEngfuncs.pTriAPI->TexCoord2f(1,1); gEngfuncs.pTriAPI->Vertex3f(iX+iWidth,iY+iHeight,0); gEngfuncs.pTriAPI->TexCoord2f(1,0); gEngfuncs.pTriAPI->Vertex3f(iX+iWidth,iY,0); gEngfuncs.pTriAPI->TexCoord2f(0,0); gEngfuncs.pTriAPI->Vertex3f(iX,iY,0); gEngfuncs.pTriAPI->End(); // Black Side if(iBinkIsScope && 0.0 < fCurrentFOV && fCurrentFOV<=40.0) { /*if(g_iVideoMode) { glColor4ub(0,0,0,255); } else gEngfuncs.pTriAPI->Color4ub(0,0,0,255); Tri_Disable(GL_TEXTURE_2D); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->Vertex3f(0,0,0); gEngfuncs.pTriAPI->Vertex3f(0,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth,g_sScreenInfo.iHeight/2 - LENGTH_SCOPE,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth,0,0); gEngfuncs.pTriAPI->End(); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->Vertex3f(0,0,0); gEngfuncs.pTriAPI->Vertex3f(0,g_sScreenInfo.iHeight,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE,g_sScreenInfo.iHeight,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 - LENGTH_SCOPE,0,0); gEngfuncs.pTriAPI->End(); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE,0,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth/2 + LENGTH_SCOPE,g_sScreenInfo.iHeight,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth,g_sScreenInfo.iHeight,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth,0,0); gEngfuncs.pTriAPI->End(); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->Vertex3f(0,g_sScreenInfo.iHeight/2+LENGTH_SCOPE,0); gEngfuncs.pTriAPI->Vertex3f(0,g_sScreenInfo.iHeight,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth,g_sScreenInfo.iHeight,0); gEngfuncs.pTriAPI->Vertex3f(g_sScreenInfo.iWidth,g_sScreenInfo.iHeight/2+LENGTH_SCOPE,0); gEngfuncs.pTriAPI->End();*/ } }