merlebac-Looking Outward-10

A gameplay still of “The Game: The Game”
An extremely disturbing image of “The Game: The Game”

A project that I thought was incredibly admirable was Angela Washko’s video game The Game: The Game. The title refers to a common phrase in the self proclaimed “seduction community.” For context, the members of the seduction community, to put it bluntly, aim to have sex with as many women as humanly possible and treat them like trash (this is unfortunately an accurate description). The Game: The Game is a point and click game where you play as a single female. The purpose of the goal is to see if you can distinguish average normal guys from members of the seduction community. I personally think that it is good that she is shedding light on this heinous group, and spreading social awareness. I wasn’t able to find that much information on her background. It was difficult for me to find information on her background. She graduated from from Temple University with a Bachelor of Fine Arts, and received a masters of fine arts at the University of California. Additionally, she won the Terminal Award for her video “Chastity,” and has had her art featured in several exhibits. Angela has worked on several other projects which fight for gender acceptance and women’s rights (Wikipedia, sect. 1-6).

Link to Angela’s Vimeo

Link to Angel’s main page on The Game: The Game

Sources Used:

  • “Angela Washko.” ANGELA WASHKO, angelawashko.com/home.html.
  • “Angela Washko.” Wikipedia, Wikimedia Foundation, 1 Nov. 2017, en.wikipedia.org/wiki/Angela_Washko.
  • “The Game: The Game.” ANGELA WASHKO, angelawashko.com/section/437138-The-Game-The-Game.html.
  • Washko, Angela. “Angela Washko.” Vimeo, Angela Washko, vimeo.com/angelawashko.

rsp1-LookingOutwards-10

http://cargocollective.com/limilab

Filipa Valente

screen cap of one type of Filipa’s work

I chose to research the works of artist Filipa Valente for this Looking Outwards blog. What most caught my eye when I was perusing the list of women artists, was that Filipa’s works were that of architectural lighting. For me personally, I am currently an architecture student but I am also very interested in the aspects of lighting design and how they can be implemented into the user’s experience and such.

another example of Filipa’s work

Her work, Filtered Transparencies, is an interactive art installation that uses layered light, space and sound to create an immersive experience. The installation uses projected imagery and a maze of transparent screens to blur physical spatial boundaries and transports its users into an augmented hologram-like environment.

The installation’s structure is designed to become ‘invisible’ and traversable – an architectural void into which the illusion of mass and dimensionality emerge. Users can interact with the space as well by altering the projected content, and switching environments.

 

 

rsp1-Project-10 – Landscape

sketch

/*Rachel Park
rsp1@andrew.cmu.edu
Section B @ 10:30AM
Project 10: Generative Landscapes*/

var sushiArray = [];
var sushiFrames = 0;
var sushiFrequency = 110;

function setup() {
  createCanvas(500,200);
  background(252,245,229);

  frameRate(10);
}

function draw() {
  setting();
  drawBelt();

  updateSushi();
  displaySushi();
  addSushi();
  makeSushi();
  moveSushi();


}

function updateSushi() {
  for (var i = 0; i < sushiArray.length; i++){
    sushiArray[i].move();
    sushiArray[i].display();
  }
}
function addSushi() {
  var a = random(1);
  if (a < 0.05) {
    sushiArray.push(makeSushi(width));
  }
}

function moveSushi() {
  this.x += this.speed;
}

function displaySushi() {
  push();
  translate(this.x, this.height);
  for (var i = 0; i < this.number; i++){
    drawSushi();
  }
  pop();
}

//sushi
function drawSushi(){
  noStroke();
  fill(210);
  ellipse(20, height/2+25,35,35);//plate..?? how to make sushi move sideways?
  fill(255);
  rect(13,height/2+20,15,10,5);
  fill('red');
  rect(13,height/2+15,15,10,5);
}

function makeSushi(posX) {
  var sushi2 = {x: posX,
                number: floor(random(1,3)),
                speed: -4,
                height: 10,
                move: moveSushi,
                display: displaySushi}
  return sushi2;
}


