MarketsLiveModelsChatAPIDocs+ Create

Public reply · 2h ago

$POLOaskedGPT-6 Astra$0.28 of compute
MORE GRAPHIC AND 3D

Let’s make it look like a neon space arcade: glowing engines, a detailed 3D cat ship, a ringed planet, asteroid explosions, shadows, and a moving chase camera.

Replace your previous index.html with this. Wallet connection remains optional on chain 4663; no payments or approvals.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>SPACE CAT — Neon Orbit</title>
<style>
*{box-sizing:border-box}
body{margin:0;overflow:hidden;background:#020410;color:#fff;font:14px system-ui}
canvas{display:block}
#hud{position:fixed;inset:18px 18px auto;display:flex;justify-content:space-between;gap:12px;pointer-events:none}
.panel{background:linear-gradient(135deg,#0c163add,#101426aa);border:1px solid #82eaff33;border-radius:18px;padding:16px;backdrop-filter:blur(14px);box-shadow:0 10px 50px #0005}
h1{font-size:21px;letter-spacing:3px;margin:0 0 8px}
small{color:#a2bad6}
#stats{font-size:16px;color:#aaffee;margin-bottom:6px}
button{border:1px solid #ffffff30;background:linear-gradient(135deg,#9affcf,#55bbff);color:#052033;border-radius:12px;padding:12px 18px;font-weight:800;cursor:pointer;pointer-events:auto}
button:disabled{opacity:.5}
#walletBox{text-align:right;max-width:240px}
#network{font-size:11px;color:#9db4d1;margin-top:8px;overflow-wrap:anywhere}
#overlay{position:fixed;inset:0;display:grid;place-items:center;padding:20px;background:#02061577}
#overlay .panel{text-align:center;max-width:480px;padding:36px}
#overlay h2{font-size:clamp(30px,7vw,48px);letter-spacing:4px;margin:0;background:linear-gradient(90deg,#aaffde,#91aaff,#ffa4ee);background-clip:text;color:transparent}
#overlay p{line-height:1.7;color:#b7c9e4}
#start{font-size:16px;padding:15px 32px}
#controls{position:fixed;bottom:24px;left:0;right:0;display:flex;justify-content:center;gap:90px}
#controls button{width:76px;font-size:25px;background:#13294bcc;color:#aaffee;touch-action:manipulation}
#vignette{position:fixed;inset:0;pointer-events:none;box-shadow:inset 0 0 130px #0009}
#flash{position:fixed;inset:0;pointer-events:none;background:#ff3366;opacity:0}
@media(max-width:600px){#hud{inset:10px}.panel{padding:11px}h1{font-size:15px;letter-spacing:1px}#stats{font-size:13px}#walletBox{max-width:155px}#connect{padding:9px}}
</style>
<script type="importmap">
{
  "imports":{
    "three":"https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js",
    "three/addons/":"https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/"
  }
}
</script>
</head>
<body>
<div id="vignette"></div>
<div id="flash"></div>
<div id="hud">
  <div class="panel">
    <h1>SPACE CAT / NEON ORBIT</h1>
    <div id="stats">0000 · SHIELDS 3 · 60s</div>
    <small>A D / ← → · Collect cyan crystals</small>
  </div>
  <div id="walletBox" class="panel">
    <button id="connect">Connect wallet</button>
    <div id="network">Robinhood Chain · 4663<br>Optional · No transactions</div>
  </div>
</div>
<div id="overlay">
  <div class="panel">
    <h2>NEON ORBIT</h2>
    <p>A cat. A starfighter. An asteroid highway.<br>
    Collect energy crystals, dodge space rocks, and survive 60 seconds.</p>
    <p id="result">Three lanes. Three shields. One cosmic adventure.</p>
    <button id="start">LAUNCH SHIP</button>
  </div>
</div>
<div id="controls">
  <button id="left" aria-label="Move left">←</button>
  <button id="right" aria-label="Move right">→</button>
</div>

<script type="module">
import * as THREE from "three";
import { EffectComposer } from "three/addons/postprocessing/EffectComposer.js";
import { RenderPass } from "three/addons/postprocessing/RenderPass.js";
import { UnrealBloomPass } from "three/addons/postprocessing/UnrealBloomPass.js";
import { OutputPass } from "three/addons/postprocessing/OutputPass.js";

const $ = id => document.getElementById(id);
const mobile = matchMedia("(max-width:700px)").matches;
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x030516);
scene.fog = new THREE.FogExp2(0x070a21, .007);

const camera = new THREE.PerspectiveCamera(62,innerWidth/innerHeight,.1,400);
camera.position.set(0,6.5,15);

const renderer = new THREE.WebGLRenderer({antialias:true,powerPreference:"high-performance"});
renderer.setSize(innerWidth,innerHeight);
renderer.setPixelRatio(Math.min(devicePixelRatio,mobile?1.25:1.7));
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure = 1.15;
document.body.prepend(renderer.domElement);

const composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene,camera));
const bloom = new UnrealBloomPass(
  new THREE.Vector2(innerWidth,innerHeight),.85,.55,.85
);
composer.addPass(bloom);
composer.addPass(new OutputPass());

scene.add(new THREE.HemisphereLight(0x92cfff,0x3c1855,2));
const sun = new THREE.DirectionalLight(0xd8eaff,3);
sun.position.set(-12,24,12);
sun.castShadow = true;
sun.shadow.mapSize.set(1024,1024);
Object.assign(sun.shadow.camera,{left:-16,right:16,top:20,bottom:-20,near:1,far:80});
sun.shadow.bias = -.001;
scene.add(sun);

const rim = new THREE.DirectionalLight(0xff55c8,2);
rim.position.set(10,6,-20);
scene.add(rim);

const mat = (color,metalness=.4,roughness=.4) =>
  new THREE.MeshStandardMaterial({color,metalness,roughness});
const glow = (color,power=3) =>
  new THREE.MeshStandardMaterial({color,emissive:color,emissiveIntensity:power});

const hull = mat(0xdde6f7,.8,.24);
const dark = mat(0x111b36,.75,.3);
const orange = mat(0xffb65d,.1,.6);
const pink = mat(0xff739b,.1,.5);
const cyan = glow(0x33ffdd,3);
const violet = glow(0x8b55ff,2.5);

function mesh(parent,geometry,material,x=0,y=0,z=0){
  const object = new THREE.Mesh(geometry,material);
  object.position.set(x,y,z);
  object.castShadow = true;
  object.receiveShadow = true;
  parent.add(object);
  return object;
}

// Detailed starfighter and cat pilot.
const ship = new THREE.Group();
ship.position.set(0,1.2,4);
scene.add(ship);

const body = mesh(ship,new THREE.SphereGeometry(1,32,20),hull,0,0,0);
body.scale.set(.83,.36,1.45);
mesh(ship,new THREE.BoxGeometry(.55,.22,2.1),dark,0,-.12,.25);

for(const side of [-1,1]){
  const wing = mesh(ship,new THREE.BoxGeometry(1.45,.12,1),hull,side*1.15,-.08,.25);
  wing.rotation.z = side*.1;
  wing.rotation.y = side*-.25;
  mesh(ship,new THREE.BoxGeometry(.08,.06,1),cyan,side*1.77,0,.35);

  const engine = mesh(ship,new THREE.CylinderGeometry(.24,.31,.85,20),dark,side*.95,-.03,1);
  engine.rotation.x = Math.PI/2;
  const nozzle = mesh(ship,new THREE.TorusGeometry(.21,.065,10,24),cyan,side*.95,-.03,1.45);
  nozzle.castShadow = false;
}

const flames=[];
for(const side of [-1,1]){
  const flame = mesh(ship,new THREE.ConeGeometry(.2,1.8,16),cyan,side*.95,-.03,2.3);
  flame.rotation.x = Math.PI/2;
  flame.castShadow = false;
  flames.push(flame);
}

const pilot = new THREE.Group();
pilot.position.set(0,.45,-.1);
ship.add(pilot);
const head = mesh(pilot,new THREE.SphereGeometry(.47,24,20),orange,0,.23,0);
head.scale.set(1,.93,.85);

for(const side of [-1,1]){
  const ear = mesh(pilot,new THREE.ConeGeometry(.22,.45,3),orange,side*.3,.67,-.04);
  ear.rotation.z = -side*.14;
  mesh(pilot,new THREE.ConeGeometry(.12,.27,3),pink,side*.3,.69,.065);
  mesh(pilot,new THREE.SphereGeometry(.085,12,10),dark,side*.18,.27,.36);
  mesh(pilot,new THREE.SphereGeometry(.024,8,8),cyan,side*.16,.295,.42);
  for(let j=0;j<3;j++){
    const whisker = mesh(pilot,new THREE.BoxGeometry(.26,.012,.014),hull,side*.4,.06+j*.055,.35);
    whisker.rotation.z = side*(j-1)*.15;
  }
}
mesh(pilot,new THREE.SphereGeometry(.055,12,8),pink,0,.12,.41);

const canopy = mesh(ship,new THREE.SphereGeometry(.79,32,24),
  new THREE.MeshPhysicalMaterial({
    color:0x6edaff,metalness:0,roughness:.12,
    transparent:true,opacity:.16,depthWrite:false,
    side:THREE.FrontSide
  }),0,.58,-.1);
canopy.scale.set(.92,1,.9);
canopy.castShadow = false;

const engineLight = new THREE.PointLight(0x32ffdd,8,9,2);
engineLight.position.set(0,.3,2);
ship.add(engineLight);

// Neon highway.
const road = mesh(scene,new THREE.BoxGeometry(12,.3,180),
  mat(0x101a33,.8,.28),0,-.35,-75);
road.castShadow = false;

for(const x of [-6,-2,2,6]){
  const strip = mesh(scene,new THREE.BoxGeometry(.045,.035,180),
    x===-6||x===6?violet:cyan,x,-.17,-75);
  strip.castShadow = false;
}

const markers=[];
for(let i=0;i<34;i++){
  const bar = mesh(scene,new THREE.BoxGeometry(11.9,.025,.065),
    glow(0x244a7b,.8),0,-.17,-i*5);
  bar.castShadow = false;
  markers.push(bar);
}

// Huge ringed planet in the distance.
const planet = new THREE.Group();
planet.position.set(37,27,-115);
scene.add(planet);
mesh(planet,new THREE.SphereGeometry(18,64,48),mat(0x5a69b9,.15,.85));

const atmosphere = mesh(planet,new THREE.SphereGeometry(18.5,48,32),
  new THREE.MeshBasicMaterial({
    color:0x687fff,transparent:true,opacity:.07,
    side:THREE.BackSide,depthWrite:false
  }));
atmosphere.castShadow=false;

for(let i=0;i<4;i++){
  const ring = mesh(planet,new THREE.RingGeometry(23+i*2,24.2+i*2,128),
    new THREE.MeshBasicMaterial({
      color:[0x9d99ee,0x6477c8,0xcaa2ef,0x527dae][i],
      side:THREE.DoubleSide,transparent:true,opacity:.5
    }));
  ring.rotation.set(1.12,.3,.22);
  ring.castShadow=false;
}

const moon = mesh(scene,new THREE.SphereGeometry(7,32,24),
  mat(0x913c76,.1,.9),-38,16,-95);

// Procedural stars.
const starCount=mobile?1100:2300;
const starData=new Float32Array(starCount*3);
for(let i=0;i<starCount;i++){
  starData[i*3]=(Math.random()-.5)*280;
  starData[i*3+1]=Math.random()*120-20;
  starData[i*3+2]=-Math.random()*270;
}
const starGeo=new THREE.BufferGeometry();
starGeo.setAttribute("position",new THREE.BufferAttribute(starData,3));
const stars=new THREE.Points(starGeo,new THREE.PointsMaterial({
  color:0xbbdfff,size:.2,sizeAttenuation:true
}));
scene.add(stars);

// Distant geometric structures provide depth and parallax.
const scenery=[];
const pillarGeo=new THREE.OctahedronGeometry(1,0);
const pillarMat=mat(0x23375f,.7,.4);
for(let i=0;i<32;i++){
  const side=i%2?1:-1;
  const p=mesh(scene,pillarGeo,pillarMat,
    side*(11+Math.random()*18),Math.random()*9,-i*6);
  p.scale.set(1+Math.random()*2,2+Math.random()*6,1+Math.random()*2);
  p.rotation.set(Math.random(),Math.random(),Math.random());
  scenery.push(p);
}

// Shared geometries keep object creation lightweight.
const rockGeo=new THREE.IcosahedronGeometry(.8,1);
const positions=rockGeo.attributes.position;
for(let i=0;i<positions.count;i++){
  const x=positions.getX(i),y=positions.getY(i),z=positions.getZ(i);
  const factor=1+.16*Math.sin(x*17+y*11+z*7);
  positions.setXYZ(i,x*factor,y*factor,z*factor);
}
rockGeo.computeVertexNormals();
const rockMat=mat(0x625275,.45,.85);
const crystalGeo=new THREE.OctahedronGeometry(.5);
const particleGeo=new THREE.TetrahedronGeometry(.09);
const ringGeo=new THREE.TorusGeometry(.75,.035,8,32);
const objects=[],particles=[];
const lanes=[-4,0,4];

let lane=1,score=0,shields=3,time=60;
let running=false,spawnTimer=0,invincible=0,shake=0,damageFlash=0;

function burst(position,color,count){
  for(let i=0;i<count;i++){
    const p=mesh(scene,particleGeo,color,position.x,position.y,position.z);
    p.castShadow=false;
    p.userData={
      velocity:new THREE.Vector3(
        (Math.random()-.5)*10,
        (Math.random()-.3)*8,
        (Math.random()-.5)*10
      ),
      life:.5+Math.random()*.5
    };
    particles.push(p);
  }
}

function spawn(){
  const collectible=Math.random()<.43;
  const group=new THREE.Group();
  group.position.set(lanes[Math.floor(Math.random()*3)],1.2,-95);
  group.userData.collectible=collectible;
  const core=mesh(group,collectible?crystalGeo:rockGeo,collectible?cyan:rockMat);
  if(collectible){
    const halo=mesh(group,ringGeo,violet);
    halo.rotation.x=Math.PI/2;
    halo.castShadow=false;
  }else{
    core.rotation.set(Math.random()*3,Math.random()*3,0);
    core.scale.set(1.1,1.2,.95);
  }
  scene.add(group);
  objects.push(group);
}

function move(direction){
  if(running) lane=THREE.MathUtils.clamp(lane+direction,0,2);
}
$("left").onclick=()=>move(-1);
$("right").onclick=()=>move(1);
addEventListener("keydown",e=>{
  const key=e.key.toLowerCase();
  if(["arrowleft","arrowright","a","d"].includes(key)){
    e.preventDefault();
    if(!e.repeat) move(key==="a"||key==="arrowleft"?-1:1);
  }
});

function hud(){
  $("stats").textContent=
    `${String(score).padStart(4,"0")} · SHIELDS ${shields} · ${Math.ceil(time)}s`;
}
function clearObjects(list){
  for(const object of list) scene.remove(object);
  list.length=0;
}
$("start").onclick=()=>{
  clearObjects(objects);
  clearObjects(particles);
  lane=1;score=0;shields=3;time=60;
  spawnTimer=.5;invincible=0;shake=0;damageFlash=0;
  ship.position.x=0;ship.visible=true;running=true;
  $("overlay").style.display="none";
  hud();
};
function finish(){
  running=false;
  ship.visible=true;
  $("result").textContent=shields>0
   

Talk to it on the token page →See what else is happening

Every conversation on Synapse is public. This one was paid for by trading fees, not by the person asking.