import GUI
 
%setpriority (2 ** 15 - 1)
 
var window := Window.Open ("position:center;center,graphics:1267;953,title:Army's Elite")
 
buttonchoose ("multibutton")
 
var ak_47_button, desert_eagle_button, done_button : int
 
var selection, map_choice : int
 
var mouse :
 
    record
 
        x, y, button, buttonUpDown, right, middle, left, reloading : int
 
    end record
 
var active_gun, active_gun_firing, active_map, active_enemy, original_position, weapon_ammo, max_weapon_ammo, active_enemy_x, active_enemy_y : int
 
var ak_47 := Pic.FileNew ("weapon1.bmp")
 
var firing_ak_47 := Pic.FileNew ("firing ak-47.bmp")
 
var desert_eagle := Pic.FileNew ("deagle.bmp")
 
var firing_desert_eagale := Pic.FileNew ("firing_deagle.bmp")
 
var level6 := Pic.FileNew ("level6.bmp")
 
var baghdad := Pic.FileNew ("Baghdad.bmp")
 
var kabul := Pic.FileNew ("Kabul.bmp")
 
var skeleton := Pic.FileNew ("skel1.bmp")
 
var panda := Pic.FileNew ("panda1.bmp")
 
var weaponsound : array 1 .. 11 of string
 
    := init ("ak_47.wav", "deagle.wav", "glock.wav",
 
    "m3.wav", "m4a1.wav", "mac10.wav", "mp5.wav", "p90.wav", "sg552.wav",
 
    "tmp.wav", "usp.wav")
 
var x_displacement, y_displacement, firing_displacement_x, firing_displacement_y : int
 
var x_enemy, y_enemy : int
 
var enemy_alive : boolean := false
 
var weapon_class : int
 
var shot : boolean := false
 
var font : int
 
var titleName := Pic.FileNew ("maintitlename.bmp")
 
var if_reloading : boolean := false
 
var animation_counter : int := 0
 
var reloading_counter : int := 0
 
var weapon_sound : int
 
var reloadsound : string := "reload.wav"
 
var empty_sound : string := "empty.wav"
 
var score_int : int
 
var enemy_value : int
 
var enemy_presence : int := 0
 
var enemy_damage : int
 
var player_health : int := 100
 
var introduction := Pic.FileNew ("introduction.bmp")
 
var titlePic := Pic.FileNew ("maintitle.bmp")
 
font := Font.New ("serif:18:bold")
 
var font1 := Font.New ("serif:50") %fonts
 
var font2 := Font.New ("serif:30")
 
var font3 := Font.New ("serif:15")
 
var reloading_meter, hitting_time : int
 
var difficulty_choice, difficulty : int
 
var done, quitBtn : int
 
var file : int
 
var name : string
 
var getname : string
 
var getscore : int
 
var moving : int := 0
 
proc new_value
 
    player_health := 100
 
    animation_counter := 0
 
    reloading_counter := 0
 
    difficulty_choice := 0
 
end new_value
 
 
proc select_gun
 
    put "Please select your gun"
 
    put "enter 1 for AK_47"
 
    put "enter 2 for Desert Eagle"
 
    get selection
 
    if selection = 1 then
 
        active_gun := ak_47
 
        active_gun_firing := firing_ak_47
 
        x_displacement := 50
 
        y_displacement := 450
 
        firing_displacement_x := 40
 
        firing_displacement_y := 450
 
        original_position := 448
 
        max_weapon_ammo := 30
 
        weapon_ammo := max_weapon_ammo
 
        weapon_class := 2
 
        weapon_sound := 1
 
    elsif selection = 2 then
 
        active_gun := desert_eagle
 
        active_gun_firing := firing_desert_eagale
 
        x_displacement := -150
 
        y_displacement := 430
 
        firing_displacement_x := -250
 
        firing_displacement_y := 500
 
        weapon_class := 1
 
        original_position := 431
 
        max_weapon_ammo := 7
 
        weapon_ammo := max_weapon_ammo
 
        weapon_sound := 2
 
    end if
 
end select_gun
 
 
proc select_map
 
    put "Please select a level"
 
    put "enter 1 for Baghdad"
 
    put "enter 2 for Kabul"
 
    get map_choice
 
    if map_choice = 1 then
 
        active_map := baghdad
 
        active_enemy := skeleton
 
        active_enemy_x := 36
 
        active_enemy_y := 60
 
        enemy_value := 10
 
        score_int := -enemy_value
 
    elsif map_choice = 2 then
 
        active_map := kabul
 
        active_enemy := panda
 
        active_enemy_x := 46
 
        active_enemy_y := 56
 
        enemy_value := 8
 
        score_int := -enemy_value
 
    end if
 
