#include <define.h>

//#define NAME                    SCRIPT_

#include <command.h>
//#include <ModReact.h>



procedure start;
#include <push.h>
procedure combat_p_proc;
procedure Lighting;
procedure Darkness;
procedure add_party;
procedure update_party;
procedure remove_party;

variable party_elevation;
variable dude_start_hex;

export variable Ian_ptr;
export variable Dog_ptr;
export variable Tycho_ptr;
export variable Katja_ptr;
export variable Tandi_ptr;

variable Player_Elevation;

export variable field_change;
export variable ignoring_dude;
export variable radio_computer;
export variable radio_room_attacked;
export variable removal_ptr;
export variable valid_target;
export variable FieldC1a_ptr;
export variable FieldC1b_ptr;
export variable FieldC2a_ptr;
export variable FieldC2b_ptr;
export variable Field1a_Ptr;
export variable Field2a_Ptr;
export variable Field3a_Ptr;
export variable Field4a_Ptr;
export variable Field5a_Ptr;
export variable Field6a_Ptr;
export variable Field1b_Ptr;
export variable Field2b_Ptr;

procedure Invasion;


procedure start
begin
if (script_action == combat_proc) then begin
    call combat_p_proc;
  end
  else begin
    if (script_action == map_enter_proc) then begin
      if (metarule(14, 0)) then begin
        field_change := "off";
      end
      if (global_var(GVAR_VATS_ALERT)) then begin
        field_change := "on";
      end
      if (global_var(GVAR_FORCE_FIELDS_OFF)) then begin
        field_change := "off";
      end
      if (global_var(GVAR_LOAD_MAP_INDEX) == 0) then begin
        override_map_start(120, 75, 0, 2);
      end
      else begin
        if (global_var(GVAR_LOAD_MAP_INDEX) == 1) then begin
          override_map_start(120, 75, 1, 2);
        end
        else begin
          if (global_var(GVAR_LOAD_MAP_INDEX) == 12) then begin
            override_map_start(92, 135, 0, 5);
          end
          else begin
            override_map_start(93, 143, 0, 5);
          end
        end
      end
      radio_room_attacked := map_var(13);
      call add_party;
    end
    else begin
      if (script_action == map_update_proc) then begin
        if (global_var(GVAR_VATS_ALERT) == 0) then begin
          if (elevation(dude_obj) == 0) then begin
            set_global_var(GVAR_MARK_BASE_2, 1);
          end
          else begin
            set_global_var(GVAR_MARK_BASE_3, 1);
          end
        end
        else begin
          if (map_var(24) == 0) then begin
            display_msg(message_str(SCRIPT_GENCHAT, 186));
            set_map_var(24, 1);
          end
          set_global_var(GVAR_MARK_BASE_2, 0);
          set_global_var(GVAR_MARK_BASE_3, 0);
        end
        if (global_var(GVAR_VATS_COUNTDOWN) != 0) then begin
          display_msg(message_str(SCRIPT_MBSTRONG, 108) + (300 - ((game_time / 10) - global_var(GVAR_VATS_COUNTDOWN))) + message_str(SCRIPT_MBSTRONG, 109));
          if (((game_time / 10) - global_var(GVAR_VATS_COUNTDOWN)) >= 300) then begin
            play_gmovie(MOVIE_VEXPLD);
            metarule(13, 0);
          end
        end
        if (removal_ptr != 0) then begin
          destroy_object(removal_ptr);
          removal_ptr := 0;
        end
        call update_party;
      end
      else begin
        if (script_action == map_exit_proc) then begin
          call remove_party;
        end
      end
    end
  end
end

procedure combat_p_proc
begin
  if (global_var(GVAR_DESTROY_VATS_4)) then begin
    script_overrides;
    set_global_var(GVAR_DESTROY_VATS_4, 0);
    set_global_var(GVAR_ENTERING_VATS_HOW, 3);
    load_map(32, 5);
  end
end

