WIP: The MuSiCaL Update #1

Draft
unfunny wants to merge 27 commits from music into master
50 changed files with 1073 additions and 160 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
node_modules
nul
package-lock.json

45
BGMHUD.css Normal file
View File

@@ -0,0 +1,45 @@
/* BGM Title Box - Desktop Styles */
#bgm-title {
position: fixed !important;
top: 10px !important;
right: 10px !important;
padding: 8px 12px !important;
background-color: rgba(0, 0, 0, 0.8) !important;
color: #ffeb3b !important;
border: 2px solid yellow !important;
border-radius: 5px !important;
z-index: 9999 !important;
font-family: 'Sono', Arial, sans-serif !important;
font-size: 12px !important;
font-weight: bold !important;
text-shadow: 1px 1px 2px black !important;
opacity: 0 !important;
display: block !important;
visibility: visible !important;
box-shadow: 0 0 10px rgba(255, 235, 59, 0.3) !important;
}
#bgm-title.visible {
opacity: 1 !important;
}
/* Mobile: centered at top */
@media (max-width: 600px) {
#bgm-title {
position: fixed !important;
top: 0 !important;
left: 50% !important;
right: auto !important;
transform: translateX(-50%) !important;
width: 100% !important;
max-width: 100% !important;
border-radius: 0 0 5px 5px !important;
text-align: center !important;
box-sizing: border-box !important;
}
body {
padding-top: 40px !important;
}
#nl, img[src*="webneko"] {
margin-top: 40px !important;
}
}

18
BGM_Integration_Guide.md Normal file
View File

@@ -0,0 +1,18 @@
# BGM Workflow Guide
This guide outlines the process for implementing or modifying Background Music (BGM) functionality across any page using `Music/bgm.js`.
## What I do (Instructions in bullet points, excluding page specific logic)
* **Dependencies:** Ensure `Music/bgm.js` and necessary CSS (`BGMHUD.css`, `normalbordem.css`) are loaded on the target page.
* **Required HTML Elements:** The page must contain `<div id="bgm-title">` and `<div id="autoplay"></div>`.
* **Initialization:** Call `SongRNG('initial')` in the page's script block to start playback immediately upon loading.
* **Manual Control:** For manual control, call `MIDIjs.play(urlOrId, true)` directly when needed.
## What NOT to do (General safety for AI agents)
* Do not modify the core logic within `Music/bgm.js` unless explicitly instructed by a developer request.
* Never assume that calling `SongRNG()` is sufficient; always check if manual playback control (`MIDIjs.play()`) is required after initialization.
## When to use me (When the agent should execute this workflow, eg when asked to add BGM support to a page)
* Use this guide when implementing or modifying BGM features on any page. The process involves updating the target page's HTML/JS and committing changes to `Music/bgm.js` if core logic needs adjustment.
***

14
Dockerfile Normal file
View File

@@ -0,0 +1,14 @@
# Use the official Nginx image as a base
FROM nginx:alpine
# Copy the current project files into the container
# Copy custom Nginx configuration
COPY nginx.conf /etc/nginx/conf.d/
COPY . /usr/share/nginx/html
# Expose port 80 for testing
EXPOSE 80
EXPOSE 9000
# Configure Nginx to serve the files
CMD ["nginx", "-g", "daemon off;"]

View File

@@ -5,19 +5,32 @@
<!-- /\ you see this? this is the sum of those mobile optimizations. one line. yeah. you can leave now.-->
<title>DOOFENSMIRTZ ONLINE</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<!--gotta remember to ALSO load midijs-->
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Libre+Barcode+39+Extended+Text&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Sono&display=swap" rel="stylesheet">
<link href="/normalbordem.css" rel="stylesheet" type="text/css" media="all">
<link href="/BGMHUD.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- song title display in top-right corner -->
<div id="bgm-title">
<span id="bgm-title-content"></span>
</div>
<!-- BGM.js loads and will add .visible class when text is set -->
<script src="/Music/bgm.js"></script>
<!-- [FC2 Analyzer] //analyzer.fc2.com/ -->
<script language="javascript" src="//analyzer54.fc2.com/ana/processor.php?uid=2906964" type="text/javascript"></script>
<noscript><div align="right"><img src="//analyzer54.fc2.com/ana/icon.php?uid=2906964&ref=&href=&wid=0&hei=0&col=0" /></div></noscript>
<!-- [FC2 Analyzer] -->
<header>
<div class="autoplay-warning" id="autoplay">
</div>
<h1>Doofensmirtz Evil Incorperated Game Revewal Services</h1>
<h3 class="quote">"that's some sick beat"</h3>
<a href=/index.html><img src=/WebTV.gif alt="WebTV City" title="click me to go back!"></a>
@@ -36,4 +49,11 @@
<img src=/Vault/gameboy.gif>
</footer>
</body>
<!-- noscript fallback for BGM.js user -->
<noscript>
<div style="position:fixed;top:10px;right:10px;background:#111;color:#ffeb3b;padding:8px 12px;border:2px solid yellow;border-radius:5px;font-family:'Sono',sans-serif;font-weight:bold;z-index:1000;">
MIDI music requires JavaScript. This song title display won't work without it.
</div>
</noscript>
</body>
</html>

View File

@@ -6,18 +6,31 @@
<title>loud PNG game</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<!--gotta remember to ALSO load midijs-->
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<link href="https://fonts.googleapis.com/css2?family=Libre+Barcode+39+Extended+Text&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Sono&display=swap" rel="stylesheet">
<link href="/normalbordem.css" rel="stylesheet" type="text/css" media="all">
</head>
<link href="/BGMHUD.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- song title display in top-right corner -->
<div id="bgm-title">
<span id="bgm-title-content"></span>
</div>
<!-- BGM.js loads and will add .visible class when text is set -->
<script src="/Music/bgm.js"></script>
<!-- [FC2 Analyzer] //analyzer.fc2.com/ -->
<script language="javascript" src="//analyzer54.fc2.com/ana/processor.php?uid=2906964" type="text/javascript"></script>
<noscript><div align="right"><img src="//analyzer54.fc2.com/ana/icon.php?uid=2906964&ref=&href=&wid=0&hei=0&col=0" /></div></noscript>
<!-- [FC2 Analyzer] -->
<header>
<div class="autoplay-warning" id="autoplay">
</div>
<h1>Doofensmirtz Evil Incorperated Game Revewal Services</h1>
<h3 class="quote">"thats some sick beat"</h3>
<a href=/index.html><img src=/WebTV.gif alt="WebTV City" title="click me to go back!"></a>
@@ -48,5 +61,12 @@ HalfLife Event (bodermen event)
<footer>
<a href=index.html>go back</a>
</footer>
</body>
<!-- noscript fallback for BGM.js -->
<noscript>
<div style="position:fixed;top:10px;right:10px;background:#111;color:#ffeb3b;padding:8px 12px;border:2px solid yellow;border-radius:5px;font-family:'Sono',sans-serif;font-weight:bold;z-index:1000;">
MIDI music requires JavaScript. Song title display won't work without JS.
</div>
</noscript>
</body>
</html>

View File