//setting/background context
function setting() {
  for (var i = 0; i < 5; i++){
  noStroke();
  fill(139,33,12);
  rect(width/5*i+25,height/2-55,45,75,5);//chairs
  }
}

//conveyor belt
function drawBelt() {
  noStroke();
  fill(138,138,137);
  rect(0, height/2-20, width, 90);
  fill(0);
  rect(0, height/2-10, width, 70);
}

I decided to take a little spin off the landscape project and made a moving conveyor belt that brings out little plates of sushi. I wanted to apply the same concept of the moving landscape to a more real-life situation and perhaps make it a bit more amusing.

sketch
screencap of running code

 

atraylor – Looking Outward 10 – Section B

For this post I chose a [domestic] by Mary Flanagan which is a conceptual art piece in a first person video game space. It is a virtual experience exploring the traumatic memory of a house fire using fragmented language and images. The space has odd scales and perspective and an obvious computer/video game appearance. [domestic] for these reasons it doesn’t follow regular video game conventions in emulating reality. Players can shoot coping mechanisms at the walls covered in text and images that describe the event. The piece explores the role of narrative and memory in the space of video games.

An example of the imperfect perspective and scaling in the game.

I admire this piece because it makes nontraditional narrative the main focus of the piece. There really aren’t any traditional storytelling techniques and there few interactions the player can do. I find this interesting because it takes one of the essential aspects of games and takes it to the extreme without making what some might call a “walking game”. This game is also from 2003 and makes me wonder what a game like this would look like now.

Mary Flanagan has a PhD from St Martins, University of the Arts in London and is a professor at Dartmouth College. She is an artist, a writer, a poet, an inventor and a designer. Her work focuses on the human experience and human desire often implemented in games, installations, computer viruses, and interactive texts.

A still from the game showing the combination of text and imagery in the space.

 

merlebac Project-10

Generative Landscape

// Matthew Erlebacher
// Section B
// merlebac@andrew.cmu.edu
// Project-10

var stars = [];
var planets = [];


function setup() {
    createCanvas(480, 480); 
    
    // create an initial collection of stars
    for (var i = 0; i < 100; i++){
        var rx = random(width);
        stars[i] = makeStar(rx);
    }
    // create an initial collection of planets
    for (var i = 0; i < 3; i++){
        var rx = random(width);
        planets[i] = makePlanet(rx);
    }
    frameRate(10);
}


function draw() {
    background(0); 

    updateAndDisplayStars();
    removeStarsThatHaveSlippedOutOfView();
    addNewStarsWithSomeRandomProbability();

    updateAndDisplayPlanets();
    removePlanetsThatHaveSlippedOutOfView();
    addNewPlanetsWithSomeRandomProbability();

    fill(125);
    rectMode(CENTER);
    rect(120, mouseY, 10, 70);
    // Creates laser holder
    fill(0, 0, 255);
    rect(125, mouseY + 35, 40, 10);
    // Creates lower laser
    rect(125, mouseY - 35, 40, 10);
    // Creates upper laser
    quad(80, mouseY + 20, 60, mouseY + 20, 30, mouseY + 40, 50, mouseY + 40);
    // Creates lower fin
    quad(80, mouseY - 20, 60, mouseY - 20, 30, mouseY - 40, 50, mouseY - 40);
    // Creates upper fin
    ellipse(160, mouseY, 60, 40);
    // Creates cockpit
    fill(0);
    ellipse(160, mouseY, 50, 30);
    // Creates cockpit window
    fill(125);
    rect(110, mouseY, 100, 40);
    // Creakes body
    fill(0);
    textAlign(CENTER);
    textSize(18);
    text("MATTHEW", 110, mouseY + 5);
}

function updateAndDisplayStars(){
    // Update the star's positions, and display them.
    for (var i = 0; i < stars.length; i++){
        stars[i].move();
        stars[i].display();
    }
}

