Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
int screen = -1;  //sets which screen the player is viewing (-2=gameover screen, -1=title screen, 0=main world for player to explore, 1=first battle, 2=second battle, 3=third battle)
int UIscreen = 1;               //determines what is being displayed in the player UI in battles (attacks, text, ect.)
float maxHealth = 20;           //determines how much the health the player can have up to
float health = 20;              //amount of damage player can take before gameover
float monMaxHealth = 16;        //amount of health monster has when at full health
float monHealth = 16;           //amount of damage enemy can take before dying
float maxMana = 30;             //amount of mana player has when at full mana
float mana = 30;                //amount of mana player has to use magic
float maxExp = 70;              //amount of exp required to level up
float exp = 0;                  //amount of experience player has (determines when player's level increases)
int level = 1;                  //player's level - increases health, damage dealt, level of enemies encountered
int levelUpTime = 0;            //time the display stays on the screen for when character levels up
boolean doLevelUp = false;
int monLevel;                   //enemy's level - increases health, damage, and exp earned
float spriteX = 60;             //player sprite x coordinate
float spriteY = 200;            //player sprite y coordinate
float monX = 240;               //enemy sprite's x coordinate
float monY = 100;               //enemy sprite's y coordinate
int firstHit;                   //determines who will attack first
int attackType = 0;             //determines which attack player has selected when choosing attacks (0=sword, 1=fire, 2=lightning, 3=blizzard)
boolean bliz = false;           //determines if player used blizzard attack
boolean fire = false;           //determines if player used fire attack
boolean light = false;          //determines if player used lightning attack
boolean sword = false;          //determines if player used regular attack
boolean monTackle = false;      //determines if enemy used tackle attack
boolean monFire = false;        //determines if enemy1 used fire attack
boolean monBite = false;        //determines if enemy2 used bite attack
boolean monSting = false;       //determines if enemy3 used sting attack
int winTime = 0;                //sets how long player stays on battle screen after defeating enemy
float time = 0;                 //used to create a timeline and animation for each attack
float snowTimeX;
float snowTimeY;
int ranNum = 0;
float playerX = 190;        //determines player x coordinate
float playerY = 100;        //determines player y coordinate
float groundX = 0;          //moves ground's x coordinate
float groundY = 0;          //moves ground's y coordinate
boolean up = false;         //moves player up
boolean right = false;      //moves player right
boolean down = false;       //moves player down
boolean left = false;       //moves player left
boolean dash = false;       //determines if player is dashing (holding space)
float dashSpd = 1.5;        //sets increased speed player will move while dashing
int direction = 0;          //sets direction the player is facing
float speed = 2;            //determines how fast player will move


void setup() {
  size(400, 400);
  frameRate(100);
}

void draw() {

  //set gameover screen\\
  if (screen == -2) {
    frameRate(30);
    background(0);

    fill(255);
    textSize(22);
    text("GAMEOVER", 140, 200);

    textSize(16);
    text("You made it to level "+level, 118, 300);
  }


  //set title screen\\
  if (screen == -1) {
    background (20);

    //draw sprites
    bat(270, 210);
    fireGuy(155, 180);
    spider(40, 210);
    sprite(100, 300);

    //draw black rectangle to cover up spider's web
    fill(0);
    rect(40, 0, 100, 157);

    //darw text
    fill(255);
    textSize(58);
    text("GARDEN", 80, 75);
    text("MONSTERS", 48, 125);

    textSize(14);
    text("CONTROLS: WASD AND [SPACE]", 90, 155);
    text("PRESS ANY KEY TO START", 110, 180);
  }

  //set screen 0 (the main screen)\\
  if (screen == 0) {
    background(130, 235, 0);
    //set framerate to highest computer will allow so player doesn't lag when there are too many grass sprites on screen
    frameRate(100);

    //draw world
    drawPath();
    drawHouse();

    //draw signs and text that appears when player is near a sign
    drawSign(groundX+188, groundY+138);
    if (playerX>groundX+175 && playerX<groundX+250 && playerY<groundY+220 && playerY>groundY+150) {
      fill(0);
      textSize(14);
      text("Beware the monsters in the tall grass", groundX+84, groundY+135);
      text("Hold [SPACE] to dash", groundX+147, groundY+115);
    }
    drawSign(groundX+175, groundY-300);
    if (playerX>groundX+175 && playerX<groundX+250 && playerY<groundY-218 && playerY>groundY-288) {
      fill(0);
      textSize(14);
      text("Sorry, this rode is blocked", groundX+112, groundY-299);
    }
    drawRock(groundX+72, groundY-315);
    drawRock(groundX+125, groundY-298);
    drawRock(groundX-150, groundY-100);
    drawRock(groundX, groundY+550);
    drawRock(groundX-200, groundY-50);
    drawRock(groundX+500, groundY+150);

    //draw grass in loops\\
    //top right corner
    for (int y = -200; y <= -150; y=y+50) {
      for (int x = -200; x <= 0; x=x+50) {
        drawGrass(groundX+x, groundY+y);
      }
    }
    for (int y = -100; y <= 50; y=y+50) {
      for (int x = -100; x <= 0; x=x+50) {
        drawGrass(groundX+x, groundY+y);
      }
    }
    for (int y = 50; y <= 350; y=y+50) {
      for (int x = -250; x <= 0; x=x+50) {
        drawGrass(groundX+x, groundY+y);
      }
    }

    //bottom left corner
    for (int y = 600; y <= 650; y=y+50) {
      for (int x = -300; x <= -50; x=x+50) {
        drawGrass(groundX+x, groundY+y);
      }
    } 
    for (int x = 0; x <= 100; x=x+50) {
      drawGrass(groundX+x, groundY+650);
    }

    //right side
    for (int y = 50; y <= 550; y=y+50) {
      for (int x = 550; x <= 650; x=x+50) {
        drawGrass(groundX+x, groundY+y);
      }
    }
    for (int y = 200; y <= 300; y=y+50) {
      for (int x = 350; x <= 500; x=x+50) {
        drawGrass(groundX+x, groundY+y);
      }
    }
    for (int y = 350; y <= 450; y=y+50) {
      for (int x = 250; x <= 500; x=x+50) {
        drawGrass(groundX+x, groundY+y);
      }
    }

    drawGuard(groundX-300);

    //set player controls
    drawPlayer();
    wasdMove();
    scroll();

    //draw trees (they must overlap player)
    drawTree(groundX+425, groundY-50);
    drawTree(groundX+475, groundY);


    //draw trees along sides of screen
    float treeX = groundX-350;        //set x and y coordinates of first tree in loop
    float treeY = groundY-400;

    while (treeX<=groundX+700) {      //top wall of trees
      if (treeX > groundX+150 || treeX < groundX+50) {
        drawTree(treeX, treeY);
      }
      treeX = treeX+51;               //make it so trees are not all beside each other
      treeY = treeY-15;
      if (treeY <= groundY-420) {
        treeY = treeY+25;
      }
    }
    treeX = groundX-350;              //set x and y coordinates of first tree in loop
    treeY = groundY-350;
    while (treeY<=groundY+700) {      //left wall of trees
      if (treeY > groundY+500 || treeY < groundY+400) {
        drawTree(treeX, treeY);
      }
      treeY = treeY+71;               //make it so trees are not all beside each other
      treeX = treeX-15;
      if (treeX <= groundX-370) {
        treeX = treeX+25;
      }
    }
    treeX = groundX+710;            //set x and y coordinates of first tree in loop
    treeY = groundY-350;
    while (treeY<=groundY+755) {    //right wall of trees
      drawTree(treeX, treeY);
      treeY = treeY+71;             //make it so trees are not all beside each other
      treeX = treeX-15;
      if (treeX <= groundX+695) {
        treeX = treeX+25;
      }
    }

    treeX = groundX-350;              //set x and y coordinates of first tree in loop
    treeY = groundY+700;
    while (treeX<=groundX+700) {      //bottom wall of trees
      drawTree(treeX, treeY);
      treeX = treeX+51;               //make it so trees are not all beside each other
      treeY = treeY-15;
      if (treeY <= groundY+680) {
        treeY = treeY+25;
      }
    }
  }

  if (screen==1) {        //set the screen for the fire monster encounter
    setBackground();
    frameRate(30);        //set framerate to 30 so timers can work with it (variables will increase 30 times/second)
    constrainVariables();
    sprite(spriteX, spriteY);
    fireGuy(monX, monY);
    enemyUI();
    playerUI();
    displayAttacks();
    startAttack();
    winFight();
  }
  if (screen==2) {        //set the screen for the spider monster encounter
    setBackground();
    frameRate(30);        //set framerate to 30 so timers can work with it (variables will increase 30 times/second)
    constrainVariables();
    sprite(spriteX, spriteY);
    spider(monX, monY);
    enemyUI();
    playerUI();
    displayAttacks();
    startAttack();
    winFight();
  }
  if (screen==3) {        //set the screen for the bat monster encounter
    setBackground();
    frameRate(30);        //set framerate to 30 so timers can work with it (variables will increase 30 times/second)
    constrainVariables();
    sprite(spriteX, spriteY);
    bat(monX, monY);
    enemyUI();
    playerUI();
    displayAttacks();
    startAttack();
    winFight();
  }

  levelUp();
  levelUpAnim();
  
  if(health == 0){
    screen = -2;
  }
}


