FF7 Style Menu

much love to everyone who has supported the pilot chapters and me figuring out this story. Sketches and developments will be on the Works page or my TwitchH⚡︎B

(Read manga left to right)

Comic Reader

Enter Password to Access:

Comic Page
Shop
Shop
  • PotionPotionNEW!
  • EtherEther
  • Phoenix DownPhoenix Down
  • ElixirElixir
×Item Image
HPBLK

Artist • Producer • Illustrator

Press Kit / 2026

Hypeism single artwork
LATE
STOPPAGES
HYPERGRAPHIAnotes / fragments / recordingssamples samples samples samplesHPBLK / 2026—write / erase / record / repeatomnia exstant
01BBC INTRODUCINGRadio Play / 2026
02SONNYJIMFeature / Collaboration
03KING KASHMEREFeature / Collaboration
04CURBSIDE JONESLate Stoppages / 2026
05B.S.C CREWJapan
HPBLK portrait
(function () { function hpwInitialise() { const root = document.getElementById("hpw-works"); if (!root) { console.warn("HPW works wrapper was not found."); return; } if (root.dataset.hpwReady === "true") { return; } root.dataset.hpwReady = "true"; /* ========================================= ELEMENTS ========================================== */ const projects = [ ...root.querySelectorAll(".hpw-project") ]; const audioPlayer = document.getElementById("hpw-audio-player"); const playButton = document.getElementById("hpw-play-button"); const playIcon = document.getElementById("hpw-play-icon"); const playLabel = document.getElementById("hpw-play-label"); const downloadButton = document.getElementById("hpw-download-button"); const downloadLabel = document.getElementById("hpw-download-label"); const externalButton = document.getElementById("hpw-external-button"); const externalLabel = document.getElementById("hpw-external-label"); const projectInformation = document.getElementById("hpw-project-information"); const fixedDescription = document.getElementById("hpw-fixed-description"); const projectTitle = document.getElementById("hpw-project-title"); const projectType = document.getElementById("hpw-project-type"); const projectDescription = document.getElementById("hpw-project-description"); const projectDate = document.getElementById("hpw-project-date"); const projectNumber = document.getElementById("hpw-project-number"); const brand = document.getElementById("hpw-hypeism-brand"); if (!projects.length) { console.error("No .hpw-project sections found."); return; } let activeProject = projects[0]; let textTimer = null; /* ========================================= DROPBOX LINKS ========================================== */ function hpwAudioLink(link) { if (!link) { return ""; } if (!link.includes("dropbox.com")) { return link; } try { const url = new URL(link); url.searchParams.delete("dl"); url.searchParams.set("raw", "1"); return url.toString(); } catch (error) { return link; } } function hpwDownloadLink(link) { if (!link) { return ""; } if (!link.includes("dropbox.com")) { return link; } try { const url = new URL(link); url.searchParams.delete("raw"); url.searchParams.set("dl", "1"); return url.toString(); } catch (error) { return link.replace("dl=0", "dl=1"); } } /* ========================================= AUDIO ========================================== */ function hpwUpdatePlayButton() { const playing = !audioPlayer.paused && !audioPlayer.ended; playIcon.textContent = playing ? "Ⅱ" : "▶"; playLabel.textContent = playing ? "Pause" : "Play"; playButton.setAttribute( "aria-label", playing ? "Pause current track" : "Play current track" ); } function hpwStopAudio() { audioPlayer.pause(); try { audioPlayer.currentTime = 0; } catch (error) {} hpwUpdatePlayButton(); } function hpwLoadAudio(project) { const source = hpwAudioLink(project.dataset.audio); audioPlayer.pause(); if (!source) { audioPlayer.removeAttribute("src"); audioPlayer.load(); hpwUpdatePlayButton(); return; } if ( audioPlayer.getAttribute("src") !== source ) { audioPlayer.src = source; audioPlayer.load(); } hpwUpdatePlayButton(); } /* ========================================= DYNAMIC CONTROLS A project can now independently have: - audio - download - external link So HYPEISM can have Play + Press Assets, while other sections can have no controls. ========================================== */ function hpwUpdateControls(project) { const hasAudio = Boolean(project.dataset.audio); const hasDownload = Boolean(project.dataset.download); const hasExternal = Boolean(project.dataset.external); playButton.hidden = !hasAudio; downloadButton.hidden = !hasDownload; externalButton.hidden = !hasExternal; if (hasAudio) { hpwLoadAudio(project); } else { hpwStopAudio(); } if (hasDownload) { downloadButton.href = hpwDownloadLink( project.dataset.download ); downloadLabel.textContent = project.dataset.downloadLabel || "Download"; } else { downloadButton.href = "#"; } if (hasExternal) { externalButton.href = project.dataset.external; externalLabel.textContent = project.dataset.externalLabel || "Open"; } else { externalButton.href = "#"; } } /* ========================================= PROJECT TEXT ========================================== */ function hpwRenderProject(project) { const index = projects.indexOf(project); projectTitle.textContent = project.dataset.title || ""; projectType.textContent = project.dataset.type || ""; projectDescription.textContent = project.dataset.description || ""; projectDate.textContent = project.dataset.date || ""; projectNumber.textContent = String(index + 1).padStart(2, "0") + " / " + String(projects.length).padStart(2, "0"); hpwUpdateControls(project); } function hpwActivateProject(project) { if ( !project || project === activeProject ) { return; } activeProject = project; projects.forEach(function (item) { item.classList.toggle( "hpw-active", item === project ); }); window.clearTimeout(textTimer); projectInformation.classList.add( "hpw-changing" ); fixedDescription.classList.add( "hpw-changing" ); textTimer = window.setTimeout( function () { hpwRenderProject(project); projectInformation.classList.remove( "hpw-changing" ); fixedDescription.classList.remove( "hpw-changing" ); }, 220 ); } /* ========================================= PLAY ========================================== */ playButton.addEventListener( "click", async function () { const source = hpwAudioLink( activeProject.dataset.audio ); if (!source) { return; } try { if ( !audioPlayer.paused && !audioPlayer.ended ) { audioPlayer.pause(); return; } if ( audioPlayer.getAttribute("src") !== source ) { audioPlayer.src = source; audioPlayer.load(); } await audioPlayer.play(); } catch (error) { console.error( "Audio playback failed:", error ); } hpwUpdatePlayButton(); } ); audioPlayer.addEventListener( "play", hpwUpdatePlayButton ); audioPlayer.addEventListener( "pause", hpwUpdatePlayButton ); audioPlayer.addEventListener( "ended", hpwUpdatePlayButton ); /* ========================================= DETECT ACTIVE SECTION ========================================== */ const observer = new IntersectionObserver( function (entries) { const visible = entries .filter(function (entry) { return entry.isIntersecting; }) .sort(function (a, b) { return ( b.intersectionRatio - a.intersectionRatio ); }); if (visible.length) { hpwActivateProject( visible[0].target ); } }, { threshold: [ 0.35, 0.5, 0.65, 0.8 ] } ); projects.forEach(function (project) { observer.observe(project); }); /* ========================================= HPBLK / HYPERBOLIC / PHONETIC ANIMATION ========================================== */ if (brand) { const brandStates = [ { text: "HPBLK", className: "hpw-brand-state-wordmark" }, { text: "HYPERBOLIC", className: "hpw-brand-state-hyperbolic" }, { text: "haɪ.pɚˈbɑː.lɪk", className: "hpw-brand-state-phonetic" } ]; let brandIndex = 0; function hpwChangeBrand() { brand.classList.add( "hpw-is-changing" ); window.setTimeout( function () { brandIndex = (brandIndex + 1) % brandStates.length; brand.classList.remove( "hpw-brand-state-wordmark", "hpw-brand-state-hyperbolic", "hpw-brand-state-phonetic" ); const state = brandStates[brandIndex]; brand.textContent = state.text; brand.classList.add( state.className ); window.requestAnimationFrame( function () { brand.classList.remove( "hpw-is-changing" ); } ); }, 260 ); } window.setInterval( hpwChangeBrand, 2400 ); } /* ========================================= INITIAL STATE ========================================== */ hpwRenderProject(activeProject); hpwUpdatePlayButton(); } if ( document.readyState === "loading" ) { document.addEventListener( "DOMContentLoaded", hpwInitialise, { once: true } ); } else { hpwInitialise(); } })();