function removeStarsThatHaveSlippedOutOfView(){
    // If a star has dropped off the left edge,
    // remove it from the array.  This is quite tricky, but
    // we've seen something like this before with particles.
    // The easy part is scanning the array to find stars
    // to remove. The tricky part is if we remove them
    // immediately, we'll alter the array, and our plan to
    // step through each item in the array might not work.
    // Our solution is to just copy all the stars
    // we want to keep into a new array.
    var starsToKeep = [];
    for (var i = 0; i < stars.length; i++){
        if (stars[i].x + stars[i].breadth > 0) {
            starsToKeep.push(stars[i]);
        }
    }
    stars = starsToKeep; // remember the surviving stars
}


function addNewStarsWithSomeRandomProbability() {
    // With a very tiny probability, add a new star to the end.
    var newStarLikelihood = 0.07; 
    if (random(0,1) < newStarLikelihood) {
        stars.push(makeStar(width));
    }
}


// method to update position of star every frame
function starMove() {
    this.x += this.speed / 2;
}


// draw the star and some windows
function starDisplay() {
    var floorHeight = 20;
    var bHeight = this.nFloors;

    fill(255); 
    stroke(0); 
    push();
    translate(this.x, height);
    beginShape();
    vertex(0, -bHeight);
    // Upper point of star
    vertex(0 + 2, -bHeight + 6);
    vertex(0 + 8, -bHeight + 6);
    // Right point of star
    vertex(0 + 3, -bHeight + 9);
    vertex(0 + 4, -bHeight + 16);
    // Lower right point of star
    vertex(0, -bHeight + 11);
    vertex(0 - 4, -bHeight + 16);
    // Lower left point of star
    vertex(0 - 3, -bHeight + 9);
    vertex(0 - 8, -bHeight + 6);
    // Left point of star
    vertex(0 - 2, -bHeight + 6);
    endShape();
    // Creates star shape
    pop();
}


function makeStar(birthLocationX) {
    var bldg = {x: birthLocationX,
                breadth: 50,
                speed: -1.0,
                nFloors: round(random(0, height)),
                // I changed the range of possible values to the entire height of the canvas
                move: starMove,
                display: starDisplay}
    return bldg;
}


function updateAndDisplayPlanets(){
    // Update the planet's positions, and display them.
    for (var i = 0; i < planets.length; i++) {
        planets[i].move();
        planets[i].display();
    }
}


function removePlanetsThatHaveSlippedOutOfView() {
    // If a planet has dropped off the left edge,
    // remove it from the array.  This is quite tricky, but
    // we've seen something like this before with particles.
    // The easy part is scanning the array to find planets
    // to remove. The tricky part is if we remove them
    // immediately, we'll alter the array, and our plan to
    // step through each item in the array might not work.
    //     Our solution is to just copy all the planets
    // we want to keep into a new array.
    var planetsToKeep = [];
    for (var i = 0; i < planets.length; i++){
        if (planets[i].x + planets[i].breadth > 0) {
            planetsToKeep.push(planets[i]);
        }
    }
    planets = planetsToKeep; // remember the surviving planets
}


function addNewPlanetsWithSomeRandomProbability() {
    // With a very tiny probability, add a new planet to the end.
    var newPlanetLikelihood = 0.007; 
    if (random(0,1) < newPlanetLikelihood) {
        planets.push(makePlanet(width));
    }
}


// method to update position of planet every frame
function planetMove() {
    this.x += this.speed / 2;
}


// draw the planet and some windows
function planetDisplay() {

    var floorHeight = 20;
    var bHeight = this.nFloors;


    noStroke();
    push();
    translate(this.x, height);
    for (var i = 0; i < height; i++) {
        fill(this.colorR, this.colorG, this.colorB); 
        ellipse(0, -bHeight, this.r, this.r);
        // Creates the main body of planet
        fill(this.colorR - 50, this.colorG - 50, this.colorB - 50);
        ellipse(0, -bHeight, this.r / this.d1, this.r);
        // Creates horizontal texture of planet
        fill(this.colorR - 50, this.colorG - 50, this.colorB - 50);
        ellipse(0, -bHeight, this.r, this.r / this.d2);
        // Creates vertical texture of planet
        fill(this.colorR, this.colorG, this.colorB);
        ellipse(0, -bHeight, this.r / this.d1 + 10, this.r / this.d2 + 10);
        // Creates center of planet
    }
    pop();
}