void keyPressed() {
  if (screen == -2) {
    screen=-1;
  }
  if (screen == -1) {
    exp = 0;
    maxExp = 70;
    level=1;
    playerX = 190;
    playerY = 100;
    groundX = 0;
    groundY = 0;
    direction = 0;
    maxHealth = 16;
    health = maxHealth;
    maxMana = 30;
    mana = maxMana;
    screen = 0;
  }
  if (screen == 0) {
    wasdPress();
  }
  if (screen>=1) {
    selectAttack();
  }
}

void keyReleased() {
  if (screen == 0) {
    wasdRelease();
  }
}


///**\\\  B A T T L E S  ///**\\\

/*/ ECONOMICS SETUP /*/

void constrainVariables() {
  if (monHealth < 0) {             //set minimum monster health to 0
    monHealth = 0;
  } 
  if (monHealth > monMaxHealth) {  //prevent monster from healing past max health
    monHealth = monMaxHealth;
  }

  if (health < 0) {                //set minimum player health to 0
    health = 0;
  } 
  if (health > maxHealth) {        //prevent player from healing past max health
    health = maxHealth;
  }

  if (mana < 0) {                  //set minimum player mana to 0
    mana = 0;
  } 
  if (mana > maxMana) {            //prevent player from regenerating past max mana
    mana = maxMana;
  }
  if (monLevel < 1) {               //prevent monsters with a level 0 or below appear
    monLevel = 1;
  }
}





//set stats each monster will have and other initial codes before the battle starts\\
void startBattle() {

  firstHit = int(random(1, 3));
  attackType = 0;
  monLevel = int(random(-4, 2))+level;
  monMaxHealth = int(random(14, 17))+level*2;
  monHealth = monMaxHealth;
  UIscreen=1;
  sword=false;
  fire=false;
  light=false;
  bliz=false;
  resetMonAttack();
}




void levelUp() {      //set the output for when you reach max experience
  if (exp >= maxExp) {
    exp = exp-maxExp;                        //reset exp
    maxExp = maxExp +level*level/2 + 15;     //increase the max exp according to the players level
    level++;                                 //increase the player's level by one
    doLevelUp = true;                          //activate level up animation function (levelUpAnim)
    levelUpTime = 0;                         //reset timer for animation
    health = health + int(level*4);          //heal player by a little bit
    maxHealth = maxHealth + 2+int(level/2);  //increase player's max health
    mana = mana + 5+int(level*5);            //regenerate some mana
    maxMana = maxMana + 4+int(level);        //increase players max mana
  }
}





void levelUpAnim() {    //set the animation for when the player levels up

  if (doLevelUp) {

    levelUpTime++;                                      //start and run the timer
    noStroke();
    fill(0, 100, 255, 150-levelUpTime*1.2);             //draw animation with a lowering opacity
    ellipse(width/2, height/2, width, height);
    ellipse(width/2, height/2, width*2/3, height*2/3);
    stroke(0);
    fill(200, 200, 200, 255-levelUpTime*1.4);           //draw text with animation
    textSize(50);
    text("LEVEL", 130, 175);
    text(level, 180, 225);
    if (level==3) {                                      //tell player they unlocked fire spell at level 3
      textSize(20);
      text("You learned",139,260);
      text("FIRE SPELL!",144,285);
    }
    if (level==6) {                                      //tell player they unlocked lightning spell at level 6
      textSize(18);
      text("You learned",144,260);
      text("LIGHTNING SPELL!",119,285);
    }
    if (level==9) {                                      //tell player they unlocked blizzard spell at level 9
      textSize(18);
      text("You learned",144,260);
      text("BLIZZARD SPELL!",127,285);
    }
    frameRate(100);
    if (levelUpTime > 3000) {                             //stop if statement from running infinitely
      doLevelUp = false;
    }
}
}






/*/ UI SETUP /*/

//display enemy stats
void enemyUI () {
  fill(245);
  rect(40, 110, 140, 40);        //draw white box

  if (screen == 1) {           //if you are fighting the fire guy, type the name as "FIRE GUY"
    fill(0);
    textSize(14);
    text("FIRE GUY", 50, 125);
  }
  if (screen == 2) {           //if you are fighting the spider, type the name as "SPIDER"
    fill(0);
    textSize(14);
    text("SPIDER", 50, 125);
  }
  if (screen == 3) {           //if you are fighting the bat, type the name as "BAT"
    fill(0);
    textSize(14);
    text("BAT", 50, 125);
  }

  text("LV: "+monLevel, 130, 125);//display level beside enemy's name

  textSize(13);
  text("HP", 157, 142);           //display "HP" beside health bar

  fill(120, 0, 0);
  rect(50, 132, 100, 10);         //display max health bar behind health bar to show how much health was depleted

  fill(200, 0, 0);
  rect(50, 132, 100*(monHealth/monMaxHealth), 10);
}





//set player UI
void playerUI() {
  fill(245);                      //draw large rectangle where attacks and stats will be displayed
  rect(0, 300, width, 100);

  textSize(14);
  fill(0);                        //display label and values for level, health, mana, and experience
  text("LEVEL: "+level, 190, 320);
  text("HP:"+int(health)+"/"+int(maxHealth), 190, 343);
  text("MP:"+int(mana)+"/"+int(maxMana), 190, 367);
  text("EXP:"+int(exp)+"/"+int(maxExp), 190, 390);

  fill(120, 0, 0);                              //draw empty health bar to show amount of health depleted
  rect(290, 333, 100, 10);

  fill(200, 0, 0);
  rect(290, 333, 100*(health/maxHealth), 10);   //draw health bar to show how much health player has left - will deplete when player loses health

  fill(0, 0, 120);                              //draw empty mana bar to show amount of mana depleted
  rect(290, 357, 100, 10);

  fill(0, 0, 200);
  rect(290, 357, 100*(mana/maxMana), 10);       //draw mana bar to show how much mana player has left - will deplete when player loses mana

  fill(120, 120, 0);                            //draw empty exp bar to show amount of exp depleted
  rect(290, 380, 100, 10);

  fill(200, 200, 0);
  rect(290, 380, 100*(exp/maxExp), 10);         //draw exp bar to show how much exp player has left - will deplete when player loses exp
}





//draw attack selections\\
void displayAttacks() {
  if (UIscreen == 1) {

    if (attackType==0) {

      //display text with the sword attack highlighted
      fill(0, 100, 255);
      triangle(10, 310, 10, 320, 20, 315);
      fill(0, 10, 165);
      text("SWORD 0MP", 30, 320);

      if (level>=3) {
        fill(245);
        triangle(10, 333, 10, 343, 20, 338);
        fill(0);
        text("FIRE 15MP", 30, 343);

        if (level>=6) {
          fill(245);
          triangle(10, 357, 10, 367, 20, 362);
          fill(0);
          text("LIGHTNING 19MP", 30, 367);

          if (level>=9) {
            fill(245);
            triangle(10, 380, 10, 390, 20, 385);
            fill(0);
            text("BLIZZARD 23MP", 30, 390);
          }
        }
      }
    }
    if (attackType==1) {

      //display text with the fire attack highlighted
      fill(245);
      triangle(10, 310, 10, 320, 20, 315);
      fill(0);
      text("SWORD 0MP", 30, 320);

      fill(0, 100, 255);
      triangle(10, 333, 10, 343, 20, 338);
      fill(0, 10, 165);
      text("FIRE 15MP", 30, 343);

      if (level>=6) {
        fill(245);
        triangle(10, 357, 10, 367, 20, 362);
        fill(0);
        text("LIGHTNING 19MP", 30, 367);

        if (level>=9) {
          fill(245);
          triangle(10, 380, 10, 390, 20, 385);
          fill(0);
          text("BLIZZARD 23MP", 30, 390);
        }
      }
    }

    if (attackType==2) {

      //display text with the lightning attack highlighted
      fill(245);
      triangle(10, 310, 10, 320, 20, 315);
      fill(0);
      text("SWORD 0MP", 30, 320);

      fill(245);
      triangle(10, 333, 10, 343, 20, 338);
      fill(0);
      text("FIRE 15MP", 30, 343);

      fill(0, 100, 255);
      triangle(10, 357, 10, 367, 20, 362);
      fill(0, 10, 165);
      text("LIGHTNING 19MP", 30, 367);

      if (level>=9) {
        fill(245);
        triangle(10, 380, 10, 390, 20, 385);
        fill(0);
        text("BLIZZARD 23MP", 30, 390);
      }
    }
    if (attackType==3) {

      //display text with the blizzard attack highlighted
      fill(245);
      triangle(10, 310, 10, 320, 20, 315);
      fill(0);
      text("SWORD 0MP", 30, 320);

      fill(245);
      triangle(10, 333, 10, 343, 20, 338);
      fill(0);
      text("FIRE 15MP", 30, 343);

      fill(245);
      triangle(10, 357, 10, 367, 20, 362);
      fill(0);
      text("LIGHTNING 19MP", 30, 367);

      fill(0, 100, 255);
      triangle(10, 380, 10, 390, 20, 385);
      fill(0, 10, 165);
      text("BLIZZARD 23MP", 30, 390);
    }
  }
}






