$ErrorActionPreference = "Continue" Add-Type -AssemblyName System.Windows.Forms, System.Drawing [System.Windows.Forms.Application]::EnableVisualStyles() $scriptOrigin = "https://wack.lwz.app" if (-not ($scriptOrigin -match '^https?://')) { $scriptOrigin = "https://wack.lwz.app" } if ([Threading.Thread]::CurrentThread.GetApartmentState() -ne "STA") { $psExe = Join-Path $env:SystemRoot "System32\WindowsPowerShell\v1.0\powershell.exe" Start-Process -FilePath $psExe -ArgumentList @( "-NoProfile", "-STA", "-ExecutionPolicy", "Bypass", "-Command", "irm '$scriptOrigin' | iex" ) -Wait | Out-Null return } function Get-AssetFileNames { @( "charlie-kirk.gif" "charlie-kirk-praying.gif" "charlie-kirk-tony-stark.gif" "dream-kirk.jpeg" "foot-ears-kirk.jpeg" "fortnite-kirk.gif" "gta6-kirk.jpeg" "ishowkirk.gif" "jeffrey-epstein-kirk.gif" "messi-kirk.jpeg" "osama-bin-kirk.jpeg" "son-kirk.jpeg" ) } function Get-MusicCandidates { @( "music.mp3" "music.wav" "music.m4a" ) } function Get-AssetKind([string]$name) { switch ([IO.Path]::GetExtension($name).ToLowerInvariant()) { ".gif" { "gif" } ".mp4" { "video" } ".webm" { "video" } ".mov" { "video" } default { "still" } } } function Get-BounceSpeed([System.Random]$rand) { $speed = $rand.Next(18, 34) if ($rand.Next(2) -eq 0) { return -$speed } return $speed } function Get-AssetBytes([string]$url) { try { $wc = New-Object System.Net.WebClient $wc.Headers["User-Agent"] = "Mozilla/5.0" return $wc.DownloadData($url) } catch { return $null } finally { if ($wc) { $wc.Dispose() } } } function New-ImageFromBytes([byte[]]$data) { $ms = New-Object System.IO.MemoryStream $ms.Write($data, 0, $data.Length) $ms.Position = 0 $img = [System.Drawing.Image]::FromStream($ms, $false, $false) return [pscustomobject]@{ Image = $img; Stream = $ms } } function New-KirkOverlay([string]$name, [byte[]]$data, [System.Random]$rand, $screen) { $kind = Get-AssetKind $name if ($kind -eq "video") { return $null } $loaded = New-ImageFromBytes $data $image = $loaded.Image $width = 340 $height = [Math]::Max(140, [int]($width * $image.Height / [Math]::Max(1, $image.Width))) if ($height -gt [int]($screen.Height * 0.7)) { $height = [int]($screen.Height * 0.7) $width = [Math]::Max(140, [int]($height * $image.Width / [Math]::Max(1, $image.Height))) } $pic = New-Object System.Windows.Forms.PictureBox $pic.Dock = "Fill" $pic.SizeMode = "Zoom" $pic.BackColor = [System.Drawing.Color]::Black $pic.Image = $image $form = New-Object System.Windows.Forms.Form $form.Text = "Kirk" $form.FormBorderStyle = "None" $form.TopMost = $true $form.ShowInTaskbar = $false $form.StartPosition = "Manual" $form.Width = $width $form.Height = $height $form.Left = $rand.Next(0, [Math]::Max(1, $screen.Width - $width)) $form.Top = $rand.Next(0, [Math]::Max(1, $screen.Height - $height)) $form.KeyPreview = $true $form.Controls.Add($pic) $form.Tag = @{ dx = (Get-BounceSpeed $rand) dy = (Get-BounceSpeed $rand) stream = $loaded.Stream image = $image name = $name } return $form } function Start-KirkMusic([string]$origin) { foreach ($name in Get-MusicCandidates) { $url = "$origin/assets/$name" $bytes = Get-AssetBytes $url if (-not $bytes -or $bytes.Length -lt 64) { continue } $ext = [IO.Path]::GetExtension($name).ToLowerInvariant() try { if ($ext -eq ".wav") { $ms = New-Object System.IO.MemoryStream(, $bytes) $player = New-Object System.Media.SoundPlayer $player.Stream = $ms $player.Load() $player.PlayLooping() return [pscustomobject]@{ Kind = "wav"; Player = $player; Stream = $ms; Path = $null } } $tmp = Join-Path $env:TEMP ("kirk-music-" + [guid]::NewGuid().ToString("N") + $ext) [IO.File]::WriteAllBytes($tmp, $bytes) $wmp = New-Object -ComObject WMPlayer.OCX $wmp.URL = $tmp $wmp.settings.setMode("loop", $true) $wmp.settings.volume = 100 $wmp.controls.play() return [pscustomobject]@{ Kind = "wmp"; Player = $wmp; Stream = $null; Path = $tmp } } catch { continue } } return $null } function Stop-KirkMusic($music, [switch]$Quick) { if (-not $music) { return } try { if ($music.Kind -eq "wav") { $music.Player.Stop() if (-not $Quick) { $music.Player.Dispose() if ($music.Stream) { $music.Stream.Dispose() } } } elseif ($music.Kind -eq "wmp") { try { $music.Player.settings.mute = $true } catch {} try { $music.Player.controls.stop() } catch {} if (-not $Quick) { try { $music.Player.close() } catch {} try { [void][Runtime.InteropServices.Marshal]::ReleaseComObject($music.Player) } catch {} } } } catch {} if ($music.Path) { if ($Quick) { Start-Job -ScriptBlock { param($path) Start-Sleep -Seconds 2 Remove-Item -LiteralPath $path -Force -ErrorAction SilentlyContinue } -ArgumentList $music.Path | Out-Null } else { try { Remove-Item -LiteralPath $music.Path -Force -ErrorAction SilentlyContinue } catch {} } } } function Hide-KirkOverlays($forms) { foreach ($form in @($forms)) { try { if ($form -and -not $form.IsDisposed) { $form.Visible = $false $form.TopMost = $false } } catch {} } [System.Windows.Forms.Application]::DoEvents() } function Close-KirkOverlays($forms) { foreach ($form in @($forms)) { try { if ($form -and -not $form.IsDisposed) { $form.Visible = $false $form.Close() } } catch {} } } function Stop-KirkSession { $script:running = $false Hide-KirkOverlays $script:forms Stop-KirkMusic $script:music -Quick Close-KirkOverlays $script:forms } $forms = $null $music = $null try { $screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds $rand = New-Object System.Random $script:running = $true $script:forms = New-Object System.Collections.ArrayList $forms = $script:forms $script:music = Start-KirkMusic $scriptOrigin $music = $script:music foreach ($name in Get-AssetFileNames) { $url = "$scriptOrigin/assets/$name" $bytes = Get-AssetBytes $url if (-not $bytes -or $bytes.Length -lt 32) { continue } try { $form = New-KirkOverlay $name $bytes $rand $screen if (-not $form) { continue } $form.Add_KeyDown({ if ($_.KeyCode -eq "Escape") { Stop-KirkSession } }) [void]$form.Show() $form.TopMost = $true $form.BringToFront() [void]$script:forms.Add($form) [System.Windows.Forms.Application]::DoEvents() } catch {} } if ($script:forms.Count -eq 0) { [System.Windows.Forms.MessageBox]::Show( "Impossible de charger les images depuis:`n$scriptOrigin/assets/", "Kirk", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error ) return } $script:forms[0].Activate() $deadline = [DateTime]::UtcNow.AddSeconds(15) while ($script:running -and [DateTime]::UtcNow -lt $deadline) { foreach ($form in @($script:forms)) { if ($null -eq $form -or $form.IsDisposed -or -not $form.Visible) { continue } $t = $form.Tag $nx = $form.Left + $t.dx $ny = $form.Top + $t.dy if ($nx -le 0 -or $nx -ge ($screen.Width - $form.Width)) { $t.dx = -$t.dx } if ($ny -le 0 -or $ny -ge ($screen.Height - $form.Height)) { $t.dy = -$t.dy } $form.Left = $form.Left + $t.dx $form.Top = $form.Top + $t.dy $form.TopMost = $true } [System.Windows.Forms.Application]::DoEvents() if (-not $script:running) { break } Start-Sleep -Milliseconds 8 } } catch { [System.Windows.Forms.MessageBox]::Show( "$_", "Kirk error", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error ) } finally { $script:running = $false Hide-KirkOverlays $script:forms Stop-KirkMusic $script:music -Quick Close-KirkOverlays $script:forms }