
-----------------------------------
Papageorgeo
Mon Sep 08, 2003 10:33 pm

Pong RPG
-----------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%PONG RPG Final Version 1.01%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


setscreen ("graphics:vga,nocursor,noecho,title:Pong RPG")
cls


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%VARIABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


var ballx, bally, font, font2, font3, point, point1 : int := 100
var level1, level2, speed, paddle1, paddle, difficult, bdelay : int := 1
var xchange, ychange, hits, txc, tyc, font1 : int := 5
var plength1, plength2 : real := 20
var cooldowns : array 1 .. 9 of int
var first, right, up, freezed, ok, abil, gameon : boolean := true
var key, key1 : string (1)
var font4, font5, font6, choice : int
font4 := Font.New ("Arial:100:bold")
font5 := Font.New ("Arial:80:bold")
font := Font.New ("Arial:20:bold")
font1 := Font.New ("Arial:15:bold")
font6 := Font.New ("Arial:40:bold")
font2 := Font.New ("Arial:10")
font3 := Font.New ("Arial:7")
var name : array 1 .. 9 of string
point1 := 0
point := 0
hits := 0
paddle1 := 250
paddle := 250
speed := 15

var barrier, backbarrier, PU, change, already, able : boolean := false
var error, distance, paddlespeed, errormax, currabil, cooldown : int
var multi : real

name (1) := "Panic"
name (2) := "Super Panic"
name (3) := "Integrated Defence"
name (4) := "Angles"
name (5) := "Weighted Ball"
name (6) := "Freeze"
name (7) := "Slow"
name (8) := "Really Slow"
name (9) := "Public Enemy"
cooldowns (1) := 60000
cooldowns (2) := 60000
cooldowns (3) := 0
cooldowns (4) := 30000
cooldowns (5) := 45000
cooldowns (6) := 90000
cooldowns (7) := 60000
cooldowns (8) := 60000
cooldowns (9) := 60000



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%BACKGROUND%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


procedure gameover
    if point = 10
            then
        cls
        loop
            Font.Draw ("YOU WIN!!", 50, 200, font4, 9)
            Font.Draw ("YOU WIN!!", 53, 203, font4, 12)
            Font.Draw ("YOU WIN!!", 56, 206, font4, 10)
            Font.Draw ("YOU WIN!!", 59, 209, font4, 14)
            delay (200)
            cls
            Font.Draw ("YOU WIN!!", 50, 200, font4, 12)
            Font.Draw ("YOU WIN!!", 53, 203, font4, 10)
            Font.Draw ("YOU WIN!!", 56, 206, font4, 14)
            Font.Draw ("YOU WIN!!", 59, 209, font4, 9)
            delay (200)
            cls
            Font.Draw ("YOU WIN!!", 50, 200, font4, 10)
            Font.Draw ("YOU WIN!!", 53, 203, font4, 14)
            Font.Draw ("YOU WIN!!", 56, 206, font4, 9)
            Font.Draw ("YOU WIN!!", 59, 209, font4, 12)
            delay (200)
            cls
        end loop
    elsif point1 = 10
            then
        cls
        loop
            Font.Draw ("YOU LOSE!!", 50, 200, font4, 9)
            Font.Draw ("YOU LOSE!!", 53, 203, font4, 12)
            Font.Draw ("YOU LOSE!!", 56, 206, font4, 10)
            Font.Draw ("YOU LOSE!!", 59, 209, font4, 14)
            delay (200)
            cls
            Font.Draw ("YOU LOSE!!", 50, 200, font4, 12)
            Font.Draw ("YOU LOSE!!", 53, 203, font4, 10)
            Font.Draw ("YOU LOSE!!", 56, 206, font4, 14)
            Font.Draw ("YOU LOSE!!", 59, 209, font4, 9)
            delay (200)
            cls
            Font.Draw ("YOU LOSE!!", 50, 200, font4, 10)
            Font.Draw ("YOU LOSE!!", 53, 203, font4, 14)
            Font.Draw ("YOU LOSE!!", 56, 206, font4, 9)
            Font.Draw ("YOU LOSE!!", 59, 209, font4, 12)
            delay (200)
            cls
        end loop
    end if
end gameover

procedure background
    drawfillbox (0, 0, 640, 90, 15)
    drawfillbox (2, 2, 638, 88, 7)
    drawfillbox (2, 2, 270, 88, 1)
    drawfilloval (270, 45, 20, 43, 1)
    drawfillbox (370, 2, 638, 88, 2)
    drawfilloval (370, 45, 20, 43, 2)
    drawfilloval (320, 45, 10, 10, 14)
    Font.Draw ("Pong", 297, 60, font, 0)
    Font.Draw ("Pong", 298, 61, font, 15)
    Font.Draw ("RPG", 300, 10, font, 0)
    Font.Draw ("RPG", 301, 11, font, 15)
    Font.Draw ("Current Ability:", 20, 60, font, 15)
    Font.Draw (name (currabil), 90, 30, font, 8)
    Font.Draw (name (currabil), 92, 31, font, 14)
    Font.Draw ("Time Left Until Next Usage:", 10, 10, font2, 15)
    cooldown := cooldowns (currabil)
    Font.Draw (intstr (round (cooldown / 1000)) + " Seconds", 145, 10,
        font2, 12)