//switch between selected attack with keypress\\
void selectAttack() {

  if (attackType==0) {

    if (key==' ') {
      sword=true;
    }
    if (level>=3 && key=='s') {
      attackType=1;
    }
  }
  if (attackType==1) {

    if (key==' ') {
      fire=true;
    }
    if (key=='w') {
      attackType=0;
    }
    if (level>=6 && key=='s') {
      attackType=2;
    }
  }
  if (attackType==2) {

    if (key==' ') {
      light=true;
    }
    if (key=='w') {
      attackType=1;
    }
    if (level>=9 && key=='s') {
      attackType=3;
    }
  }
  if (attackType==3) {

    if (key==' ') {
      bliz=true;
    }
    if (key=='w') {
      attackType=2;
    }
  }
}





//set the effect of each of attack when activated\\
void startAttack() {
  if (sword) {
    time++;
    if (firstHit>1) {    //test to see if you attack first
      if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time>20 && time<=95) {
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        fill(190);

        quad(140, 160, 200, 200, 240, 260, 220, 180);
        fill(0);
        textSize(12);
        text("you attacked with your sword", 5, 350);
      }
      if (time==20) {
        monHealth = monHealth-3-level;
        monChooseAttack();
      }
      if (time>95 && time<=160) {
        fill(0);
        textSize(12);
        text("the monster took "+(3+level)+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
      }
      if (time>160 && time<=235) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==160) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
      }
      if (time>235 && time<=300) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
      }
      if (time>300) {
        sword=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
    }

      if (firstHit==1) {     //test to see if enemy attacks first

        if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time==19){
        monChooseAttack();
      }
      if (time>20 && time<=95) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==20) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
        
      }
      if (time>95 && time<=160) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        
      }
      if (time>160 && time<=235) {
        
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        fill(190);

        quad(140, 160, 200, 200, 240, 260, 220, 180);
        fill(0);
        textSize(12);
        text("you attacked with your sword", 5, 350);
      }
      if (time==160) {
        monHealth = monHealth-3-level;
        
      }
      if (time>235 && time<=300) {
        fill(0);
        textSize(12);
        text("the monster took "+(3+level)+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
      }
      if (time>300) {
        sword=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
        
      }
  }
    
    if (fire) {

      if (mana>=15) {
        
        time++;
    if (firstHit>1) {    //test to see if you attack first
      if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time>20 && time<=95) {
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        
        float x = 120;
        float y = 260;
          for (int i=0; i<=7; i++) {
            while (x>260) {
              flame(int(random(x-20, x+20)), int(random(y-20, y+20)));
              x = x+3;
              y = y-2;
            }
            flame(int(random(220, 320)), int(random(120, 220)));
          }
        
        
        fill(0);
        textSize(12);
        text("you cast your fire spell", 5, 350);
      }
      if (time==20) {
        monHealth = monHealth-7-level;
        mana = mana-15;
        monChooseAttack();
      }
      if (time>95 && time<=160) {
        fill(0);
        textSize(12);
        text("the monster took "+(7+level)+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
      }
      if (time>160 && time<=235) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==160) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
      }
      if (time>235 && time<=300) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
      }
      if (time>300) {
        
        fire=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
    }

      if (firstHit==1) {     //test to see if enemy attacks first

        if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time==19){
        monChooseAttack();
      }
      if (time>20 && time<=95) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==20) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
        
      }
      if (time>95 && time<=160) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        
      }
      if (time>160 && time<=235) {
        
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        
        float x = 155;
        float y = 230;
          for (int i=0; i<=7; i++) {
            while (x>300) {
              flame(int(random(x-20, x+20)), int(random(y-20, y+20)));
              x = x+3;
              y = y-2;
            }
            flame(int(random(260, 360)), int(random(80, 180)));
          }
        
        
        fill(0);
        textSize(12);
        text("you cast your fire spell", 5, 350);
      }
      if (time==160) {
        monHealth = monHealth-7-level;
        mana = mana-15;
        
      }
      if (time>235 && time<=300) {
        
        fill(0);
        textSize(12);
        text("the monster took "+(7+level)+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
      }
      if (time>300) {
        fire=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
        
      }
  }
        
       
       else {
        println("NOT ENOUGH MP");
        fire=false;
      }
    }
    if (light) {

      if (mana>=19) {
        
        time++;
    if (firstHit>1) {    //test to see if you attack first
      if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time>20 && time<=95) {
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        
        fill(255,255,100);
        triangle(random(280,309),-1,random(311,340),-1,310,130);
        
        fill(0);
        textSize(12);
        text("you cast your lightning spell", 5, 350);
      }
      if (time==20) {
        monHealth = int(monHealth - 5 -level*1.5);
        mana = mana-19;
        monChooseAttack();
      }
      if (time>95 && time<=160) {
        fill(0);
        textSize(12);
        text("the monster took "+(int(5 +level*1.5))+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
      }
      if (time>160 && time<=235) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==160) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
      }
      if (time>235 && time<=300) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
      }
      if (time>300) {
        
        light=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
    }

      if (firstHit==1) {     //test to see if enemy attacks first

        if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time==19){
        monChooseAttack();
      }
      if (time>20 && time<=95) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==20) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
        
      }
      if (time>95 && time<=160) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        
      }
      if (time>160 && time<=235) {
        
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        
        fill(255,255,100);
        triangle(random(280,309),-1,random(311,340),-1,310,130);  
        
        fill(0);
        textSize(12);
        text("you cast your lightning spell", 5, 350);
      }
      if (time==160) {
        monHealth = monHealth-7-level;
        mana = mana-19;
        
      }
      if (time>235 && time<=300) {
        
        fill(0);
        textSize(12);
        text("the monster took "+(int(5+level*1.5))+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
      }
      if (time>300) {
        light=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
        
      }
      
      } else {
        println("NOT ENOUGH MP");
        light=false;
      }
    }
    if (bliz) {

      if (mana>=23) {
        
      
        time++;
    if (firstHit>1) {    //test to see if you attack first
      if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time>20 && time<=95) {
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        
        stroke(0,255,255);
        line(60,180,220,100);
        line(140,180,280,80);
        line(60,280,240,140);
        line(180,280,260,180);
        line(260,240,320,160);
        
        
        snowTimeX = snowTimeX + 2;
        snowTimeY = snowTimeY - 1.8;
        
        snowFlake(snowTimeX+100,snowTimeY+140);
        snowFlake(snowTimeX+220,snowTimeY+180);
        snowFlake(snowTimeX+280,snowTimeY+240);
        snowFlake(snowTimeX+160,snowTimeY+260);
        snowFlake(snowTimeX+240,snowTimeY+200);
        snowFlake(snowTimeX+300,snowTimeY+260);
        snowFlake(snowTimeX+180,snowTimeY+160);
        snowFlake(snowTimeX+200,snowTimeY+220);
        snowFlake(snowTimeX+100,snowTimeY+200);
        
        stroke(0);
        
        fill(0);
        textSize(12);
        text("you cast your blizzard spell", 5, 350);
      }
      if (time==20) {
        monHealth = int(monHealth - 5 -level*1.5);
        mana = mana-23;
        monChooseAttack();
      }
      if (time>95 && time<=160) {
        fill(0);
        textSize(12);
        text("the monster took "+(int(level*2.3))+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
        snowTimeX = 0;
        snowTimeY = 0;
      }
      if (time>160 && time<=235) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==160) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
      }
      if (time>235 && time<=300) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
      }
      if (time>300) {
        
        bliz=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
    }

      if (firstHit==1) {     //test to see if enemy attacks first

        if (time>0 && time<=20) {
        UIscreen=2;
      }
      if (time==19){
        monChooseAttack();
      }
      if (time>20 && time<=95) {
        spriteX=50;
        spriteY=210;
        monX=220;
        monY=120;
        monUseAttack();
      }
      if (time==20) {
        if (monTackle) {
          health = health - monLevel;
        } 
        if (monFire || monBite || monSting) {
          health = health - 2+monLevel;
        }
        
      }
      if (time>95 && time<=160) {
        if (monTackle) {
          fill(0);
          textSize(12);
          text("you took "+monLevel+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        if (monFire || monBite || monSting) {
          fill(0);
          textSize(12);
          text("you took "+(2+monLevel)+" damage", 5, 350);
          spriteX=60;
          spriteY=200;
          monX=240;
          monY=100;
        }
        
      }
      if (time>160 && time<=235) {
        
        spriteX=75;
        spriteY=190;
        monX=245;
        monY=95;
        
        stroke(0,255,255);
        line(60,180,220,100);
        line(140,180,280,80);
        line(60,280,240,140);
        line(180,280,260,180);
        line(260,240,320,160);
        
        
        snowTimeX = snowTimeX + 2;
        snowTimeY = snowTimeY - 1.8;
        
        snowFlake(snowTimeX+100,snowTimeY+140);
        snowFlake(snowTimeX+220,snowTimeY+180);
        snowFlake(snowTimeX+280,snowTimeY+240);
        snowFlake(snowTimeX+160,snowTimeY+260);
        snowFlake(snowTimeX+240,snowTimeY+200);
        snowFlake(snowTimeX+300,snowTimeY+260);
        snowFlake(snowTimeX+180,snowTimeY+160);
        snowFlake(snowTimeX+200,snowTimeY+220);
        snowFlake(snowTimeX+100,snowTimeY+200);
        
        stroke(0);
        
        
        fill(0);
        textSize(12);
        text("you cast your blizzard spell", 5, 350);
      }
      if (time==160) {
        monHealth = int(monHealth-level*2.3);
        mana = mana-23;
        
      }
      if (time>235 && time<=300) {
        
        fill(0);
        textSize(12);
        text("the monster took "+(int(level*2.3))+" damage", 5, 350);
        spriteX=60;
        spriteY=200;
        monX=240;
        monY=100;
        snowTimeX = 0;
        snowTimeY = 0;
      }
      if (time>300) {
        bliz=false;
        resetMonAttack();
        time=0;
        UIscreen=1;
      }
        
      }
      
      
      
      } else {
        println("NOT ENOUGH MP");
        bliz=false;
      }
    }
  }






