// ****************************************************************************
//
// Logic 86: Final Battle
//
// ****************************************************************************

#include "defines.txt"

#define vg_turn 0
#define dk_turn 1
#define vg_tech 2
#define punch 3
#define fire 4

if (new_room) {
  load.pic(room_no);
  draw.pic(room_no);
  discard.pic(room_no);
  set.horizon(1);


// Check what room the player came from and position them on the
// screen accordingly here, e.g:
 if (prev_room_no == 5) {
   position(ego,80,140);
   arpg=vg_turn;
   set(done_flag);
   reset(more_done_flag);
   dk_health=250;
   vg_health=100;
 }

  animate.obj(o1); //Dream King
  load.view(123);
  set.view(o1,123);
  position(o1,80,106);
  universe = 4;
  step.size(o1,universe);
  draw(o1);



  animate.obj(o2); //menu bar
  load.view(126);
  set.view(o2,126);
  stop.cycling(o2);
  position(o2,5,160);
  ignore.objs(o2);

  animate.obj(o3); //pointer
  load.view(100);
  set.view(o3,100);
  position(o3,11,112);
  ignore.objs(o3);
  set.priority(o3,15);
  universe=1;
  step.time(o3,universe);

  animate.obj(o4); //VG's attack
  load.view(127);//fireball
  load.view(2);//punch
  set.priority(o4,15);
  ignore.objs(o4);


  load.sound(6);
  load.sound(42);
  load.sound(24);
  sound(6,sound_flag);

  index = 0;


  turn_no = 1;

  draw(ego);
  show.pic();
}


if (arpg == vg_tech) {    //Technique Menu
  set.loop(o2,1);
//  draw(o2);
//  draw(o3);


if (done_flag) {
   if (ego_dir == 1) {
        ego_dir=0;
        get.posn(o3,temp_x,temp_y);
        if (temp_y>112) {
            temp_y-=12;
            move.obj.v(o3,temp_x,temp_y,2,done_flag);
            }
        }

    if (ego_dir == 5) {
        ego_dir=0;
        get.posn(o3,temp_x,temp_y);
        if(temp_y<148) {
           temp_y+=12;
           move.obj.v(o3,temp_x,temp_y,2,done_flag);
           }
        }
    }

     if (controller(left_click)) {
         get.posn(o3,temp_x, temp_y);

         //erase(o2);
         //erase(o3);

         if (temp_y == 112) {  //Punch
             arpg = punch;
//             new.room(86);
             }

         if (temp_y == 124) { //Fire
            if (vg_mp>=1) {
             vg_mp-=1;
             arpg = fire;
             }
             else {
                print("Not enough magic!");
                }
//             new.room(86);
             }

         if (temp_y ==136) { //Light
           if (vg_mp>=2) {
             print("Light!");
            if (dk_health>=20) {
             dk_health-=20;
            if (vg_health>=10) {
             vg_health-=10;
             }
             vg_mp-=2;
             arpg = dk_turn;
             }
            else {
             dk_health = 0;
             }

            vg_mp-=2;
            }
            else {
              print("Not enough magic!");

             }

           }

         if (temp_y == 148) { //Heal
           if (vg_mp>=4) {
             print("Healed!");
            if (vg_health<=50) {
             vg_health+=50;
             }
            else {
             vg_health = 100;
             }
             vg_mp-=4;
             arpg = dk_turn;
               }
           else {
             print("Not enough magic!");
             }
           }
       }



  }

if (arpg == fire &&
    !more_done_flag) {
    set.view(o4,127);
    temp_y = new_ego_y;
    temp_y-=20;
    position.v(o4,new_ego_x,temp_y);
    draw(o4);
    get.posn(o1,temp_x,temp_y);
    temp_y+=5;
    temp_y-=20;
    move.obj.v(o4,temp_x,temp_y,1,more_done_flag);
    arpg=69;
    }