end background


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%PROCEDURES/PROCESSES/FUNCTIONS%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

process gameovermusic
    loop
        if gameon = false
                then
            Music.PlayFile ("gameover.wav")
        end if
    end loop
end gameovermusic

process backmusic
    loop
        if gameon = true
                then
            Music.PlayFile ("Back.wav")
            delay (500)
        end if
    end loop
end backmusic

process intromusic
    Music.PlayFile ("intro.wav")
end intromusic

procedure intro
    fork intromusic
    delay (2500)
    for i : 1 .. 500
        Font.Draw ("PONG!!", - 400 + i, 220, font4, 15)
        delay (1)
        drawfillbox ( - 410 + i, 220, i, 500, 0)
        %Font.Draw ("PONG!!", - 400 + i, 220, font4, 0)
    end for

    Font.Draw ("PONG!!", 100, 220, font4, 15)
    delay (1900)
    Font.Draw ("RPG", 290, 130, font5, 1)
    delay (1700)
    Font.Draw ("RPG", 293, 133, font5, 9)
    delay (410)
    Font.Draw ("RPG", 287, 133, font5, 9)
    delay (410)
    Font.Draw ("RPG", 293, 130, font5, 9)
    delay (410)
    Font.Draw ("RPG", 287, 130, font5, 9)
    delay (2000)
    Font.Draw ("Press Any Key To Continue...", 50, 60, font, 15)
    getch (key)
    cls
end intro

procedure afterintro
    Font.Draw ("Choose A Difficulty Setting", 40, 300, font6, 1)
    Font.Draw ("Choose A Difficulty Setting", 43, 303, font6, 9)
    Font.Draw ("1. Easy", 40, 240, font6, 12)
    Font.Draw ("2. Normal", 40, 180, font6, 12)
    Font.Draw ("3. ARE YOU INSANE?!", 40, 120, font6, 12)
    getch (key)
    if key = "1" or key = "2" or key = "3"
            then
        difficult := strint (key)
    else
        difficult := 3
    end if
    cls
    Font.Draw ("Choose An Ability To Master", 0, 400, font6, 1)
    Font.Draw ("Choose An Ability To Master", 3, 403, font6, 9)
    Font.Draw ("1. Defence", 40, 240, font6, 12)
    Font.Draw ("2. Ball Manipulation", 40, 180, font6, 12)
    Font.Draw ("3. Offence", 40, 120, font6, 12)
    getch (key)
    if key = "1" or key = "2" or key = "3"
            then
        choice := strint (key)
    else
        choice := 2
    end if

    if key = "1"
            then
        currabil := 1
    elsif key = "2"
            then
        currabil := 4
    elsif key = "3"
            then
        currabil := 7
    end if
    Music.PlayFile ("stop.wav")
end afterintro

process abilities
    if able = true
            then
        %%%%%PANIC%%%%%
        if currabil = 1
                then
            barrier := true
            Font.Draw ("Barrier Active", 160, 35, font1, 12)
            delay (5000)
            Font.Draw ("Barrier Active", 160, 35, font1, 1)
            barrier := false
            %%%%%ADVANCED PANIC%%%%%
        elsif currabil = 2
                then
            Font.Draw ("Barrier Active", 160, 35, font1, 12)
            barrier := true
            delay (10000)
            Font.Draw ("Barrier Active", 160, 35, font1, 1)
            barrier := false
            %%%%%INTEGRATED DEFENCE%%%%%
        elsif currabil = 3
                then
            backbarrier := true
            %%%%%ANGLES%%%%%
        elsif currabil = 4
                then
            xchange := 5
            ychange := 5
            %%%%%WEIGHTED BALL%%%%%
        elsif currabil = 5
                then
            speed := speed * 2
            delay (5000)
            speed := round (speed / 1.5)
            %%%%%FREEZE%%%%%
        elsif currabil = 6
                then
            txc := xchange
            tyc := ychange
            xchange := 0
            ychange := 0
            delay (2000)
            xchange := txc
            ychange := tyc
            %%%%%SLOW%%%%%
        elsif currabil = 7
                then
            multi := multi * 2
            delay (2000)
            multi := multi / 2
            %%%%%REALLY SLOW%%%%%
        elsif currabil = 8
                then
            multi := multi * 3
            delay (2000)
            multi := round (multi / 3)
            %%%%%PUBLIC ENEMY%%%%%
        elsif currabil = 9
                then
            PU := true
            delay (10000)
            PU := false
        end if
        able := false
        cooldown := cooldowns (currabil)
    end if
