%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%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 <= 435
then
paddle := paddle + 15
end if
elsif key1 = "a" or key1 = "A"
then
%Restrictions to stop paddle from going on the lower panel%
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 <= 150 and distance > 70
then
paddlespeed := 5 * round ( (difficult / multi))
elsif distance <= 70
then
paddlespeed := 7 * round ( (difficult / multi))
else
paddlespeed := 4 * round ( (difficult / multi))
end if
elsif difficult = 3
then
if distance <= 60 and distance > 20
then
paddlespeed := 5 * round ( (difficult / multi))
elsif distance <= 20
then
paddlespeed := 7 * round ( (difficult / multi))
else
paddlespeed := 4 * round ( (difficult / multi))
end if
end if
randint (error, 1, errormax)
if error not= 1
then
if bally > paddle1
then
paddle1 := paddle1 + paddlespeed
elsif bally < paddle1
then
paddle1 := paddle1 - paddlespeed
end if
end if
drawfillbox (610, paddle1 - 40, 620, paddle1 + 40, 2)
delay (bdelay)
end if
end loop
end computerai
process check
loop
if gameon = true
then
var yeah : int
if PU = true
then
yeah := 2
else
yeah := 1
end if
if right = true
then
ballx := (ballx + xchange) * yeah
if up = true
then
bally := (bally + ychange) * yeah
else
bally := (bally - ychange) * yeah
end if
else
ballx := ballx - xchange
if up = true
then
bally := bally + ychange
else
bally := bally - ychange
end if
end if
if ballx >= (maxx - 10) %HITS RIGHT SIDE%
then
point := point + 1
ballreset
elsif ballx <= 10 %HITS LEFT SIDE%
then
%Checks for Integrated Defence being active
if backbarrier = true
then
var joe : int
randint (joe, 1, 3)
if joe = 1
then
barrier := true
end if
end if
if barrier = false
then
point1 := point1 + 1
ballreset
else
right := true
end if
if backbarrier = true and barrier = true
then
barrier := false
end if
end if
if bally >= (maxy - 10)
then
up := false
elsif bally <= 100
then
up := true
end if
%locatexy (5, 470)
%put hits
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%COLLISION CHECKER-DO NOT MODIFY!!!%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%collision check for computer paddle
if ballx >= 600 and ballx <= 610
then
%Lower checker
if bally >= 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 <= paddle1 + 25
then
right := false
end if
%Upper checker
if bally <= 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
hits := hits + 1
end if
%collision check for PLAYER paddle
if ballx >= 30 and ballx <= 40
then
%Lower checker
if bally >= 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 <= paddle + 25
then
right := true
end if
%Upper checker
if bally <= 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
hits := hits + 1
end if
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%END COLLISION CHECKER%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if hits not= 0
then
if ok = true
then
if hits mod 5 = 0
then
if speed not= 1
then
ok := false
speed := speed - 2
else
ok := true
end if
end if
end if
end if
if point = 4
then
if already = false
then
currabil := currabil + 1
already := true
change := true
end if
end if
if point = 8
then
if already = false
then
currabil := currabil + 1
change := true
already := true
end if
end if
delay (speed)
end if
end loop
end check
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%CALLING THE PROCEDURES/FUNCTIONS/PROCESSES%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
intro
afterintro
background
fork computerai
fork check
fork playercontrol
fork cooldowncount
fork backmusic
ball |