procedure Lighting
begin
  variable LVar0 := 0;
  LVar0 := game_time_hour;
  if ((LVar0 >= 600) and (LVar0 < 700)) then begin
    set_light_level(LVar0 - 600 + 40);
  end
  else begin
    if ((LVar0 >= 700) and (LVar0 < 1800)) then begin
      set_light_level(100);
    end
    else begin
      if ((LVar0 >= 1800) and (LVar0 < 1900)) then begin
        set_light_level(100 - (LVar0 - 1800));
      end
      else begin
        set_light_level(40);
      end
    end
  end
end

procedure Darkness
begin
  set_light_level(40);
end

procedure add_party
begin
  variable LVar0 := 0;
  variable LVar1 := 0;
  party_elevation := elevation(dude_obj);
  if (global_var(GVAR_TANDI_STATUS) == 5) then begin
    if (Tandi_ptr == 0) then begin
    end
    critter_add_trait(Tandi_ptr, 1, 6, 0);
  end
end

procedure update_party
begin
  variable LVar0 := 0;
  variable LVar1 := 0;
  if (elevation(dude_obj) != party_elevation) then begin
    party_elevation := elevation(dude_obj);
    if (global_var(GVAR_IAN_STATUS) == 2) then begin
      if (Ian_ptr == 0) then begin
      end
      else begin
        move_to(Ian_ptr, tile_num_in_direction(tile_num(dude_obj), 1, 2), elevation(dude_obj));
      end
    end
    if (global_var(GVAR_DOG_EMPATHY)) then begin
      if (Dog_ptr == 0) then begin
      end
      else begin
        move_to(Dog_ptr, tile_num_in_direction(tile_num(dude_obj), 2, 1), elevation(dude_obj));
      end
    end
    if (global_var(GVAR_HERNANDEZ_STATUS) == 2) then begin
      if (Tycho_ptr == 0) then begin
      end
      else begin
        move_to(Tycho_ptr, tile_num_in_direction(tile_num(dude_obj), 3, 2), elevation(dude_obj));
      end
    end
    if (global_var(GVAR_KATJA_STATUS) == 2) then begin
      if (Katja_ptr == 0) then begin
      end
      else begin
        move_to(Katja_ptr, tile_num_in_direction(tile_num(dude_obj), 4, 2), elevation(dude_obj));
      end
    end
    if (global_var(GVAR_TANDI_STATUS) == 5) then begin
      if (Tandi_ptr == 0) then begin
      end
      else begin
        move_to(Tandi_ptr, tile_num_in_direction(tile_num(dude_obj), 4, 4), elevation(dude_obj));
      end
    end
  end
end

procedure remove_party
begin
  if (global_var(GVAR_IAN_STATUS) == 2) then begin
    set_global_var(GVAR_IAN_STATUS, 2);
  end
  if (global_var(GVAR_DOG_EMPATHY)) then begin
    set_global_var(GVAR_DOG_EMPATHY, 1);
  end
  if (global_var(GVAR_HERNANDEZ_STATUS) == 2) then begin
    set_global_var(GVAR_HERNANDEZ_STATUS, 2);
  end
  if (global_var(GVAR_KATJA_STATUS) == 2) then begin
    set_global_var(GVAR_KATJA_STATUS, 2);
  end
  if (global_var(GVAR_TANDI_STATUS) == 5) then begin
  end
end

procedure Invasion
begin
  if (not(global_var(GVAR_MASTER_BLOWN) == 2)) then begin
    if (global_var(GVAR_NECROPOLIS_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
      set_global_var(GVAR_NECROPOLIS_INVADED, 1);
    end
    if (global_var(GVAR_THE_HUB_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
      set_global_var(GVAR_HUB_INVADED, 1);
    end
    if (global_var(GVAR_BROTHERHOOD_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
      set_global_var(GVAR_BROTHERHOOD_INVADED, 1);
    end
    if (global_var(GVAR_JUNKTOWN_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
      set_global_var(GVAR_JUNKTOWN_INVADED, 1);
    end
    if (global_var(GVAR_SHADY_SANDS_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
      set_global_var(GVAR_SHADY_SANDS_INVADED, 1);
    end
    if (global_var(GVAR_VAULT_13_INVADED_DATE) <= 0) then begin
      set_global_var(GVAR_VAULT_INVADED, 1);
    end
    if (global_var(GVAR_FOLLOWERS_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
      set_global_var(GVAR_FOLLOWERS_INVADED, 1);
    end
  end
end