Help
RSS
API
Feed
Maltego
Contact
Domain > didelonmusksiegheil.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-01-29
3.166.152.85
(
ClassC
)
2025-03-05
3.161.163.34
(
ClassC
)
2025-03-05
3.161.163.69
(
ClassC
)
2025-03-26
3.161.193.92
(
ClassC
)
2025-12-08
3.169.173.7
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Mon, 08 Dec 2025 07:00:16 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://didelonmusksiegheil.com/X-Cache: Redirect from cloudfrontVia: 1.1 42eb5dfcc641e959ebaf60f01fc7d582.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: TkegHDVhT8kp5S6CHr12AZ_IrGSqbJaPbTo_tN3RXJj18wBDdbGo2gVary: Origin html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 56512Connection: keep-aliveDate: Mon, 08 Dec 2025 07:00:17 GMTLast-Modified: Tue, 22 Apr 2025 18:32:11 GMTETag: 0c88a2342ca9def2632d2941dd4133f8Server: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 7d14d4fc1c149f1d429681a4c414c21a.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: BZaHobrDSn6OOonKJR31CpAqXSVDKHRIFukVeBUt82rlP4VXoz3BpQVary: Origin !DOCTYPE html>html langen>head> meta charsetUTF-8> meta propertyog:title contentDid Elon Musk Sieg Heil?> meta propertyog:description contentFor Elon Musk posterity and worldwide freedom of speech> meta propertyog:image contenthttps://didelonmusksiegheil.com/elon-musk-nazi.jpg> meta propertyog:url contenthttps://didelonmusksiegheil.com> meta nametwitter:title contentDid Elon Musk Sieg Heil?> meta nametwitter:description contentFor Elon Musk posterity and freedom of speech> meta nametwitter:image contenthttps://didelonmusksiegheil.com/elon-musk-nazi.jpg> meta nametwitter:card contentsummary_large_image> meta nameviewport contentwidthdevice-width, initial-scale1.0> meta namerobots contentindex, follow> meta namedescription contentFor Elon Musk posterity and worldwide freedom of speech> title>Did Elon Musk Sieg Heil?/title> link relicon typeimage/x-icon hrefhttps://cdn.jsdelivr.net/npm/twemoji@11.3.0/2/svg/1f921.svg> script async srchttps://www.googletagmanager.com/gtag/js?idG-GBJTZ31VXP>/script> script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-GBJTZ31VXP); /script> style> :root { --primary: #5D5FEF; --primary-dark: #4B4ACF; --secondary: #6491ff; --secondary-dark: #242424; --accent: #00C2FF; --dark: #1A1A2E; --light: #F7F7FF; --gray: #8A8A9B; --success: #2ECC71; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body { margin: 0; padding: 0; background: var(--dark); color: var(--light); font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif; text-align: center; -webkit-tap-highlight-color: transparent; height: 100%; width: 100%; overflow-x: hidden; } .answer { font-size: clamp(4rem, 25vw, 15rem); font-weight: bold; line-height: 1; margin: 2vh 0; color: var(--secondary); text-shadow: 0 0 10px rgba(255, 77, 77, 0.5); } img.hero { max-width: 100%; height: auto; display: block; margin: 0 auto 5vh; } #gameWrap { margin: 4vh auto; width: 90vw; max-width: 600px; transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); position: relative; z-index: 10; border-radius: 16px; overflow: hidden; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); animation: fadeInScale 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards; } #gameWrap.closing { animation: fadeOutScale 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards; } #gameWrap.fullscreen { position: fixed; top: 0; left: 0; width: 100%; height: 100%; max-width: none; margin: 0; padding: 20px; background-color: rgba(26, 26, 46, 0.95); z-index: 1000; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 0; } #gameWrap.fullscreen #gameCanvas { max-height: 80vh; width: auto; max-width: 100%; border: 3px solid var(--primary); box-shadow: 0 0 20px rgba(93, 95, 239, 0.4); } #gameWrap.fullscreen #scoreArea, #gameWrap.fullscreen #joke { color: var(--light); } #gameCanvas { background: #16162A; border: 4px solid var(--primary); border-radius: 12px; width: 100%; height: auto; touch-action: none; display: block; margin: 0 auto; cursor: pointer; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); } #scoreArea { margin-top: 15px; font-size: clamp(16px, 4vw, 24px); display: flex; justify-content: space-between; align-items: center; gap: 1rem; flex-wrap: wrap; color: var(--light); font-weight: 600; } #joke { font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif; font-size: clamp(14px, 3.5vw, 18px); color: var(--gray); margin-top: 1vh; min-height: 1.8em; width: 100%; padding: 10px; border-radius: 8px; background-color: rgba(255, 255, 255, 0.05); margin-top: 15px; } .btn { margin-top: 2vh; padding: 12px 24px; font-size: clamp(16px, 4vw, 20px); background: var(--primary); color: var(--light); border: none; border-radius: 12px; cursor: pointer; font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif; font-weight: 600; touch-action: manipulation; transition: all 0.3s cubic-bezier(0.165, 0.84, 0.44, 1); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); position: relative; overflow: hidden; outline: none; } .btn:hover { background: var(--primary-dark); transform: translateY(-3px); box-shadow: 0 6px 15px rgba(0, 0, 0, 0.3); } .btn:active { transform: translateY(1px); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); } .btn::after { content: ; position: absolute; top: 50%; left: 50%; width: 5px; height: 5px; background: rgba(255, 255, 255, 0.5); opacity: 0; border-radius: 100%; transform: scale(1, 1) translate(-50%); transform-origin: 50% 50%; } .btn:focus:not(:active)::after { animation: ripple 1s ease-out; } @keyframes ripple { 0% { transform: scale(0, 0); opacity: 0.5; } 20% { transform: scale(25, 25); opacity: 0.3; } 100% { opacity: 0; transform: scale(40, 40); } } #startBtn { background: linear-gradient(135deg, var(--secondary), var(--secondary-dark)); padding: 15px 30px; font-size: clamp(18px, 5vw, 22px); letter-spacing: 0.5px; border-radius: 50px; position: relative; overflow: hidden; z-index: 1; } #startBtn::before { content: 🚀; margin-right: 10px; font-size: 1.2em; vertical-align: middle; display: inline-block; transition: transform 0.3s ease; } #startBtn:hover::before { transform: translateY(-3px) rotate(-10deg); } #startBtn:hover { background: linear-gradient(135deg, var(--secondary-dark), var(--secondary)); } #restartBtn { background: var(--success); color: white; } #restartBtn:hover { background: #27ae60; } #exitFullscreenBtn { position: absolute; top: 20px; right: 20px; padding: 10px 15px; font-size: 14px; z-index: 1001; background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); border: 1px solid rgba(255, 255, 255, 0.2); color: white; border-radius: 8px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; } #exitFullscreenBtn:hover { background: rgba(255, 255, 255, 0.25); } #exitFullscreenBtn::before { content: ×; font-size: 18px; margin-right: 5px; } .fullscreen-container { width: 100%; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; background: url(elon-musk-nazi.jpg) no-repeat center center; background-size: cover; padding: 20px; position: relative; } .text-container { background-color: rgba(26, 26, 46, 0.85); padding: 30px; border-radius: 16px; margin-bottom: 30px; width: 90%; max-width: 600px; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.1); } .text { font-size: clamp(1rem, 3vw, 1.2rem); color: var(--light); font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif; text-align: center; text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.8); margin: 0; line-height: 1.6; } img.background-image { z-index: -1; position: absolute; width: 1px; height: 1px; opacity: 0; } .yes { font-size: clamp(4rem, 14vw, 14rem); margin: 20px 0; background: linear-gradient(135deg, var(--secondary), #fff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; font-weight: 800; letter-spacing: -2px; text-shadow: none; } h1 { font-size: clamp(1.5rem, 5vw, 2.5rem); margin-bottom: 20px; color: var(--light); font-weight: 700; letter-spacing: -0.5px; } .username-container { margin: 20px auto; max-width: 400px; background: rgba(26, 26, 46, 0.8); padding: 20px; border-radius: 12px; border: 2px solid var(--primary); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); } .username-container h2 { margin-bottom: 15px; color: var(--secondary); } .username-input { width: 100%; padding: 12px; font-size: 16px; background: rgba(255, 255, 255, 0.1); border: 2px solid var(--primary); border-radius: 8px; color: var(--light); margin-bottom: 15px; outline: none; transition: all 0.3s ease; } .username-input:focus { border-color: var(--accent); box-shadow: 0 0 8px rgba(0, 194, 255, 0.5); } .leaderboard { margin: 20px auto; max-width: 400px; background: rgba(26, 26, 46, 0.8); padding: 20px; border-radius: 12px; border: 2px solid var(--primary); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); } .leaderboard h2 { margin-bottom: 15px; color: var(--secondary); } .leaderboard-list { list-style: none; padding: 0; } .leaderboard-item { display: flex; justify-content: space-between; padding: 10px; margin-bottom: 5px; background: rgba(255, 255, 255, 0.05); border-radius: 6px; } .leaderboard-rank { font-weight: bold; color: var(--accent); width: 30px; } .leaderboard-name { flex: 1; text-align: left; margin: 0 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .leaderboard-score { font-weight: bold; color: var(--success); } .leaderboard-buttons { display: flex; justify-content: space-between; margin-top: 15px; } .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.8); z-index: 2000; align-items: center; justify-content: center; } .modal.active { display: flex; } @media (max-width: 768px) { .fullscreen-container { padding: 10px; } .text-container { padding: 20px; } #gameWrap { width: 95vw; } } @media (max-width: 480px) { .yes { font-size: clamp(3rem, 12vw, 4rem); margin: 15px 0; } h1 { font-size: clamp(1.2rem, 4vw, 1.5rem); } #startBtn, #restartBtn { padding: 10px 20px; } } @media (max-width: 900px) and (orientation: landscape) { .fullscreen-container { display: flex; flex-direction: row; } .text-container { width: 60%; padding: 10px; } #gameWrap { width: 70%; height: 100vh; position: relative; } h1 { font-size: 24px; margin-bottom: 10px; } .yes { font-size: 32px; margin: 5px 0; } #playBtn { transform: scale(0.8); } .game-ui { position: absolute; bottom: 35px; left: 0; right: 0; display: flex; flex-direction: row; justify-content: center; gap: 10px; z-index: 200; } .game-ui button { margin: 5px; padding: 8px 15px; font-size: 14px; min-width: 100px; } .modal { align-items: center; justify-content: center; } .username-container { max-width: 80%; max-height: 80vh; overflow-y: auto; padding: 15px; } #exitFullscreenBtn { position: absolute; top: 10px; right: 10px; z-index: 200; } #scoreArea { position: absolute; bottom: 10px; left: 10px; right: 10px; text-align: center; z-index: 150; } #joke { position: absolute; bottom: 0; left: 0; right: 0; text-align: center; z-index: 150; background: none; } } @keyframes fadeInScale { 0% { opacity: 0; transform: scale(0.9); } 100% { opacity: 1; transform: scale(1); } } @keyframes fadeOutScale { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(0.9); } } #playBtn { position: relative; font-size: clamp(20px, 5vw, 28px); padding: 18px 36px; background: linear-gradient(135deg, var(--primary), #8A2BE2); color: white; font-weight: 700; letter-spacing: 1px; border-radius: 50px; margin: 25px auto; box-shadow: 0 8px 25px rgba(93, 95, 239, 0.5); overflow: hidden; transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); transform: translateZ(0); border: 2px solid rgba(255, 255, 255, 0.2); display: flex; align-items: center; justify-content: center; font-family: Orbitron, Segoe UI, Tahoma, sans-serif; } #playBtn::before { content: ; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 50%); transform: translateY(-100%); transition: transform 0.6s ease; z-index: 1; } #playBtn:hover { transform: translateY(-5px) scale(1.05); box-shadow: 0 15px 35px rgba(93, 95, 239, 0.7); background: linear-gradient(135deg, #8A2BE2, var(--primary)); } #playBtn:hover::before { transform: translateY(0); } #playBtn:active { transform: translateY(2px) scale(0.98); box-shadow: 0 5px 15px rgba(93, 95, 239, 0.4); } #playBtn .rocket { display: inline-block; margin-right: 10px; font-size: 1.2em; transition: transform 0.3s ease; } #playBtn:hover .rocket { animation: rocketShake 0.5s ease infinite; } @keyframes rocketShake { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(5deg); } } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(93, 95, 239, 0.7); } 70% { box-shadow: 0 0 0 15px rgba(93, 95, 239, 0); } 100% { box-shadow: 0 0 0 0 rgba(93, 95, 239, 0); } } #playBtn .stars { position: absolute; width: 100%; height: 100%; top: 0; left: 0; pointer-events: none; z-index: 0; } #playBtn .star { position: absolute; background: white; border-radius: 50%; opacity: 0; transform: scale(0); } #playBtn:hover .star { animation: starAppear 0.8s ease forwards; } @keyframes starAppear { 0% { opacity: 0; transform: scale(0); } 50% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(0); } } .game-leaderboard { position: absolute; left: 20px; top: 50%; transform: translateY(-50%); background: rgba(26, 26, 46, 0.8); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); border: 1px solid rgba(93, 95, 239, 0.3); border-radius: 12px; padding: 15px; width: 200px; max-height: 70vh; overflow-y: auto; color: white; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); z-index: 100; display: none; transition: all 0.3s ease; } .game-leaderboard h3 { font-size: 16px; margin: 0 0 10px 0; text-align: center; color: var(--light); font-family: Orbitron, sans-serif; border-bottom: 1px solid rgba(255, 255, 255, 0.2); padding-bottom: 5px; } .game-leaderboard-list { list-style: none; padding: 0; margin: 0; } .game-leaderboard-item { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.1); font-size: 14px; } .game-leaderboard-rank { flex: 0 0 25px; font-weight: bold; color: var(--accent); } .game-leaderboard-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 5px; } .game-leaderboard-score { flex: 0 0 40px; text-align: right; font-weight: bold; } #toggleLeaderboardBtn { position: absolute; left: 20px; top: 20px; background: rgba(93, 95, 239, 0.6); color: white; border: none; border-radius: 50%; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 101; font-size: 18px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); transition: all 0.2s ease; } #toggleLeaderboardBtn:hover { background: rgba(93, 95, 239, 0.8); transform: scale(1.1); } #refreshLeaderboardBtn { background: var(--accent); color: white; border: none; border-radius: 4px; padding: 5px 10px; margin-top: 10px; font-size: 12px; cursor: pointer; width: 100%; transition: all 0.2s ease; } #refreshLeaderboardBtn:hover { background: #00a0cc; } /* Mobile flap button styles */ #mobileFlapBtn { display: none; position: fixed; bottom: 15%; right: 20px; width: 80px; height: 80px; border-radius: 50%; background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; border: none; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3), inset 0 -4px 0 rgba(0, 0, 0, 0.2); font-weight: bold; font-size: 16px; cursor: pointer; z-index: 1000; transition: all 0.2s ease; outline: none; overflow: hidden; transform: translateZ(0); } #mobileFlapBtn::before { content: 🚀; font-size: 28px; margin-bottom: 5px; display: block; transition: transform 0.2s ease; } #mobileFlapBtn:active { transform: scale(0.9); box-shadow: 0 3px 10px rgba(0, 0, 0, 0.4); } #mobileFlapBtn:active::before { transform: translateY(-5px); } /* Rocket flame effect */ #mobileFlapBtn::after { content: ; position: absolute; bottom: -10px; left: 50%; width: 30px; height: 30px; margin-left: -15px; background: linear-gradient(to bottom, #FF4500, #FF8C00, #FFD700); border-radius: 50% 50% 10% 10%; opacity: 0; transform: scaleY(0.5); transition: all 0.1s ease; filter: blur(2px); } #mobileFlapBtn:active::after { opacity: 1; height: 40px; transform: scaleY(1); } /* Pulse animation for touch */ @keyframes pulseOnTouch { 0% { box-shadow: 0 0 0 0 rgba(93, 95, 239, 0.7); } 70% { box-shadow: 0 0 0 15px rgba(93, 95, 239, 0); } 100% { box-shadow: 0 0 0 0 rgba(93, 95, 239, 0); } } /* Class to apply the pulse animation when touched */ #mobileFlapBtn.pulse { animation: pulseOnTouch 0.8s ease-out; } /* Media queries for different devices/orientations */ @media (max-width: 768px) { #mobileFlapBtn { display: flex; } /* Landscape mode placement */ @media (orientation: landscape) { #mobileFlapBtn { right: 30px; bottom: 50%; transform: translateY(50%); } #mobileFlapBtn:active { transform: translateY(50%) scale(0.9); } } /* Portrait mode placement */ @media (orientation: portrait) { #mobileFlapBtn { bottom: 35%; right: 30px; } } } /style>/head>body> div classfullscreen-container> img classbackground-image srcelon-musk-nazi.jpg altYes, Elon is definitely a Nazi guy, he just doesnt know yet/> div classtext-container> h1>Did Elon Musk Sieg Heil?/h1> p classyes>YES/p> button idplayBtn classbtn> span classrocket>🚀/span> span>Play Flappy‑Musk/span> div classstars> div classstar styletop: 20%; left: 15%; width: 3px; height: 3px; animation-delay: 0.1s;>/div> div classstar styletop: 30%; left: 75%; width: 2px; height: 2px; animation-delay: 0.3s;>/div> div classstar styletop: 70%; left: 35%; width: 4px; height: 4px; animation-delay: 0.5s;>/div> div classstar styletop: 60%; left: 85%; width: 3px; height: 3px; animation-delay: 0.7s;>/div> div classstar styletop: 50%; left: 25%; width: 2px; height: 2px; animation-delay: 0.9s;>/div> /div> /button> /div> div idusernameModal classmodal> div classusername-container idusernameContainer> h2>Save Your Score/h2> p stylecolor: white; margin-bottom: 15px;>Your score: span idfinalScoreDisplay>0/span>/p> input typetext idusernameInput classusername-input placeholderYour username maxlength20> div styledisplay: flex; gap: 10px; justify-content: space-between;> button idcancelUsernameBtn classbtn stylebackground: #FF4D4D;>Cancel/button> button idsaveScoreBtn classbtn stylebackground: var(--success);>Save Score/button> /div> /div> /div> div idgameWrap styledisplay:none;> canvas idgameCanvas width600 height400>/canvas> div idscoreArea>span idscore>Score: 0/span>span idbest>Best: 0/span>/div> div idjoke>/div> div classgame-ui> button idrestartBtn classbtn styledisplay:none;>Try Again/button> button idsaveScoreModalBtn classbtn styledisplay:none; background: var(--success);>Save Score/button> /div> button idexitFullscreenBtn>Exit/button> button idtoggleLeaderboardBtn titleToggle Leaderboard>🏆/button> div classgame-leaderboard idgameLeaderboard> h3>Top Scores/h3> ul idgameLeaderboardList classgame-leaderboard-list>/ul> button idrefreshLeaderboardBtn>Refresh Scores/button> /div> !-- Mobile flap button - only shows on mobile devices --> button idmobileFlapBtn aria-labelFlap rocket> span classbtn-text>FLAP/span> /button> /div> div idleaderboardModal classmodal> div classleaderboard> h2>Leaderboard/h2> ul idleaderboardList classleaderboard-list>/ul> div classleaderboard-buttons> button idcloseLeaderboardBtn classbtn>Close/button> /div> /div> /div> script>const smileImg new Image(); smileImg.src musk_smile.png;const grimaceImg new Image(); grimaceImg.src musk_grimace.png;const trumpImg new Image(); trumpImg.src trump.png;const megaTrumpImg new Image(); megaTrumpImg.src trump_mega.png;const ultraTrumpImg new Image(); ultraTrumpImg.src trump_ultra.png; const putinImg new Image(); putinImg.src putin.png;const BONUS_VARIANTS { name: Trump, points: 5, r: 25, img: trumpImg, colours: #FFD700, #FF8C00, #FF4500, weight: 82 }, { name: Mega‑Trump, points: 10, r: 25, img: megaTrumpImg, colours: #00FFFF, #1E90FF, #00CED1, weight: 12 }, { name: Ultra‑Trump!!!, points: 20, r: 20, img: ultraTrumpImg, colours: #FF69B4, #FF1493, #FFB6C1, weight: 5 }, { name: Putin 🤯, points: 100, r: 20, img: putinImg, colours: #000000, #000000, #000000, weight: 1 };// DOM elementsconst playBtn document.getElementById(playBtn);const startBtn document.getElementById(startBtn);const cancelUsernameBtn document.getElementById(cancelUsernameBtn);const gameWrap document.getElementById(gameWrap);const canvas document.getElementById(gameCanvas);const ctx canvas.getContext(2d);const scoreSpan document.getElementById(score);const bestSpan document.getElementById(best);const jokeDiv document.getElementById(joke);const restartBtn document.getElementById(restartBtn);const exitFullscreenBtn document.getElementById(exitFullscreenBtn);const usernameInput document.getElementById(usernameInput);const usernameContainer document.getElementById(usernameContainer);const usernameModal document.getElementById(usernameModal);const viewLeaderboardBtn document.getElementById(viewLeaderboardBtn);const leaderboardModal document.getElementById(leaderboardModal);const leaderboardList document.getElementById(leaderboardList);const closeLeaderboardBtn document.getElementById(closeLeaderboardBtn);const clearLeaderboardBtn document.getElementById(clearLeaderboardBtn);const saveScoreBtn document.getElementById(saveScoreBtn);const BASE_W 600, BASE_H 400;// In-game leaderboard elementsconst toggleLeaderboardBtn document.getElementById(toggleLeaderboardBtn);const gameLeaderboard document.getElementById(gameLeaderboard);const gameLeaderboardList document.getElementById(gameLeaderboardList);const refreshLeaderboardBtn document.getElementById(refreshLeaderboardBtn);// Game state variableslet currentUsername localStorage.getItem(flappyMuskUsername) || ;let leaderboardData ;let bestScore 0;let rocket, pipes, score, running, lastPipeTime, lastBonusTime;let bonusItem null;let G 0.35, THRUST -5, GAP 200, SPEED 1.4, PIPE_SP 2100;let normalizedG G, normalizedThrust THRUST;let speedMultiplier 1.0; // Base speed multiplierconst BASE_CANVAS_WIDTH 800; // Reference width for speed normalizationconst BONUS_SPAWN_CHANCE 0.2;const BONUS_MIN_INTERVAL 5000;const jokes Another worker rights violation - keep flapping!, Apartheid emerald mine fuel engaged 🚀, Free hate speech? Not free gravity!, Twitter layoff detected - boost!, CEO of Union Busting at it again., Narcissism unavailable, manual flap required., Mars colony: Just another empty promise., Tweet drafted: Im firing 80% of you., Space Karen needs another ego boost., Twitter users fleeing faster than you!, X marks the spot where democracy died., Neuralink: Animal testing wasnt enough?, Boring through labor laws is his specialty., Flappy Musk: As reliable as his promises., SpaceX: Privatizing space for the 0.001%., Cybertruck: As fragile as his ego., This game has more testing than his products., Tax avoidance cant save you now!, That pipe is made of fact-checkers!, Child labor cobalt mines fund that crash., Your workers rights just dropped 100%., Have you tried calling critics pedophiles?, Flap harder, the SEC fine is coming!, Market manipulation wont work here., Not as toxic as his workplace culture., Billionaire tears cant save you mid-flight., Thats one giant leap for wealth inequality..., Worker safety is too slow. Unacceptable., Youre all fired! No severance, try again.;// Lambda API endpointconst LAMBDA_API_ENDPOINT https://z4msc3bybtcwqwwnurziuwlini0wqmwg.lambda-url.eu-west-1.on.aws/;// Load leaderboard data from Lambdafunction loadLeaderboard() { // Try to load from localStorage first as a fallback try { const localData localStorage.getItem(muskLeaderboard); if (localData) { leaderboardData JSON.parse(localData); } } catch (e) { console.error(Error loading leaderboard from localStorage:, e); } // Show loading indicator in main leaderboard if (leaderboardList.innerHTML ) { leaderboardList.innerHTML li classleaderboard-item stylejustify-content: center;>Loading.../li>; } // Fetch from Lambda return fetch(`${LAMBDA_API_ENDPOINT}?actiongetLeaderboard`, { method: GET, headers: { Accept: application/json } }) .then(response > { if (!response.ok) { if (response.status 429) { console.warn(Rate limit exceeded. Using local leaderboard data.); return null; } throw new Error(`Network response was not ok: ${response.status}`); } return response.json(); }) .then(data > { if (data && Array.isArray(data)) { leaderboardData data; displayLeaderboard(leaderboardList); if (document.getElementById(gameLeaderboard).style.display block) { displayLeaderboard(gameLeaderboardList); } localStorage.setItem(muskLeaderboard, JSON.stringify(leaderboardData)); } else if (data && data.leaderboard && Array.isArray(data.leaderboard)) { leaderboardData data.leaderboard; displayLeaderboard(leaderboardList); if (document.getElementById(gameLeaderboard).style.display block) { displayLeaderboard(gameLeaderboardList); } localStorage.setItem(muskLeaderboard, JSON.stringify(leaderboardData)); } return leaderboardData; }) .catch(error > { console.error(Error loading leaderboard from Lambda:, error); if (leaderboardData.length > 0) { displayLeaderboard(leaderboardList); if (document.getElementById(gameLeaderboard).style.display block) { displayLeaderboard(gameLeaderboardList); } } else { leaderboardList.innerHTML li classleaderboard-item stylejustify-content: center;>Failed to load leaderboard/li>; if (document.getElementById(gameLeaderboard).style.display block) { gameLeaderboardList.innerHTML li classgame-leaderboard-item stylejustify-content: center;>Failed to load leaderboard/li>; } } return leaderboardData; });}// Save score to AWS Lambdafunction saveScore(username, score) { if (!username || typeof score ! number || score 0) { console.error(Invalid score data); return false; } const sanitizedUsername sanitizeUsername(username); // Save to localStorage as a fallback addScoreToLocalLeaderboard(sanitizedUsername, score); // Create the payload const payload { username: sanitizedUsername, score: score, action: saveScore, timestamp: new Date().toISOString() }; // Save to Lambda fetch(`${LAMBDA_API_ENDPOINT}`, { method: POST, headers: { Content-Type: application/json, Accept: application/json }, body: JSON.stringify(payload) }) .then(response > { if (!response.ok) { if (response.status 429) { alert(You are submitting scores too quickly. Please try again later.); return null; } return response.text().then(text > { console.error(Error response:, text); throw new Error(`Network response was not ok: ${response.status} - ${text}`); }); } return response.json(); }) .then(data > { if (!data) return; if (data.leaderboard && Array.isArray(data.leaderboard)) { leaderboardData data.leaderboard; displayLeaderboard(); localStorage.setItem(muskLeaderboard, JSON.stringify(leaderboardData)); } }) .catch(error > { console.error(Error saving score to Lambda:, error); alert(There was an error saving your score. Your score has been saved locally.); });}// Client-side username sanitizationfunction sanitizeUsername(username) { if (typeof username ! string) { return Anonymous; } const trimmed username.trim().substring(0, 20); return trimmed .replace(/>&/g, ) .replace(/^\w\s-/g, );}// Add a score to the local leaderboard (used as fallback)function addScoreToLocalLeaderboard(username, score) { if (!username || score 0) return false; leaderboardData.push({ username: username, score: score, date: new Date().toISOString() }); leaderboardData.sort((a, b) > b.score - a.score); if (leaderboardData.length > 10) { leaderboardData leaderboardData.slice(0, 10); } try { localStorage.setItem(muskLeaderboard, JSON.stringify(leaderboardData)); } catch (e) { console.error(Error saving leaderboard to localStorage:, e); } return true;}// Add a score to the leaderboardfunction addScoreToLeaderboard(username, score) { if (!username || score 0) return false; saveScore(username, score); return true;}// Display the leaderboardfunction displayLeaderboard(targetElement leaderboardList) { targetElement.innerHTML ; if (leaderboardData.length 0) { const emptyItem document.createElement(li); emptyItem.className targetElement leaderboardList ? leaderboard-item : game-leaderboard-item; emptyItem.textContent No scores yet. Be the first!; targetElement.appendChild(emptyItem); return; } leaderboardData.forEach((entry, index) > { const item document.createElement(li); item.className targetElement leaderboardList ? leaderboard-item : game-leaderboard-item; const rank document.createElement(span); rank.className targetElement leaderboardList ? leaderboard-rank : game-leaderboard-rank; rank.textContent `${index + 1}.`; const name document.createElement(span); name.className targetElement leaderboardList ? leaderboard-name : game-leaderboard-name; name.textContent entry.username; const score document.createElement(span); score.className targetElement leaderboardList ? leaderboard-score : game-leaderboard-score; score.textContent entry.score; item.appendChild(rank); item.appendChild(name); item.appendChild(score); targetElement.appendChild(item); });}// Show/hide modalsfunction showLeaderboard() { leaderboardModal.style.display flex; displayLeaderboard();}function hideLeaderboard() { leaderboardModal.style.display none;}function showSaveScoreModal() { document.getElementById(finalScoreDisplay).textContent score; usernameModal.style.display flex; usernameContainer.classList.add(show); if (currentUsername) { usernameInput.value currentUsername; }}function hideSaveScoreModal() { usernameContainer.classList.remove(show); setTimeout(() > { usernameModal.style.display none; }, 300);}// Save user scorefunction saveUserScore() { const username usernameInput.value.trim(); if (username) { currentUsername username; localStorage.setItem(flappyMuskUsername, username); saveScore(username, score); hideSaveScoreModal(); saveScoreModalBtn.style.display none; const notification document.createElement(div); notification.textContent `Score saved successfully!`; notification.style.position absolute; notification.style.top 20px; notification.style.left 50%; notification.style.transform translateX(-50%); notification.style.background rgba(46, 204, 113, 0.8); notification.style.color white; notification.style.padding 10px 20px; notification.style.borderRadius 5px; notification.style.zIndex 1000; document.body.appendChild(notification); setTimeout(() > { document.body.removeChild(notification); }, 3000); } else { alert(Please enter a username); }}// Game colorsconst COLORS { background: #16162A, stars: #5D5FEF, pipes: #00C2FF, pipeOutline: #0099CC, rocket: #FF4D4D, score: #F7F7FF, particles: #FF4D4D, #5D5FEF, #00C2FF, #2ECC71};// Fullscreen functionalitylet isFullscreen false;function toggleFullscreen() { isFullscreen !isFullscreen; if (isFullscreen) { gameWrap.classList.add(fullscreen); exitFullscreenBtn.style.display block; document.body.style.overflow hidden; running true; requestAnimationFrame(loop); } else { gameWrap.classList.remove(fullscreen); exitFullscreenBtn.style.display none; document.body.style.overflow ; running false; showPlayButton(); } resizeCanvas();}// Show the play button with animationfunction showPlayButton() { gameWrap.style.display none; playBtn.style.display inline-block; if (document.getElementById(viewLeaderboardBtn)) { document.getElementById(viewLeaderboardBtn).style.display inline-block; } playBtn.style.opacity 0; playBtn.style.transform translateY(20px); setTimeout(() > { playBtn.style.transition all 0.5s cubic-bezier(0.165, 0.84, 0.44, 1); playBtn.style.opacity 1; playBtn.style.transform translateY(0); }, 50);}function startGame() { gameWrap.style.display block; playBtn.style.display none; if (document.getElementById(viewLeaderboardBtn)) { document.getElementById(viewLeaderboardBtn).style.display none; } bestScore parseInt(localStorage.getItem(muskBest) || 0); bestSpan.textContent `Best: ${bestScore}`; resetGame(); isFullscreen true; gameWrap.classList.add(fullscreen); exitFullscreenBtn.style.display block; document.body.style.overflow hidden; setupMobileControls(); running true; setTimeout(() > { resizeCanvas(); requestAnimationFrame(loop); }, 50);}// Event listenersplayBtn.addEventListener(click, startGame);saveScoreModalBtn.addEventListener(click, showSaveScoreModal);saveScoreBtn.addEventListener(click, saveUserScore);cancelUsernameBtn.addEventListener(click, hideSaveScoreModal);restartBtn.addEventListener(click, () > { restartBtn.style.display none; resetGame(); requestAnimationFrame(loop);});exitFullscreenBtn.addEventListener(click, () > { toggleFullscreen();});// Leaderboard event listenerscloseLeaderboardBtn.addEventListener(click, hideLeaderboard);toggleLeaderboardBtn.addEventListener(click, toggleGameLeaderboard);refreshLeaderboardBtn.addEventListener(click, refreshGameLeaderboard);loadLeaderboard();// Toggle in-game leaderboard visibilityfunction toggleGameLeaderboard() { if (gameLeaderboard.style.display block) { gameLeaderboard.style.display none; } else { gameLeaderboard.style.display block; displayLeaderboard(gameLeaderboardList); }}// Refresh the in-game leaderboardfunction refreshGameLeaderboard() { gameLeaderboardList.innerHTML li classgame-leaderboard-item stylejustify-content: center;>Loading.../li>; loadLeaderboard().then(() > { displayLeaderboard(gameLeaderboardList); });}// Handle mobile detection and orientationlet isMobile false; function detectMobile() { const mobileAndTabletCheck function() { const userAgent navigator.userAgent || navigator.vendor || window.opera; const mobileRegex /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i; const mobileShortRegex /1207|6310|6590|3gso|4thp|501-6i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez(4-70|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-a-w)|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n100-2|n202-3|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-(1-8|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-2-7|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|50-3|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; return mobileRegex.test(userAgent) || mobileShortRegex.test(userAgent.substr(0,4)); }; window.mobileAndTabletCheck mobileAndTabletCheck; return mobileAndTabletCheck();}function setupMobileControls() { isMobile detectMobile(); if (isMobile) { // Show the mobile flap button const mobileFlapBtn document.getElementById(mobileFlapBtn); mobileFlapBtn.style.display block; window.addEventListener(orientationchange, function() { setTimeout(resizeCanvas, 300); // Delay to allow orientation to complete }); // Force landscape mode message if in portrait checkOrientation(); }}function checkOrientation() { if (isMobile && window.innerHeight > window.innerWidth) { jokeDiv.textContent Rotate your device to landscape for better gameplay!; }}// Add touch event for mobile flappingdocument.addEventListener(DOMContentLoaded, function() { // Add keyboard controls document.addEventListener(keydown, e > { if (e.code Space) flap(); }); // Add touch controls for mobile gameCanvas.addEventListener(touchstart, function(e) { e.preventDefault(); // Prevent default touch behavior flap(); }); // Add mobile flap button control const mobileFlapBtn document.getElementById(mobileFlapBtn); mobileFlapBtn.addEventListener(touchstart, function(e) { e.preventDefault(); // Prevent default touch behavior flap(); // Add pulse animation mobileFlapBtn.classList.remove(pulse); void mobileFlapBtn.offsetWidth; // Force reflow to restart animation mobileFlapBtn.classList.add(pulse); // Add haptic feedback if available if (window.navigator && window.navigator.vibrate) { window.navigator.vibrate(50); } }); mobileFlapBtn.addEventListener(touchend, function(e) { e.preventDefault(); }); // Initial setup resizeCanvas();});// Particle system for visual effectsclass ParticleSystem { constructor() { this.particles ; } addParticle(x, y, type flap) { const count type flap ? 5 : type explosion ? 30 : type bonus ? 15 : 10; const baseSpeed type flap ? 2 : type explosion ? 4 : type bonus ? 3 : 2; const baseLife type flap ? 15 : type explosion ? 40 : type bonus ? 30 : 20; const baseSize type flap ? 2 : type explosion ? 3 : type bonus ? 4 : 2; const particleColors type bonus ? #FFD700, #FF8C00, #FF4500 : COLORS.particles; for (let i 0; i count; i++) { const angle Math.random() * Math.PI * 2; const speed Math.random() * baseSpeed + baseSpeed/2; const size Math.random() * baseSize + 1; const life Math.random() * baseLife + baseLife; const color particleColorsMath.floor(Math.random() * particleColors.length); this.particles.push({ x, y, vx: Math.cos(angle) * speed, vy: Math.sin(angle) * speed, size, life, maxLife: life, color, type, gravity: type explosion ? 0.05 : 0 }); } } update() { for (let i this.particles.length - 1; i > 0; i--) { const p this.particlesi; p.x + p.vx; p.y + p.vy; p.vy + p.gravity; p.life--; if (p.life 0) { this.particles.splice(i, 1); } } } draw(ctx) { for (const p of this.particles) { const alpha p.life / p.maxLife; ctx.globalAlpha alpha; ctx.fillStyle p.color; if (p.type explosion && Math.random() > 0.7) { ctx.shadowBlur 10; ctx.shadowColor p.color; } ctx.beginPath(); ctx.arc(p.x, p.y, p.size * (1 + (1 - alpha) * 0.5), 0, Math.PI * 2); ctx.fill(); ctx.shadowBlur 0; } ctx.globalAlpha 1; }}// Initialize particle systemconst particles new ParticleSystem();// Add a function to create a more spectacular explosion effectfunction createSpectacularExplosion(x, y) { for (let i 0; i 5; i++) { setTimeout(() > { particles.addParticle( x + (Math.random() * 40 - 20), y + (Math.random() * 40 - 20), explosion ); }, i * 70); }}function resizeCanvas() { const canvas document.getElementById(gameCanvas); const gameWrap document.getElementById(gameWrap); let w, h; if (isFullscreen) { const spaceUi isMobile ? 0 : 100; // In fullscreen mode, maintain aspect ratio but maximize size const containerWidth gameWrap.clientWidth; const containerHeight gameWrap.clientHeight - spaceUi; // Leave space for UI elements const aspectRatio BASE_W / BASE_H; if (containerWidth / containerHeight > aspectRatio) { // Container is wider than needed h containerHeight; w h * aspectRatio; } else { // Container is taller than needed w containerWidth; h w / aspectRatio; } // For mobile landscape, make sure were using maximum space if (isMobile && window.innerWidth > window.innerHeight) { // Calculate maximum height first (90% of container height) h containerHeight * 0.9; // Then calculate width based on aspect ratio w h * aspectRatio; // If width exceeds 90% of container width, recalculate if (w > containerWidth * 0.9) { w containerWidth * 0.9; h w / aspectRatio; } } } else { // Normal mode w gameWrap.clientWidth; h Math.floor(w * (BASE_H / BASE_W)); } canvas.style.width w + px; canvas.style.height h + px; // Update game scale for collision detection SCALE w / BASE_W; // Calculate speed multiplier based on canvas width // This normalizes game speed across different screen sizes speedMultiplier w / BASE_CANVAS_WIDTH; // Normalize physics values based on canvas size // For gravity, we need to scale it with the multiplier to maintain consistent falling speed normalizedG G * speedMultiplier; // For thrust, we need to scale it with the multiplier to maintain consistent jump height // On mobile, apply an additional boost factor to compensate for touch controls if (isMobile) { // Apply a stronger thrust on mobile to compensate for touch controls normalizedThrust THRUST * speedMultiplier * 1.5; } else { normalizedThrust THRUST * speedMultiplier; } if (isMobile) { speedMultiplier * 1.8; } const dpr window.devicePixelRatio || 1; canvas.width w * dpr; canvas.height h * dpr; ctx.setTransform(dpr * (w / BASE_W), 0, 0, dpr * (h / BASE_H), 0, 0);}function resetGame() { rocket { x: 80, y: BASE_H / 2, vy: 0, r: 20 }; pipes ; score 0; running true; lastPipeTime 0; lastBonusTime 0; bonusItem null; jokeDiv.textContent ; scoreSpan.textContent Score: 0; saveScoreModalBtn.style.display none; resizeCanvas();}function addPipe() { const gapY 40 + Math.random() * (BASE_H - GAP - 80); pipes.push({ x: BASE_W, gapY, passed: false });}function flap() { if (!running) return; // Use normalized thrust value for consistent jump height across all devices rocket.vy normalizedThrust; particles.addParticle(rocket.x, rocket.y, flap);}function draw() { // Clear with gradient background ctx.fillStyle COLORS.background; ctx.fillRect(0, 0, BASE_W, BASE_H); // Draw stars ctx.fillStyle COLORS.stars; for (let i 0; i 40; i++) { const size Math.random() * 2 + 1; ctx.globalAlpha Math.random() * 0.7 + 0.3; ctx.beginPath(); ctx.arc(Math.random() * BASE_W, Math.random() * BASE_H, size, 0, Math.PI * 2); ctx.fill(); } ctx.globalAlpha 1; // Draw bonus item (Trump) if (bonusItem && !bonusItem.collected) { ctx.save(); ctx.translate(bonusItem.x, bonusItem.y); const spriteLoaded bonusItem.img && bonusItem.img.complete && bonusItem.img.naturalHeight ! 0; if (spriteLoaded) { ctx.drawImage(bonusItem.img, -bonusItem.r, -bonusItem.r, bonusItem.r * 2, bonusItem.r * 2); } else { ctx.fillStyle bonusItem.colours0; ctx.beginPath(); ctx.arc(0, 0, bonusItem.r, 0, Math.PI * 2); ctx.fill(); } ctx.restore(); } // Draw pipes with modern style pipes.forEach(p > { // Pipe body ctx.fillStyle COLORS.pipes; ctx.fillRect(p.x, 0, 40, p.gapY); ctx.fillRect(p.x, p.gapY + GAP, 40, BASE_H - p.gapY - GAP); // Pipe outline ctx.strokeStyle COLORS.pipeOutline; ctx.lineWidth 2; ctx.strokeRect(p.x, 0, 40, p.gapY); ctx.strokeRect(p.x, p.gapY + GAP, 40, BASE_H - p.gapY - GAP); // Pipe caps ctx.fillStyle COLORS.pipeOutline; ctx.fillRect(p.x - 3, p.gapY - 10, 46, 10); ctx.fillRect(p.x - 3, p.gapY + GAP, 46, 10); }); // Draw rocket with Musk face const img rocket.vy 0 ? smileImg : grimaceImg; if (img.complete) { ctx.drawImage(img, rocket.x - rocket.r, rocket.y - rocket.r, rocket.r * 2, rocket.r * 2); // Add glow effect ctx.globalAlpha 0.3; ctx.shadowBlur 10; ctx.shadowColor COLORS.rocket; ctx.drawImage(img, rocket.x - rocket.r, rocket.y - rocket.r, rocket.r * 2, rocket.r * 2); ctx.shadowBlur 0; ctx.globalAlpha 1; } else { // Fallback circle ctx.beginPath(); ctx.arc(rocket.x, rocket.y, rocket.r, 0, Math.PI * 2); ctx.fillStyle COLORS.rocket; ctx.fill(); } // Draw particles particles.draw(ctx); // Draw score with glow if (score > 0) { ctx.font bold 16px Segoe UI; ctx.textAlign center; ctx.shadowBlur 5; ctx.shadowColor COLORS.score; ctx.fillStyle COLORS.score; ctx.fillText(`+${score}`, rocket.x, rocket.y - 30); ctx.shadowBlur 0; }}function update(ts) { // Apply normalized gravity to rocket for consistent falling speed rocket.vy + normalizedG; rocket.y + rocket.vy; // Check if rocket hits top or bottom if (rocket.y - rocket.r 0) { rocket.y rocket.r; rocket.vy 0; } else if (rocket.y + rocket.r > BASE_H) { gameOver(); return; } // Update particles particles.update(); // Update bonus items updateBonusItems(ts); // Calculate normalized speed based on canvas size const normalizedSpeed SPEED * speedMultiplier; // Update pipes with normalized speed pipes.forEach(p > { p.x - normalizedSpeed; if (!p.passed && p.x + 40 rocket.x) { p.passed true; score++; scoreSpan.textContent `Score: ${score}`; jokeDiv.textContent jokesMath.floor(Math.random() * jokes.length); } if (p.x rocket.x + rocket.r && p.x + 40 > rocket.x - rocket.r && (rocket.y - rocket.r p.gapY || rocket.y + rocket.r > p.gapY + GAP)) { gameOver(); return; } }); if (pipes0 && pipes0.x + 40 0) { pipes.shift(); } // Normalize pipe spawn interval based on canvas size const normalizedPipeSpawnInterval PIPE_SP / speedMultiplier; if (ts - lastPipeTime > normalizedPipeSpawnInterval) { addPipe(); lastPipeTime ts; }}function updateBonusItems(ts) { if (bonusItem) { // Use normalized speed for bonus items too bonusItem.x - SPEED * 1.2 * speedMultiplier; const dx bonusItem.x - rocket.x; const dy bonusItem.y - rocket.y; const distSq dx * dx + dy * dy; const radii bonusItem.r + rocket.r; if (!bonusItem.collected && distSq radii * radii) { score + bonusItem.points; scoreSpan.textContent `Score: ${score}`; jokeDiv.textContent `Caught ${bonusItem.name}! +${bonusItem.points} points!`; bonusItem.collected true; // Add particle effect for bonus collection for (let i 0; i 3; i++) { setTimeout(() > { particles.addParticle(rocket.x, rocket.y, bonus); }, i * 100); } } // Check if bonus is out of screen or collected if (bonusItem.x + bonusItem.r 0 || bonusItem.collected) { bonusItem null; } } else if (ts - lastBonusTime > BONUS_MIN_INTERVAL && Math.random() BONUS_SPAWN_CHANCE) { addBonusItem(); lastBonusTime ts; }}function addBonusItem() { if (bonusItem) return; const y 80 + Math.random() * (BASE_H - 160); const totalWeight BONUS_VARIANTS.reduce((sum, variant) > sum + variant.weight, 0); let randomWeight Math.random() * totalWeight; let selectedVariant BONUS_VARIANTS0; for (const variant of BONUS_VARIANTS) { randomWeight - variant.weight; if (randomWeight 0) { selectedVariant variant; break; } } bonusItem { ...selectedVariant, x: BASE_W, y, collected: false };}function gameOver() { running false; createSpectacularExplosion(rocket.x, rocket.y); jokeDiv.textContent `Crashed! Final score: ${score}`; bestScore Math.max(bestScore, score); bestSpan.textContent `Best: ${bestScore}`; restartBtn.style.display inline-block; if (score > 0 && (currentUsername || score > localStorage.getItem(muskBest))) { saveScoreModalBtn.style.display inline-block; } localStorage.setItem(muskBest, bestScore);}function loop(ts) { if (!running) return; update(ts); draw(); requestAnimationFrame(loop);} /script> /div>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]