void monChooseAttack() {
  int z = int(random(1, 2));

  if (z==1) {
    monTackle = true;
  } 
  if (z==2) {
    if (screen==1) {
      monFire = true;
    }
    if (screen==2) {
      monBite = true;
    }
    if (screen==3) {
      monSting = true;
    }
  }
}





void monUseAttack() {
  if (monTackle) {
    line(140, 280, 240, 240);
    line(160, 240, 230, 200);
    line(150, 200, 200, 130);
    line(130, 170, 160, 120);
    line(60, 220, 80, 140);

    fill(0);
    textSize(12);
    text("the monster used tackle", 5, 350);
  }
  if (monFire) {
    float x = 240;
    float y = 180;
    for (int i=0; i<=7; i++) {
      while (x<140) {
        flame(int(random(x-20, x+20)), int(random(y-20, y+20)));
        x = x-3;
        y = y+1;
      }
      flame(int(random(40, 140)), int(random(220, 300)));
    }
    fill(0);
    textSize(12);
    text("the monster used fire", 5, 350);
  }
  if (monBite) {
    fill(150);
    beginShape();    //left tooth
    vertex(160, 240);
    vertex(200, 220);
    vertex(220, 180);
    vertex(270, 210);
    vertex(230, 250);
    vertex(160, 240);
    endShape();

    beginShape();    //right tooth
    vertex(80, 200);
    vertex(80, 160);
    vertex(100, 120);
    vertex(50, 100);
    vertex(40, 160);
    vertex(80, 200);
    endShape();

    fill(0);
    textSize(12);
    text("the monster used bite", 5, 350);
  }
  if (monSting) {
    fill(100, 40, 160);
    beginShape();    //draw stinger
    vertex(160, 240);
    vertex(190, 210);
    vertex(210, 170);
    vertex(230, 200);
    vertex(270, 210);
    vertex(230, 250);
    vertex(160, 240);
    endShape();

    fill(0);
    textSize(12);
    text("the monster used sting", 5, 350);
  }
}





void resetMonAttack() {
  monTackle=false;
  monFire=false;
  monBite=false;
  monSting=false;
}





/*/ ATTACK AND BATTLE SETUP /*/

//set actions for when player defeats enemy\\
void winFight() {
  if (monHealth==0) {      //test to see if enemy died



    winTime=winTime+1;   //run the clock

    if (winTime<2) {       //increase you experience right away
      exp = exp + 80 + monLevel*6;
      time=0;
      UIscreen=1;
      sword=false;
      fire=false;
      light=false;
      bliz=false;
      resetMonAttack();
    }

    if (winTime>60) {      //after 2 seconds, go back to main screen (screen 0) and reset timer 
      screen = 0;
      monHealth = monMaxHealth;
      winTime=0;
    }
  }
}





/*/ BACKGROUND /*/

void setBackground() {
  //set sky colour
  background(0, 150, 255);

  //draw two rows of trees
  for (float treeX = -75; treeX <= width; treeX = treeX+50) {
    drawTree(treeX, 25);
  }
  for (float treeX = -50; treeX <= width; treeX = treeX+50) {
    drawTree(treeX, 20);
  }

  //draw grass
  fill (130, 235, 0);
  noStroke();
  ellipse(200, 300, 1900, 400);

  //draw light green patch under enemy
  fill(170, 255, 0);
  ellipse(286, 190, 140, 40);
  stroke(0);
}




///**\\\  S P R I T E S  ///**\\\

/*/ MAP SPRITES /*/

//draw sign\\
void drawSign(float signX, float signY) {

  //draw sign and three lines to look like text
  fill(210, 180, 90);
  rect(signX+21, signY+7, 8, 36);
  rect(signX+10, signY+12, 30, 15);
  line(signX+13, signY+16, signX+37, signY+16);
  line(signX+13, signY+19, signX+37, signY+19);
  line(signX+13, signY+22, signX+37, signY+22);

  //create bounding box to prevent player from walking through sign
  if (playerX>signX-9 && playerX<signX+59 && playerY>signY-12 && playerY<=signY) {
    playerY=playerY-speed;
    if (dash) {
      playerY = playerY - dashSpd;
    }
  }

  if (playerY<signY+43 && playerY>signY-12 && playerX<signX+59 && playerX>=signX+50) {
    playerX=playerX+speed;
    if (dash) {
      playerX = playerX + dashSpd;
    }
  }

  if (playerX>signX-9 && playerX<signX+59 && playerY<signY+43 && playerY>=signY+30) {
    playerY=playerY+speed;
    if (dash) {
      playerY = playerY + dashSpd;
    }
  }

  if (playerY<signY+43 && playerY>signY-12 && playerX>signX-9 && playerX<=signX+9) {
    playerX=playerX-speed;
    if (dash) {
      playerX = playerX - dashSpd;
    }
  }
}

//draw rock\\
void drawRock(float rockX, float rockY) {

  //draw exterior shape of rock
  fill(160);
  beginShape();
  vertex(rockX+1, rockY+40);
  vertex(rockX+1, rockY+32);
  vertex(rockX+13, rockY+22);
  vertex(rockX+15, rockY+10);
  vertex(rockX+24, rockY+1);
  vertex(rockX+39, rockY+11);
  vertex(rockX+40, rockY+23);
  vertex(rockX+47, rockY+35);
  vertex(rockX+49, rockY+44);
  vertex(rockX+33, rockY+49);
  vertex(rockX+20, rockY+47);
  vertex(rockX+8, rockY+48);
  vertex(rockX+1, rockY+40);
  endShape();

  //draw cracks in the rock
  line(rockX+10, rockY+33, rockX+18, rockY+33);
  line(rockX+13, rockY+33, rockX+17, rockY+38);
  line(rockX+26, rockY+39, rockX+33, rockY+42);
  line(rockX+39, rockY+26, rockX+33, rockY+42);
  line(rockX+33, rockY+49, rockX+33, rockY+42);
  line(rockX+35, rockY+25, rockX+24, rockY+28);
  line(rockX+18, rockY+11, rockX+23, rockY+14);
  line(rockX+30, rockY+12, rockX+23, rockY+14);
  line(rockX+25, rockY+18, rockX+23, rockY+14);

  //create bounding box to prevent player from walking through rock
  if (playerX>rockX-18 && playerX<rockX+68 && playerY>rockY-19 && playerY<=rockY) {
    playerY=playerY-speed;
    if (dash) {
      playerY = playerY - dashSpd;
    }
  }

  if (playerY<rockY+68 && playerY>rockY-18 && playerX<rockX+69 && playerX>=rockX+50) {
    playerX=playerX+speed;
    if (dash) {
      playerX = playerX + dashSpd;
    }
  }

  if (playerX>rockX-18 && playerX<rockX+68 && playerY<rockY+69 && playerY>=rockY+50) {
    playerY=playerY+speed;
    if (dash) {
      playerY = playerY + dashSpd;
    }
  }

  if (playerY<rockY+68 && playerY>rockY-18 && playerX>rockX-19 && playerX<=rockX) {
    playerX=playerX-speed;
    if (dash) {
      playerX = playerX - dashSpd;
    }
  }
}

