
-----------------------------------
WhatDotColourMaster
Mon Dec 05, 2005 4:35 pm

FINALLY DONE PONG!!!!!!!!!!!!!!!!!!
-----------------------------------
Well, This is IT!!!!! I finally finished PONG RPG. I know many of you might have already done this but im excited because it took me a long time(trust me) to figure out this(especially the variables).I recomended many kids in my class to check this site out, so they could learn from this site. Well have fun playing PONG.

Any Comments always appreciated...


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%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 