|
|
@@ -0,0 +1,479 @@ |
|
|
|
function reversegame(dt) |
|
|
|
player1.height = ballSpeed/2 |
|
|
|
player2.height = ballSpeed/2 |
|
|
|
if (player1.y < ball[1].y)then |
|
|
|
player1.y = player1.y + ballSpeed/50 |
|
|
|
elseif(player1.y > ball[1].y)then |
|
|
|
player1.y = player1.y - ballSpeed/50 |
|
|
|
end |
|
|
|
if (player2.y < ball[1].y) then |
|
|
|
player2.y = player2.y + ballSpeed/50 |
|
|
|
|
|
|
|
elseif(player2.y > ball[1].y) then |
|
|
|
player2.y = player2.y - ballSpeed/50 |
|
|
|
end |
|
|
|
if player1nukescore > 300 then |
|
|
|
player1nukescore = 300 |
|
|
|
end |
|
|
|
if player2nukescore > 300 then |
|
|
|
player2nukescore = 300 |
|
|
|
end |
|
|
|
speedControl() |
|
|
|
balancer() |
|
|
|
|
|
|
|
if t < shakeDuration then |
|
|
|
t = t + dt |
|
|
|
end |
|
|
|
print("T = " .. tostring(t)) |
|
|
|
serveBot() |
|
|
|
if gameState == 'play' then |
|
|
|
if (AGAINST_AI == 1) then |
|
|
|
for i = 1, maxBalls do |
|
|
|
if (ball[i].y - player2.y >= 50 and player2.x - ball[i].x < AI_LEVEL) then |
|
|
|
player2.dy = AI_SPEED |
|
|
|
elseif (player2.y - ball[i].y >= -20 and player2.x - ball[i].x < AI_LEVEL) then |
|
|
|
player2.dy = -AI_SPEED |
|
|
|
else |
|
|
|
player2.dy = 0 |
|
|
|
end |
|
|
|
if |
|
|
|
difficultyl == 350 and player2reverbav == true and VIRTUAL_WIDTH - ball[i].x < 90 and |
|
|
|
math.abs(ball[i].y - player2.y) > 150 |
|
|
|
then |
|
|
|
sounds["time"]:play() |
|
|
|
player2reverbav = false |
|
|
|
timeIsSlow2 = true |
|
|
|
originalPaddle = paddle_SPEED |
|
|
|
originalSpeed = ballSpeed |
|
|
|
player2reverbav = 0 |
|
|
|
potentialnuke2 = 0 |
|
|
|
potentialstrike2 = 0 |
|
|
|
end |
|
|
|
|
|
|
|
if (player2nukescore > AI_STRIKEMOD and striken == 0) then |
|
|
|
player2striken = 1 |
|
|
|
elseif (player2nukescore > AI_NUKEMOD and striken == 1) then |
|
|
|
if (areanuclear == 1) then |
|
|
|
maxspeed = maxspeed + 50 |
|
|
|
end |
|
|
|
sounds["nuke"]:play() |
|
|
|
potentialstrike2 = 0 |
|
|
|
areanuclear = 1 |
|
|
|
ballSpeed = ballSpeed * 2 |
|
|
|
if (synctype == 0) then |
|
|
|
paddle_SPEED = paddle_SPEED * 2 |
|
|
|
end |
|
|
|
if (synctype == 1) then |
|
|
|
paddle_SPEED = ballSpeed / 10 |
|
|
|
end |
|
|
|
if (synctype == 0) then |
|
|
|
AI_SPEED = AI_SPEED * 2.2 |
|
|
|
end |
|
|
|
if (synctype == 1) then |
|
|
|
AI_SPEED = ballSpeed * 1.1 / 10 |
|
|
|
end |
|
|
|
player2nukescore = 0 |
|
|
|
player2reverbav = 0 |
|
|
|
potentialnuke2 = 0 |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
if (love.keyboard.isDown(p1control.up)) then |
|
|
|
player1.dy = (paddle_SPEED + p1bonus) * -1 |
|
|
|
elseif (love.keyboard.isDown(p1control.down)) then |
|
|
|
player1.dy = paddle_SPEED + p1bonus |
|
|
|
else |
|
|
|
player1.dy = 0 |
|
|
|
end |
|
|
|
if (AGAINST_AI == 0) then |
|
|
|
if (love.keyboard.isDown(p2control.up)) then |
|
|
|
player2.dy = (paddle_SPEED + p2bonus) * -1 |
|
|
|
elseif (love.keyboard.isDown(p2control.down)) then |
|
|
|
player2.dy = paddle_SPEED + p2bonus |
|
|
|
else |
|
|
|
player2.dy = 0 |
|
|
|
end |
|
|
|
end |
|
|
|
print(areanuclear .. striken .. player1score .. player2score) |
|
|
|
for i = 1, maxBalls do |
|
|
|
print(ball[i].x .. "BALLS") |
|
|
|
if ball[i].x < 0 then |
|
|
|
|
|
|
|
if (areanuclear == 0 and striken == 1 and (player1score > ptw-2 or player2score > ptw-2)) then |
|
|
|
print("Calling animation") |
|
|
|
superanimator("tensehit", 1) |
|
|
|
end |
|
|
|
if gameMode == "practice" then |
|
|
|
player1score = player1score + 1 |
|
|
|
end |
|
|
|
t = 0 |
|
|
|
if (ballSpeed > 200) then |
|
|
|
shakeMagnitude = ballSpeed / 200 |
|
|
|
else |
|
|
|
shakeMagnitude = 0 |
|
|
|
end |
|
|
|
shakeDuration = 1 |
|
|
|
randomtext = love.math.random(1, #textphrases) |
|
|
|
TEXT = textphrases[randomtext] |
|
|
|
soundtype = love.math.random(1, 1.2) |
|
|
|
|
|
|
|
if (player1striken == 1) then |
|
|
|
TEXT = "PLAYER 1 STRIKES" |
|
|
|
ballSpeed = ballSpeed + player1nukescore |
|
|
|
potentialnuke1 = 0 |
|
|
|
player1striken = 0 |
|
|
|
player1nukescore = 0 |
|
|
|
potentialstrike1 = 0 |
|
|
|
striken = 1 |
|
|
|
if areanuclear == 0 then |
|
|
|
sounds["striking"]:setPitch(ballSpeed / 250) |
|
|
|
sounds["striking"]:play() |
|
|
|
else |
|
|
|
sounds["nuclearhit"]:setPitch(1) |
|
|
|
sounds["nuclearhit"]:play() |
|
|
|
end |
|
|
|
superanimator("tensehit", 1) |
|
|
|
else |
|
|
|
if areanuclear == 0 then |
|
|
|
sounds["beep"]:setPitch(ballSpeed / 250) |
|
|
|
sounds["beep"]:play() |
|
|
|
else |
|
|
|
sounds["nuclearhit"]:setPitch(1) |
|
|
|
sounds["nuclearhit"]:play() |
|
|
|
end |
|
|
|
end |
|
|
|
if (striken == 1) then |
|
|
|
|
|
|
|
player1nukescore = player1nukescore * 1.2 |
|
|
|
if (synctype == 0) then |
|
|
|
paddle_SPEED = paddle_SPEED * 1.10 |
|
|
|
elseif (synctype == 1) then |
|
|
|
paddle_SPEED = ballSpeed / 10 |
|
|
|
end |
|
|
|
if (synctype == 0) then |
|
|
|
AI_SPEED = AI_SPEED * 1.10 |
|
|
|
end |
|
|
|
if (synctype == 1) then |
|
|
|
AI_SPEED = ballSpeed * 1.1 / 10 |
|
|
|
end |
|
|
|
ballSpeed = ballSpeed * 1.10 |
|
|
|
end |
|
|
|
player1nukescore = player1nukescore + 10 |
|
|
|
ball[i].dx = -ball[i].dx |
|
|
|
ball[i].x = player1.x + 30 |
|
|
|
|
|
|
|
if (love.keyboard.isDown(p1control.up)) then |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = -1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = -1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = -1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = -1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = -2 |
|
|
|
end |
|
|
|
elseif love.keyboard.isDown(p1control.down) then |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = 1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = 1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = 1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = 1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = 2 |
|
|
|
end |
|
|
|
else |
|
|
|
if ball[i].dy < 0 then |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = -1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = -1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = -1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = -1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = -2 |
|
|
|
end |
|
|
|
else |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = 1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = 1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = 1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = 1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = 2 |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
if ball[i].x > VIRTUAL_WIDTH-10 then |
|
|
|
--ameState = 'quickanim' |
|
|
|
t = 0 |
|
|
|
shakeDuration = 1 |
|
|
|
if |
|
|
|
(areanuclear == 0 and |
|
|
|
(striken == 1 and (player1score > ptw-2 or player2score > ptw-2))) |
|
|
|
then |
|
|
|
superanimator("tensehit", 2) |
|
|
|
end |
|
|
|
if (ballSpeed > 200) then |
|
|
|
shakeMagnitude = ballSpeed / 200 |
|
|
|
else |
|
|
|
shakeMagnitude = 0 |
|
|
|
end |
|
|
|
randomtext = love.math.random(1, #textphrases) |
|
|
|
TEXT = textphrases[randomtext] |
|
|
|
soundtype = love.math.random(1, 1.2) |
|
|
|
|
|
|
|
if (player2striken == 1) then |
|
|
|
TEXT = "PLAYER 2 STRIKES" |
|
|
|
ballSpeed = ballSpeed + player2nukescore |
|
|
|
striken = 1 |
|
|
|
player2striken = 0 |
|
|
|
potentialnuke2 = 0 |
|
|
|
player2nukescore = 0 |
|
|
|
potentialstrike2 = 0 |
|
|
|
superanimator("tensehit", 2) |
|
|
|
if areanuclear == 0 then |
|
|
|
sounds["striking"]:setPitch(ballSpeed / 250) |
|
|
|
sounds["striking"]:play() |
|
|
|
else |
|
|
|
sounds["nuclearhit"]:setPitch(1) |
|
|
|
sounds["nuclearhit"]:play() |
|
|
|
end |
|
|
|
elseif (striken == 1) then |
|
|
|
|
|
|
|
player2nukescore = player2nukescore * 1.5 |
|
|
|
if (synctype == 0) then |
|
|
|
paddle_SPEED = paddle_SPEED * 1.10 |
|
|
|
end |
|
|
|
if (synctype == 1) then |
|
|
|
paddle_SPEED = ballSpeed / 10 |
|
|
|
end |
|
|
|
if (synctype == 0) then |
|
|
|
AI_SPEED = AI_SPEED * 1.10 |
|
|
|
end |
|
|
|
if (synctype == 1) then |
|
|
|
AI_SPEED = ballSpeed * 1.1 / 10 |
|
|
|
end |
|
|
|
ballSpeed = ballSpeed * 1.10 |
|
|
|
if areanuclear == 0 then |
|
|
|
sounds["beep"]:setPitch(ballSpeed / 250) |
|
|
|
sounds["beep"]:play() |
|
|
|
else |
|
|
|
sounds["nuclearhit"]:setPitch(1) |
|
|
|
sounds["nuclearhit"]:play() |
|
|
|
end |
|
|
|
else |
|
|
|
if areanuclear == 0 then |
|
|
|
sounds["beep"]:setPitch(ballSpeed / 250) |
|
|
|
sounds["beep"]:play() |
|
|
|
else |
|
|
|
sounds["nuclearhit"]:setPitch(1) |
|
|
|
sounds["nuclearhit"]:play() |
|
|
|
end |
|
|
|
end |
|
|
|
player2nukescore = player2nukescore + 10 |
|
|
|
ball[i].dx = -ball[i].dx |
|
|
|
ball[i].x = player2.x - 30 |
|
|
|
|
|
|
|
if (love.keyboard.isDown(p2control.up) or AI_SPEED < 0) then |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = -1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = -1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = -1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = -1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = -2 |
|
|
|
end |
|
|
|
elseif love.keyboard.isDown(p2control.down) or AI_SPEED > 0 then |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = 1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = 1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = 1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = 1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = 2 |
|
|
|
end |
|
|
|
else |
|
|
|
if ball[i].dy < 0 then |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = -1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = -1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = -1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = -1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = -2 |
|
|
|
end |
|
|
|
else |
|
|
|
select = math.random(1, 5) |
|
|
|
if select == 1 then |
|
|
|
ball[i].dy = 1 |
|
|
|
elseif select == 2 then |
|
|
|
ball[i].dy = 1.2 |
|
|
|
elseif select == 3 then |
|
|
|
ball[i].dy = 1.5 |
|
|
|
elseif select == 4 then |
|
|
|
ball[i].dy = 1.8 |
|
|
|
elseif select == 5 then |
|
|
|
ball[i].dy = 2 |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
hitIdentifier() |
|
|
|
if ball[i].y <= 0 then |
|
|
|
soundtype = love.math.random(1, 5) |
|
|
|
sounds["wallhit"]:setPitch(ballSpeed / 250) |
|
|
|
sounds["wallhit"]:play() |
|
|
|
ball[i].y = 0 |
|
|
|
ball[i].dy = -ball[i].dy |
|
|
|
end |
|
|
|
|
|
|
|
-- -4 to account for the ball's size |
|
|
|
if ball[i].y >= VIRTUAL_HEIGHT - 40 then |
|
|
|
soundtype = love.math.random(1, 5) |
|
|
|
sounds["wallhit"]:setPitch(ballSpeed / 250) |
|
|
|
sounds["wallhit"]:play() |
|
|
|
ball[i].y = VIRTUAL_HEIGHT - 40 |
|
|
|
ball[i].dy = -ball[i].dy |
|
|
|
end |
|
|
|
--love.window.setTitle('Trying to update the ball') |
|
|
|
if timeIsSlow then |
|
|
|
if ballSpeed > originalSpeed / 3 then |
|
|
|
paddle_SPEED = 30 |
|
|
|
ballSpeed = ballSpeed / (1 + (dt * 2)) |
|
|
|
end |
|
|
|
player1nukescore = player1nukescore - (dt * 50) |
|
|
|
if player1nukescore < 1 or ball[1].dx > 0 then |
|
|
|
timeIsSlow = false |
|
|
|
player1reverbav = false |
|
|
|
ballSpeed = originalSpeed |
|
|
|
sounds["time"]:stop() |
|
|
|
paddle_SPEED = originalPaddle |
|
|
|
end |
|
|
|
end |
|
|
|
if timeIsSlow2 then |
|
|
|
if ballSpeed > originalSpeed / 3 then |
|
|
|
ballSpeed = ballSpeed / (1 + (dt * 2)) |
|
|
|
end |
|
|
|
player2nukescore = player2nukescore - (dt * 50) |
|
|
|
if player2nukescore < 1 or ball[1].dx < 0 then |
|
|
|
paddle_SPEED = 30 |
|
|
|
timeIsSlow2 = false |
|
|
|
player2reverbav = false |
|
|
|
ballSpeed = originalSpeed |
|
|
|
sounds["time"]:stop() |
|
|
|
paddle_SPEED = originalPaddle |
|
|
|
end |
|
|
|
end |
|
|
|
ball[i]:update(dt) |
|
|
|
end |
|
|
|
end |
|
|
|
goalManagerReverse() |
|
|
|
powerAvailability() |
|
|
|
player1:update(dt) |
|
|
|
player2:update(dt) |
|
|
|
end |
|
|
|
|
|
|
|
function goalManagerReverse() |
|
|
|
for i = 1, maxBalls do |
|
|
|
if (ball[i]:collides(player1)) then |
|
|
|
if (gameMode ~= "practice") then |
|
|
|
sounds["score"]:play() |
|
|
|
end |
|
|
|
if (nuckemodactive == 0) then |
|
|
|
areanuclear = 0 |
|
|
|
nuclearanimation = 3 |
|
|
|
end |
|
|
|
striken = 0 |
|
|
|
player1striken = 0 |
|
|
|
player2striken = 0 |
|
|
|
ballSpeed = ballSet |
|
|
|
if (synctype == 0) then |
|
|
|
paddle_SPEED = ballSet / 10 |
|
|
|
end |
|
|
|
if (synctype == 1) then |
|
|
|
paddle_SPEED = ballSpeed / 10 |
|
|
|
end |
|
|
|
|
|
|
|
AI_SPEED = difficultyl / 10 |
|
|
|
player2score = player2score + 1 |
|
|
|
if (player2score == ptw and gameMode ~= "practice") then |
|
|
|
for i = 1, maxBalls do |
|
|
|
ball[i]:reset(i) |
|
|
|
end |
|
|
|
sounds["win"]:play() |
|
|
|
gameState = "done" |
|
|
|
TEXT = "Player 2 Won!" |
|
|
|
else |
|
|
|
gameState = "1serve" |
|
|
|
serveBot() |
|
|
|
for i = 1, maxBalls do |
|
|
|
ball[i]:reset(i) |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
if (ball[i]:collides(player2)) then |
|
|
|
sounds["score"]:play() |
|
|
|
if (nuckemodactive == 0) then |
|
|
|
areanuclear = 0 |
|
|
|
nuclearanimation = 3 |
|
|
|
end |
|
|
|
striken = 0 |
|
|
|
player1striken = 0 |
|
|
|
player2striken = 0 |
|
|
|
ballSpeed = ballSet |
|
|
|
|
|
|
|
if (synctype == 0) then |
|
|
|
paddle_SPEED = ballSet / 10 |
|
|
|
AI_SPEED = ballSet / 10 |
|
|
|
end |
|
|
|
if (synctype == 1) then |
|
|
|
paddle_SPEED = ballSpeed / 10 |
|
|
|
AI_SPEED = ballSpeed / 10 |
|
|
|
end |
|
|
|
|
|
|
|
AI_SPEED = difficultyl / 10 |
|
|
|
player1score = player1score + 1 |
|
|
|
if (player1score == ptw) then |
|
|
|
ball[i]:reset(i) |
|
|
|
|
|
|
|
sounds["win"]:play() |
|
|
|
gameState = "done" |
|
|
|
TEXT = "Player 1 Won!" |
|
|
|
else |
|
|
|
gameState = "2serve" |
|
|
|
|
|
|
|
serveBot() |
|
|
|
|
|
|
|
ball[i]:reset(i) |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
|