//draw grass\\
void drawGrass(float x, float y) {
  fill(60, 130, 0);
  triangle(x+27, y+3, x+17, y+50, x+40, y+38);
  fill(110, 150, 0);
  quad(x+8, y+14, x+17, y, x+25, y+44, x+15, y+35);
  fill(40, 190, 0);
  quad(x+36, y+2, x+43, y+15, x+37, y+35, x+31, y+25);
  fill(40, 170, 0);
  quad(x+23, y+7, x+31, y+50, x+20, y+50, x+13, y+37);
  fill(70, 160, 0);
  beginShape();
  vertex(x+49, y+17);
  vertex(x+45, y+34);
  vertex(x+35, y+50);
  vertex(x+30, y+50);
  vertex(x+30, y+40);
  vertex(x+49, y+17);
  endShape();
  fill(120, 200, 0);
  beginShape();
  vertex(x+1, y+14);
  vertex(x+5, y+32);
  vertex(x+17, y+50);
  vertex(x+22, y+50);
  vertex(x+16, y+27);
  vertex(x+1, y+14);
  endShape();
  fill(140, 220, 0);
  quad(x+7, y+39, x+15, y+40, x+19, y+50, x+15, y+50);
  fill(60, 180, 0);
  quad(x+48, y+36, x+44, y+47, x+38, y+50, x+30, y+50);
  fill(110, 210, 0);
  quad(x+37, y+14, x+27, y+30, x+24, y+50, x+32, y+50);

  //if player is walking through the grass, run RNG to determine if an encounter occurs
  if (up||down||left||right) {                                       //test to see if player is moving
    if (playerX<x+50 && playerX>x && playerY<y+50 && playerY>y) {    //test to see if player is in grass
      if(!dash){                                                     //test to see if player is walking (not dashing)
      ranNum = int(random(0,int((50/speed)*20)));
      if (ranNum == 1) {                        //set player to enemy screen 1 (5% chance per grass sprite) and disable movement and dash
        startBattle();
        up=false;
        right=false;
        down=false;
        left=false;
        dash=false;
        ranNum = 0;
        screen = 1;
      } else if (ranNum == 2) {                 //set player to enemy screen 2 (5% chance per grass sprite) and disable movement and dash
        startBattle();
        up=false;
        right=false;
        down=false;
        left=false;
        dash=false;
        ranNum = 0;
        screen = 2;
      } else if (ranNum == 3) {                 //set player to enemy screen 3 (5% chance per grass sprite) and disable movement and dash
        startBattle();
        up=false;
        right=false;
        down=false;
        left=false;
        dash=false;
        ranNum = 0;
        screen=3;
      }
      }
      if(dash){                                                      //test to see if player is dashing
      ranNum = int(random(0,int((50/(speed+dashSpd))*20)));
      if (ranNum == 1) {                        //set player to enemy screen 1 (5% chance per grass sprite) and disable movement and dash
        startBattle();
        up=false;
        right=false;
        down=false;
        left=false;
        dash=false;
        ranNum = 0;
        screen = 1;
      } else if (ranNum == 2) {                 //set player to enemy screen 2 (5% chance per grass sprite) and disable movement and dash
        startBattle();
        up=false;
        right=false;
        down=false;
        left=false;
        dash=false;
        ranNum = 0;
        screen = 2;
      } else if (ranNum == 3) {                 //set player to enemy screen 3 (5% chance per grass sprite) and disable movement and dash
        startBattle();
        up=false;
        right=false;
        down=false;
        left=false;
        dash=false;
        ranNum = 0;
        screen=3;
      }
      }
    }
  }
}


//draw tree\\
void drawTree(float treeX,float treeY){
  //draw trunk
  fill(100,60,15);
  beginShape();
  vertex(treeX+16,treeY+50);
  vertex(treeX+15,treeY+70);
  vertex(treeX+6,treeY+86);
  vertex(treeX+16,treeY+84);
  vertex(treeX+16,treeY+94);
  vertex(treeX+28,treeY+86);
  vertex(treeX+40,treeY+90);
  vertex(treeX+33,treeY+70);
  vertex(treeX+31,treeY+50);
  endShape();
  
  //draw leaves
  fill(20,100,0);
  beginShape();
  vertex(treeX+1,treeY+65);
  vertex(treeX+12,treeY+45);
  vertex(treeX+7,treeY+48);
  vertex(treeX+13,treeY+33);
  vertex(treeX+9,treeY+36);
  vertex(treeX+14,treeY+22);
  vertex(treeX+11,treeY+25);
  vertex(treeX+25,treeY+1);
  vertex(treeX+39,treeY+25);
  vertex(treeX+36,treeY+22);
  vertex(treeX+41,treeY+36);
  vertex(treeX+37,treeY+33);
  vertex(treeX+43,treeY+48);
  vertex(treeX+38,treeY+45);
  vertex(treeX+49,treeY+65);
  vertex(treeX+33,treeY+60);
  vertex(treeX+35,treeY+63);
  vertex(treeX+27,treeY+58);
  vertex(treeX+22,treeY+64);
  vertex(treeX+17,treeY+59);
  vertex(treeX+1,treeY+65);
  endShape();
  
  //create bounding box to prevent player from walkign through rock
  if (playerX>treeX-18 && playerX<treeX+68 && playerY>treeY+31 && playerY<=treeY+50) {
    playerY=playerY-speed;
    if (dash) {
      playerY = playerY - dashSpd;
    }
  }

  if (playerY<treeY+113 && playerY>treeY+31 && playerX<treeX+64 && playerX>=treeX+45) {
    playerX=playerX+speed;
    if (dash) {
      playerX = playerX + dashSpd;
    }
  }

  if (playerX>treeX-18 && playerX<treeX+68 && playerY<treeY+114 && playerY>=treeY+95) {
    playerY=playerY+speed;
    if (dash) {
      playerY = playerY + dashSpd;
    }
  }

  if (playerY<treeY+113 && playerY>treeY+31 && playerX>treeX-17 && playerX<=treeX+2) {
    playerX=playerX-speed;
    if (dash) {
      playerX = playerX - dashSpd;
    }
  }
}

//draw guard\\
void drawGuard(float guardX){
  
  //make guard follow player
  float guardY = groundY+400;

  if(playerY>=groundY+400 && playerY<=groundY+600){
    guardY = playerY;
  } else if (playerY<=groundY+400){
    guardY = groundY+400;
  } else if (playerY>=groundY+600){
    guardY = groundY+600;
  }
  
  
  //draw hands
  fill(243, 211, 174);
  ellipse(guardX+15,guardY-15,9,9);
  ellipse(guardX+15,guardY+15,9,9);
  
  //draw body
  fill(100,80,255);
  ellipse(guardX+8,guardY,12,36);
  
  //draw shoulder pads
  fill(180,160,20);
  ellipse(guardX+8,guardY-15,8,5);
  ellipse(guardX+8,guardY+15,8,5);
  
  //draw cap
  fill(20,0,140);
  ellipse(guardX+22,guardY,4,10);
  beginShape();
  vertex(guardX+22,guardY-5);
  vertex(guardX+10,guardY-5);
  vertex(guardX+10,guardY+5);
  vertex(guardX+22,guardY+5);
  endShape();
  
  //top of hat
  fill(40,0,140);
  ellipse(guardX+8,guardY,16,16);
  
  //create bounding box to prevent player from walking through guard
  if (playerX>guardX-18 && playerX<guardX+43 && playerY>guardY-39 && playerY<=guardY-15) {
    playerY=playerY-speed;
    if (dash) {
      playerY = playerY - dashSpd;
    }
  }
  
  if (playerY<guardY+58 && playerY>guardY-18 && playerX<guardX+44 && playerX>=guardX+25) {
    playerX=playerX+speed;
    if (dash) {
      playerX = playerX + dashSpd;
    }
  }

  if (playerX>guardX-18 && playerX<guardX+43 && playerY<guardY+39 && playerY>=guardY+15) {
    playerY=playerY+speed;
    if (dash) {
      playerY = playerY + dashSpd;
    }
  }

  if (playerY<guardY+58 && playerY>guardY-18 && playerX>guardX-19 && playerX<=guardX) {
    playerX=playerX-speed;
    if (dash) {
      playerX = playerX - dashSpd;
    }
  }
  
  //tell player he isn't allowed to pass when close to the guard
  if (playerX>guardX-10 && playerX<guardX+55 && playerY<guardY+40 && playerY>guardY-40) {
      fill(0);
      textSize(14);
      text("You cannot pass this point", guardX-30, guardY-30);
    }
}

/*/ BATTLE SPRITES /*/

//draw spider monster\\
void spider(float x, float y){
  //string of web
  fill(190);
  rect(x+44,y-300,5,330);
  
  //legs
  fill(170,170,140);
  beginShape();    //top left leg
  vertex(x+32,y+41);
  vertex(x+18,y+26);
  vertex(x+30,y+10);
  vertex(x+25,y+25);
  vertex(x+34,y+35);
  endShape();
  beginShape();    //middle left leg
  vertex(x+32,y+44);
  vertex(x+15,y+42);
  vertex(x+16,y+30);
  vertex(x+9,y+46);
  vertex(x+33,y+50);
  endShape();
  beginShape();    //bottom left leg
  vertex(x+34,y+53);
  vertex(x+13,y+61);
  vertex(x+21,y+80);
  vertex(x+20,y+64);
  vertex(x+36,y+58);
  endShape();
  beginShape();    //top right leg
  vertex(x+62,y+41);
  vertex(x+76,y+26);
  vertex(x+64,y+10);
  vertex(x+69,y+25);
  vertex(x+60,y+35);
  endShape();
  beginShape();    //middle right leg
  vertex(x+62,y+44);
  vertex(x+79,y+42);
  vertex(x+78,y+30);
  vertex(x+85,y+46);
  vertex(x+61,y+50);
  endShape();
  beginShape();    //bottom right leg
  vertex(x+60,y+53);
  vertex(x+81,y+61);
  vertex(x+73,y+80);
  vertex(x+74,y+64);
  vertex(x+58,y+58);
  endShape();
 
  
  //body
  fill(30,150,10);
  ellipse(x+47,y+43,30,40);
  line(x+33,y+35,x+47,y+30);    //top left line
  line(x+60,y+35,x+47,y+30);    //top right line
  line(x+32,y+45,x+47,y+40);    //middle left line
  line(x+61,y+45,x+47,y+40);    //middle right line
  line(x+35,y+55,x+47,y+50);    //bottom left line
  line(x+59,y+55,x+47,y+50);    //bottom right line
  
  //teeth
  fill(180,180,170);
  beginShape();                               //left large tooth
  vertex(x+39,y+70);
  vertex(x+38,y+77);
  vertex(x+42,y+81);
  vertex(x+41,y+77);
  vertex(x+47,y+70);
  endShape();
  triangle(x+42,y+70,x+45,y+79,x+48,y+70);    //left small tooth
  triangle(x+52,y+70,x+49,y+79,x+46,y+70);    //right small tooth
  beginShape();                               //right large tooth
  vertex(x+55,y+70);
  vertex(x+56,y+77);
  vertex(x+52,y+81);
  vertex(x+53,y+77);
  vertex(x+47,y+70);
  endShape();
  
  //head
  fill(30,150,10);
  ellipse(x+47,y+66,30,18);
  
  //eyes
  fill(200,0,0);
  ellipse(x+39,y+69,5,5);  //bottom left
  ellipse(x+55,y+69,5,5);  //bottom right
  ellipse(x+44,y+65,3,3);  //top left
  ellipse(x+50,y+65,3,3);  //top right
  
}


//draw bat monster\\
void bat(float x, float y){
  
  //draw tail
  fill(120,60,180);
  beginShape();              //long tail that leads to stinger
  vertex(x+55,y+65);
  vertex(x+57,y+60);
  vertex(x+50,y+57);
  vertex(x+37,y+60);
  vertex(x+31,y+54);
  vertex(x+36,y+45);
  vertex(x+41,y+47);
  vertex(x+36,y+53);
  vertex(x+38,y+57);
  vertex(x+51,y+53);
  vertex(x+60,y+59);
  vertex(x+57,y+66);
  endShape();
  fill(100,40,160);
  ellipse(x+54,y+67,8,8);    //circular part of stinger
  beginShape();              //pointed piece to stinger
  vertex(x+54,y+71);
  vertex(x+41,y+73);
  vertex(x+48,y+70);
  vertex(x+50,y+67);
  endShape();
  
  //left wing
  fill(90,20,150);
  beginShape();        //skin (flappy part) of wing
  vertex(x+35,y+34);
  vertex(x+22,y+29);
  vertex(x+6,y+38);
  vertex(x+10,y+56);
  vertex(x+14,y+48);
  vertex(x+19,y+51);
  vertex(x+23,y+45);
  vertex(x+26,y+47);
  vertex(x+35,y+42);
  endShape();
  fill(130,80,190);
  beginShape();        //arm (boney part) of wing
  vertex(x+33,y+37);
  vertex(x+23,y+32);
  vertex(x+26,y+47);
  vertex(x+21,y+32);
  vertex(x+16,y+35);
  vertex(x+19,y+51);
  vertex(x+14,y+36);
  vertex(x+9,y+39);
  vertex(x+10,y+56);
  vertex(x+6,y+38);
  vertex(x+22,y+29);
  vertex(x+35,y+34);
  endShape();
  
   //right wing
  fill(90,20,150);
  beginShape();        //skin (flappy part) of wing
  vertex(x+57,y+34);
  vertex(x+70,y+29);
  vertex(x+86,y+38);
  vertex(x+82,y+56);
  vertex(x+78,y+48);
  vertex(x+73,y+51);
  vertex(x+69,y+45);
  vertex(x+66,y+47);
  vertex(x+57,y+42);
  endShape();
  fill(130,80,190);
  beginShape();        //arm (boney part) of wing
  vertex(x+59,y+37);
  vertex(x+69,y+32);
  vertex(x+66,y+47);
  vertex(x+71,y+32);
  vertex(x+76,y+35);
  vertex(x+73,y+51);
  vertex(x+78,y+36);
  vertex(x+83,y+39);
  vertex(x+82,y+56);
  vertex(x+86,y+38);
  vertex(x+70,y+29);
  vertex(x+57,y+34);
  endShape();
  
  //ears
  fill(130,80,190);
  quad(x+37,y+24,x+33,y+29,x+35,y+37,x+40,y+40);  //left ear
  quad(x+55,y+24,x+59,y+29,x+57,y+37,x+52,y+40);  //right ear
  
  //head
  fill(140,90,200);
  ellipse(x+46,y+39,28,20);
  
  //eyes
  fill(255);
  quad(x+37,y+35,x+35,y+39,x+43,y+40,x+42,y+37);  //left eye
  quad(x+55,y+35,x+57,y+39,x+49,y+40,x+50,y+37);  //right eye
  fill(150,0,0);
  ellipse(x+39,y+38,2,4);  //left iris
  ellipse(x+53,y+38,2,4);  //right iris
  
  //mouth
  fill(0);
  beginShape();
  vertex(x+39,y+43);
  vertex(x+38,y+46);
  vertex(x+46,y+47);
  vertex(x+54,y+46);
  vertex(x+53,y+43);
  endShape();
  
  //teeth
  fill(255);
  stroke(255);
  strokeWeight(0.3);
  triangle(x+41,y+43,x+43,y+43,x+42,y+45);
  triangle(x+51,y+43,x+49,y+43,x+50,y+45);
  strokeWeight(1);
  stroke(0);
}