@@ -8,16 +8,29 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Libre+Barcode+39+Extended+Text&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<!--gotta remember to ALSO load midijs-->
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Sono&display=swap" rel="stylesheet">
<link href="/normalbordem.css" rel="stylesheet" type="text/css" media="all">
</head>
<link href="/BGMHUD.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- song title display in top-right corner -->
<div id="bgm-title">
<span id="bgm-title-content"></span>
</div>
<!-- BGM.js loads and will add .visible class when text is set -->
<script src="/Music/bgm.js"></script>
<!-- [FC2 Analyzer] //analyzer.fc2.com/ -->
<script language="javascript" src="//analyzer54.fc2.com/ana/processor.php?uid=2906964" type="text/javascript"></script>
<noscript><div align="right"><img src="//analyzer54.fc2.com/ana/icon.php?uid=2906964&ref=&href=&wid=0&hei=0&col=0" /></div></noscript>
<!-- [FC2 Analyzer] -->
<header>
<div class="autoplay-warning" id="autoplay">
</div>
<h1>Doofensmirtz Evil Incorperated Game Revewal Services</h1>
<h3 class="quote">"thats some sick beat"</h3>
<a href=/index.html><img src=/WebTV.gif alt="WebTV City" title="click me to go back!"></a>
@@ -57,5 +70,12 @@
<footer>
<a href=index.html>go back</a>
</footer>
</body>
<!-- noscript fallback for BGM.js -->
<noscript>
<div style="position:fixed;top:10px;right:10px;background:#111;color:#ffeb3b;padding:8px 12px;border:2px solid yellow;border-radius:5px;font-family:'Sono',sans-serif;font-weight:bold;z-index:1000;">
MIDI music requires JavaScript. Song title display won't work without JS.
</div>
</noscript>
</body>
</html>

View File

@@ -8,16 +8,29 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Libre+Barcode+39+Extended+Text&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<!--gotta remember to ALSO load midijs-->
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Sono&display=swap" rel="stylesheet">
<link href="/normalbordem.css" rel="stylesheet" type="text/css" media="all">
</head>
<link href="/BGMHUD.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- song title display in top-right corner -->
<div id="bgm-title">
<span id="bgm-title-content"></span>
</div>
<!-- BGM.js loads and will add .visible class when text is set -->
<script src="/Music/bgm.js"></script>
<!-- [FC2 Analyzer] //analyzer.fc2.com/ -->
<script language="javascript" src="//analyzer54.fc2.com/ana/processor.php?uid=2906964" type="text/javascript"></script>
<noscript><div align="right"><img src="//analyzer54.fc2.com/ana/icon.php?uid=2906964&ref=&href=&wid=0&hei=0&col=0" /></div></noscript>
<!-- [FC2 Analyzer] -->
<header>
<div class="autoplay-warning" id="autoplay">
</div>
<h1>Doofensmirtz Evil Incorperated Game Revewal Services</h1>
<h3 class="quote">"thats some sick beat"</h3>
<a href=/index.html><img src=/WebTV.gif alt="WebTV City" title="click me to go back!"></a>
@@ -61,5 +74,12 @@
<footer>
<a href=index.html>go back</a>
</footer>
</body>
<!-- noscript fallback for BGM.js -->
<noscript>
<div style="position:fixed;top:10px;right:10px;background:#111;color:#ffeb3b;padding:8px 12px;border:2px solid yellow;border-radius:5px;font-family:'Sono',sans-serif;font-weight:bold;z-index:1000;">
MIDI music requires JavaScript. Song title display won't work without JS.
</div>
</noscript>
</body>
</html>

119
Music/bgm.js Normal file
View File

@@ -0,0 +1,119 @@
//Based off of the one found at not_found.html but randomizes the songs
let song = "/Music/noway.mid"
let autoplaySupported = false;
let audioLoadFailed = false;
let consecutivefails = 0;
let audioCheckDone = false;
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('error', function(e) {
if (e.target && e.target.src && e.target.src.includes('/Music/bgm/')) {
audioLoadFailed = true;
console.error('BGM: Failed to load audio file:', e.target.src);
}
}, true);
});
function SongRNG(reason = 'initial') {
//this is actually code from minima and its absolutely NOT made for this BUT WHO CARES????
let lines = ["AnotherMedium-Updated.mid", "CORE_.mid", "Death_by_Glamour.mid", "maniaStudiopolisZoneAct1.mid", "maniaStudiopolisZoneAct2.mid", "mk7_select_menu.mid", "Mpntbgm1.mid", "MPntBgk2.mid", "portal.mid", "SmashMenu.mid", "funni.mid", "utruins.mid"]
let titles = ["Another Medium", "CORE", "Death by Glamour", "Studiopolis Act 1 (Lights, Camera, Action!)", "Studiopolis Act 2", "Select a kart", "Creative Exersise", "Monkeys", "Still Alive", "Main Menu", "24 Hour Cinderella", "The Ruins"]
let games = ["Undertale", "Undertale", "Undertale", "Sonic Mania", "Sonic Mania", "Mario Kart 7", "Mario Paint", "Mario Paint", "Portal", "SSB Wii U/3DS", "Yakuza", "Undertale"]
let max = lines.length - 1;
let randint = Math.floor(Math.random() * (max + 1));
// Display song title on page
try {
let contentEl = document.getElementById('bgm-title-content');
let titleEl = document.getElementById('bgm-title');
if (contentEl) {
contentEl.textContent = titles[randint] + " - " + games[randint];
} else if (titleEl) {
titleEl.textContent = titles[randint] + " - " + games[randint];
}
if (titleEl) titleEl.classList.add('visible');
} catch(e) {
console.warn("BGM title display unavailable (element may not exist on this page)");
}
console.log('BGM: Now playing:', titles[randint], '-', games[randint], '(' + reason + ')');
song = "/Music/bgm/" + lines[randint];
MIDIjs.play(song, true);
}
function checkAudioContext() {
try {
if (audioLoadFailed) {
return false;
}
// Use MIDIjs to check actual audio status
const status = MIDIjs.get_audio_status();
if (status && status.audioMethod) {
// If we have an audio method, check if it's actually playing
if (status.playing) {
return true;
}
// Audio method exists but not playing - autoplay blocked
console.warn('BGM: Audio available but not playing (autoplay blocked)');
return false;
}
return false;
} catch(e) {
console.error('BGM: AudioContext check failed:', e);
return false;
}
}
function checkAudio() {
if (audioCheckDone) return;
try {
let apbox = document.getElementById("autoplay");
if (!apbox) {
return;
}
if (!checkAudioContext()) {
consecutivefails++;
if (consecutivefails >= 2) {
audioCheckDone = true;
console.warn('BGM: Autoplay blocked - showing modal');
apbox.innerHTML = '<p>Music is playing, but your autoplay is turned off.</p><noscript>JS is off, MIDIjs won\'t be able to play audio anyways.</noscript> <button onclick="MIDIjs.play(song, true); this.parentElement.style.display=\'none\';">Play Music</button>';
} else {
console.warn('BGM: Retry checkAudio in 3 seconds');
setTimeout(function(){
checkAudio();
}, 3000);
}
} else {
audioCheckDone = true;
console.log('BGM: Music is playing successfully');
apbox.innerHTML = '<div style="color: green;">✅ Music is playing!</div>';
apbox.style.display = 'none';
}
} catch(e) {
console.error('BGM: Error in checkAudio:', e);
}
}
function handlePlayingEvent(event) {
if (event.status === 'playing' || event.time !== undefined) {
// Music is actively playing - checkAudio will handle showing success
}
}
SongRNG('initial');
let isPlaying = false;
console.log('BGM: Initializing...');
autoplaySupported = checkAudioContext();
setTimeout(function(){
checkAudio();
}, 3000);
MIDIjs.player_callback = function(event) {
handlePlayingEvent(event);
};