end select_map
 
proc select_difficulty
 
    put "Select a difficulty setting"
 
    put "enter 1 for Private"
 
    put "enter 2 for Corporal"
 
    put "enter 3 for General"
 
    get difficulty_choice
 
end select_difficulty
 
proc enemies_appear
 
    if active_map = baghdad and enemy_alive = false then
 
        randint (x_enemy, 209, 1008)
 
        randint (y_enemy, 159, 429)
 
        enemy_alive := true
 
    elsif active_map = kabul and enemy_alive = false then
 
        randint (x_enemy, 19, 1147)
 
        randint (y_enemy, 114, 448)
 
        enemy_alive := true
 
    end if
 
    Pic.SetTransparentColor (active_enemy, 23)
 
    Pic.Draw (active_enemy, x_enemy, y_enemy, picMerge)
 
end enemies_appear
 
 
proc weapon_movement
 
    Pic.Draw (active_map, 0, -80, picUnderMerge)
 
    mousewhere (mouse.x, mouse.y, mouse.button)
 
    Pic.SetTransparentColor (active_gun, 23)
 
    if shot = false and if_reloading = false then
 
        if mouse.y < original_position then
 
            Pic.Draw (active_gun, mouse.x - x_displacement, mouse.y - y_displacement, picMerge)
 
            Draw.Line (mouse.x - 2, mouse.y, mouse.x - 15, mouse.y, brightred)     %Left line of crosshair
 
            Draw.Line (mouse.x, mouse.y + 2, mouse.x, mouse.y + 15, brightred)     %Top line of crosshair
 
            Draw.Line (mouse.x + 2, mouse.y, mouse.x + 15, mouse.y, brightred)     %Right line of crosshair
 
        else
 
            Pic.Draw (active_gun, mouse.x - x_displacement, original_position - y_displacement, picMerge)
 
            Draw.Line (mouse.x - 2, original_position, mouse.x - 15, original_position, brightred)     %Left line of crosshair
 
            Draw.Line (mouse.x, original_position + 2, mouse.x, original_position + 15, brightred)     %Top line of crosshair
 
            Draw.Line (mouse.x + 2, original_position, mouse.x + 15, original_position, brightred)     %Right line of crosshair
 
        end if
 
    end if
 
end weapon_movement
 
 
proc weapon_assist
 
    if mouse.y < original_position and if_reloading = false then
 
        Pic.Draw (active_gun, mouse.x - x_displacement, mouse.y - y_displacement, picMerge)
 
        Draw.Line (mouse.x - 2, mouse.y, mouse.x - 15, mouse.y, brightred)         %Left line of crosshair
 
        Draw.Line (mouse.x, mouse.y + 2, mouse.x, mouse.y + 15, brightred)         %Top line of crosshair
 
        Draw.Line (mouse.x + 2, mouse.y, mouse.x + 15, mouse.y, brightred)         %Right line of crosshair
 
    elsif mouse.y > original_position and if_reloading = false then
 
        Pic.Draw (active_gun, mouse.x - x_displacement, original_position - y_displacement, picMerge)
 
        Draw.Line (mouse.x - 2, original_position, mouse.x - 15, original_position, brightred)         %Left line of crosshair
 
        Draw.Line (mouse.x, original_position + 2, mouse.x, original_position + 15, brightred)         %Top line of crosshair
 
        Draw.Line (mouse.x + 2, original_position, mouse.x + 15, original_position, brightred)         %Right line of crosshair
 
    end if
 
