Realiistics mode forcroblox
Key RequiredUniversal

Realiistics mode forcroblox

Universal ScriptPokipouPokipou 423 views 289 executesUpdated Sep 4, 2026
Unrated
00
Lua Script•358 lines (9889 chars)
-- UltraAtmosphereEffects.client.lua
-- À placer dans StarterPlayer > StarterPlayerScripts
-- Effets : mort, soleil/éblouissement, eau HD + éclaboussures,
--           effet inquiétant quand la caméra regarde un autre joueur.

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Lighting = game:GetService("Lighting")
local Workspace = game:GetService("Workspace")

local player = Players.LocalPlayer
local camera = Workspace.CurrentCamera

-- =========================================================
-- CONFIGURATION
-- =========================================================
local CONFIG = {
	DeathDarkness = 0.75,
	DeathTime = 1.8,

	SunLookDot = 0.965, -- Plus proche de 1 = il faut regarder plus précisément le soleil
	SunBlindTime = 3,
	SunBlindCooldown = 4,
	SunSlowSpeed = 7,

	PlayerLookDistance = 80,
	PlayerLookDot = 0.992,
	PlayerDarkness = 0.28,
	PlayerShake = 0.22,

	WaterCheckDistance = 12,
	SplashCooldown = 0.35,
}

-- =========================================================
-- POST-PROCESSING HD
-- =========================================================
local function getOrCreate(className, name)
	local obj = Lighting:FindFirstChild(name)
	if not obj then
		obj = Instance.new(className)
		obj.Name = name
		obj.Parent = Lighting
	end
	return obj
end

local color = getOrCreate("ColorCorrectionEffect", "UltraHD_Color")
color.Enabled = true
color.Brightness = 0
color.Contrast = 0.12
color.Saturation = 0.05

local bloom = getOrCreate("BloomEffect", "UltraHD_Bloom")
bloom.Enabled = true
bloom.Intensity = 0.35
bloom.Size = 28
bloom.Threshold = 1.2

local rays = getOrCreate("SunRaysEffect", "UltraHD_SunRays")
rays.Enabled = true
rays.Intensity = 0.08
rays.Spread = 0.8

local deathBlur = getOrCreate("BlurEffect", "UltraHD_Blur")
deathBlur.Enabled = true
deathBlur.Size = 0

local atmosphere = Lighting:FindFirstChildOfClass("Atmosphere")
if atmosphere then
	atmosphere.Density = math.clamp(atmosphere.Density, 0, 0.45)
end

-- Eau plus brillante / transparente (effet visuel global)
local terrain = Workspace:FindFirstChildOfClass("Terrain")
if terrain then
	terrain.WaterTransparency = 0.18
	terrain.WaterReflectance = 0.35
	terrain.WaterWaveSize = 0.25
	terrain.WaterWaveSpeed = 12
end

-- =========================================================
-- ÉTAT
-- =========================================================
local humanoid
local rootPart
local originalWalkSpeed = 16
local sunBlindActive = false
local sunCooldown = false
local playerEffect = 0
local lastSplash = 0

-- =========================================================
-- MORT : caméra/écran qui s'assombrit
-- =========================================================
local function deathEffect()
	TweenService:Create(color, TweenInfo.new(CONFIG.DeathTime, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
		Brightness = -CONFIG.DeathDarkness,
		Contrast = 0.25,
		Saturation = -0.7,
	}):Play()

	TweenService:Create(deathBlur, TweenInfo.new(CONFIG.DeathTime), {
		Size = 14,
	}):Play()
end

local function resetDeathEffect()
	TweenService:Create(color, TweenInfo.new(1), {
		Brightness = 0,
		Contrast = 0.12,
		Saturation = 0.05,
	}):Play()

	TweenService:Create(deathBlur, TweenInfo.new(0.7), {
		Size = 0,
	}):Play()
end