//draw fire monster\\
void fireGuy(float x, float y){
  
  //draw outer fire
  fill(255,20,0);
  beginShape();
  vertex(x+26,y+79);
  vertex(x+12,y+55);
  vertex(x+22,y+63);
  vertex(x+20,y+45);
  vertex(x+27,y+27);
  vertex(x+27,y+41);
  vertex(x+32,y+44);
  vertex(x+36,y+30);
  vertex(x+42,y+25);
  vertex(x+37,y+14);
  vertex(x+41,y+4);
  vertex(x+40,y+11);
  vertex(x+51,y+24);
  vertex(x+49,y+30);
  vertex(x+56,y+31);
  vertex(x+62,y+25);
  vertex(x+62,y+19);
  vertex(x+66,y+26);
  vertex(x+63,y+40);
  vertex(x+67,y+46);
  vertex(x+76,y+35);
  vertex(x+68,y+58);
  vertex(x+70,y+64);
  vertex(x+74,y+60);
  vertex(x+72,y+72);
  vertex(x+60,y+84);
  endShape();
  
  //draw inner fire
  fill(245,200,0);
  ellipse(x+45,y+69,42,42);  //draw inner circle
  beginShape();              //first spike
  vertex(x+25,y+74);
  vertex(x+21,y+65);
  vertex(x+24,y+67);
  endShape();
  beginShape();              //second spike
  vertex(x+26,y+62);
  vertex(x+26,y+47);
  vertex(x+33,y+53);
  endShape();
  beginShape();              //third spike
  vertex(x+37,y+51);
  vertex(x+44,y+30);
  vertex(x+48,y+49);
  endShape();
  beginShape();              //fourth spike
  vertex(x+51,y+50);
  vertex(x+59,y+36);
  vertex(x+57,y+53);
  endShape();
  beginShape();              //fifth spike
  vertex(x+60,y+56);
  vertex(x+68,y+48);
  vertex(x+64,y+62);
  endShape();
  beginShape();              //sixth spike
  vertex(x+66,y+70);
  vertex(x+70,y+68);
  vertex(x+65,y+75);
  endShape();
  
  
  //draw eye
  fill(240);
  ellipse(x+44,y+64,12,10);    //draw white oval
  fill(0,230,255);
  ellipse(x+43,y+65,6,9);      //draw iris
  noStroke();
  fill(255);
  ellipse(x+44,y+63,2,2);      //draw two glares
  ellipse(x+42,y+67,2,2);
  stroke(0);
  
  //draw mouth
  fill(155,110,0,200);
  beginShape();
  vertex(x+35,y+75);
  vertex(x+42,y+78);
  vertex(x+50,y+75);
  vertex(x+57,y+65);
  vertex(x+56,y+78);
  vertex(x+44,y+84);
  vertex(x+35,y+75);
  endShape();
  
  //draw teeth
  strokeWeight(0.4);
  fill(220);
  triangle(x+42,y+79,x+44,y+78,x+44,y+80);  //left tooth
  triangle(x+48,y+77,x+50,y+76,x+51,y+79);  //right tooth
  strokeWeight(1);
}



//draw player when in battle\\

void sprite(float x,float y){
  
  //swordblade
  fill(160);
  triangle(x+81,y,x+72,y+11,x+82,y+15);            //top left quadrant
  fill(170);
  triangle(x+81,y,x+89,y+10,x+82,y+15);            //top right quadrant
  quad(x+72,y+11,x+82,y+15,x+81,y+55,x+77,y+56);   //bottom left quadrant
  fill(180);
  quad(x+89,y+10,x+82,y+15,x+81,y+55,x+85,y+56);   //bottom right quadrant
  
  //sword handle
  fill(200,170,0);
  rect(x+78,y+54,6,21);    //handle
  fill(195,165,0);
  ellipse(x+81,y+74,8,8);  //pommel
  fill(180,120,0);
  beginShape();            //hand guard
  vertex(x+70,y+50);
  vertex(x+67,y+54);
  vertex(x+69,y+58);
  vertex(x+92,y+57);
  vertex(x+94,y+53);
  vertex(x+91,y+49);
  vertex(x+89,y+52);
  vertex(x+73,y+53);
  vertex(x+70,y+50);
  endShape();
  
  //hand
  fill(243, 211, 174);
  beginShape();
  vertex(x+73,y+64);
  vertex(x+78,y+60);
  vertex(x+78,y+64);
  vertex(x+84,y+63);
  vertex(x+84,y+58.5);
  vertex(x+88,y+65);
  vertex(x+88,y+70);
  vertex(x+84,y+74);
  vertex(x+77,y+74);
  vertex(x+73,y+70);
  vertex(x+73,y+64);
  endShape();
  
  //neck and head
  fill(243, 211, 174);
  rect(x+29,y+40,9,15);
  ellipse(x+35,y+31,28,30);
  
  //right leg
  fill(190,160,70);
  triangle(x+40,y+80,x+60,y+110,x+40,y+110);
  
  //cloak
  fill(10, 20, 190);
  beginShape();      //draw back
  vertex(x+48,y+49);
  vertex(x+24,y+50);
  vertex(x+10,y+66);
  vertex(x+9,y+88);
  vertex(x,y+110);
  vertex(x+50,y+110);
  vertex(x+50,y+70);
  endShape();
  
  line(x+50,y+70,x+38,y+88);   //draw the creases in the cloak
  line(x+50,y+70,x+46,y+95);
  
  beginShape();      //draw right arm
  vertex(x+45,y+67);
  vertex(x+52,y+77);
  vertex(x+74,y+74);
  vertex(x+73,y+63);
  vertex(x+56,y+65);
  vertex(x+48,y+49);
  endShape();
  line(x,y+110,x+18,y+66);    //draw line to separate left arm from the back
  
  //draw hair
  fill(255,255,0);
  beginShape();
  vertex(x+50,y+33);
  vertex(x+52,y+26);
  vertex(x+49,y+15);
  vertex(x+48,y+20);
  vertex(x+41,y+8);
  vertex(x+40,y+16);
  vertex(x+31,y+5);
  vertex(x+34,y+14);
  vertex(x+21,y+8);
  vertex(x+26,y+15);
  vertex(x+12,y+16);
  vertex(x+20,y+22);
  vertex(x+11,y+29);
  vertex(x+19,y+28);
  vertex(x+14,y+39);
  vertex(x+21,y+33);
  vertex(x+20,y+48);
  vertex(x+24,y+39);
  vertex(x+26,y+58);
  vertex(x+34,y+40);
  vertex(x+36,y+45);
  vertex(x+38,y+27);
  vertex(x+41,y+35);
  vertex(x+47,y+25);
  vertex(x+50,y+33);
  endShape();
}

/*/ PARTICLES /*/

//snowflake particle\\
void snowFlake(float x, float y){
  stroke(0,255,240);
  strokeWeight(0.85);
  noFill();
  
  ellipse(x+10,y+10,4,4);      //main circle in centre of snowflake
  
  line(x+3,y+17,x+17,y+3);     //main eight lines coming from centre of snowflake
  line(x+0,y+10,x+20,y+10);
  line(x+3,y+3,x+17,y+17);
  line(x+10,y+0,x+10,y+20);
  
  line(x+7,y+13,x+5,y+12);     //ring of zig-zags around circle
  line(x+5,y+12,x+7,y+10);
  line(x+7,y+10,x+5,y+8);
  line(x+5,y+8,x+7,y+7);
  line(x+7,y+7,x+8,y+5);
  line(x+8,y+5,x+10,y+7);
  line(x+10,y+7,x+12,y+5);
  line(x+12,y+5,x+13,y+7);
  line(x+13,y+7,x+15,y+8);
  line(x+15,y+8,x+13,y+10);
  line(x+13,y+10,x+15,y+12);
  line(x+15,y+12,x+13,y+13);
  line(x+13,y+13,x+12,y+15);
  line(x+12,y+15,x+10,y+13);
  line(x+10,y+13,x+8,y+15);
  line(x+8,y+15,x+7,y+13);
  
  line(x+6,y+6,x+5,y+3);       //small lines that branch off of main eight lines
  line(x+6,y+6,x+3,y+5);
  line(x+10,y+4,x+8,y+1);
  line(x+10,y+4,x+12,y+1);
  line(x+14,y+6,x+15,y+3);
  line(x+14,y+6,x+17,y+5);
  line(x+16,y+10,x+19,y+8);
  line(x+16,y+10,x+19,y+12);
  line(x+14,y+14,x+17,y+15);
  line(x+14,y+14,x+15,y+17);
  line(x+10,y+16,x+12,y+19);
  line(x+10,y+16,x+8,y+19);
  line(x+6,y+14,x+3,y+15);
  line(x+6,y+14,x+5,y+17);
  line(x+4,y+10,x+1,y+12);
  line(x+4,y+10,x+1,y+8);
  
  stroke(0);
  strokeWeight(1);
}

//fire particle\\
void flame(float x, float y){
  
  //outer red flame
  strokeWeight(0);
  fill(255,0,0);
  ellipse(x+10,y+14,12,12);
  beginShape();
  vertex(x+4,y+14);
  vertex(x+6,y+6);
  vertex(x+7,y+8);
  vertex(x+10,y);
  vertex(x+13,y+8);
  vertex(x+14,y+6);
  vertex(x+16,y+14);
  endShape();
  
  
  //inner yellow flame
  fill(255,230,0);
  ellipse(x+10,y+16,6,6);
  beginShape();
  vertex(x+7,y+16);
  vertex(x+7,y+10);
  vertex(x+8,y+12);
  vertex(x+10,y+6);
  vertex(x+12,y+12);
  vertex(x+13,y+10);
  vertex(x+13,y+16);
  endShape();
  
  strokeWeight(1);
}

/*/ PLAYER SPRITES /*/

//draw the player according to the direction the player is moving in\\