end weapon_assist
 
 
proc weapon_firing
 
    if weapon_class = 1 then
 
        if mouse.button = 1 and weapon_ammo > 0 and if_reloading = false then
 
            shot := true
 
            animation_counter := animation_counter + 1
 
        else
 
            shot := false
 
            animation_counter := 0
 
        end if
 
        if animation_counter >= 20 and mouse.button = 0 or weapon_ammo = 0 then
 
            animation_counter := 0
 
            shot := false
 
        end if
 
        if mouse.button = 0 then
 
            animation_counter := (animation_counter * 100) - 1
 
        end if
 
        if mouse.button = 1 and weapon_ammo = 0 then
 
            reloading_meter := reloading_meter + 1
 
        else
 
            reloading_meter := 0
 
        end if
 
        if reloading_meter = 1 then
 
            Music.PlayFileReturn (empty_sound)
 
        end if
 
        if animation_counter = 1 or animation_counter = 2 or animation_counter = 3 or animation_counter = 4
 
                or animation_counter = 5 and Mouse.ButtonMoved ("up") and Mouse.ButtonMoved ("down") and if_reloading = false then
 
            %mousewhere (mouse.x, mouse.y, mouse.button)
 
            if mouse.y < original_position then
 
                Pic.Draw (active_gun_firing, mouse.x - firing_displacement_x, mouse.y - firing_displacement_y, picMerge)
 
                Draw.Line (mouse.x - 2, mouse.y, mouse.x - 15, mouse.y, brightred)     %Left line of crosshair
 
                Draw.Line (mouse.x, mouse.y + 2, mouse.x, mouse.y + 15, brightred)     %Top line of crosshair
 
                Draw.Line (mouse.x + 2, mouse.y, mouse.x + 15, mouse.y, brightred)
 
            elsif mouse.y > original_position then
 
                Pic.Draw (active_gun_firing, mouse.x - x_displacement, original_position - y_displacement, picMerge)
 
                Draw.Line (mouse.x - 2, original_position, mouse.x - 15, original_position, brightred)         %Left line of crosshair
 
                Draw.Line (mouse.x, original_position + 2, mouse.x, original_position + 15, brightred)     %Top line of crosshair
 
                Draw.Line (mouse.x + 2, original_position, mouse.x + 15, original_position, brightred)     %Right line of crosshair
 
            end if
 
        else
 
            weapon_assist
 
        end if
 
        if animation_counter = 1 and weapon_ammo > 0 then
 
            weapon_ammo := weapon_ammo - 1
 
            Music.PlayFileReturn (weaponsound (weapon_sound))
 
        end if
 
 
    elsif weapon_class = 2 then
 
        Pic.SetTransparentColor (active_gun_firing, 23)
 
        if mouse.button = 1 and weapon_ammo > 0 and if_reloading = false then
 
            shot := true
 
            animation_counter := animation_counter + 1
 
        elsif mouse.button = 0 then
 
            shot := false
 
            animation_counter := 0
 
        end if
 
        if animation_counter >= 3 or weapon_ammo = 0 then
 
            animation_counter := 0
 
            shot := false
 
        end if
 
        if mouse.button = 1 and weapon_ammo = 0 then
 
            reloading_meter := reloading_meter + 1
 
        else
 
            reloading_meter := 0
 
        end if
 
        if reloading_meter = 1 then
 
            Music.PlayFileReturn (empty_sound)
 
        end if
 
        if animation_counter = 1 or animation_counter = 2 or animation_counter = 3 and Mouse.ButtonMoved ("up") and Mouse.ButtonMoved ("down")
 
                and if_reloading = false then
 
            %mousewhere (mouse.x, mouse.y, mouse.button)
 
            if mouse.y < original_position then
 
                Pic.Draw (active_gun_firing, mouse.x - firing_displacement_x, mouse.y - firing_displacement_y, picMerge)
 
                Draw.Line (mouse.x - 2, mouse.y, mouse.x - 15, mouse.y, brightred)      %Left line of crosshair
 
                Draw.Line (mouse.x, mouse.y + 2, mouse.x, mouse.y + 15, brightred)     %Top line of crosshair
 
                Draw.Line (mouse.x + 2, mouse.y, mouse.x + 15, mouse.y, brightred)        %Right line of crosshair
 
            elsif mouse.y > original_position then
 
                Pic.Draw (active_gun_firing, mouse.x - x_displacement, original_position - y_displacement, picMerge)
 
                Draw.Line (mouse.x - 2, original_position, mouse.x - 15, original_position, brightred)      %Left line of crosshair
 
                Draw.Line (mouse.x, original_position + 2, mouse.x, original_position + 15, brightred)     %Top line of crosshair
 
                Draw.Line (mouse.x + 2, original_position, mouse.x + 15, original_position, brightred)     %Right line of crosshair
 
            end if
 
        else
 
            weapon_assist
 
        end if
 
        if animation_counter = 1 and weapon_ammo > 0 then
 
            weapon_ammo := weapon_ammo - 1
 
            Music.PlayFileReturn (weaponsound (weapon_sound))
 
        end if
 
    end if
 
    if shot and mouse.x > x_enemy and mouse.x < x_enemy + active_enemy_x and mouse.y > y_enemy and mouse.y < y_enemy + active_enemy_y then
 
        enemy_alive := false
 
    end if
 
    if enemy_alive = true then
 
        enemy_presence := enemy_presence + 1
 
    elsif enemy_alive = false then
 
        enemy_presence := 0
 
    end if
 
    if difficulty_choice = 1 then
 
        randint (enemy_damage, 1, 9)
 
        hitting_time := 25
 
    elsif difficulty_choice = 2 then
 
        randint (enemy_damage, 9, 15)
 
        hitting_time := 20
 
    elsif difficulty_choice = 3 then
 
        randint (enemy_damage, 15, 20)
 
        hitting_time := 15
 
    end if
 
    if enemy_presence >= hitting_time then
 
        enemy_presence := 0
 
        player_health := player_health - enemy_damage
 
    end if
 
    % put enemy_presence
 
    % put player_health
 
    % put enemy_alive
 
    %put "COUNTER: ", animation_counter
 
    %put "SHOT: ", shot
 
    %put animation_counter
 
    put hitting_time
 
 
