void setup(){
size (800,600);
noCursor();//for custom cursor
}
void draw(){
background (0);
//CAVE BACK WALL
colorMode(RGB);
fill(25,17,2);
noStroke();
//get rectangles out of the way
rectMode(CORNERS); //first coord, opposite coord
rect(-1600+(mouseX-400),-1600+(mouseY-300),0+(mouseX-400),1600+(mouseY-300));
rect(620+(mouseX-400),-800+(mouseY-300),1600+(mouseX-400),1600+(mouseY-300));
rect(-1600+(mouseX-400),-1600+(mouseY-300),1600+(mouseX-400),0+(mouseY-300));
rect(-1600+(mouseX-400),520+(mouseY-300),1600+(mouseX-400),1600+(mouseY-300));
rect(180+(mouseX-400),-1600+(mouseY-300),520+(mouseX-400),1600+(mouseY-300));
rect(520+(mouseX-400),280+(mouseY-300),620+(mouseX-400),520+(mouseY-300));
rect(520+(mouseX-400),-20+(mouseY-300),560+(mouseX-400),80+(mouseY-300));
rect(0+(mouseX-400),500+(mouseY-300),40+(mouseX-400),520+(mouseY-300));
rect(0+(mouseX-400),160+(mouseY-300),40+(mouseX-400),220+(mouseY-300));
rect(0+(mouseX-400),120+(mouseY-300),180+(mouseX-400),160+(mouseY-300));
rect(-80+(mouseX-400),-80+(mouseY-300),200+(mouseX-400),120+(mouseY-300));
//ellipses, cause theres only two
ellipseMode(RADIUS);
ellipse(100+(mouseX-400),520+(mouseY-300),20,20);
ellipse(620+(mouseX-400),180+(mouseY-300),20,40);
//not a fan of triangles, they have too many angles to type.
//hole 1
triangle(80+(mouseX-400),120+(mouseY-300),180+(mouseX-400),120+(mouseY-300),180+(mouseX-400),220+(mouseY-300));
triangle(80+(mouseX-400),160+(mouseY-300),40+(mouseX-400),160+(mouseY-300),40+(mouseX-400),220+(mouseY-300));
triangle(40+(mouseX-400),220+(mouseY-300),0+(mouseX-400),220+(mouseY-300),0+(mouseX-400),380+(mouseY-300));
triangle(0+(mouseX-400),400+(mouseY-300),0+(mouseX-400),500+(mouseY-300),40+(mouseX-400),500+(mouseY-300));
triangle(40+(mouseX-400),500+(mouseY-300),40+(mouseX-400),520+(mouseY-300),100+(mouseX-400),520+(mouseY-300));
triangle(120+(mouseX-400),520+(mouseY-300),180+(mouseX-400),520+(mouseY-300),180+(mouseX-400),220+(mouseY-300));
//hole 2
triangle(560+(mouseX-400),-20+(mouseY-300),580+(mouseX-400),-20+(mouseY-300),560+(mouseX-400),80+(mouseY-300));
triangle(580+(mouseX-400),-20+(mouseY-300),620+(mouseX-400),-20+(mouseY-300),620+(mouseX-400),80+(mouseY-300));
triangle(560+(mouseX-400),80+(mouseY-300),520+(mouseX-400),80+(mouseY-300),520+(mouseX-400),120+(mouseY-300));
triangle(560+(mouseX-400),160+(mouseY-300),520+(mouseX-400),200+(mouseY-300),580+(mouseX-400),280+(mouseY-300));
triangle(520+(mouseX-400),200+(mouseY-300),580+(mouseX-400),280+(mouseY-300),520+(mouseX-400),280+(mouseY-300));
triangle(580+(mouseX-400),280+(mouseY-300),620+(mouseX-400),200+(mouseY-300),620+(mouseX-400),200+(mouseY-300)); // WHY IS THIS TRIANGLE NOT RENDERING
//CHOZO RUINS
fill(90,70,10);
//nice, rectangular structure
stroke(0);
rectMode(CORNERS); //first coord, opposite coord
rect(200+((mouseX-400)*0.5),140+((mouseY-300)*0.5),620+((mouseX-400)*0.5),800+((mouseY-300))*0.5);
rect(200+((mouseX-400)*0.5),140+((mouseY-300)*0.5),260+((mouseX-400)*0.5),200+((mouseY-300))*0.5);
rect(560+((mouseX-400)*0.5),140+((mouseY-300)*0.5),620+((mouseX-400)*0.5),200+((mouseY-300))*0.5);
rect(200+((mouseX-400)*0.5),500+((mouseY-300)*0.5),260+((mouseX-400)*0.5),560+((mouseY-300))*0.5);
rect(0+((mouseX-400)*0.5),500+((mouseY-300)*0.5),200+((mouseX-400)*0.5),800+((mouseY-300))*0.5);
rect(0+((mouseX-400)*0.5),500+((mouseY-300)*0.5),60+((mouseX-400)*0.5),560+((mouseY-300))*0.5);
//random bricks, so its not so bland
rect(200+((mouseX-400)*0.5),300+((mouseY-300)*0.5),240+((mouseX-400)*0.5),320+((mouseY-300))*0.5);
rect(220+((mouseX-400)*0.5),280+((mouseY-300)*0.5),260+((mouseX-400)*0.5),300+((mouseY-300))*0.5);
rect(240+((mouseX-400)*0.5),300+((mouseY-300)*0.5),280+((mouseX-400)*0.5),320+((mouseY-300))*0.5);
rect(200+((mouseX-400)*0.5),280+((mouseY-300)*0.5),220+((mouseX-400)*0.5),300+((mouseY-300))*0.5);
rect(580+((mouseX-400)*0.5),460+((mouseY-300)*0.5),620+((mouseX-400)*0.5),480+((mouseY-300))*0.5);
rect(580+((mouseX-400)*0.5),420+((mouseY-300)*0.5),620+((mouseX-400)*0.5),440+((mouseY-300))*0.5);
rect(560+((mouseX-400)*0.5),440+((mouseY-300)*0.5),600+((mouseX-400)*0.5),460+((mouseY-300))*0.5);
rect(340+((mouseX-400)*0.5),320+((mouseY-300)*0.5),380+((mouseX-400)*0.5),340+((mouseY-300))*0.5);
rect(380+((mouseX-400)*0.5),320+((mouseY-300)*0.5),420+((mouseX-400)*0.5),340+((mouseY-300))*0.5);
rect(360+((mouseX-400)*0.5),340+((mouseY-300)*0.5),400+((mouseX-400)*0.5),360+((mouseY-300))*0.5);
rect(340+((mouseX-400)*0.5),360+((mouseY-300)*0.5),380+((mouseX-400)*0.5),380+((mouseY-300))*0.5);
rect(380+((mouseX-400)*0.5),360+((mouseY-300)*0.5),420+((mouseX-400)*0.5),380+((mouseY-300))*0.5);
rect(200+((mouseX-400)*0.5),600+((mouseY-300)*0.5),240+((mouseX-400)*0.5),620+((mouseY-300))*0.5);
rect(240+((mouseX-400)*0.5),600+((mouseY-300)*0.5),280+((mouseX-400)*0.5),620+((mouseY-300))*0.5);
rect(280+((mouseX-400)*0.5),600+((mouseY-300)*0.5),320+((mouseX-400)*0.5),620+((mouseY-300))*0.5);
rect(220+((mouseX-400)*0.5),620+((mouseY-300)*0.5),260+((mouseX-400)*0.5),640+((mouseY-300))*0.5);
rect(260+((mouseX-400)*0.5),580+((mouseY-300)*0.5),300+((mouseX-400)*0.5),600+((mouseY-300))*0.5);
rect(400+((mouseX-400)*0.5),140+((mouseY-300)*0.5),440+((mouseX-400)*0.5),160+((mouseY-300))*0.5);
rect(440+((mouseX-400)*0.5),140+((mouseY-300)*0.5),480+((mouseX-400)*0.5),160+((mouseY-300))*0.5);
rect(20+((mouseX-400)*0.5),600+((mouseY-300)*0.5),60+((mouseX-400)*0.5),620+((mouseY-300))*0.5);
rect(40+((mouseX-400)*0.5),620+((mouseY-300)*0.5),80+((mouseX-400)*0.5),640+((mouseY-300))*0.5);
rect(60+((mouseX-400)*0.5),600+((mouseY-300)*0.5),100+((mouseX-400)*0.5),620+((mouseY-300))*0.5);
//CAVE ENTRANCE
colorMode(RGB);
fill(50,35,5);
noStroke();
//Rectangles first
rectMode(CORNER); //note: first 2 floats are starting co-ords, everything from there adds or subtracts rather than acts as co-ord
rect(0,0,240,100);
rect(240,0,60,180);
rect(0,100,140,120);
rect(0,220,100,120);
rect(420,0,60,80);
rect(520,0,280,140);
rect(580,140,220,40);
rect(640,180,160,20);
rect(660,200,40,60);
rect(700,200,100,200);
rect(640,260,160,340);
rect(0,560,400,40);
rect(400,540,180,60);
rect(580,520,80,80);
rect(420,420,20,120);
rect(0,-50,-400,700);//backup left wall
rect(-400,-50,1600,50);//backup ceiling
rect(800,-50,400,700);//backup right wall
rect(-400,600,1600,50);//backup floor
//theres only one ellipse so do it here
ellipseMode(RADIUS);
ellipse(100,260,20,20);
//ugh triangles
triangle(140,100,180,100,140,140);
triangle(100,220,140,220,100,260);
triangle(100,260,100,300,120,300);
triangle(0,340,80,340,0,540);
triangle(0,380,0,560,120,560);
triangle(220,100,260,100,260,240);
triangle(260,180,280,180,260,240);
triangle(300,0,440,0,300,160);
triangle(360,20,420,20,420,80);
triangle(480,0,480,120,600,0);
triangle(520,140,580,140,580,180);
triangle(580,180,640,180,640,200);
triangle(640,200,660,200,660,240);
triangle(700,240,700,360,560,360);
triangle(560,360,640,360,640,420);
triangle(640,460,640,520,600,520);
triangle(445,380,445,540,400,540);
triangle(445,500,445,540,460,540);
//SAMUS
//while the left mouse button is pressed, Samus' colours will change from the orange Varia Suit to the purple Gravity Suit
stroke(0);
colorMode(RGB);
rectMode(CORNERS);
fill(0,255,0+(255*mouseButton));
ellipse(255,515,40,40);
fill(205,125-(120*mouseButton),0+(75*mouseButton));
ellipse(250,520,40,40);
fill(205,150-(1*mouseButton),0);
quad(260,560,330,574,330,600,270,600);
fill(105,0,0);
ellipse(300,500,40,35);
rect(273,522,325,575);
triangle(275,525,250,575,275,575);
triangle(300,525,275,575,300,575);
fill(0,255,0+(255*mouseButton));
ellipse(345,515,40,40);
fill(205,125-(120*mouseButton),0+(75*mouseButton));
quad(310,540,360,540,355,585,330,585);
ellipse(340,520,40,40);
fill(0,115,0);
quad(320,585,355,580,380,600,340,600);
ellipse(355,585,10,10);
//Custom Mouse Cursor
noStroke();
colorMode(HSB);
fill (0,255,255,120);
ellipse (mouseX, mouseY, 10, 10);
//Mouse debug positioning
//text (mouseX, 10, 20);
//text (mouseY, 10, 30);
}