-- =========================================================
-- ÉBLOUISSEMENT DU SOLEIL
-- =========================================================
local function sunIsAbovePlayer()
	if not rootPart then
		return false
	end

	-- Le soleil doit être au-dessus de l'horizon du joueur.
	-- On vérifie la composante verticale de la direction du soleil.
	local sunDirection = Lighting:GetSunDirection()
	return sunDirection.Y < -0.02
end

local function triggerSunBlind()
	if sunBlindActive or sunCooldown or not humanoid then
		return
	end

	sunBlindActive = true
	sunCooldown = true

	originalWalkSpeed = humanoid.WalkSpeed
	humanoid.WalkSpeed = math.min(originalWalkSpeed, CONFIG.SunSlowSpeed)

	TweenService:Create(color, TweenInfo.new(0.25, Enum.EasingStyle.Quad), {
		Brightness = 0.35,
		Contrast = 0.2,
		Saturation = -0.25,
	}):Play()

	TweenService:Create(bloom, TweenInfo.new(0.25), {
		Intensity = 1.2,
		Size = 50,
		Threshold = 0.35,
	}):Play()

	TweenService:Create(rays, TweenInfo.new(0.25), {
		Intensity = 0.38,
		Spread = 1,
	}):Play()

	task.wait(CONFIG.SunBlindTime)

	if humanoid and humanoid.Health > 0 then
		humanoid.WalkSpeed = originalWalkSpeed
	end

	TweenService:Create(color, TweenInfo.new(0.7), {
		Brightness = 0,
		Contrast = 0.12,
		Saturation = 0.05,
	}):Play()

	TweenService:Create(bloom, TweenInfo.new(0.7), {
		Intensity = 0.35,
		Size = 28,
		Threshold = 1.2,
	}):Play()

	TweenService:Create(rays, TweenInfo.new(0.7), {
		Intensity = 0.08,
		Spread = 0.8,
	}):Play()

	sunBlindActive = false
	task.wait(CONFIG.SunBlindCooldown)
	sunCooldown = false
end

-- =========================================================
-- EFFET QUAND ON REGARDE UN AUTRE JOUEUR
-- =========================================================
local function lookingAtAnotherPlayer()
	if not camera or not rootPart then
		return false
	end

	local camPos = camera.CFrame.Position
	local camLook = camera.CFrame.LookVector

	for _, other in ipairs(Players:GetPlayers()) do
		if other ~= player and other.Character then
			local otherRoot = other.Character:FindFirstChild("HumanoidRootPart")
			local otherHumanoid = other.Character:FindFirstChildOfClass("Humanoid")

			if otherRoot and otherHumanoid and otherHumanoid.Health > 0 then
				local offset = otherRoot.Position - camPos
				local distance = offset.Magnitude

				if distance <= CONFIG.PlayerLookDistance and distance > 0 then
					local direction = offset.Unit
					local dot = camLook:Dot(direction)

					if dot >= CONFIG.PlayerLookDot then
						return true
					end
				end
			end
		end
	end

	return false
end