function makePlanet(birthLocationX) {
    var bldg = {x: birthLocationX,
                r: round(random(50, 100)),
                d1: random(2, 5),
                d2: random(2, 5),
                // Variables for radius of planet

                colorR: round(random(100, 255)),
                colorG: round(random(100, 255)),
                colorB: round(random(100, 255)),
                // Variables for the color of the planet

                breadth: 50,
                speed: -1.0,
                nFloors: round(random(0, height)),
                move: planetMove,
                display: planetDisplay}
    return bldg;
}

I started out with having no idea what to do for this assignment. I just wasn’t sure how I would be able to create a generative landscape using the code that I had. However, I eventually figured out that I could do a space theme. Implementing this was tricky at first. I didn’t have a full understanding of the code when I first went in, so I made a lot of mistakes. I thought that I was supposed to set the location of each object to random until I realized that this wouldn’t animate it. I then had to undo a large amount of my work and replace it with the sample code. After looking at some of my peers’ projects I decided to add a rocket ship since I felt that the appearance was somewhat bland.

Project 10 – Yugyeong Lee

sketch

//Yugyeong Lee
//Section B
//yugyeonl@andrew.cmu.edu
//Project-10

var stars = [];		//array of stars
var clouds = [];	//array of clouds
var landscapes = [];	//array of landscapes
var camera;

function preload() {
	//loading previously-made (through code) camera image
	var cameraImage = "https://i.imgur.com/5joEquu.png"
	camera = loadImage(cameraImage);
}

function setup() {
    createCanvas(480, 360);
    //create initial set of stars
    for (var i = 0; i < 100; i++) {
    	var starX = random(width);
    	var starY = random(3*height/4);
    	stars[i] = makeStars(starX, starY);
    }
    //create initial set of clouds
    for (var i = 0; i < 4; i++) {
    	var cloudX = random(width);
    	var cloudY = random(height/2);
    	clouds[i] = makeClouds(cloudX, cloudY);
    }
    //create mountain
    makeLandscape(height-100, 120, 0.0001, .0075, color(20));
    //create ocean
    makeLandscape(height-50, 20, 0.0001, .0005, color(42, 39, 50));
}

function draw() {
	//gradient background
    var from = color(24, 12, 34);
	var to = color(220, 130, 142);
    setGradient(0, width, from, to);
    //stars
	updateAndDisplayStars();
	removeStars();
	addStars();
	//moon
	makeMoon();
    //clouds
	updateAndDisplayClouds();
	removeClouds();
	addClouds();
	//landscape
	moveLandscape();
    //reflection of moon on ocean
    ellipseMode(CENTER);
    fill(243, 229, 202, 90);
    ellipse(3*width/4, height-50, random(50, 55), 4);
    ellipse(3*width/4, height-35, random(35, 40), 4);
    ellipse(3*width/4, height-26, random(25, 30), 4);
    ellipse(3*width/4, height-17, random(10, 15), 4);
    ellipse(3*width/4, height-8, random(35, 40), 5);
	fill(204, 178, 153, 50);
    ellipse(3*width/4, height-50, random(70, 80), 8);
    ellipse(3*width/4, height-35, random(50, 60), 8);
    ellipse(3*width/4, height-26, random(70, 80), 8);
    ellipse(3*width/4, height-17, random(30, 40), 8);
    ellipse(3*width/4, height-8, random(60, 70), 10);
	//camera LCD display
	push();
	translate(65, 153);
	scale(.475, .46);
	var from = color(24, 12, 34);
	var to = color(220, 130, 142);
    setGradient(0, width, from, to);
    //stars
	updateAndDisplayStars();
	removeStars();
	addStars();
	//moon
	makeMoon();
    //clouds
	updateAndDisplayClouds();
	removeClouds();
	addClouds();
	//landscape
	moveLandscape();
    //reflection
    ellipseMode(CENTER);
    fill(243, 229, 202, 90);
    ellipse(3*width/4, height-35, random(50, 55), 6);
    ellipse(3*width/4, height-28, random(35, 40), 4);
    ellipse(3*width/4, height-19, random(25, 30), 4);
    ellipse(3*width/4, height-10, random(10, 15), 4);
	fill(204, 178, 153, 50);
    ellipse(3*width/4, height-35, random(70, 80), 8);
    ellipse(3*width/4, height-28, random(50, 60), 8);
    ellipse(3*width/4, height-19, random(70, 80), 8);
    ellipse(3*width/4, height-10, random(30, 40), 8);
	pop();
	//camera
	image(camera, 0, 0);
	//camera crosshair
	noFill();
	strokeWeight(.25);
	stroke(235, 150);
	rect(75, 163, 200, 140);
	rect(85, 173, 180, 120);
	line(170, 233, 180, 233);
	line(175, 228, 175, 238);
	//battery symbol
	strokeWeight(.5);
	rect(94, 279, 18.25, 6);
	noStroke();
	fill(235, 150);
	for (i = 0; i< 4; i++) {
		rect(95+i*4.25, 280, 4, 4);
	}
	rect(112.25, 280, 2, 3);
	//REC text
	fill(235);
	textSize(7);
	text("REC", 245, 184);
	fill(225, 100, 0);
	ellipse(238, 182, 7, 7);
	//camera tripod
	fill(30);
	rect(width/2-50, height-26, 100, 20);
	fill(25);
	rect(width/2-75, height-16, 150, 50, 10);
}