Binary file not shown.

BIN
Music/bgm/BSXSoundlink.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
Music/bgm/CORE_.mid Normal file

Binary file not shown.

Binary file not shown.

BIN
Music/bgm/MPntBkg2.mid Normal file

Binary file not shown.

BIN
Music/bgm/Mpntbgm1.mid Normal file

Binary file not shown.

BIN
Music/bgm/Sample3BSX.mp3 Normal file

Binary file not shown.

BIN
Music/bgm/SmashMenu.mid Normal file

Binary file not shown.

BIN
Music/bgm/funni.mid Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Music/bgm/portal.mid Normal file

Binary file not shown.

Binary file not shown.

BIN
Music/bgm/utruins.mid Normal file

Binary file not shown.

BIN
Music/noway.mid Normal file

Binary file not shown.

BIN
Music/vault1.mid Normal file

Binary file not shown.

BIN
Music/vault2.mid Normal file

Binary file not shown.

BIN
Music/vault3.mid Normal file

Binary file not shown.

12
SKILL.md Normal file
View File

@@ -0,0 +1,12 @@
## What I do (Instructions in bullet points, excluding page specific logic)
### **Workflow Steps:**
* **Dependencies Check:** Verify that `Music/bgm.js`, `BGMHUD.css`, MIDI.js, and `normalbordem.css` are loaded on the target page.
* **Required HTML Elements:** The page must contain `<div id="bgm-title">` and `<div id="autoplay"></div>`.
* **Manual Control:** For manual control, call `MIDIjs.play(urlOrId, true)` directly in your page's script block.
## What NOT to do
* Do not modify the core logic within `Music/bgm.js`.
## When to use me (When the agent should execute this workflow, eg when asked to add BGM support to a page)
* Use this guide when implementing or modifying BGM features on any page. The process involves updating the target page's HTML/JS.

335
Vault/about.html Normal file
View File