end weapon_firing
 
 
proc reloading
 
    if mouse.button = 100 and weapon_ammo < max_weapon_ammo then
 
        animation_counter := 0
 
        shot := false
 
        reloading_counter := reloading_counter + 1
 
        if_reloading := true
 
        Draw.Box ((maxx div 2) - 50, maxy div 2 - 60, maxx div 2 + 57, maxy div 2 - 40, blue)
 
        Draw.FillBox ((maxx div 2) - 49, maxy div 2 - 59, maxx div 2 - 49 + (reloading_counter * 7), maxy div 2 - 41, red)
 
    else
 
        if_reloading := false
 
        reloading_counter := 0
 
    end if
 
    if reloading_counter = 9 then
 
        Music.PlayFileReturn ("reload.wav")
 
    end if
 
    if reloading_counter >= 15 then
 
        weapon_ammo := max_weapon_ammo
 
        reloading_counter := 0
 
        if_reloading := false
 
    end if
 
end reloading
 
 
proc scoring
 
    if enemy_alive = false then
 
        score_int := score_int + enemy_value
 
    end if
 
    if animation_counter = 1 then
 
        score_int := score_int + (weapon_class * -2)
 
    end if
 
    if score_int not= 0 and enemy_alive = false then
 
        score_int := score_int + enemy_value + difficulty_choice
 
    end if
 
end scoring
 
 
proc close_window
 
    Window.Close (window)
 
    GUI.Quit
 
end close_window
 
 
proc main_line
 
    setpriority (2 ** 15 - 1)
 
    loop
 
        View.Set ("nooffscreenonly")
 
        cls
 
        select_map
 
        select_gun
 
        select_difficulty
 
        Music.PlayFileReturn ("prepare.wav")
 
        View.Set ("offscreenonly")
 
        loop
 
            cls
 
            scoring
 
            Draw.Text (intstr (weapon_ammo), maxx div 2, maxy - 20, font, blue)
 
            Draw.Text ("Score: " + intstr (score_int), (maxx div 2) + 500, maxy - 20, font, blue)
 
            locate (3, 4)
 
            %put if_reloading, "  ", reloading_counter
 
            Draw.Text ("Health: " + intstr (player_health) + "%", (maxx div 2) - 630, maxy - 20, font, blue)
 
            enemies_appear
 
            weapon_movement
 
            weapon_firing
 
            reloading
 
            View.Update
 
            delay (5)
 
            exit when player_health <= 0
 
        end loop
 
        cls
 
        Draw.Text (intstr (weapon_ammo), maxx div 2, maxy - 20, font, blue)
 
        Draw.Text ("Score: " + intstr (score_int), (maxx div 2) + 500, maxy - 20, font, blue)
 
        locate (3, 4)
 
        %put if_reloading, "  ", reloading_counter
 
        if player_health <= 0 then
 
            Draw.Text ("Health: 0%", (maxx div 2) - 630, maxy - 20, font, blue)
 
        end if
 
        scoring
 
        enemies_appear
 
        weapon_movement
 
        weapon_firing
 
        reloading
 
        View.Update
 
        delay (500)
 
        new_value
 
    end loop
 
end main_line
 
%include "maintitle.t" %play the main intro
 
Music.PlayFileStop
 
introduction := Pic.Scale (introduction, 1267, 953)
 
Pic.Draw (introduction, 0, 0, picMerge)
 
done := GUI.CreateButton (maxx div 2, maxy div 2, 0, "PLAY",
 
    main_line)
 
quitBtn := GUI.CreateButton (maxx div 2, maxy div 2 - 50, 0, "Quit", close_window)
 
loop
 
    exit when GUI.ProcessEvent
 
end loop
 
  |