Files
2025-09-29 00:52:08 +02:00

395 lines
11 KiB
Scheme
Executable File

// _________________________________________________________________________________________
// _________________________________________________________________________________________
// ___
// ___ Author: Adam Westwoood & Ross Wallace
// ___ Date: 07/12/2009
// _________________________________________________________________________________________
// ___
// ___ Overlay Effects
// ___ A collection of analogue and digital
// ___
// ___
// ___
// ___ Notes: Placeholder effects
// ___
// _________________________________________________________________________________________
// ____________________________________ INCLUDES ___________________________________________
USING "commands_graphics.sch"
CONST_FLOAT videoCameraZoomMax 45.0
CONST_FLOAT videoCameraZoomMin 10.00
BOOL bFlipHoriz
BOOL bFlipVert
BOOL bInterlaceFlip
BOOL bFXHasFadedIn
BOOL bHasRecFadedIn = FALSE
INT iNoSignal
INT iGrime
INT iGrimeLastValue
INT iFXTimer
INT iFXRandom
INT iRecAlpha = 0
FLOAT scuzzYpos1
FLOAT scuzzYpos2
FLOAT scuzzYpos3
INT iOverlaysAssigned
ENUM LOAD_OVERLAY_ENUM
FX_LOAD_SCANLINES,
FX_LOAD_NO_SIGNAL,
FX_LOAD_STATIC,
FX_LOAD_SCUZZ,
FX_LOAD_SET_SECURITY_CAM,
FX_LOAD_SET_LOSING_SIGNAL
ENDENUM
ENUM TEXTURE_OVERLAY_LIST
TX_NSCANLINE1,
TX_NSCANLINE2,
TX_NSCANLINE3,
TX_STATIC1,
TX_STATIC2,
TX_STATIC3,
TX_STATIC4,
TX_STATIC5,
TX_FATSCAN1,
TX_SIGNAL1,
TX_SIGNAL2,
TX_SIGNAL3,
TX_SIGNAL4,
TX_LINE1,
TX_LINE2,
TX_LIGHT_LEAK1,
TX_LIGHT_LEAK2
ENDENUM
PROC MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TEXTURE_OVERLAY_LIST e_text)
IF ENUM_TO_INT(e_text) < 32
SET_BIT(iOverlaysAssigned, ENUM_TO_INT(e_text))
ELSE
SCRIPT_ASSERT("EXTEND TEXTURE ASSIGNED ARRAY!- SEE ADAM W")
ENDIF
ENDPROC
FUNC BOOL HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TEXTURE_OVERLAY_LIST e_text)
IF IS_BIT_SET(iOverlaysAssigned, ENUM_TO_INT(e_text))
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
//Load all the overlay effects
FUNC BOOL LOAD_OVERLAY_EFFECTS()
REQUEST_STREAMED_TEXTURE_DICT("digitalOverlay")
IF HAS_STREAMED_TEXTURE_DICT_LOADED("digitalOverlay")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
// flipping and
FUNC INT GET_RANDOM_GRIME_VALUES(INT iMaxTexture)
IF GET_RANDOM_INT_IN_RANGE(0,50) > 25
bFlipHoriz = TRUE
ELSE
bFlipHoriz = FALSE
ENDIF
IF GET_RANDOM_INT_IN_RANGE(0,50) > 25
bFlipVert = TRUE
ELSE
bFlipVert = FALSE
ENDIF
RETURN GET_RANDOM_INT_IN_RANGE(0, iMaxTexture)
ENDFUNC
FUNC FLOAT FLIP_IF_TRUE(BOOL bFlipThis)
IF bFlipThis
RETURN (-1.0)
ELSE
RETURN 1.0
ENDIF
RETURN 1.0
ENDFUNC
//////////////////////////////////
//DIGITAL EFFECTS
//////////////////////////////////
//Draw Scan lines on the screen
PROC OVERLAY_SCAN_LINES(BOOL bEnableScanLines,INT iScanLineAlpha = 200)
IF NOT LOAD_OVERLAY_EFFECTS()
LOAD_OVERLAY_EFFECTS()
ELSE
IF bEnableScanLines
//HUD EFFECTS
IF bInterlaceFlip
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_FATSCAN1)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_FATSCAN1)
ELSE
DRAW_SPRITE("digitalOverlay","nscanline1", 0.5,0.5,1.0,1.0,0.0,255,255,255,iScanLineAlpha)
ENDIF
bInterlaceFlip = FALSE
ELSE
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_FATSCAN1)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_FATSCAN1)
ELSE
DRAW_SPRITE("digitalOverlay","nscanline1", 0.5,0.5,-1.0,-1.0,0.0,255,255,255,iScanLineAlpha)
ENDIF
bInterlaceFlip = TRUE
ENDIF
ENDIF
ENDIF
ENDPROC
//Draw the no signal overlay to the screen, use with noise and scuzz lines for full effect
PROC OVERLAY_NO_SIGNAL(BOOL bEnableNoSignal,INT iNoSignalAlpha = 255)
IF NOT LOAD_OVERLAY_EFFECTS(FX_LOAD_NO_SIGNAL)
LOAD_OVERLAY_EFFECTS(FX_LOAD_NO_SIGNAL)
ELSE
IF bEnableNoSignal = TRUE
iNoSignal = GET_RANDOM_INT_IN_RANGE(0,4)
IF iNoSignal = 0
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_SIGNAL1)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_SIGNAL1)
ELSE
DRAW_SPRITE("digitalOverlay", "Signal1", 0.5,0.5,1.0,1.0,0.0,255,255,255,iNoSignalAlpha)
ENDIF
ENDIF
IF iNoSignal = 1
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_SIGNAL2)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_SIGNAL2)
ELSE
DRAW_SPRITE("digitalOverlay", "Signal2", 0.5,0.5,1.0,1.0,0.0,255,255,255,iNoSignalAlpha)
ENDIF
ENDIF
IF iNoSignal = 2
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_SIGNAL3)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_SIGNAL3)
ELSE
DRAW_SPRITE("digitalOverlay", "Signal3", 0.5,0.5,1.0,1.0,0.0,255,255,255,iNoSignalAlpha)
ENDIF
ENDIF
IF iNoSignal = 3
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_SIGNAL4)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_SIGNAL4)
ELSE
DRAW_SPRITE("digitalOverlay", "Signal4", 0.5,0.5,1.0,1.0,0.0,255,255,255,iNoSignalAlpha)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//Draw grime effect on the screen.
PROC OVERLAY_STATIC(BOOL bEnableStatic,INT iStaticStrength = 26)
IF NOT LOAD_OVERLAY_EFFECTS()
LOAD_OVERLAY_EFFECTS()
ELSE
IF bEnableStatic
iGrime = GET_RANDOM_GRIME_VALUES(5)
iNoSignal = GET_RANDOM_INT_IN_RANGE(0,4)
WHILE iGrimeLastValue = iGrime
iGrime = GET_RANDOM_GRIME_VALUES(5)
ENDWHILE
IF iGrime = 0
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_STATIC1)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_STATIC1)
ELSE
DRAW_SPRITE("digitalOverlay", "Static1", 0.5,0.5,1.0*FLIP_IF_TRUE(bFlipHoriz),1.0*FLIP_IF_TRUE(bFlipVert),0.0,255,255,255,iStaticStrength)
ENDIF
ENDIF
IF iGrime = 1
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_STATIC2)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_STATIC2)
ELSE
DRAW_SPRITE("digitalOverlay", "Static2", 0.5,0.5,1.0*FLIP_IF_TRUE(bFlipHoriz),1.0*FLIP_IF_TRUE(bFlipVert),0.0,255,255,255,iStaticStrength)
ENDIF
ENDIF
IF iGrime = 2
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_STATIC3)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_STATIC3)
ELSE
DRAW_SPRITE("digitalOverlay", "Static3", 0.5,0.5,1.0*FLIP_IF_TRUE(bFlipHoriz),1.0*FLIP_IF_TRUE(bFlipVert),0.0,255,255,255,iStaticStrength)
ENDIF
ENDIF
IF iGrime = 3
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_STATIC4)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_STATIC4)
ELSE
DRAW_SPRITE("digitalOverlay", "Static4", 0.5,0.5,1.0*FLIP_IF_TRUE(bFlipHoriz),1.0*FLIP_IF_TRUE(bFlipVert),0.0,255,255,255,iStaticStrength)
ENDIF
ENDIF
IF iGrime = 4
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_STATIC5)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_STATIC5)
ELSE
DRAW_SPRITE("digitalOverlay", "Static5", 0.5,0.5,1.0*FLIP_IF_TRUE(bFlipHoriz),1.0*FLIP_IF_TRUE(bFlipVert),0.0,255,255,255,iStaticStrength)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//Draw scuzz effects to the screen
PROC OVERLAY_SCUZZ(BOOL bEnableScuzz, INT iScuzzAlpha = 128, BOOL bEnabledScuzz1 = TRUE,BOOL bEnabledScuzz2= TRUE,BOOL bEnabledScuzz3= TRUE)
IF NOT LOAD_OVERLAY_EFFECTS()
LOAD_OVERLAY_EFFECTS()
ELSE
IF bEnableScuzz
IF bEnabledScuzz1
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_NSCANLINE1)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_NSCANLINE1)
ELSE
DRAW_SPRITE("digitalOverlay","nscuzz1", 0.5,scuzzYpos1,1.0,0.2,0.0,255,255,255,iScuzzAlpha)
ENDIF
IF scuzzYpos1 < 1.0
scuzzYpos1 += 0.01
ELSE
scuzzYpos1 = 0.0
ENDIF
ENDIF
IF bEnabledScuzz2
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_NSCANLINE2)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_NSCANLINE2)
ELSE
DRAW_SPRITE("digitalOverlay", "nscuzz2", 0.5,scuzzYpos2,1.0,0.2,0.0,255,255,255,iScuzzAlpha)
ENDIF
IF scuzzYpos2 < 1.0
scuzzYpos2 += 0.02
ELSE
scuzzYpos2 = 0.0
ENDIF
ENDIF
IF bEnabledScuzz3
IF NOT HAS_TEXTURE_OVERLAY_BEEN_ASSIGNED(TX_NSCANLINE3)
MARK_TEXTURE_OVERLAY_AS_ASSIGNED(TX_NSCANLINE3)
ELSE
DRAW_SPRITE("digitalOverlay", "nscuzz3", 0.5,scuzzYpos3,1.0,0.2,0.0,255,255,255,iScuzzAlpha)
ENDIF
IF scuzzYpos3 < 1.0
scuzzYpos3 += 0.028
ELSE
scuzzYpos3 = 0.0
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
////Enables and sets the game noise value, default value is moderate screen noise
//PROC OVERLAY_GAME_NOISE(BOOL bEnableGameNoise,FLOAT fNoise = 0.38)
// SET_NOISEOVERIDE(bEnableGameNoise)
// SET_NOISINESSOVERIDE(fNoise)
//ENDPROC
/// PURPOSE:
/// To be called every frame, enables the security camera overlay. Ensure you call LOAD_OVERLAY_EFFECTS(FX_LOAD_SET_SECURITY_CAM) before you call this.
/// PARAMS:
/// bEnableSecurityCam - Enable or disable the camera
/// bEnableLowTech - If enabled allows the display of scuzz lines
/// iMaxStatic, Sets the maximum alpha of static level. (MAX 255) - Default 30
/// iMinStatic, Sets the mimimum alpha of static level. (MIN 0) - Default 5
/// bShowRec, Displays the recording symbol, - Default - FALSE
///
PROC OVERLAY_SET_SECURITY_CAM(BOOL bEnableSecurityCam,BOOL bEnableLowTech = FALSE, INT iMaxStatic = 30, INT iMinStatic = 5, BOOL bShowRec = FALSE)
IF NOT LOAD_OVERLAY_EFFECTS()
LOAD_OVERLAY_EFFECTS()
ELSE
IF bEnableSecurityCam
IF bShowRec = TRUE
IF iRecAlpha <= 225 AND bHasRecFadedIn = FALSE
iRecAlpha = iRecAlpha + 30
//DRAW_SPRITE(txdRec, 0.5,0.5,1.0,1.0,0.0,255,255,255,iRecAlpha)
IF iRecAlpha >= 225
bHasRecFadedIn = TRUE
ENDIF
ELSE
IF iRecAlpha >= 30
iRecAlpha = iRecAlpha - 30
//DRAW_SPRITE(txdRec, 0.5,0.5,1.0,1.0,0.0,255,255,255,iRecAlpha)
IF iRecAlpha <= 30
bHasRecFadedIn = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
OVERLAY_SCAN_LINES(TRUE)
IF iFXTimer <= iMaxStatic AND bFXHasFadedIn = FALSE
iFXTimer ++
OVERLAY_STATIC(TRUE,iFXTimer)
IF iFXTimer = iMaxStatic
bFXHasFadedIn = TRUE
iFXRandom = GET_RANDOM_INT_IN_RANGE(iMinStatic,iMaxStatic)
ENDIF
ELSE
IF iFXTimer > 0
IF iFXTimer > iFXRandom
iFXTimer --
OVERLAY_STATIC(TRUE,iFXTimer)
IF iFXTimer = iFXRandom
bFXHasFadedIn = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF bEnableLowTech
OVERLAY_SCUZZ(TRUE,40)
ENDIF
ENDIF
ENDIF
ENDPROC
//Clean up all the effects
PROC CLEAN_UP_OVERLAYS()
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("digitalOverlay")
ENDPROC