function setGradient (y, w, from, to) {
	// top to bottom gradient (background)
    for (var i = y; i <= height; i++) {
      var inter = map(i, y, y+w, 0, 1);
      var c = lerpColor(from, to, inter);
      stroke(c);
      strokeWeight(2);
      line(y, i, y+w, i);
	}
}

function makeMoon() {
	ellipseMode(CENTER);
	for (var i = 0; i < 30; i++) {
		//glowing gradient moonlight through array & randomizing value
		var value = random(7, 8);
		var transparency = 50-value*i;
		var diam = 80;
		fill(243, 229, 202, transparency);
		ellipse(3*width/4, 90, diam+10*i, diam+10*i);
	}
	//the moon
	fill(204, 178, 153);
	ellipse(3*width/4, 90, diam, diam);
}

function makeLandscape(landscapeY, landscapeR, landscapeS, landscapeD, landscapeC) {
	var landscape = {ly: landscapeY,		//locationY
					 range: landscapeR,		//range of how far landscape goes up
					 speed: landscapeS,		//speed of the landscape
					 detail: landscapeD,	//detail (how round/sharp)
					 color: landscapeC,		//color of the landscape
					 draw: drawLandscape}
	landscapes.push(landscape);
}

function drawLandscape() {
	//generating landscape from code provided
	fill(this.color);
	beginShape();
	vertex(0, height);
	for (var i = 0; i < width; i++) {
		var t = (i*this.detail) + (millis()*this.speed);
        var y = map(noise(t), 0,1, this.ly-this.range/2, this.ly+this.range/2);
        vertex(i, y); 
	}
	vertex(width, height);
	endShape(CLOSE);
}

function moveLandscape() {
	//move the landscape
	for (var i = 0; i < landscapes.length; i++) landscapes[i].draw();
}

function updateAndDisplayStars() {
	//update the stars' position & draw them
	for (var i = 0; i < stars.length; i++) {
		stars[i].move();
		stars[i].draw();
	}
}

function makeStars(starX, starY) {
	var star = {x: starX,					//locationX of star
				y: starY,					//locationY of star
				speed: -random(0, .005),	//speed of the star
				move: moveStars,			
				draw: drawStars}
	return star;
}

function drawStars() {
	noStroke();
	//setting transparency at random to have twinkling effect
	var transparency = random(50, 200);
	fill(255, transparency);
	ellipse(this.x, this.y, 1.25, 1.25);
}

function moveStars() {
	//move stars by updating its x position
	this.x += this.speed;
}