@@ -0,0 +1,335 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--<title>DOOFENSMIRTZ ONLINE</title>-->
<title>the vault.</title>
<!-- being lazy and re-using the same CSS > making a new one -->
<link href="/eternalrain/bliss.css" rel="stylesheet" type="text/css" media="all">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Libre+Barcode+39+Extended+Text&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Sono&display=swap" rel="stylesheet">
<script type="text/javascript">
// <![CDATA[
var speed=33; // lower number for faster
var drops=100; // number of 'drops'
var colour="#999"; // colour of drops (generally grey!)
/***************************\
* Rainy Afternoon Effect *
*(c)2011-13 mf2fm web-design*
* http://www.mf2fm.com/rv *
* DON'T EDIT BELOW THIS BOX *
\***************************/
var flks=new Array();
var flkx=new Array();
var flky=new Array();
var fldy=new Array();
var swide, shigh, boddie;
var ie_version=(navigator.appVersion.indexOf("MSIE")!=-1)?parseFloat(navigator.appVersion.split("MSIE")[1]):false;
function addLoadEvent(funky) {
var oldonload=window.onload;
if (typeof(oldonload)!='function') window.onload=funky;
else window.onload=function() {
if (oldonload) oldonload();
funky();
}
}
addLoadEvent(storm);
function storm() { if (document.getElementById) {
var r1, r2;
boddie=document.createElement("div");
boddie.style.position="fixed";
boddie.style.top="0px";
boddie.style.left="0px";
boddie.style.width="1px";
boddie.style.height="1px";
boddie.style.overflow="visible";
boddie.style.backgroundColor="transparent";
document.body.appendChild(boddie);
set_width();
for (var i=0; i<drops; i++) {
flks[i]=createDiv(16, 2, "transparent");
r1=createDiv(6, 2, colour);
r1.style.top="10px";
r1.style.left="0px";
flks[i].appendChild(r1);
r2=createDiv(10, 2, colour);
r2.style.top="0px";
r2.style.left="0px";
if (ie_version && ie_version<10) r2.style.filter="alpha(opacity=25)";
else r2.style.opacity=0.25;
flks[i].appendChild(r2);
flkx[i]=2*Math.floor(Math.random()*swide/2);
flky[i]=Math.floor(Math.random()*shigh);
fldy[i]=2+Math.floor(Math.random()*4);
flks[i].style.left=flkx[i]+"px";
flks[i].style.top=flky[i]+"px";
boddie.appendChild(flks[i]);
}
setInterval("cats_and_dogs()", speed);
}}
function createDiv(height, width, colour) {
var div=document.createElement("div");
div.style.position="absolute";
div.style.height=height+"px";
div.style.width=width+"px";
div.style.overflow="hidden";
div.style.backgroundColor=colour;
return (div);
}
window.onresize=set_width;
function set_width() {
var sw_min=999999;
var sh_min=999999;
if (document.documentElement && document.documentElement.clientWidth) {
sw_min=document.documentElement.clientWidth;
sh_min=document.documentElement.clientHeight;
}
if (typeof(self.innerWidth)!="undefined" && self.innerWidth) {
if (self.innerWidth<sw_min) sw_min=self.innerWidth;
if (self.innerHeight<sh_min) sh_min=self.innerHeight;
}
if (document.body.clientWidth) {
if (document.body.clientWidth<sw_min) sw_min=document.body.clientWidth;
if (document.body.clientHeight<sh_min) sh_min=document.body.clientHeight;
}
if (sw_min==999999 || sh_min==999999) {
sw_min=800;
sh_min=600;
}
swide=sw_min-2;
shigh=sh_min;
}
function cats_and_dogs(c) {
var i, x, o=0;
for (i=0; i<drops; i++) {
flky[i]+=fldy[i];
if (flky[i]>=shigh-16) {
flky[i]=-16;
fldy[i]=2+Math.floor(Math.random()*4);
flkx[i]=2*Math.floor(Math.random()*swide/2);
flks[i].style.left=flkx[i]+"px";
}
flks[i].style.top=flky[i]+"px";
}
}
// ]]>
</script>
<!--mountains-->
<script type="text/javascript">
// <![CDATA[
var ranges=4; // number of mountain ranges
// all colours must be in format '#NNNNNN', not 'red' or 'rgb(7,8,9)'
var height=160; // height in pixels of heighest mountains - ones nearer the front will be smaller
var foreground='#001d41'; // purple
var background='#00070d'; // grey
/****************************
* Rolling Mountains Effect 2*
* (c)2014+ mf2fm web-design *
* http://www.mf2fm.com/rv *
* DON'T EDIT BELOW THIS BOX *
*****************************/
var swide=800;
var shigh=600;
var sleft=0;
var scwid=screen.width;
var dx=0;
var mranges=new Array();
var mposit=new Array();
var mlent=new Array();
var moff=new Array();
if (typeof('addRVLoadEvent')!='function') function addRVLoadEvent(funky) {
var oldonload=window.onload;
if (typeof(oldonload)!='function') window.onload=funky;
else window.onload=function() {
if (oldonload) oldonload();
funky();
}
}
addRVLoadEvent(climb_every_mountain);
function climb_every_mountain() {
var c, i, j, k, l, t, x;
set_width();
for (i=0; i<ranges*2; i+=2) {
still_is_the_night(i);
still_is_the_night(i+1);
j=0;
k=Math.floor((0.4+Math.random()*0.6)*height*(ranges-i/2)/ranges);
l=0;
if (ranges>1) {
c=Math.floor(ranges-i/2);
c=colour_central((c-1)/(ranges-1));
}
else c=foreground;
do {
if (j<scwid) x=Math.floor((0.4+Math.random()*0.5)*height*(ranges-i/2)/ranges);
else x=k;
if (!j) l=x;
t=createTriangle(x, c);
t.style.left=j+"px";
mranges[i].appendChild(t);
t=createTriangle(x, c);
t.style.left=k-j-2*x+"px";
mranges[i+1].appendChild(t);
j+=x;
}
while (j<=scwid+height);
mlent[i]=mlent[i+1]=j-l;
mposit[i]=0;
mposit[i+1]=-mlent[i+1]-x+l;
moff[i]=-l;
moff[i+1]=2*j-mlent[i+1]-2*l;
mranges[i].style.left=mposit[i]+moff[i]+"px";
mranges[i+1].style.left=mposit[i+1]+moff[i+1]+"px";
document.body.appendChild(mranges[i]);
document.body.appendChild(mranges[i+1]);
}
setInterval("move_every_mountain()", 50);
}
function colour_central(p) {
var i, h1, h2, temp;
temp="#";
for (i=1; i<6; i+=2) {
h1=parseInt(foreground.substring(i,i+2),16);
h2=parseInt(background.substring(i,i+2),16);
temp+=dechex(Math.floor(h1+(h2-h1)*p));
}
return (temp);
}
function dechex(dec) { return ((dec<16)?"0":"")+dec.toString(16); }
function still_is_the_night(i) {
mranges[i]=document.createElement('div');
mranges[i].style.position='fixed';
mranges[i].style.zIndex=i;
mranges[i].style.left='0px';
mranges[i].style.bottom='0px';
mranges[i].style.width='100%';
mranges[i].style.opacity=Math.floor(1+i/2)/ranges;
}
function move_every_mountain() {
var i;
for (i=0; i<ranges*2; i++) {
mposit[i]+=dx*(Math.floor(i/2)+1);
if (mposit[i]>scwid) mposit[i]-=2*mlent[i];
if (mposit[i]<-mlent[i]) mposit[i]+=2*mlent[i];
mranges[i].style.left=mposit[i]+moff[i]+"px";
}
}
window.onresize=set_width;
function set_width() {
var sw_min=999999;
var sh_min=999999;
if (document.documentElement && document.documentElement.clientWidth) {
if (document.documentElement.clientWidth>0) sw_min=document.documentElement.clientWidth;
if (document.documentElement.clientHeight>0) sh_min=document.documentElement.clientHeight;
}
else if (typeof(self.innerWidth)=='number' && self.innerWidth) {
if (self.innerWidth>0 && self.innerWidth<sw_min) sw_min=self.innerWidth;
if (self.innerHeight>0 && self.innerHeight<sh_min) sh_min=self.innerHeight;
}
else if (document.body.clientWidth) {
if (document.body.clientWidth>0 && document.body.clientWidth<sw_min) sw_min=document.body.clientWidth;
if (document.body.clientHeight>0 && document.body.clientHeight<sh_min) sh_min=document.body.clientHeight;
}
if (sw_min==999999 || sh_min==999999) {
sw_min=800;
sh_min=600;
}
swide=sw_min;
shigh=sh_min;
}
function createTriangle(x, colour) {
var div=document.createElement("div");
div.style.position='absolute';
div.style.left='0px';
div.style.bottom='0px';
div.style.height='0px';
div.style.width='0px';
div.style.borderStyle='solid';
div.style.borderColor=colour+' transparent';
div.style.borderWidth='0px '+x+'px '+x+'px '+x+'px';
return (div);
}
window.onscroll=set_scroll;
function set_scroll() {
if (typeof(self.pageYOffset)=='number') {
sleft=self.pageXOffset;
}
else if (document.body && (document.body.scrollTop || document.body.scrollLeft)) {
sleft=document.body.scrollLeft;
}
else if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft)) {
sleft=document.documentElement.scrollLeft;
}
else {
sleft=0;
}
}
document.onmousemove=mouse;
function mouse(e) {
var x;
if (e) x=e.pageX;
else {
x=event.x;
set_scroll();
x+=sleft;
}
dx=Math.floor(-1.5+4*(x-sleft)/swide);
}
// ]]>
</script>
</head>
<body>
<script>NekoType="black"</script>
<h1 id=nl><script src="https://webneko.net/n20171213.js"></script></h1>
<!--<h1>Welcome to doofensmirtz</h1>-->
<header>
<h1>About DoofOnline</h1>
<p>last updated 11/5/25</p>
<h3 class="quote">"Why was any and everything alive?"</h3>
<p>-Miracle Musical</p>
<p>welcome to doofensmirtz online! i'm your host, <strong title="AKA Retro1080">unfunny</strong>. this is a small passion project of mine and <noscript>... what's this? you have javascript turned off? lame. go turn it on lol. uhhhh.... anyways, this was</noscript> my first HTML project that i actually published online :) <br> things have changed a lot in the almost 3 years since then, so here we are</p>
<br>
<img src="/anibar.gif">
<br>
<h2>but why?</h2>
<p>i wanted to try to teach myself (very basic, lol) HTML. it's also a place for me to publish and link to all of the other shenanigans i've been up to.</p>
<p>there's a lot of unused content scattered around the site from various projects. i'll link you a couple.</p> <a href="/eternalrain/index.html" title="alt of eternal bliss"><p>Eternal Rain</p></a> <a href="/eternalbliss/" title="this was a chatroom, down for renovations rn but some day it will be back on the home page"><p>Eternal Bliss (Chatroom)</p></a> <a href="/staging/index.html" title="dunno"><p>Beta site warning (Unused)</p></a> <a href="/staging/conchkext.html" title="Page that a couple of my apps and scripts use to make sure that they have a functional connection."><p>Captive Portral Test Page</p></a>
<h6><i>tip: hover over each link for some backstory!</i></h6>
<h2>you know the name is misspelled, right?</h2>
<p>yeah about that lol</p>
<p>i forgot the "h" in the name when registering the site, and i just kinda ran with it ever since</p>
<p>acutally there's a mirror i set up which is CORRECTLY spelled but it will auto redirect here if you don't specificaly go to like index2.html or something</p>
<h2>the beta site is selfhosted?</h2>
<p>correct! that's partially for storage and upload reasons but also because a lot of the more experimental branches <br>(for example, the MUSIC branch which is live on the beta site rn) contain file types that can't be uploaded to neocities (namely, MIDI and MP3))</p>
<p>if you want to check it out, it's at <a href="https://evil.randomhack.com/">evil.randomhack.com</a></p>
<h2>contact?</h2>
<p>uhh i don't have an email setup for this yet BUT feel free to message me on discord: @unfunny_user</p>
<iframe src="/buttons.html" height="125px" width="30%" frameborder="0"></iframe>
</header>

View File

@@ -8,6 +8,8 @@
<!-- being lazy and re-using the same CSS > making a new one -->
<link href="vault.css" rel="stylesheet" type="text/css" media="all">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<!--gotta remember to ALSO load midijs-->
<script type='text/javascript' src='https://www.midijs.net/lib/midi.js'></script>
<link href="https://fonts.googleapis.com/css2?family=Libre+Barcode+39+Extended+Text&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
@@ -15,13 +17,15 @@
</head>
<body>
<div class="autoplay-warning" id="autoplay">
</div>
<script>NekoType="black"</script>
<h1 id=nl><script src="https://webneko.net/n20171213.js"></script></h1>
<!--<h1>Welcome to doofensmirtz</h1>-->
<header>
<h1>Doofensmirtz Evil Incorperated Storage Services</h1>
<h3 class="quote">"NOT open to the public, dont even ask."</h3>
<p>-Dr. Heinz</p>
<h3 class="quote">"Guarenteed to update some time in the next 9 quintillion years!"</h3>
<p>-unfunny</p>
</header>
<p>mostly just random stuff and storage for neat things</p>
<h2>links</h2>
@@ -90,4 +94,53 @@
<p class=quote>run by your cat overlords here at neocities.</p>
<a href=/CAT.html> <img src="/cat overlord.png"> </a>
</body>
<script>
function songmabober() {
//this is actually code from minima and its absolutely NOT made for this BUT WHO CARES????
//@ts-check
randinte:
console.log("yo whatap")
console.log("picking a song...")
let min = 0
let max = 3
let scarynumber = Math.random() * (max - min + 1) + min;
let randint = Math.round(scarynumber)
if (randint > max) {
console.warn("number is bigger than ", max)
console.warn("running it back")
songmabober();
}
let song = "/Music/vault" + randint + ".mid"
//randomize the songmabobers
//just in case the user has autoplay disabled because they probably do
MIDIjs.play(song, true);
//idk if it's playing
isplaying = "idk"
//random ahh google code
MIDIjs.player_callback = function(event) {
// Check if event object contains time (indicating playback)
if (event && event.time !== undefined) {
isplaying = "true";
} else {
isplaying = "false";
}
};
var apbox = document.getElementById("autoplay");
console.log("waiting a bit for midijs")
setTimeout(function(){
checkAudio()
}, 5000)
function checkAudio() {
if (isplaying == "false") {
console.log("music isn't playing. i blame chrome")
document.getElementById("autoplay").innerHTML = "<p>Music is playing, but your autoplay is turned off.</p><noscript>JS is off, MIDIjs won't be able to play audio anyways.</noscript> <button onclick=MIDIjs.play(song, true)>Play Music</button>"
} else if (isplaying == "true"){
console.log("music do be the playing")
} else if (isplaying == "idk") {
console.warn("idk if there be music")
}
}
}
songmabober()
</script>
</html>

View File

@@ -21,7 +21,7 @@ href="https://webneko.net">Neko</a></h1>
<header>
<h1>Doofensmirtz Evil Incorperated Storage Services</h1>
<h3 class="quote">"Futures, made of, virual insanity!"</h3>
<p>-jamiroquai/p>
<p>-jamiroquai</p>
</header>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Falbum.link%2Fi%2F1711512375&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<!--<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F1636546199&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>-->
@@ -42,7 +42,13 @@ href="https://webneko.net">Neko</a></h1>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F1524983985&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Falbum.link%2Fi%2F299710177&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Falbum.link%2Fi%2F1546560761&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F1818714921&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F1818714933&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F1524983985&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F1768087319&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Falbum.link%2Fi%2F1658279822&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F282478837&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<!--new song uploads from share sheet go here-->
<!--robots cant see?-->

View File

@@ -1,18 +0,0 @@
name: Deploy to Neocities
description: Deploys the site to Neocities on release events.
on:
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy to Neocities
env:
NEOCITIES_USERNAME: ${{ secrets.NEOCITIES_USERNAME }}
NEOCITIES_TOKEN: ${{ secrets.NEOCITIES_TOKEN }}
run: |
npx neocities-cli upload --site mysite.neocities.org . --exclude actions/ --exclude .git

View File

@@ -1,39 +0,0 @@
// Set the date we're counting down to
var countDownDate = new Date("Jun 6, 2025 03:00:00");
function getBusinessDays(startDate, endDate) {
var day = startDate.getDay();
var businessDays = 0;
while (startDate <= endDate) {
if (day !== 0 && day !== 6) { // Skip weekends (Sunday=0, Saturday=6)
businessDays++;
}
startDate.setDate(startDate.getDate() + 1);
day = startDate.getDay();
}
return businessDays;
}
//Update the count down every 1 second
var x = setInterval(function() {
//Get today's date and time
var now = new Date();
var distance = getBusinessDays(now, countDownDate);
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance);
var hours = Math.floor((distance % 1) * 24);
var minutes = Math.floor((hours % 1) * 60);
var seconds = Math.floor((minutes % 1) * 60);
// Display the result in the element with id="demo"
document.getElementById("demo").innerHTML = days + "d " + hours + "h "
+ minutes + "m " + seconds + "s remain";
// If the count down is finished, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demop").innerHTML = "freedom, at last";
}
}, 1000);

View File

@@ -1,3 +1,4 @@
// THIS SHOULD NOT BE LOADED - Legacy redirect script, remove from all pages
function isMyAppUA(testUA)
{
if(testUA == undefined) return false;

View File

@@ -7,6 +7,10 @@
color:white;
padding-bottom: 100px;
}
a {
color: darkgreen;
filter: drop-shadow(1 1 5 black);
}
.vapor {
position: absolute;
bottom: 0;

View File

@@ -15,33 +15,53 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<script src=compat.js></script>
<!--gotta remember to ALSO load midijs-->
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<link href="https://fonts.googleapis.com/css2?family=Sono&display=swap" rel="stylesheet">
<link href="/normalbordem.css" rel="stylesheet" type="text/css" media="all">
<link href="/BGMHUD.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- song title display in top-right corner -->
<div id="bgm-title">
<span id="bgm-title-content"></span>
</div>
<!-- BGM.js loads and will add .visible class when text is set -->
<script src="/Music/bgm.js"></script>
<div class="autoplay-warning" id="autoplay">
</div>
<!-- [FC2 Analyzer] //analyzer.fc2.com/ -->
<script language="javascript" src="//analyzer54.fc2.com/ana/processor.php?uid=2906964" type="text/javascript"></script>
<noscript><div align="right"><img src="//analyzer54.fc2.com/ana/icon.php?uid=2906964&ref=&href=&wid=0&hei=0&col=0" /></div></noscript>
<!-- [FC2 Analyzer] -->
<header>
<!--<h1 class="neon">Doofensmirtz Evil Incorperated</h1>-->
<iframe class="animlogo "src="newlogo.html" height="140" width="480" frameborder="0"></iframe>
<h3>revamp coming whenever </h3>
<p>-retro</p>
<iframe class="animlogo"src="newlogo.html" height="140" width="480" frameborder="0"></iframe>
<h3>What if the earth was purple?</h3>
<h4>purble palace?</h4>
<p>-unfunny</p>
<iframe width="100%" height="52" src="https://odesli.co/embed/?url=https%3A%2F%2Fsong.link%2Fi%2F938232964&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<script>NekoType="black"</script>
<h1 id=nl><script src="https://webneko.net/n20171213.js"></script><a
href="https://webneko.net"></a></h1>
<a href="javascript("history.back();")"><img src=/WebTV.gif alt="WebTV City"></a>
<a href="javascript:history.back();"><img src=/WebTV.gif alt="WebTV City"></a>
</header>
<a href=/Vault/index.html>Vault</a>
<a href=/Games/index.html>Game ratings</a>
<a href=/eternalbliss/index.html>e t e r n a l b l i s s</a>
<a href="https://vote.pollcode.com/89737624">Video Game OST Poll</a>
<!--Coming back- probably never. IF i get the AI Infinite "Ikea" concept to work then it might.-->
<!-- Don't get your hopes up, there's no way i'm going to be able to just *run* something like that.-->
<!--<a href=/eternalbliss/index.html>e t e r n a l b l i s s</a> -->
<a href="https://odysee.com/@DoofOnline:1?r=9SCGZfYk6mBWdud9NuYVcbUbUpzS4QhY"><p>Animation</p></a>
<a href="https://doofensmirtzevil.blogspot.com/"><p>The Bloginator</p></a>
<!--<a href="https://evil.randomhack.com/"><strong>New beta website</strong></a>-->
<!--<a href="https://evil.randomhack.com/"><strong>Beta website</strong></a>-->
<br>
<!--Make it make senseeeeeee-->
<a href="/Vault/about.html">About</a>
<br>
<img src=anibar.gif>
<br>
@@ -61,8 +81,12 @@ href="https://webneko.net"></a></h1>
<a href="//clap.fc2.com/post/doofensmirtzonline/?url=https%3A%2F%2Fdoofensmirtzevil.neocities.org%2F&title=DOOFENSMIRTZ+ONLINE" target="_blank" title="Web Clap by FC2"><img src="//clap.fc2.com/images/button/black/doofensmirtzonline?url=https%3A%2F%2Fdoofensmirtzevil.neocities.org%2F&amp;lang=en" alt="Web Clap by FC2" style="border:none;" /></a>
<!-- FC2 Clap tag ends here -->
<h6>although no-one is ever going to sign this thing</h6>
<h6 style="color: grey;">it would be pretty cool though</h6>
<h3>featured thingamabob</h3>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Falbum.link%2Fi%2F1809298605&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<iframe width="100%" height="150" src="https://odesli.co/embed/?url=https%3A%2F%2Falbum.link%2Fi%2F938227937&theme=dark" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-presentation allow-popups allow-popups-to-escape-sandbox" allow="clipboard-read; clipboard-write"></iframe>
<br>
<h6>Don't worry, the featured mabober gets changed at least once every cycle</h6>
<h6>probably (Who Knows 😁)</h6>
<br>
<p class="normalvaporwave">mmm crunchy xen crystals</p>
<br>
@@ -79,3 +103,10 @@ Current Viewers:<script language="javascript" type="text/javascript" src="//coun
<!--<h6 style="color: grey">psst. if you get tired of all the flashy stuff, <a href=index2.html style="color: grey;">checck out the lite version of this site</a>.</h6>-->
<h6 style="color: grey">brb, lite mode site is broken rn</h6>
</body>
<!-- noscript fallback for BGM.js user -->
<noscript>
<div style="position:fixed;top:10px;right:10px;background:#111;color:#ffeb3b;padding:8px 12px;border:2px solid yellow;border-radius:5px;font-family:'Sono',sans-serif;font-weight:bold;z-index:1000;">
MIDI music requires JavaScript. This song title display won't work without it.
</div>
</noscript>
</body>

View File

@@ -20,34 +20,9 @@
<header>
<!--<h1 class="neon">Doofensmirtz Evil Incorperated</h1>-->
<img src="newlogo.png" height="140" width="480">
<iframe src="newlogo.html" height="140" width="480" frameborder="0"></iframe>
<h3 id="intro">we're leaving 2025 haa</h3>
<p id="demo"></p>
<br>
<a href="winterrunning.html"<h4>countdown room</h4></a>
<!--Temp random gen "borrowed" from minima-->
<script>
//@ts-check
console.log("yo whatap")
function newLine() {
console.log("GENERATING NEW FUNNI")
let min = 0
let max = 32
let scarynumber = Math.random() * (max - min + 1) + min;
let randint = Math.round(scarynumber)
let lines = ["vexbolts mass unfollowing spread the word", "we are leaving vexbolts in 2024", "2025 please be better", "2025 wooop", "go go go", "I JUST WANT THIS YEAR TO BE OVERR", "yipee 2025", "now nothing bad happen this year, ok?", "2025 here i come", "its almost that year where michealsoft make you buy a new copy of windows", "idek", "go check out the <a href='winterr.html'>thingymabober</a>", "nah 2025 microsoft bring back webTV", "CONNECTING TO WEBTV 2025", "2025 here we go", "listening to the balatro OST while writing all these was awesome lol", "nah webTV 2025 edition", "i was suposed to write somthing here, but i didn't", "BREAKING NEWS: console wars over, Wii declared best console", "Gordon dosent need to hear all this, he's a highly trained professional!", "we are going back to da future", "let's hope this year's better than the last", "genos ult tsb = PC crasher", "browse our warez", "its gaming time mortyyyy", "MORTY I'M A PICKLE","chromebook crashing simulator 2025","real","WE ARE LEAVING VEXBOLTSS","' Excuse me, I'm in need of medical attention! '","meeedic","zat was not medicine","yeah","2025!"]
console.log("random number:", randint)
//32 lines randomly picked, probably will sometimes return "undefined" i hate JS
console.log("line:", lines[randint])
document.getElementById("intro").innerHTML = lines[randint]
}
window.addEventListener('DOMContentLoaded', newLine);
</script>
<!--end-->
<h3>What if the earth was purple?</h3>
<h4>purble palace?</h4>
<p>-unfunny</p>
<br>
<a href="javascript:(history.back();)"><img src=/firework.gif alt="Fireworks"></a>
@@ -55,9 +30,12 @@ window.addEventListener('DOMContentLoaded', newLine);
</header>
<a href=/Vault/index.html>Vault</a>
<a href=/Games/index.html>Game ratings</a>
<a href=/eternalbliss/index.html>e t e r n a l b l i s s</a>
<a href="https://vote.pollcode.com/89737624">Video Game OST Poll</a>
<!-- <a href=/eternalbliss/index.html>e t e r n a l b l i s s</a> -->
<a href="https://odysee.com/@DoofOnline:1?r=9SCGZfYk6mBWdud9NuYVcbUbUpzS4QhY"><p>Animation</p></a>
<a href="https://doofensmirtzevil.blogspot.com/"><p>The Bloginator</p></a>
<!--<a href="https://evil.randomhack.com/"><strong>Beta website</strong></a>-->
<br>
<a href="/Vault/about.html">About</a>
<br>
<hr style="color: yellow;">
<br>
@@ -74,6 +52,7 @@ window.addEventListener('DOMContentLoaded', newLine);
<a href="//clap.fc2.com/post/doofensmirtzonline/?url=https%3A%2F%2Fdoofensmirtzevil.neocities.org%2F&title=DOOFENSMIRTZ+ONLINE" target="_blank" title="Web Clap by FC2"><img src="//clap.fc2.com/images/button/black/doofensmirtzonline?url=https%3A%2F%2Fdoofensmirtzevil.neocities.org%2F&amp;lang=en" alt="Sign the Guest-Loginator!" style="border:none;" /></a>
<!-- FC2 Clap tag ends here -->
<h6>although no-one is ever going to sign this thing</h6>
<h6 style="color: grey;">it would be pretty cool though</h6>
<p class="normalvaporwave">mmm crunchy xen crystals</p>
<br>
<hr style="color: yellow;">

BIN
newlogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@@ -5,7 +5,10 @@
<link>https://doofensmirtzevil.neocities.org</link>
<description>check out some new stuff. or not.</description>
<item>
<title>link central is out!</title>
<title>this feed is ancient. get out.</title>
<description>seriously, get out. go to the rss linked on the homepage, looser</title>
</item>
<item>
<description><h1>hello!</h1><p>the link central is finally a thing after forever.</p><h6>now go check it out or something</h6></description>
</item>
</channel>

9
nginx.conf Normal file
View File

@@ -0,0 +1,9 @@
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}