end abilities

process playercontrol
    loop
        if gameon = true
                then
            getch (key1)
            if key1 = "q" or key1 = "Q"
                    then
                %Restrictions to stop paddle from going off screen%
                if paddle = 145
                        then
                    paddle := paddle - 15
                end if
            end if


            if key1 = "z" or key = "Z"
                    then
                fork abilities
            end if


            delay (1)
        end if
    end loop
end playercontrol

procedure ballreset
    ballx := 320
    bally := 300
    paddle1 := 200
    paddle := 300
    speed := 15
    xchange := 5
    ychange := 5
    right := true
    up := true

    getch (key)
end ballreset

process cooldowncount
    loop
        if gameon = true
                then
            Font.Draw ("Time Left Until Next Usage:", 10, 10, font2, 15)
            Font.Draw (intstr (round (cooldown / 1000)) + " Seconds", 145,
                10,
                font2, 12)
            delay (1000)
            if gameon = true
                    then
                if cooldown - 1000 >= 0
                        then
                    cooldown := cooldown - 1000
                end if
                drawfillbox (145, 10, 190, 25, 1)
                Font.Draw ("Time Left Until Next Usage:", 10, 10, font2, 15)
                if currabil not= 3
                        then
                    Font.Draw (intstr (round (cooldown / 1000)) + " Seconds",
                        145,
                        10,
                        font2, 12)
                else
                    Font.Draw ("Passive", 145, 10, font2, 9)
                end if
                if cooldown = 0
                        then
                    able := true
                end if
            end if
        end if
    end loop
end cooldowncount

procedure ball
    loop
        drawfilloval (ballx, bally, 10, 10, 14)
        delay (10)
        drawfillbox (0, 90, 640, 480, 0)
        drawfillbox (610, paddle1 - 40, 620, paddle1 + 40, 2)
        drawfillbox (30, paddle - 40, 20, paddle + 40, 1)
        drawfillbox (640, 88, 0, 90, 15)
        drawfillbox (370, 2, 638, 88, 2)
        drawfillbox (2, 85, 270, 88, 1)
        if change = true
                then
            drawfillbox (2, 2, 270, 88, 1)
            change := false
            cooldown := cooldowns (currabil)
            Font.Draw (name (currabil), 90, 30, font, 8)
            Font.Draw (name (currabil), 92, 31, font, 14)
            Font.Draw ("Current Ability:", 20, 60, font, 15)
            able := false
        elsif change = false
                then
            Font.Draw (name (currabil), 90, 30, font, 8)
            Font.Draw (name (currabil), 92, 31, font, 14)
        end if

        Font.Draw ( (intstr (point)), 10, 450, font, 1)
        Font.Draw ( (intstr (point)), 11, 452, font, 9)
        Font.Draw ( (intstr (point1)), 615, 450, font, 2)
        Font.Draw ( (intstr (point1)), 616, 452, font, 10)

        if point = 10 or point1 = 10
                then
            gameon := false
            Music.PlayFile ("stop.wav")
            fork gameovermusic
            gameover
        end if

    end loop
end ball

if difficult = 1 or difficult = 2
        then
    multi := 1.6
else
    multi := 1.9
end if

process computerai
    %%Stupid computer AI...too much programming
    if difficult = 1
            then
        bdelay := 30
        errormax := 10
    elsif difficult = 2
            then
        bdelay := 25
        errormax := 15
    elsif difficult = 3
            then
        bdelay := 20
        errormax := 20
    end if

    loop
        if gameon = true
                then
            distance := 600 - ballx

            if difficult = 1 or difficult = 2
                    then
                if distance  70
                        then
                    paddlespeed := 5 * round ( (difficult / multi))
                elsif distance = (maxx - 10) %HITS RIGHT SIDE%
                    then
                point := point + 1
                ballreset

            elsif ballx = (maxy - 10)
                    then
                up := false
            elsif bally = 600 and ballx = paddle1 - 40 and bally < paddle1 - 25
                        then
                    if up = true and right = true
                            then
                        ychange := ychange - 1
                    elsif up = false and right = true
                            then
                        ychange := ychange + 1
                    end if
                    right := false
                end if

                %Middle checker
                if bally >= paddle1 - 25 and bally = 30 and ballx = paddle - 40 and bally < paddle - 25
                        then
                    if up = true and right = false
                            then
                        ychange := ychange - 1
                    elsif up = false and right = false
                            then
                        ychange := ychange + 1
                    end if
                    right := true
                end if

                %Middle checker
                if bally >= paddle - 25 and bally 