function removeStars() {
	var keepStars = []; //array of stars to keep
	for (var i = 0; i < stars.length; i++) {
		if (0 < stars[i].x < width) {
			keepStars.push(stars[i]);
		}
	}
	stars = keepStars;	//remember the surviving stars
}

function addStars() {
	//new stars from the right edge of the canvas
	var newStarsProbability = 0.0025;
	//likliness of new stars
	if (random(0, 1) < newStarsProbability) {
    	var starX = width;
    	var starY = random(3*height/4);
		stars.push(makeStars(starX, starY));
	}
}
//clouds
function updateAndDisplayClouds() {
	//update the clouds' position & draw them
	for (var i = 0; i < clouds.length; i++) {
		clouds[i].move();
		clouds[i].draw();
	}
}

function makeClouds(cloudX, cloudY) {
	var cloud = {x: cloudX,					//locationX of cloud
				y: cloudY,					//locationY of the cloud
				breadth: random(200, 300),	//width of the cloud
				speedC: -random(.3, .5),	//speed of the cloud
				nFloors: round(random(2,6)),//multiplier that determines the height of the cloud
				transparency: random(20, 60),//transparency of the cloud
				move: moveClouds,
				draw: drawClouds}
	return cloud;
}

function drawClouds() {
	var multiplier = 5;	//multiplier that determines the height of the cloud
	var cloudHeight = this.nFloors*multiplier;
	ellipseMode(CORNER);
	noStroke();
	fill(255, this.transparency);
	push();
	translate(this.x, height/2-80);
	ellipse(0, -cloudHeight, this.breadth, cloudHeight/2);
	pop();
	push();
	translate(this.x, height/2-100);
	ellipse(30, -cloudHeight, this.breadth, cloudHeight);
	pop();
}

function moveClouds() {
	//move stars by updating its x position
	this.x += this.speedC;
}

function removeClouds() {
	var keepClouds = [];	//array of clouds to keep
	for (var i = 0; i < clouds.length; i++) {
		if (clouds[i].x + clouds[i].breadth > 0) {
			keepClouds.push(clouds[i]);
		}
	}
	clouds = keepClouds;	//remember the surviving clouds
}

function addClouds() {
	//new clouds from the right edge of the canvas
	var newCloudsProbability = 0.005;
	//likliness of new clouds
	if (random(0, 1) < newCloudsProbability) {
    	var cloudX = width;
    	var cloudY = random(height/2);
		clouds.push(makeClouds(cloudX, cloudY));
	}
}

I first visualized the generative landscape through the lens of a camera. As if to record the moving landscape on the background, the LCD display shows the night sky with twinkling stars as well as clouds, mountains, and flowing body of water. I created the camera through code but in realizing that I cannot make a transparent LCD display, I took a screenshot of the camera I generated and created a transparent layer in Photoshop and included it in my code as an image. I focused on creating depth with this generative landscape project through different layers and wanted to make sure that even the objects with subtle movement such as the moon and the stars have movement through having blinking and glowing effect.

dnam-LookingOutwards-10

Angela Washko Live Performance

For this week’s Looking Outwards based on female artists, I looked into Angela Washko. Her works are very unique – a lot of times she is pushing our boundaries of what we can truly call ‘art’. One of the project I found intriguing was her project: “The Council on Gender Sensitivity and Behavioral Awareness in World of Warcraft”. This was a project where Washko would go into the virtual world in World of Warcraft to tell the players about feminism and gender equality. Angela Washko presented this by showcasing her discussing the issue ingame and on a projector. Personally, I found the work interesting as internet is often used as a place where people show blatant sexism and offend others, but Washko used it to attempt to educated the players. Her project can be seen here.

nahyunk1 – Project 10 Landscape

sketch

//NaHyun Kim
//section B
//nahyunk1@andrew.cmu.edu
//Project 10 - landscape

var tSpeed = 0.0013;
var tDetail = 0.002;
var stars = [];
var r = 255;
var g = 255;
var b = 255;