-- =========================================================
-- EAU : détection + éclaboussures quand on entre dans l'eau
-- =========================================================
local function createSplash(position)
	if time() - lastSplash < CONFIG.SplashCooldown then
		return
	end
	lastSplash = time()

	local attachmentPart = Instance.new("Part")
	attachmentPart.Name = "WaterSplashVisual"
	attachmentPart.Anchored = true
	attachmentPart.CanCollide = false
	attachmentPart.CanQuery = false
	attachmentPart.CanTouch = false
	attachmentPart.Transparency = 1
	attachmentPart.Size = Vector3.new(0.2, 0.2, 0.2)
	attachmentPart.Position = position
	attachmentPart.Parent = Workspace

	local emitter = Instance.new("ParticleEmitter")
	emitter.Texture = "rbxasset://textures/particles/sparkles_main.dds"
	emitter.Rate = 0
	emitter.Lifetime = NumberRange.new(0.35, 0.8)
	emitter.Speed = NumberRange.new(7, 14)
	emitter.SpreadAngle = Vector2.new(180, 180)
	emitter.Drag = 5
	emitter.Acceleration = Vector3.new(0, -Workspace.Gravity * 0.7, 0)
	emitter.Size = NumberSequence.new({
		NumberSequenceKeypoint.new(0, 0.35),
		NumberSequenceKeypoint.new(0.45, 0.18),
		NumberSequenceKeypoint.new(1, 0),
	})
	emitter.Parent = attachmentPart
	emitter:Emit(45)

	-- Petites ondulations/flaques visuelles
	for i = 1, 3 do
		local ring = Instance.new("Part")
		ring.Name = "WaterRipple"
		ring.Anchored = true
		ring.CanCollide = false
		ring.CanTouch = false
		ring.CanQuery = false
		ring.Shape = Enum.PartType.Cylinder
		ring.Material = Enum.Material.Glass
		ring.Transparency = 0.55
		ring.Size = Vector3.new(0.05, 0.1, 0.05)
		ring.CFrame = CFrame.new(position + Vector3.new(math.random(-2, 2), 0.02, math.random(-2, 2)))
			* CFrame.Angles(0, 0, math.rad(90))
		ring.Parent = Workspace

		local tween = TweenService:Create(ring, TweenInfo.new(0.7), {
			Size = Vector3.new(0.05, 3 + i * 1.5, 3 + i * 1.5),
			Transparency = 1,
		})
		tween:Play()
		tween.Completed:Connect(function()
			ring:Destroy()
		end)
	end

	task.delay(1.5, function()
		if attachmentPart then
			attachmentPart:Destroy()
		end
	end)
end

local function bindCharacter(character)
	humanoid = character:WaitForChild("Humanoid")
	rootPart = character:WaitForChild("HumanoidRootPart")
	originalWalkSpeed = humanoid.WalkSpeed

	resetDeathEffect()

	humanoid.Died:Connect(deathEffect)

	local lastState = humanoid:GetState()
	humanoid.StateChanged:Connect(function(_, newState)
		if newState == Enum.HumanoidStateType.Swimming
			and lastState ~= Enum.HumanoidStateType.Swimming
			and rootPart then
			createSplash(rootPart.Position)
		end

		lastState = newState
	end)
end

if player.Character then
	task.spawn(bindCharacter, player.Character)
end

player.CharacterAdded:Connect(bindCharacter)

-- =========================================================
-- BOUCLE PRINCIPALE
-- =========================================================
RunService:BindToRenderStep("UltraAtmosphereEffects", Enum.RenderPriority.Camera.Value + 1, function()
	camera = Workspace.CurrentCamera

	if not camera or not humanoid or humanoid.Health <= 0 then
		return
	end

	-- Soleil : pas d'éblouissement lorsque le soleil est sous l'horizon.
	local sunDirection = Lighting:GetSunDirection()
	local lookingAtSun = camera.CFrame.LookVector:Dot(-sunDirection) >= CONFIG.SunLookDot

	if lookingAtSun and sunIsAbovePlayer() then
		task.spawn(triggerSunBlind)
	end

	-- Joueur regardé : assombrissement progressif + tremblement de caméra.
	local targetPlayerEffect = lookingAtAnotherPlayer() and 1 or 0
	playerEffect += (targetPlayerEffect - playerEffect) * 0.12

	if not sunBlindActive then
		color.Brightness = -CONFIG.PlayerDarkness * playerEffect
	end

	if playerEffect > 0.03 then
		local strength = CONFIG.PlayerShake * playerEffect
		local x = math.sin(time() * 17) * strength
		local y = math.cos(time() * 23) * strength

		camera.CFrame = camera.CFrame * CFrame.new(x, y, 0)
	end
end)

print("UltraAtmosphereEffects chargé.")

Features & Information

This script is for realistics d'or roblox
#Roblox

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts