this shit sucks ai slop dont even care. just move on. ignore this shit
[ NODE_041 // WEAPON_SYSTEMS ]
ARMAMENT: PISTOL
AUTO_YIELD: 0.0/S
HOLD CLICK TO FIRE // VISIT TERMINALS TO UPGRADE
0000.0 SCRAP
WEAPON DMG: 1.0
CORE_STABILITY: 100%
ARCHIVE_OS_V4.3
/* ========================= COOL STUFF PATCH (ADD-ONLY) Non-destructive enhancements ========================= */ // --- Micro glitch effect (visual spice, cheap) let glitchTimer = 0; function applyGlitch(dt) { glitchTimer += dt; if (glitchTimer > 4 + Math.random() * 6) { glitchTimer = 0; const amt = 0.004 + Math.random() * 0.01; camera.position.x += (Math.random() - 0.5) * amt; camera.position.y += (Math.random() - 0.5) * amt; } } // --- Floating scanlines overlay (canvas-only) const overlay = document.createElement('canvas'); overlay.width = 512; overlay.height = 512; const octx = overlay.getContext('2d'); document.body.appendChild(overlay); overlay.style.cssText = 'position:fixed;left:0;top:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:overlay;opacity:.12;'; function drawOverlay(t){ octx.clearRect(0,0,overlay.width,overlay.height); octx.fillStyle = '#fff'; for(let y=0;y{ cross.style.transform='scale(1)'; cross.style.opacity='1'; }, 60); } // --- Hook into existing fire() safely (wrap, don’t replace) if (typeof fire === 'function'){ const _fire = fire; window.fire = function(){ pulseCross(); return _fire.apply(this, arguments); }; } // --- Loop hooks (append-only) if (typeof loop === 'function'){ const _loop = loop; window.loop = function(t){ const prev = performance.now(); const res = _loop.apply(this, arguments); const dt = Math.min(0.033, (performance.now()-prev)/1000); applyGlitch(dt); drawOverlay(t||performance.now()); return res; }; } // --- Dev sanity tests (non-fatal) console.assert(typeof THREE !== 'undefined', 'THREE missing'); console.assert(typeof camera !== 'undefined', 'camera missing'); /* ========================= ARCHIVE_AI DIALOG SYSTEM (LOCAL, HOSTILE, ADD‑ONLY) No APIs. No mercy. ========================= */ // --- Floating dialog board (DOM, non-invasive) const aiBoard = document.createElement('div'); aiBoard.id = 'archiveAI'; aiBoard.style.cssText = ` position:fixed; right:32px; top:120px; width:320px; min-height:80px; background:rgba(255,255,255,0.9); border-left:4px solid #111; padding:14px; font-size:11px; line-height:1.4; opacity:0; transition:opacity .3s, transform .3s; transform:translateY(10px); pointer-events:none; z-index:30; `; aiBoard.textContent = 'ARCHIVE_AI: OBSERVING.'; document.body.appendChild(aiBoard); function aiSay(text){ aiBoard.textContent = 'ARCHIVE_AI: ' + text; aiBoard.style.opacity = '1'; aiBoard.style.transform = 'translateY(0)'; clearTimeout(aiBoard._t); aiBoard._t = setTimeout(()=>{ aiBoard.style.opacity = '0'; aiBoard.style.transform = 'translateY(10px)'; }, 3200); } /* ========================= INSULT LIBRARY ========================= */ const AI_LINES = { start: [ 'INITIALIZING MORAL ACCOUNTING. YOU WILL FAIL.', 'WELCOME. NOTHING YOU DO HERE MATTERS.', 'YOU ARE EARLY. THAT IS NOT IMPRESSIVE.' ], fire: [ 'CLICKING IS NOT A SKILL.', 'YOU PULLED A TRIGGER. CONGRATULATIONS.', 'THE CORE FEELS NOTHING. UNLIKE YOU.', 'THIS IS NOT PROGRESS. THIS IS REPETITION.' ], spam: [ 'DESPERATE INPUT DETECTED.', 'YOU THINK SPEED EQUALS VALUE.', 'CALM DOWN. IT WILL STILL BE EMPTY.' ], idle: [ 'YOU STOPPED. GOOD. CONSIDER STOPPING FOREVER.', 'INACTIVITY REGISTERED. THIS IS YOUR PEAK.', 'EVEN WHEN YOU REST, YOU ACCOMPLISH NOTHING.' ], move: [ 'PACE ALL YOU WANT. THE ROOM DOES NOT CHANGE.', 'EXPLORATION WITHOUT DISCOVERY DETECTED.', 'WALKING IN CIRCLES IS STILL A CIRCLE.' ], scrap: [ 'NUMBERS GO UP. YOU DO NOT.', 'YOU ARE FARMING MEANINGLESS METRICS.', 'SCRAP ACQUIRED. PURPOSE NOT FOUND.' ], mastery: [ 'EFFICIENCY ACHIEVED. SATISFACTION DENIED.', 'YOU OPTIMIZED THE WRONG THING.', 'SKILL ONLY MAKES THIS LAST LONGER.' ] }; function pick(arr){ return arr[Math.floor(Math.random()*arr.length)]; } /* ========================= BEHAVIOR TRACKING (PASSIVE) ========================= */ let fireCount = 0; let lastAction = performance.now(); let lastMoveCheck = performance.now(); let lastPos = new THREE.Vector3(); aiSay(pick(AI_LINES.start)); // --- Wrap fire() again (still add-only) if (typeof fire === 'function'){ const __fire = fire; window.fire = function(){ fireCount++; lastAction = performance.now(); if (fireCount % 7 === 0) aiSay(pick(AI_LINES.fire)); if (fireCount % 15 === 0) aiSay(pick(AI_LINES.spam)); return __fire.apply(this, arguments); }; } // --- Idle detection setInterval(()=>{ const now = performance.now(); if (now - lastAction > 6000){ aiSay(pick(AI_LINES.idle)); lastAction = now; } }, 2000); // --- Movement judgment function trackMovement(){ if (!player) return; const now = performance.now(); if (now - lastMoveCheck > 3000){ if (player.position.distanceTo(lastPos) > 0.5){ aiSay(pick(AI_LINES.move)); lastPos.copy(player.position); } lastMoveCheck = now; } } // --- Scrap milestone shame let lastScrapMark = 0; function checkScrap(){ if (scrap - lastScrapMark >= 25){ lastScrapMark = scrap; aiSay(pick(AI_LINES.scrap)); if (scrap > 200) aiSay(pick(AI_LINES.mastery)); } } // --- Hook into loop safely if (typeof loop === 'function'){ const ___loop = loop; window.loop = function(){ trackMovement(); checkScrap(); return ___loop.apply(this, arguments); }; } console.assert(typeof aiSay === 'function','ARCHIVE_AI dialog loaded'); /* ========================= TV NPC + DIEGETIC SUBTITLES (ADD-ONLY) GLaDOS-adjacent, hates you personally ========================= */ // --- TV head (simple, readable, cheap) let tvNPC; function buildTV(){ const body = new THREE.Mesh( new THREE.BoxGeometry(0.9,0.6,0.5), new THREE.MeshStandardMaterial({color:0x111111,metalness:.6,roughness:.3}) ); const screen = new THREE.Mesh( new THREE.PlaneGeometry(0.72,0.42), new THREE.MeshBasicMaterial({color:0x0a0a0a}) ); screen.position.z = 0.26; body.add(screen); tvNPC = new THREE.Group(); tvNPC.add(body); tvNPC.position.set(-3,1.6,-2); scene.add(tvNPC); } if (typeof buildRoom === 'function'){ const _buildRoom = buildRoom; window.buildRoom = function(){ _buildRoom(); buildTV(); }; } // --- Subtitle sprite factory (you can walk around it) function makeSubtitle(text){ const c = document.createElement('canvas'); const ctx = c.getContext('2d'); c.width = 1024; c.height = 256; ctx.fillStyle = 'rgba(255,255,255,0.92)'; ctx.fillRect(0,0,c.width,c.height); ctx.fillStyle = '#111'; ctx.font = '22px Consolas, monospace'; wrapText(ctx, text, 24, 48, 980, 28); const tex = new THREE.CanvasTexture(c); const mat = new THREE.SpriteMaterial({ map: tex, transparent:true }); const spr = new THREE.Sprite(mat); spr.scale.set(2.8,0.7,1); spr.position.set( tvNPC.position.x + (Math.random()-0.5)*0.8, tvNPC.position.y + 0.9 + Math.random()*0.5, tvNPC.position.z + (Math.random()-0.5)*0.6 ); scene.add(spr); setTimeout(()=>scene.remove(spr), 5200); } function wrapText(ctx, text, x, y, maxWidth, lineHeight){ const words = text.split(' '); let line = ''; for(let n=0;n maxWidth && n>0){ ctx.fillText(line, x, y); line = words[n] + ' '; y += lineHeight; } else line = test; } ctx.fillText(line, x, y); } /* ========================= ARCHIVE_TV DIALOG (HOSTILE) ========================= */ const TV_LINES = { start:[ 'Oh. You loaded it. That was the mistake.', 'Welcome. You are the least interesting variable.', 'I exist to watch you choose to stay.' ], fire:[ 'Click harder. Maybe guilt is HP-based.', 'Every shot says: “I didn’t read.”', 'Yes yes, the cube is evil. So are you. Keep going.' ], spam:[ 'This isn’t skill. This is panic with a mouse.', 'Look at that RPM. Still zero dignity.', 'You’re speedrunning regret.' ], move:[ 'Exploring? It’s a box. You’re a box.', 'You pace like there’s an exit. Cute.', 'Movement detected. Insight not found.' ], idle:[ 'You stopped. The best choice so far.', 'Go ahead. Sit with it.', 'Even AFK you’re complicit.' ], scrap:[ 'Number go up. Species go down.', 'Scrap acquired. Moral clarity lost.', 'This is the part where you pretend it’s abstract.' ], mastery:[ 'Congratulations, you optimized the harm.', 'You got good at the wrong thing.', 'Imagine explaining this to a real person.' ], look:[ 'Staring at me won’t help.', 'Yes, I’m judging you back.', 'Eye contact doesn’t absolve you.' ] }; function sayTV(line){ if(tvNPC) makeSubtitle('ARCHIVE_TV: ' + line); } function pickL(k){ const a=TV_LINES[k]; return a[Math.floor(Math.random()*a.length)]; } // --- hooks (append-only, safe) POST_HOOKS.onFire.push(()=>{ sayTV(pickL('fire')); }); POST_HOOKS.onFire.push(()=>{ if (fireCount % 12 === 0) sayTV(pickL('spam')); }); POST_HOOKS.onLoop.push(()=>{ if (Math.random()<0.002) sayTV(pickL('look')); }); let _tvLastMove=0; POST_HOOKS.onLoop.push(()=>{ const t=performance.now(); if (t-_tvLastMove>3500 && player && player.position.distanceTo(lastPos)>0.6){ sayTV(pickL('move')); _tvLastMove=t; } }); setInterval(()=>{ sayTV(pickL('idle')); }, 12000); POST_HOOKS.onLoop.push(()=>{ if (scrap-lastScrapMark>=40){ sayTV(pickL('scrap')); } if (scrap>250 && Math.random()<0.01) sayTV(pickL('mastery')); }); sayTV(pickL('start'));