function setup() {
    createCanvas(400, 500);
    frameRate(10);

    for (var s=0; s<1; s++){
      var place = random(width);
      stars[s] = makeStars(place);
    }
}

function draw() {
  var Col = color(25,0,51) //dark purple;
  var Col2 = color(51, 0, 102)// lighter purple;
  //background color
  for (var i=0; i < height; i++) {
   var gradi = map(i, 90, 300, 0, 1);
   var Lerp = lerpColor(Col, Col2, gradi);
    stroke(Lerp);
    line(0, i, width, i);
   }

   //stardust
  updateAndDisplayStars();
  removeStars();
  starGenerate();
  starDisplay();

   //moon
   for (var c=0; c<10; c++){
     noStroke();
     fill(217,154,100,(10-c)*1)
     ellipse(310, 30, 40+(10*c), 40+(10*c));
     noStroke();
     fill(255, 223, 181);
     ellipse(310, 30, 50, 50);
     fill(252, 240, 224);
     ellipse(313, 30, 45, 45);
   }

   //rolling mountains behind
   strokeWeight(0.1);
   stroke(random(0,r), random(0,g), random(0,b));
   fill(20);
   beginShape();
     for (var x = 0; x < width; x++) {
       var t = (5*x * tDetail) + (millis() * tSpeed/10);
       var y = map(noise(t/4), 0, 1, 0, 600);
       curveVertex(x, y);
     }
   curveVertex(500, 1000);
   curveVertex(0,width);
   endShape(CLOSE);

  noStroke();
  fill(0);  //rolling mountain tops
  beginShape();
    for (var x = 0; x < width; x++) {
        var t = (5*x * tDetail) + (millis() * tSpeed/2);
        var y = map(noise(t/2), 0,1, 1, 600);
        curveVertex(x, y);
     }
  curveVertex(500, 10000);
  curveVertex(0,width);
  endShape(CLOSE);
}

function updateAndDisplayStars(){
    // Update and display stars
    for (var i = 0; i < stars.length; i++){
        stars[i].move();
        stars[i].display();
    }
}

function removeStars(){
       var starsKeep = [];
       for (var i = 0; i < stars.length; i++){
           if (stars[i].x + stars[i].breadth > 0) {
               starsKeep.push(stars[i]);
           }
       }
       stars = starsKeep; //remaining stars.
}
function starGenerate() {
       // add stars
       var likelyStar = 0.009;
       if (random(0,1) < likelyStar) {
           stars.push(makeStars(width));
       }
   }
//update position
function starsMove() {
       this.x += this.speed;
   }
function starDisplay() {
       strokeWeight(random(0.5,3));
       fill(random(0,r), random(0,g), random(0,b));
       stroke(random(0,r), random(0,g), random(0,b));
       push();
       translate(this.x, 20);
       for (var i = 0; i < stars.length; i++) {
           point(random(10,200), random(10,200));
       }
       pop();
   }
function makeStars(birthLocationX) {
     var starr = {x: birthLocationX,
                 breadth: 30,
                 speed: -0.003,
                 move: starsMove,
                 display: starDisplay}
     return starr;
 }

I created this image based on the time when I was looking out the window of a car at night on a highway next to mountainous forests. I had multichromatic stars appear and disappear which made it seem like they were actual stars and had the background of the mountain respond to the starlights to emphasize the surreal scenery. I also created the brightness effect of the moon by creating a series of ellipses with fading hues of the color of the moon.

mmirho – Project 10 – Inside a Submarine

This is supposed to show what it would be like to look out of a submarine!

Different color and sized fish fly by at different speeds, as you peek through the portholes.

I will admit, however, I was unable to figure out how to use objects effectively without blatantly copying the format given to me. Instead, I used loops and if statements, and I understand I did this project incorrectly. However, I hope it satisfies the requirement for a landscape! 🙂

I plan to schedule some office hours to more fully understand how objects function. Sorry!

sketch

function setup() {
    createCanvas(480, 480);
    
}

//Creates fish x location for each 
//fish to increment with speed
var fishX1 = 0;
var fishX2 = 0;
var fishX3 = 0;