View File

@@ -1,6 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<!--No way? No way! No way! No way! No way? No way! No way! No way! No way!-->
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<style>
@keyframes scrollText {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
.scrolling-text {
white-space: nowrap;
animation: scrollText 25s linear infinite;
font-family: 'Sono', sans-serif;
color: #ffffff;
font-size: 18px;
padding: 10px;
position: absolute;
right: 0;
}
</style>
<meta charset="UTF-8">
@@ -17,13 +35,18 @@
<body>
<!-- fc2 analyzer here to let me know what page stuff broke at..-->
<!-- [FC2 Analyzer] //analyzer.fc2.com/ -->
<script language="javascript" src="//analyzer54.fc2.com/ana/processor.php?uid=2906964" type="text/javascript"></script>
<noscript><div align="right"><img src="//analyzer54.fc2.com/ana/icon.php?uid=2906964&ref=&href=&wid=0&hei=0&col=0" /></div></noscript>
<script language="javascript" src="https://analyzer54.fc2.com/ana/processor.php?uid=2906964" type="text/javascript"></script>
<noscript><div align="right"><img src="https://analyzer54.fc2.com/ana/icon.php?uid=2906964&ref=&href=&wid=0&hei=0&col=0" /></div></noscript>
<!-- [FC2 Analyzer] -->
<script>NekoType="black"</script>
<h1 id=nl><script src="https://webneko.net/n20171213.js"></script><a
href="https://webneko.net">Neko</a></h1>
<div class="autoplay-warning" id="autoplay">
</div>
<!--<div class="scrolling-text">No way? No way! No way! No way! No way? No way! No way! No way!</div> -->
<h1>404</h1>
<div class="scrolling-text">No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way! No way? No way! No way! No way!</div>
<br>
<h3>Page Not Exsistant At This Time</h3>
<p class="blink">whatcha tryna do pardner</p>
whoops counter
@@ -31,5 +54,35 @@ href="https://webneko.net">Neko</a></h1>
<!-- FC2 Counter Starts here -->
<script language="javascript" type="text/javascript" src="//counter1.fc2.com/counter.php?id=89507858"></script><noscript><img src="//counter1.fc2.com/counter_img.php?id=89507858" /></noscript>
<!-- FC2 Counter Ends here -->
</body>
<script>
//just in case the user has autoplay disabled because they probably do
MIDIjs.play('/Music/noway.mid', true);
//idk if it's playing
isplaying = "idk"
//random ahh google code
MIDIjs.player_callback = function(event) {
// Check if event object contains time (indicating playback)
if (event && event.time !== undefined) {
isplaying = "true";
} else {
isplaying = "false";
}
};
var apbox = document.getElementById("autoplay");
console.log("waiting a bit for midijs")
setTimeout(function(){
checkAudio()
}, 5000)
function checkAudio() {
if (isplaying == "false") {
console.log("music isn't playing. i blame chrome")
document.getElementById("autoplay").innerHTML = "<p>Music is playing, but your autoplay is turned off.</p><noscript>JS is off, MIDIjs won't be able to play audio anyways.</noscript> <button onclick=MIDIjs.play(`/Music/noway.mid`, true)>Play Music</button>"
} else if (isplaying == "true"){
console.log("music do be the playing")
} else if (isplaying == "idk") {
console.warn("idk if there be music")
}
}
</script>
</body>
</html>

View File

@@ -1 +0,0 @@

23
serve.py Normal file
View File

@@ -0,0 +1,23 @@
#!/usr/bin/env python3
"""Simple HTTP server for testing - runs in background"""
import http.server
import socketserver
import subprocess
import sys
PORT = 8080
class Handler(http.server.SimpleHTTPRequestHandler):
def log_message(self, format, *args):
pass # Suppress logging
def end_headers(self):
self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate')
self.send_header('Expires', '0')
super().end_headers()
if __name__ == "__main__":
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Server running at http://localhost:{PORT}")
sys.stdout.flush()
httpd.serve_forever()

View File

@@ -1,53 +0,0 @@
//time since
// Set the date we're counting from
//var countFromDate = new Date("Jun 11, 2025 5:00:00").getTime();
// Update the count every 1 second
//var x = setInterval(function() {
// Get today's date and time
//var nowsk = new Date().getTime();
// Find the distanceSK between now and the count from date
//var distanceSK = now - countFromDate;
// Time calculations for daysSK, hours, minutes and secondsSK
//var daysSK = Math.floor(distanceSK / (1000 * 60 * 60 * 24));
//var hours = Math.floor((distanceSK % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
//var minutes = Math.floor((distanceSK % (1000 * 60 * 60)) / (1000 * 60));
//var secondsSK = Math.floor((distanceSK % (1000 * 60)) / 1000);
// Display the result in the element with id="skype"
// document.getElementById("skype").innerHTML = "you have " + daysSK + "d " + hours + "h "
// + minutes + "m " + secondsSK + " until your freedom";
//}, 1000);
//this is a countdown untill school ends
//count down
// Set the date we're counting down to
var countDownDateS = new Date("May 6, 2025 00:00:00").getTime();
//Update the count down every 1 second
var x = setInterval(function() {
//Get today's date and time
var nowsk = new Date().getTime();
// Find the distance between nowsk and the count down date
var distanceSK = countDownDateS - nowsk;
// Time calculations for daysSK, hours, minutes and secondsSK
var daysSK = Math.floor(distanceSK / (1000 * 60 * 60 * 24));
var hoursSK = Math.floor((distanceSK % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutesSK = Math.floor((distanceSK % (1000 * 60 * 60)) / (1000 * 60));
var secondsSK = Math.floor((distanceSK % (1000 * 60)) / 1000);
// Display the result in the element with id="skype"
document.getElementById("skype").innerHTML = daysSK + "d " + hoursSK + "h "
+ minutesSK + "m " + secondsSK + "s remain until doomsday.";
// If the count down is finished, write some text
if (distanceSK < 0) {
clearInterval(x);
document.getElementById("skype").innerHTML = "ggs boys";
}
}, 1000);

51
test-bgm.html Normal file
View File

@@ -0,0 +1,51 @@
<!DOCTYPE html>
<head>
<title>BGM.js Test - Song Title Display</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Google Fonts - Sono font family -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Sono&display=swap" rel="stylesheet">
<!-- MIDI.js MUST load first - in head section -->
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<link href="/normalbordem.css" rel="stylesheet" type="text/css">
<link href="/BGMHUD.css" rel="stylesheet" type="text/css">
</head>
<body>
<header>
<h1>BGM.js Song Title Test</h1>
<p>The song title should appear in the top-right corner immediately.</p>
<a href="index.html">← Back to main site</a>
</header>
<section>
<h2>Test Checklist</h2>
<ul>
<li>✅ Song title appears in top-right corner</li>
<li>✅ Title is readable (yellow text on dark background)</li>
<li>✅ Title matches current song from randomizer</li>
<li>✅ Loading order: MIDI.js → BGM.js → Title element</li>
</ul>
</section>
<!-- Song title display element in top-right corner -->
<div id="bgm-title">
<span id="bgm-title-content"></span>
</div>
<!-- BGM.js loads after MIDI.js and will add .visible class when text is set -->
<script src="/Music/bgm.js"></script>
<!-- Change song every 30 seconds -->
<script>
setInterval(function() {
SongRNG('30 second interval');
}, 30000);
</script>
<footer>
<p><small>Auto-changes song every 30 seconds (inline script)</small></p>
<p><small>Click refresh to stop auto-refresh</small></p>
</footer>
</body>
</html>

147
test-debug.html Normal file
View File

@@ -0,0 +1,147 @@
<!DOCTYPE html>
<html>
<head>
<title>BGM.js Debug Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: monospace;
background: #111;
color: #0f0;
padding: 20px;
}
.debug {
background: #000;
border: 2px solid #0f0;
padding: 10px;
margin: 10px 0;
}
.error { color: #f00; }
.success { color: #0f0; }
h1 { color: #ff0; }
</style>
<link href="/BGMHUD.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>🎵 BGM.js Debug Test</h1>
<div class="debug">
<h2>Debug Console</h2>
<div id="debug-output"></div>
</div>
<div class="debug">
<h2>DOM Check</h2>
<div id="dom-check"></div>
</div>
<div class="debug">
<h2>CSS Check</h2>
<div id="css-check"></div>
</div>
<script>
function debugOutput(msg, type) {
var output = document.getElementById('debug-output');
var p = document.createElement('p');
if (type === 'error') {
p.className = 'error';
} else if (type === 'success') {
p.className = 'success';
}
p.textContent = '[' + new Date().toLocaleTimeString() + '] ' + msg;
output.appendChild(p);
console.log(msg);
}
function checkDOM() {
var output = document.getElementById('dom-check');
var titleEl = document.getElementById('bgm-title');
if (titleEl) {
output.innerHTML = '<p class="success">✅ #bgm-title element found</p>';
output.innerHTML += '<p>Element content: "' + titleEl.textContent + '"</p>';
output.innerHTML += '<p>Computed display: ' + getComputedStyle(titleEl).display + '</p>';
output.innerHTML += '<p>Computed visibility: ' + getComputedStyle(titleEl).visibility + '</p>';
output.innerHTML += '<p>Computed opacity: ' + getComputedStyle(titleEl).opacity + '</p>';
output.innerHTML += '<p>Computed position: ' + getComputedStyle(titleEl).position + '</p>';
output.innerHTML += '<p>Has .visible class: ' + titleEl.classList.contains('visible') + '</p>';
// Check computed styles
var styles = getComputedStyle(titleEl);
if (styles.top === 'auto' || styles.top === '0px') {
output.innerHTML += '<p class="error">⚠️ WARNING: top position may be incorrect</p>';
}
} else {
output.innerHTML = '<p class="error">❌ #bgm-title element NOT found in DOM</p>';
}
}
function checkCSS() {
var output = document.getElementById('css-check');
var titleEl = document.getElementById('bgm-title');
if (titleEl) {
var styles = getComputedStyle(titleEl);
output.innerHTML = '<p>Top: ' + styles.top + '</p>';
output.innerHTML += '<p>Right: ' + styles.right + '</p>';
output.innerHTML += '<p>Position: ' + styles.position + '</p>';
output.innerHTML += '<p>Background: ' + styles.backgroundColor + '</p>';
output.innerHTML += '<p>Color: ' + styles.color + '</p>';
output.innerHTML += '<p>Border: ' + styles.border + '</p>';
output.innerHTML += '<p>Border-radius: ' + styles.borderRadius + '</p>';
// Check if bgm-title is in normalbordem.css
output.innerHTML += '<p>Font-family: ' + styles.fontFamily + '</p>';
}
}
</script>
<!-- Song title display element -->
<div id="bgm-title">Loading...</div>
<!-- Load MIDI.js first -->
<script>
debugOutput('Loading MIDI.js...');
</script>
<script type='text/javascript' src='//www.midijs.net/lib/midi.js'></script>
<!-- Show title visibility script -->
<script>
debugOutput('Running visibility script...');
var titleEl = document.getElementById('bgm-title');
if (titleEl) {
titleEl.classList.add('visible');
debugOutput('Added .visible class to #bgm-title');
} else {
debugOutput('ERROR: #bgm-title element not found!', 'error');
}
</script>
<!-- Load BGM.js after MIDI.js -->
<script>
debugOutput('Loading BGM.js...');
</script>
<script src="/Music/bgm.js"></script>
<!-- Final check -->
<script>
setTimeout(function() {
debugOutput('Final check after 2 seconds...');
checkDOM();
checkCSS();
}, 2000);
</script>
<div class="debug">
<h2>Instructions</h2>
<p>1. Check the "Debug Console" above for loading messages</p>
<p>2. Check "DOM Check" to see if #bgm-title exists and its properties</p>
<p>3. Check "CSS Check" to see computed styles</p>
<p>4. Look for a YELLOW BOX in the TOP-RIGHT CORNER of this page</p>
<p>5. Open DevTools Console (F12) for more details</p>
</div>
<p><a href="index.html">← Back to main site</a></p>
</body>
</html>

28
test.py Normal file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env python3
# Simple HTTP Test Server
# Run: python test.py [port]
import http.server
import socketserver
def main():
PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8080
print(f"Serving at http://localhost:{PORT}")
print("Test pages:")
print(" /test-bgm.html - BGM.js song title test")
print()
print("Available files at:")
print(" /index.html")
print(" /Music/bgm.js")
print()
handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), handler)
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("\nStopped.")
if __name__ == "__main__":
import sys
main()

10
test.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
echo "Bulding image..."
docker build -t doof .
echo "Running container. remember to delete unless you like your storage being used up"
echo "Deleting old container if it exists..."
docker rm -f doofonline_container
echo "Starting new container..."
docker run -d -p 80:80 --name doofonline_container doof
echo "Live, opening browser..."
xdg-open http://localhost