if (more_done_flag &&
    arpg==69) {
    erase(o4);
    reset(more_done_flag);
    if (dk_health>=10) {
        dk_health-=10;

        }
    else {
        dk_health=0;
        }
    arpg=dk_turn;
    return();
    }

if (arpg == punch &&
    !more_done_flag) {
      set.view(o4,2);
      position.v(o4,new_ego_x,new_ego_y);
      erase(ego);
      draw(o4);
      get.posn(o1,temp_x,temp_y);
      temp_y+=5;
      temp_y-=20;
      move.obj.v(o4,temp_x,temp_y,1,more_done_flag);
      arpg=70;
      }

if (more_done_flag &&
    arpg==70) {
       erase(o4);
       draw(ego);
      if (dk_health>=5) {
       dk_health-=5;
       }
      else {
       dk_health = 0;
       }
       reset(more_done_flag);
       arpg=dk_turn;
       return();
       }

if (arpg == vg_turn) {
    display(1,1,m1);
    display(20,20,m2);

    set.loop(o2,0);
    draw(o2);
    draw(o3);

  if (done_flag) {
    if (ego_dir == 1) {
        ego_dir=0;
        get.posn(o3,temp_x,temp_y);
        if (temp_y>112) {
            temp_y-=12;
            move.obj.v(o3,temp_x,temp_y,2,done_flag);
            }
        }

    if (ego_dir == 5) {
        ego_dir=0;
        get.posn(o3,temp_x,temp_y);
        if(temp_y<148) {
           temp_y+=12;
           move.obj.v(o3,temp_x,temp_y,2,done_flag);
           }
        }
     }

     if (controller(left_click)) {
         get.posn(o3,temp_x, temp_y);
         if (temp_y == 112) {  //use technique
             arpg = vg_tech;
//             new.room(86);
             }

         if (temp_y == 124) { //charge magic
             print("Charging magic...");
             vg_mp+=2;
             arpg = dk_turn;
//             new.room(86);
             }

         if (temp_y == 148) { //Run
             print("Attempting to run away...");
             random(0,5,universe);
             if (universe >= 3) {
                 print("Successfully escaped...");
                 new.room(5);
                 }
                 else {
                    print("You couldn't escape...");
                    arpg = dk_turn;
//                    new.room(86);
                    }
               }
          }

   }





if (arpg == dk_turn) {  //Dream King's Attack
  display(1,1,m1);
  display(20,20,m2);

  erase(o2);
  erase(o3);
  wander(o1);
  set.view(o4,127);
  get.posn(o1,temp_x,temp_y);
  temp_y-=20;
  position.v(o4,temp_x,temp_y);
  universe=5;
  step.size(o4,universe);
  draw(o4);
  universe=5;
  set.dir(o4,universe);
  arpg=13;
  }

if (arpg == 13) { //Fireball control
    get.posn(o4,temp_x,temp_y);
    distance(ego, o4, range);

    if (range<=10) {
        vg_health-=10;
        temp_y=161;
        }
    if (temp_y>160) {
        erase(o4);
        universe = turn_no;
        universe*=5;
        if (dk_balls<universe) {
        dk_balls+=1;
        arpg=dk_turn;
        }
        else {
           dk_balls=0;
           if (turn_no < 5) {
               turn_no++;
               }
           else {
               turn_no = 1;
               }
           stop.motion(o1);

           arpg=vg_turn;
           }
      }
    }

if (vg_health == 0) {
    print("VG: \"AAAAUUUGHHH!\"");

    new.room(204);
    }

if (dk_health == 0) {
    print("DK: \"NOOOOOOOOOO!\"");
    score++;
    new.room(87);
    }

if (sound_flag) {
    if (index == 0) {
        sound(42, sound_flag);
        index++;
        return();
        }
    if (index == 1) {
      sound(24, sound_flag);
      index++;
      return();
      }
    if (index == 2) {
      sound(6, sound_flag);
      index = 0;
      }
    }

return();

#message 1 "DK: %v113 "
#message 2 "VG: %v112 Magic: %v114 "