public void update(long sysTime, Game game) {
    // Every in game tick, the bullet gets updated here
    // Let's calculate how long the bullet has been alive here (We can later use this in calculations)
    long lifeTime = sysTime - birth;
    if(life > lifeTime) {
      float percent = (float)(lifeTime)/(float)(life);
      float newpos[] = {getX(percent),getY(percent)};
      if((newpos[0] != position[0]) || (newpos[1] != position[1])) {
        angle = (float)Math.atan2(-(position[0] - newpos[0]), position[1] - newpos[1]);
      }
      position[0] = newpos[0];
      position[1] = newpos[1];
      
      shooting = getShot(sysTime);
      
      if(shooting) {
        // First make sure this timer thing is okay.
        if(sysTime >= shotWait) {
          // Make a bullet!
          for(int b = 0; b<weapons[weapon].length; b++) {
            // Here we're iterating through each bullet in the bullet list, to create them at the same time.
            // While creating them seperately makes a nice stream, when combined with a lot of streams, it looks offbalanced, and ugly.
            
            // Here we're making an offset for the origin point of the bullet.
            float offset[] = {position[0]+weapons[weapon][b][0][0],position[1]+weapons[weapon][b][0][1]};
            float ad[] = {(float)angle+(float)Math.toRadians(weapons[weapon][b][1][0]),weapons[weapon][b][1][1]};
            
            // Then we're creating the bullet.
            // public void createBullet(boolean friendly, long birth, long life, float origin[], float offset[], float pattern[]) {
            game.level.createBullet(false,sysTime,weapons[weapon][b][3][0],offset,ad,weapons[weapon][b][2]);
            
            // And then we set the delay, so that we're not making too many bullets.
            shotWait = sysTime+weapons[weapon][b][3][1];
          }
        }
      }
    }
    // If we've exceeded the lifetime, then die.
    else { die(); }
    // If we're out of health, die.
  }