void drawPlayer() {
  stroke(0);

  //draw player when facing up
  if (direction == 0) {

    //draw hands
    fill(243, 211, 174);
    ellipse(playerX+15, playerY-10, 9, 9);
    ellipse(playerX-15, playerY-10, 9, 9);

    //draw the body
    fill(10, 20, 190);
    ellipse(playerX, playerY-3, 38, 14);

    //draw the head
    fill(243, 211, 174);
    ellipse(playerX, playerY-5, 18, 18);


    //draw the hair
    fill(255, 255, 0);
    beginShape(); 
    vertex(playerX-12, playerY+12);
    vertex(playerX-4, playerY+6);
    vertex(playerX, playerY+20);
    vertex(playerX+4, playerY+6);
    vertex(playerX+12, playerY+12);
    vertex(playerX+8, playerY);
    vertex(playerX+20, playerY+4);
    vertex(playerX+8, playerY-12);
    vertex(playerX+6, playerY-8);
    vertex(playerX+2, playerY-14);
    vertex(playerX, playerY-10);
    vertex(playerX-2, playerY-14);
    vertex(playerX-6, playerY-8);
    vertex(playerX-8, playerY-12);
    vertex(playerX-20, playerY+4);
    vertex(playerX-8, playerY);
    endShape(CLOSE);
  }

  //draw player when facing right
  else if (direction == 1) {

    //draw hands
    fill(243, 211, 174);
    ellipse(playerX+10, playerY+15, 9, 9);
    ellipse(playerX+10, playerY-15, 9, 9);

    //draw the body
    fill(10, 20, 190);
    ellipse(playerX+3, playerY, 14, 38);

    //draw the head
    fill(243, 211, 174);
    ellipse(playerX+5, playerY, 18, 18);

    //draw the hair
    fill(255, 255, 0);
    beginShape(); 
    vertex(playerX-12, playerY-12);
    vertex(playerX-6, playerY-4);
    vertex(playerX-20, playerY);
    vertex(playerX-6, playerY+4);
    vertex(playerX-12, playerY+12);
    vertex(playerX, playerY+8);
    vertex(playerX-4, playerY+20);
    vertex(playerX+12, playerY+8);
    vertex(playerX+8, playerY+6);
    vertex(playerX+14, playerY+2);
    vertex(playerX+10, playerY);
    vertex(playerX+14, playerY-2);
    vertex(playerX+8, playerY-6);
    vertex(playerX+12, playerY-8);
    vertex(playerX-4, playerY-20);
    vertex(playerX, playerY-8);
    endShape(CLOSE);
  } 

  //draw player when facing down
  else if (direction == 2) {

    //draw hands
    fill(243, 211, 174);
    ellipse(playerX+15, playerY+10, 9, 9);
    ellipse(playerX-15, playerY+10, 9, 9);

    //draw the body
    fill(10, 20, 190);
    ellipse(playerX, playerY+3, 38, 14);

    //draw the head
    fill(243, 211, 174);
    ellipse(playerX, playerY+5, 18, 18);

    //draw the hair
    fill(255, 255, 0);
    beginShape(); 
    vertex(playerX-12, playerY-12);
    vertex(playerX-4, playerY-6);
    vertex(playerX, playerY-20);
    vertex(playerX+4, playerY-6);
    vertex(playerX+12, playerY-12);
    vertex(playerX+8, playerY);
    vertex(playerX+20, playerY-4);
    vertex(playerX+8, playerY+12);
    vertex(playerX+6, playerY+8);
    vertex(playerX+2, playerY+14);
    vertex(playerX, playerY+10);
    vertex(playerX-2, playerY+14);
    vertex(playerX-6, playerY+8);
    vertex(playerX-8, playerY+12);
    vertex(playerX-20, playerY-4);
    vertex(playerX-8, playerY);
    endShape(CLOSE);
  } 

  //draw player when facing left
  else if (direction == 3) {

    //draw hands
    fill(243, 211, 174);
    ellipse(playerX-10, playerY-15, 9, 9);
    ellipse(playerX-10, playerY+15, 9, 9);

    //draw the body
    fill(10, 20, 190);
    ellipse(playerX-3, playerY, 14, 38);

    //draw the head
    fill(243, 211, 174);
    ellipse(playerX-5, playerY, 18, 18);

    //draw the hair
    fill(255, 255, 0);
    beginShape(); 
    vertex(playerX+12, playerY+12);
    vertex(playerX+6, playerY+4);
    vertex(playerX+20, playerY);
    vertex(playerX+6, playerY-4);
    vertex(playerX+12, playerY-12);
    vertex(playerX, playerY-8);
    vertex(playerX+4, playerY-20);
    vertex(playerX-12, playerY-8);
    vertex(playerX-8, playerY-6);
    vertex(playerX-14, playerY-2);
    vertex(playerX-10, playerY);
    vertex(playerX-14, playerY+2);
    vertex(playerX-8, playerY+6);
    vertex(playerX-12, playerY+8);
    vertex(playerX+4, playerY+20);
    vertex(playerX, playerY+8);
    endShape(CLOSE);
  }
}


///**\\\  S C R E E N   0   F U N C T I O N S  ///**\\\


/*/ BACKGROUND /*/

//draw path\\

void drawPath() {
  noStroke();
  fill(240, 220, 50);
  rect(groundX+75, groundY-500, 100, 1050);
  rect(groundX-500, groundY+450, 675, 100);
  rect(groundX+75, groundY+25, 338, 100);
  rect(groundX+313, groundY-50, 100, 175);
}


//draw house\\

void drawHouse() {
  //draw main building
  stroke(0);
  fill(140, 0, 0);
  rect(groundX+275, groundY-300, 425, 250);

  //draw door step
  fill(200);
  rect(groundX+325, groundY-50, 75, 25);

  //draw door
  fill(255);
  ellipse(groundX+383, groundY-42, 5, 5);
  fill(150, 80, 0);
  rect(groundX+338, groundY-50, 50, 8);

  //tell player the door is locked if they are within range of door
  fill(255);
  textSize(14);
  if (playerX>groundX+300 && playerX<groundX+400 && playerY>groundY-50 && playerY<groundY+8) {
    text("The door is locked", groundX+300, groundY-75);
  }

  //prevent player from walking through walls of building

  if (playerX>groundX+256 && playerY<groundY-31 && playerY>=groundY-41) {
    playerY=playerY+speed;
    if (dash){
      playerY = playerY + dashSpd;
    }
  }
  if (playerY<groundY-31 && playerX>groundX+256 && playerX<=groundX+266) {
    playerX=playerX-speed;
    if (dash){
      playerX = playerX - dashSpd;
    }
  }
}



/*/ PLAYER CONTROLS /*/

//when player presses a WASD key, the move variable (up,right,down,left) is activated\\

void wasdPress() {
  if (key == 'w') {
    up = true;
  } else if (key == 'd') {
    right = true;
  } else if (key == 's') {
    down = true;
  } else if (key == 'a') {
    left = true;
  }
  if (key == ' '){
    dash = true;
  }
}



//when player releases WASD key, it disables the move variable (up,right,down,left)\\

void wasdRelease() {
  if (key == 'w') {
    up = false;
  } 
  if (key == 'd') {
    right = false;
  } 
  if (key == 's') {
    down = false;
  } 
  if (key == 'a') {
    left = false;
  }
  if (key == ' '){
    dash = false;
  }
}



//when a move variable (up,right,down,left) is activated, the player is moved in the correct direction and the direction of the sprite is set to the direction player moves in\\

void wasdMove() {
  if (up) {
    playerY = playerY - speed;
    direction = 0;
    if (dash){
      playerY = playerY - dashSpd;
    }
  } else if (right) {
    playerX = playerX + speed;
    direction = 1;
    if (dash){
      playerX = playerX + dashSpd;
    }
  } else if (down) {
    playerY = playerY + speed;
    direction = 2;
    if (dash){
      playerY = playerY + dashSpd;
    }
  } else if (left) {
    playerX = playerX - speed;
    direction = 3;
    if (dash){
      playerX = playerX - dashSpd;
    }
  }
}


//when player moves 75 pixels away from border, translate board and player away from border to simulate scrolling screen

void scroll(){
   if (playerY<100) {
    playerY = playerY + speed;
    groundY = groundY + speed;
    if (dash){
      playerY = playerY + dashSpd;
      groundY = groundY + dashSpd;
    }
  } if (playerX>300) {
    playerX = playerX - speed;
    groundX = groundX - speed;
    if (dash){
      playerX = playerX - dashSpd;
      groundX = groundX - dashSpd;
    }
  } if (playerY>300) {
    playerY = playerY - speed;
    groundY = groundY - speed;
    if (dash){
      playerY = playerY - dashSpd;
      groundY = groundY - dashSpd;
    }
  }  if (playerX<100) {
    playerX = playerX + speed;
    groundX = groundX + speed;
  if (dash){
      playerX = playerX + dashSpd;
      groundX = groundX + dashSpd;
    }
}
}