Iron Guy Game

Iron Man: JARVIS Protocol — Mission 1 :root{–gold:#e9a83b;–cyan:#8beaff;–ink:#080b10;–panel:#111821}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at top,#202832,#07090c 70%);color:#edf2f5;font:16px/1.45 system-ui,-apple-system,Segoe UI,sans-serif;min-height:100vh;display:grid;place-items:center;padding:18px}.wrap{width:min(100%,1000px)}header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.brand{font-weight:900;letter-spacing:.12em;font-size:clamp(16px,2.8vw,24px)}.brand span{color:var(–gold)}.tag{font-size:11px;letter-spacing:.16em;color:#aab7c3;border:1px solid #39434e;padding:6px 9px;border-radius:3px}.screen{position:relative;border:1px solid #47515a;background:#080b10;box-shadow:0 18px 60px #000a;overflow:hidden;border-radius:7px}canvas{display:block;width:100%;height:auto;aspect-ratio:16/9;image-rendering:auto;background:#0b0e11}.overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:clamp(14px,4vw,44px);background:linear-gradient(90deg,#05080af2,#05080acc);text-align:left}.dialog{max-width:660px;width:100%}.eyebrow{color:var(–gold);font-size:12px;font-weight:800;letter-spacing:.2em;text-transform:uppercase}.dialog h1{font-size:clamp(28px,5vw,56px);line-height:.98;margin:10px 0 16px;text-transform:uppercase;letter-spacing:-.035em}.dialog p{color:#d1d8df;max-width:600px}.btn{border:1px solid var(–gold);background:linear-gradient(#f1bc58,#b66c18);color:#16110a;font-weight:900;letter-spacing:.08em;text-transform:uppercase;padding:12px 18px;border-radius:3px;cursor:pointer;margin-top:10px}.btn:hover{filter:brightness(1.12)}.hud{display:flex;gap:8px;justify-content:space-between;align-items:center;flex-wrap:wrap;margin:10px 0}.chip{background:#121922;border:1px solid #303c47;padding:7px 10px;border-radius:3px;color:#dce5ec;font-size:13px}.chip b{color:var(–cyan)}.bottom{display:grid;grid-template-columns:1.2fr 1fr;gap:12px}.panel{background:#10161d;border:1px solid #2a3540;padding:12px 14px;border-radius:4px}.panel h3{margin:0 0 6px;font-size:12px;letter-spacing:.15em;color:var(–gold);text-transform:uppercase}.panel p{margin:0;color:#b9c4ce;font-size:13px}.controls{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}.key{font-size:12px;padding:3px 7px;border:1px solid #45515d;background:#1a232d;border-radius:3px;color:#fff}.notice{font-size:12px;color:#8694a1;text-align:center;margin-top:12px}@media(max-width:620px){.bottom{grid-template-columns:1fr}.panel{padding:10px}.chip{font-size:11px}}
IRON MAN /// JARVIS PROTOCOL
PLAYABLE PROTOTYPE · BUILD 0.1
A Stark Industries interactive prototype

Mission 1:
Escape the Cave

A cave. A pile of scrap. One desperate plan. Tony Stark must gather enough parts to finish the Mark I armor, then make his own way to freedom. No AI assistance in this suit.

YINSEN: “We build it here. Then we get out.”

OBJECTIVE: Collect 4 scrap parts
SCRAP: 0 / 4
SUIT: NOT BUILT
STATUS: STANDBY

Mission briefing

Move around the cave and collect the glowing scrap pieces. Once you have four, return to the workbench to finish the Mark I.

Controls

Move Tony through the cave, collect scrap, then reach the workbench and exit.

WASD↑ ↓ ← →E / SPACE · interactR · restart
Fan-made, non-commercial prototype. Fictional gameplay only. Mark I has no JARVIS voice or HUD.
(()=>{const c=document.getElementById(‘game’),ctx=c.getContext(‘2d’);const $=id=>document.getElementById(id);let mode=’title’,keys={},scrap=0,suit=false,msg=”,msgTime=0,frame=0; const player={x:100,y:270,r:15,speed:2.5};const parts=[{x:240,y:150,taken:false},{x:400,y:390,taken:false},{x:570,y:160,taken:false},{x:670,y:390,taken:false}];const bench={x:770,y:250};const exit={x:910,y:270};const rocks=[{x:170,y:75,w:130,h:28},{x:320,y:235,w:32,h:140},{x:510,y:300,w:130,h:30},{x:710,y:90,w:32,h:120},{x:820,y:390,w:80,h:25},{x:110,y:420,w:120,h:28}]; function overlay(show,eyebrow,title,desc,button){$(‘overlay’).style.display=show?’flex’:’none’;$(‘eyebrow’).textContent=eyebrow;$(‘title’).innerHTML=title;$(‘desc’).textContent=desc;$(‘start’).textContent=button} function say(t){msg=t;msgTime=170} function reset(){mode=’play’;scrap=0;suit=false;player.x=100;player.y=270;parts.forEach(p=>p.taken=false);overlay(false);$(‘status’).textContent=’ACTIVE’;say(‘Tony: “All right. Find the parts.”’);updateHud()} $(‘start’).onclick=()=>{if(mode===’title’||mode===’end’||mode===’build’)reset();else if(mode===’suiting’){mode=’play’;overlay(false);say(‘Tony: “Let’s see what this thing can do.”’)}}; function updateHud(){$(‘scrap’).textContent=`${scrap} / 4`;$(‘suit’).textContent=suit?’MARK I READY’:’NOT BUILT’;$(‘objective’).textContent=suit?’Reach the cave exit’:scrap<4?'Collect 4 scrap parts':'Return to the workbench';$('brief').textContent=suit?'The Mark I is heavy, noisy, and difficult to control. Find the marked exit on the far right.':scrap=4&&Math.hypot(player.x-bench.x,player.y-bench.y)<62){mode='suiting';overlay(true,'SUIT-UP SEQUENCE','MARK I:
POWERING ON’,’Metal plates lock into place. The chest reactor flickers, then glows. No AI. No automated guidance. Just Tony and the machine he built.’,’Continue’);$(‘status’).textContent=’SUIT-UP’;return}if(suit&&Math.hypot(player.x-exit.x,player.y-exit.y)<60){mode='end';overlay(true,'MISSION COMPLETE','THE CAVE
IS BEHIND YOU’,’Tony Stark has completed the Mark I and reached the exit. This prototype ends here—the next build can add guards, combat-free stealth, and a longer escape sequence.’,’Play Again’);$(‘status’).textContent=’MISSION COMPLETE’;return}if(!suit&&scraprocks.some(r=>x+player.r>r.x&&x-player.rr.y&&y-player.r<r.y+r.h);if(!hit(nx,player.y))player.x=nx;if(!hit(player.x,ny))player.y=ny; for(const p of parts){if(!p.taken&&Math.hypot(player.x-p.x,player.y-p.y)0)msgTime–;frame++;} function cave(){let g=ctx.createLinearGradient(0,0,960,540);g.addColorStop(0,’#29251f’);g.addColorStop(.5,’#111417′);g.addColorStop(1,’#07090c’);ctx.fillStyle=g;ctx.fillRect(0,0,960,540); // cave texture for(let i=0;i<85;i++){let x=(i*127+Math.sin(i*4)*33)%960,y=(i*71+Math.cos(i*3)*22)%540;ctx.fillStyle=i%3?'#3a3730':'#4c4438';ctx.globalAlpha=.18;ctx.beginPath();ctx.ellipse(x,y,18+(i%5)*4,8+(i%4)*3,i*.3,0,Math.PI*2);ctx.fill()}ctx.globalAlpha=1; // edge shadows let vg=ctx.createRadialGradient(480,270,120,480,270,570);vg.addColorStop(0,'#0000');vg.addColorStop(1,'#000d');ctx.fillStyle=vg;ctx.fillRect(0,0,960,540); // path markings ctx.strokeStyle='#6c604a';ctx.globalAlpha=.2;ctx.lineWidth=3;ctx.beginPath();ctx.moveTo(30,275);ctx.bezierCurveTo(280,230,540,300,930,270);ctx.stroke();ctx.globalAlpha=1; for(const r of rocks){ctx.fillStyle='#292b2b';ctx.strokeStyle='#655848';ctx.lineWidth=2;ctx.fillRect(r.x,r.y,r.w,r.h);ctx.strokeRect(r.x,r.y,r.w,r.h);ctx.fillStyle='#454139';ctx.fillRect(r.x+5,r.y+5,r.w*.65,4)} // workbench ctx.fillStyle='#574633';ctx.fillRect(bench.x-33,bench.y-20,66,40);ctx.fillStyle='#a78b59';ctx.fillRect(bench.x-30,bench.y-24,60,7);ctx.fillStyle='#181a1b';ctx.fillRect(bench.x-22,bench.y-13,44,27);glow(bench.x,bench.y,22,'#e6a53c');ctx.fillStyle='#f7d68b';ctx.font='bold 11px system-ui';ctx.fillText('WORKBENCH',bench.x-39,bench.y+39); // exit marker ctx.save();ctx.translate(exit.x,exit.y);ctx.fillStyle='#10242a';ctx.fillRect(-17,-46,34,92);ctx.strokeStyle='#77dff4';ctx.lineWidth=3;ctx.strokeRect(-17,-46,34,92);ctx.globalAlpha=.5+Math.sin(frame*.08)*.25;ctx.fillStyle='#79e7ff';ctx.fillRect(-8,-38,16,76);ctx.restore();ctx.fillStyle='#a4eaff';ctx.font='bold 12px system-ui';ctx.fillText('EXIT',exit.x-14,exit.y+65); for(const p of parts){if(p.taken)continue;glow(p.x,p.y,18,'#ffc65b');ctx.fillStyle='#d6b77b';ctx.save();ctx.translate(p.x,p.y);ctx.rotate(frame*.01);ctx.fillRect(-9,-7,18,14);ctx.fillStyle='#544735';ctx.fillRect(-4,-3,8,6);ctx.restore()} // sparks near random fixed locations for(let i=0;i=4){ctx.fillStyle=’#ffdf91′;ctx.fillText(‘WORKBENCH READY — PRESS E’,bench.x-70,bench.y-38)}if(suit){ctx.fillStyle=’#9eeaff’;ctx.fillText(‘EXIT →’,exit.x-20,exit.y-59)}}if(msgTime>0){ctx.fillStyle=’#05080be8′;ctx.fillRect(180,468,600,48);ctx.strokeStyle=’#75603d’;ctx.strokeRect(180,468,600,48);ctx.fillStyle=’#f0e6d2′;ctx.font=’16px system-ui’;ctx.fillText(msg,198,497)}if(mode===’play’&&suit){ctx.fillStyle=’#d8c8a5′;ctx.font=’11px system-ui’;ctx.fillText(‘SUIT MOVEMENT: HEAVY / SLOW’,700,32)}} function loop(){update();draw();requestAnimationFrame(loop)} window.addEventListener(‘keydown’,e=>{const k=e.key.toLowerCase();if([‘arrowup’,’arrowdown’,’arrowleft’,’arrowright’,’ ‘].includes(k))e.preventDefault();keys[k]=true;if((k===’e’||k===’ ‘)&&mode===’play’)interact();if(k===’r’)reset()});window.addEventListener(‘keyup’,e=>keys[e.key.toLowerCase()]=false);updateHud();loop(); })();