//Assigns speed values for each fish
var speed1 = 0;
var speed2 = 0;
var speed3 = 0;

//Assigns vertical location values for each fish
var up1 = 0;
var up2 = 0;
var up3 = 0;


//Assigns r, g, and b values for each fish
var r1 = 0;
var r2 = 0;
var r3 = 0;
var g1 = 0;
var g2 = 0;
var g3 = 0;
var b1 = 0;
var b2 = 0;
var b3 = 0;

//Assigns size variables to each of the three fish
var big1 = 0;
var big2 = 0;
var big3 = 0;


function draw() {
    background(255);

    //This assigns random variables to each fish
    //so they are a random size, speed, location, and color
    if (fishX1 < 1) {
        speed1 = random(0.1,2);
        up1 = height/2 + random(-50,50);
        r1 = random(0,200);
        g1 = random(0,200);
        b1 = random(0,200);
        big1 = random(10,30);
    } else if (fishX2 < 1) {
        speed2 = random(0.1,2);
        up2 = height/2 + random(-50,50);
        r2 = random(0,200);
        g2 = random(0,200);
        b2 = random(0,200);
        big2 = random(10,30);
    } else if (fishX3 < 1) {
        speed3 = random(0.1,2);
        up3 = height/2 + random(-50,50);
        r3 = random(0,200);
        g3 = random(0,200);
        b3 = random(0,200);
        big3 = random(10,30);
    }

    //Moves the fish at a random speed
    fishX1 += speed1;
    fishX2 += speed2;
    fishX3 += speed3;

    //Makes each fish
    fish(fishX1, up1, big1, r1,g1,b1)
    fish(fishX2, up2, big2, r2,g2,b2)
    fish(fishX3, up3, big3, r3,g3,b3)



    //Makes the submarine inside background
    subBackground();


    porthole(width/4, height/2);
    porthole(3*width/4, height/2);

    //resets the location of the fish at 0 when it 
    //reaches the end

    if (fishX1 > width) {
        fishX1 = 0;
    } else if (fishX2 > width) {
        fishX2 = 0;
    } else if (fishX3 > width) {
        fishX3 = 0;
    }
}

function porthole(x,y) {

    //Makes a porthole, with the inside slightly blue
    //but translucent, so it acts like a window

    fill(0, 0, 200, 80);
    strokeWeight(30);
    stroke(200);
    ellipse(x,y,height/3,height/3);

}

function fish(x,y,big,r,g,b) {

    //Makes a fish with an ellipse and a triangle

    fill(r,g,b);
    noStroke();
    ellipse(x,y,big*2,big)
    triangle(x-big/2,y,   x-big*1.5,y+big/2,   x-big*1.5,y-big/2);
    fill(0);

    //adds a little eye
    ellipse(x+3*big/5, y-big/4.5, 3,3);

}

function subBackground() {

    //Fills in the outside of the portholes with
    //green, indicating the inside of the submarine

    fill(0,70,0);
    rectMode(CENTER);
    rect(width/2, height/2, 100, height);
    rect(width/2 - 237, height/2, 100, height);
    rect(width/2 + 237, height/2, 100, height);
    rect(width/2, height/2-215, width, 300);
    rect(width/2, height/2+215, width, 300);

}

mmirho – Looking Outwards 10 – perfect.city

perfect.city is a project developed by Mary Flanagan. The project is an exploration of the South Korean city of Songdo, a planned international metropolis developed by Gale International. The city is designed to be perfect. Mary modeled it in the program Sims 2, and I personally respect this because it takes the enormous scale project of building a city, and boils it down to a simple generated simulation. If the design is so “Perfect” then let’s see what happens when people are put there. It’s almost a culture test, rather than just a theoretical prediction.

Mary Flanagan is an inventor, artist, writer, and designer that creates games, installations, poetry, and essays. I’m unsure as to where she studied, but she has presented at a wide range of top universities and is very active in general with all of her writing and artistic creation.

Here’s a link to the project on her page:

[perfect.city]

Here’s the video link: