@@ -9,6 +9,7 @@ function eball:init(x, y, width, height) | |||||
self.dy = math.random(-1, 1) | self.dy = math.random(-1, 1) | ||||
self.dx = 1 | self.dx = 1 | ||||
self.disabled = false | |||||
end | end | ||||
function eball:collides(paddle) | function eball:collides(paddle) | ||||
@@ -39,6 +40,7 @@ else | |||||
else | else | ||||
self.dx = ball_DIR | self.dx = ball_DIR | ||||
end | end | ||||
self.disabled = false | |||||
self.x = VIRTUAL_WIDTH /2 - 2 | self.x = VIRTUAL_WIDTH /2 - 2 | ||||
self.y = VIRTUAL_HEIGHT /2 - 2 | self.y = VIRTUAL_HEIGHT /2 - 2 | ||||
self.dy = math.random(-1, 1) | self.dy = math.random(-1, 1) | ||||
@@ -79,8 +81,10 @@ function eball:update(dt) | |||||
else | else | ||||
potentialnuke2 = 0 | potentialnuke2 = 0 | ||||
end | end | ||||
if self.disabled == false then | |||||
self.x = self.x + ballSpeed * self.dx * dt | self.x = self.x + ballSpeed * self.dx * dt | ||||
self.y = self.y + ballSpeed * self.dy * dt | |||||
self.y = self.y + ballSpeed * self.dy * dt | |||||
end | |||||
end | end | ||||
function eball:render(color) | function eball:render(color) | ||||
@@ -28,6 +28,7 @@ hitNum = {} | |||||
hitNum[1] = 0 | hitNum[1] = 0 | ||||
hitNum[2] = 0 | hitNum[2] = 0 | ||||
hitNum[3] = 0 | hitNum[3] = 0 | ||||
confirmation = "disconnected" | |||||
hitNum[4] = 0 | hitNum[4] = 0 | ||||
p1bonus = 0 | p1bonus = 0 | ||||
p2bonus = 0 | p2bonus = 0 | ||||
@@ -68,7 +69,9 @@ craz = 0 | |||||
AI_LEVEL = 500 | AI_LEVEL = 500 | ||||
isFullscreen = 0 | isFullscreen = 0 | ||||
prtext = "Easy" | prtext = "Easy" | ||||
lastSentKey = "c" | |||||
MAP_TYPE = 0 | MAP_TYPE = 0 | ||||
lastSentKeyClient = "c" | |||||
difficultyl = 300 | difficultyl = 300 | ||||
req = "pp" | req = "pp" | ||||
ballSet = 200 | ballSet = 200 | ||||
@@ -95,7 +98,7 @@ function balancer() | |||||
if (player2score == 9 or player1score == 9) then | if (player2score == 9 or player1score == 9) then | ||||
shakeDuration = 5 | shakeDuration = 5 | ||||
if debug then | if debug then | ||||
print("Shaking set to match almost over") | |||||
--print("Shaking set to match almost over") | |||||
end | end | ||||
end | end | ||||
if (player1score < player2score) then | if (player1score < player2score) then | ||||
@@ -140,7 +143,7 @@ function love.load() | |||||
configsave = io.open("config.lua", "w") | configsave = io.open("config.lua", "w") | ||||
shader = love.graphics.newShader(shader_code) | shader = love.graphics.newShader(shader_code) | ||||
time_1 = 0 | time_1 = 0 | ||||
print("Debug active") | |||||
--print("Debug active") | |||||
--load | --load | ||||
testwalls = love.filesystem.load("save.lua")() | testwalls = love.filesystem.load("save.lua")() | ||||
@@ -188,6 +191,28 @@ function love.load() | |||||
end | end | ||||
) | ) | ||||
) | ) | ||||
table.insert( | |||||
buttons, | |||||
newButton( | |||||
"Online Test", | |||||
function() | |||||
globalState = "nettest" | |||||
AGAINST_AI = 0 | |||||
gameState = "1serve" | |||||
end | |||||
) | |||||
) | |||||
table.insert( | |||||
buttons, | |||||
newButton( | |||||
"Client Test", | |||||
function() | |||||
globalState = "clienttest" | |||||
AGAINST_AI = 0 | |||||
gameState = "1serve" | |||||
end | |||||
) | |||||
) | |||||
table.insert( | table.insert( | ||||
buttons, | buttons, | ||||
newButton( | newButton( | ||||
@@ -548,7 +573,7 @@ function love.load() | |||||
"Reverse Play", | "Reverse Play", | ||||
function() | function() | ||||
gameState = "1serve" | gameState = "1serve" | ||||
globalState = "reverse" | |||||
gameMode = "reversegame" | |||||
end | end | ||||
) | ) | ||||
) | ) | ||||
@@ -679,13 +704,67 @@ function love.update(dt) | |||||
if globalState == "base" then | if globalState == "base" then | ||||
basegame(dt) | basegame(dt) | ||||
end | end | ||||
if globalState == "reverse" then | |||||
reversegame(dt) | |||||
end | |||||
if globalState == "menu" then | if globalState == "menu" then | ||||
debugCheck(dt) | debugCheck(dt) | ||||
end | end | ||||
if globalState == "nettest" then | |||||
basegame(dt) | |||||
nettest(dt) | |||||
end | |||||
if globalState == "clienttest" then | |||||
if confirmation ~= "disconnected" then | |||||
clientsBaseGame(dt) | |||||
end | |||||
clienttest(dt) | |||||
end | |||||
end | |||||
serverinit = false | |||||
clientinit = false | |||||
function nettest(dt) | |||||
if serverinit == false then | |||||
local socket = require('socket') | |||||
udp = socket.udp() | |||||
udp:setsockname('localhost', 142) | |||||
udp:settimeout(0) | |||||
serverinit = true | |||||
end | |||||
data, msg_or_ip, port_or_nil = udp:receivefrom() | |||||
if data then | |||||
print(data .. "FROM " .. msg_or_ip) | |||||
end | |||||
if data then | |||||
local p = split(data, '|') | |||||
lastSentKeyClient = p[1] | |||||
for i = 1, maxBalls do | |||||
print (tostring(ball[i].dy)) | |||||
udp:sendto(tostring(lastSentKey) ..'|'.. tostring(ball[i].dy) .. '|' .. tostring(player2.y) .. '|' .. tostring(player1.y) .. '|' .. tostring(player1score) .. '|' .. tostring(player2score) .. '|' .. tostring(player1nukescore) .. '|' .. tostring(player2nukescore), msg_or_ip, port_or_nil) | |||||
print("SENT: " .. lastSentKey) | |||||
end | |||||
end | |||||
end | |||||
function clienttest(dt) | |||||
if clientinit == false then | |||||
local socket = require "socket" | |||||
local address, port = "45.76.95.31", 12345 | |||||
udp = socket.udp() | |||||
udp:setpeername(address, port) | |||||
udp:settimeout(0) | |||||
clientinit = true | |||||
end | |||||
udp:send(tostring(lastSentKey)) | |||||
print(lastSentKey) | |||||
data = udp:receive() | |||||
print(data) | |||||
if data then | |||||
local p = split(data, '|') | |||||
for i = 1, maxBalls do | |||||
local die = tonumber(p[2]) | |||||
print(p[2]) | |||||
print(p[2] + 0) | |||||
lastSentKeyClient, ball[i].dy, player2.y, player1.y, player1score, player2score, player1nukescore, player2nukescore, confirmation = p[1], die, tonumber(p[3]), tonumber(p[4]), tonumber(p[5]), tonumber(p[6]), tonumber(p[7]), tonumber(p[8]), p[9] | |||||
end | |||||
end | |||||
end | end | ||||
function wallbreaker(x, y) | function wallbreaker(x, y) | ||||
if (gameState == "editor") then | if (gameState == "editor") then | ||||
@@ -806,6 +885,7 @@ function dangerChecker() --CHECK IF CONTROLS ARE DUPLICATING | |||||
end | end | ||||
end | end | ||||
function love.keypressed(key) | function love.keypressed(key) | ||||
lastSentKey = key | |||||
if gameState == "assign" then | if gameState == "assign" then | ||||
if (req == "p1up") then | if (req == "p1up") then | ||||
p1control.up = key | p1control.up = key | ||||
@@ -904,6 +984,9 @@ end | |||||
function love.keyreleased(key) | function love.keyreleased(key) | ||||
currentKey = " " | currentKey = " " | ||||
if lastSentKey == key then | |||||
lastSentKey = "g" | |||||
end | |||||
end | end | ||||
function speedSetter(requesttype) | function speedSetter(requesttype) | ||||
if (requesttype == "ball") then | if (requesttype == "ball") then | ||||
@@ -1208,13 +1291,13 @@ function love.wheelmoved(x, y) | |||||
end | end | ||||
function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SERVES | function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SERVES | ||||
print("servebot called") | |||||
--print("servebot called") | |||||
if (gameState == "1serve") then | if (gameState == "1serve") then | ||||
updateTEXT = "" | updateTEXT = "" | ||||
if (gameMode ~= "practice") then | if (gameMode ~= "practice") then | ||||
TEXT = "PLAYER 1, serve!(q)" | TEXT = "PLAYER 1, serve!(q)" | ||||
end | end | ||||
if (love.keyboard.isDown("q") or gameMode == "practice") then | |||||
if ((globalState ~= "clienttest" and love.keyboard.isDown("q")) or gameMode == "practice" or (lastSentKeyClient == "q" and globalState == "clienttest")) then | |||||
TEXT = "Lets Begin!" | TEXT = "Lets Begin!" | ||||
ball_DIR = 1 | ball_DIR = 1 | ||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
@@ -1236,7 +1319,7 @@ function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SE | |||||
gameState = "play" | gameState = "play" | ||||
end | end | ||||
if (love.keyboard.isDown("p") and AGAINST_AI == 0) then | |||||
if ((lastSentKeyClient == "p" or love.keyboard.isDown("p"))and AGAINST_AI == 0) then | |||||
TEXT = "Lets Begin" | TEXT = "Lets Begin" | ||||
ball_DIR = -1 | ball_DIR = -1 | ||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
@@ -1325,3 +1408,20 @@ function love.mousereleased(x, y, button) | |||||
end | end | ||||
end | end | ||||
end | end | ||||
function ballsAlive() | |||||
for i = 1, maxBalls do | |||||
if ball[i].disabled == false then | |||||
print("Ball " .. i .. " is not disabled") | |||||
return true | |||||
end | |||||
end | |||||
return false | |||||
end | |||||
function split(s, delimiter) | |||||
result = {} | |||||
for match in (s..delimiter):gmatch("(.-)"..delimiter) do | |||||
table.insert(result, match) | |||||
end | |||||
return result | |||||
end |
@@ -1,8 +1,8 @@ | |||||
function AI(target, ballCnt, diff) | function AI(target, ballCnt, diff) | ||||
currentTarget = evaluateClosestBall(target); | currentTarget = evaluateClosestBall(target); | ||||
print("CLOSEST TARGET IS " .. currentTarget) | |||||
--print("CLOSEST TARGET IS " .. currentTarget) | |||||
if diff < 1200 then | if diff < 1200 then | ||||
print ("Normal targeting ".. currentTarget .. " " .. target.x - ball[currentTarget].x .. " " .. ball[currentTarget].y - target.y) | |||||
--print ("Normal targeting ".. currentTarget .. " " .. target.x - ball[currentTarget].x .. " " .. ball[currentTarget].y - target.y) | |||||
if (ball[currentTarget].y - target.y >= target.height and target.x - ball[currentTarget].x < diff) then | if (ball[currentTarget].y - target.y >= target.height and target.x - ball[currentTarget].x < diff) then | ||||
target.dy = AI_SPEED | target.dy = AI_SPEED | ||||
elseif (target.y - ball[currentTarget].y >= -target.height/2 and target.x - ball[currentTarget].x < diff) then | elseif (target.y - ball[currentTarget].y >= -target.height/2 and target.x - ball[currentTarget].x < diff) then | ||||
@@ -11,11 +11,11 @@ function AI(target, ballCnt, diff) | |||||
target.dy = 0 | target.dy = 0 | ||||
end | end | ||||
else | else | ||||
print("Complex targeting") | |||||
--print("Complex targeting") | |||||
neededTarget = predictBall(ball[currentTarget], target.x) | neededTarget = predictBall(ball[currentTarget], target.x) | ||||
if neededTarget ~= -1 then | if neededTarget ~= -1 then | ||||
print("Calculated target = " .. neededTarget) | |||||
--print("Calculated target = " .. neededTarget) | |||||
if (target.y - neededTarget >= -target.height/2) then | if (target.y - neededTarget >= -target.height/2) then | ||||
target.dy = -AI_SPEED | target.dy = -AI_SPEED | ||||
elseif (neededTarget - target.y >= target.height*0.9) then | elseif (neededTarget - target.y >= target.height*0.9) then | ||||
@@ -78,27 +78,27 @@ function evaluateClosestBall(target) | |||||
return ans | return ans | ||||
end | end | ||||
function predictBall(target, px) | function predictBall(target, px) | ||||
print("BALLSTATS:" .. target.x .. " " .. target.y) | |||||
--print("BALLSTATS:" .. target.x .. " " .. target.y) | |||||
if VIRTUAL_WIDTH - target.x < AI_SPEED then | if VIRTUAL_WIDTH - target.x < AI_SPEED then | ||||
return target.y | return target.y | ||||
elseif target.dx > 0 then | elseif target.dx > 0 then | ||||
local ans = recursiveCalculations(px, target.x, target.y, target.dx, target.dy, 1) | local ans = recursiveCalculations(px, target.x, target.y, target.dx, target.dy, 1) | ||||
return ans | return ans | ||||
else | else | ||||
print("GO TO CENTER!!") | |||||
--print("GO TO CENTER!!") | |||||
return VIRTUAL_HEIGHT/2 | return VIRTUAL_HEIGHT/2 | ||||
end | end | ||||
end | end | ||||
function recursiveCalculations(px, ex, ey, edx, edy, ifspecial) | function recursiveCalculations(px, ex, ey, edx, edy, ifspecial) | ||||
if (edy > 0) then | if (edy > 0) then | ||||
print ("normal" .. ex .." " .. ey .. " " .. edx .. " " .. edy) | |||||
--print ("normal" .. ex .." " .. ey .. " " .. edx .. " " .. edy) | |||||
local time = (VIRTUAL_HEIGHT-ey) / (ballSpeed * edy) | local time = (VIRTUAL_HEIGHT-ey) / (ballSpeed * edy) | ||||
local distance = (ballSpeed * edx) * time | local distance = (ballSpeed * edx) * time | ||||
print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex)) | |||||
--print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex)) | |||||
if distance > (px - ex) then | if distance > (px - ex) then | ||||
local anstime = (px - ex) / (ballSpeed * edx) | local anstime = (px - ex) / (ballSpeed * edx) | ||||
local bonus = (ballSpeed * edy) * anstime | local bonus = (ballSpeed * edy) * anstime | ||||
print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex)) | |||||
--print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex)) | |||||
-- if (ifspecial == 0) then | -- if (ifspecial == 0) then | ||||
return ey + bonus | return ey + bonus | ||||
-- else | -- else | ||||
@@ -112,10 +112,10 @@ function recursiveCalculations(px, ex, ey, edx, edy, ifspecial) | |||||
elseif edy == 0 then | elseif edy == 0 then | ||||
return ey | return ey | ||||
else | else | ||||
print ("inverse" .. ex .." " .. ey .. " " .. edx .. " " .. edy) | |||||
--print ("inverse" .. ex .." " .. ey .. " " .. edx .. " " .. edy) | |||||
local time = (ey) / math.abs((ballSpeed * edy)) | local time = (ey) / math.abs((ballSpeed * edy)) | ||||
local distance = (ballSpeed * edx) * time | local distance = (ballSpeed * edx) * time | ||||
print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex)) | |||||
--print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex)) | |||||
--print("Why th efuck ") | --print("Why th efuck ") | ||||
@@ -123,7 +123,7 @@ function recursiveCalculations(px, ex, ey, edx, edy, ifspecial) | |||||
if distance > (px - ex) then | if distance > (px - ex) then | ||||
local anstime = (px - ex) / (ballSpeed * edx) | local anstime = (px - ex) / (ballSpeed * edx) | ||||
local bonus = (ballSpeed * edy) * anstime | local bonus = (ballSpeed * edy) * anstime | ||||
print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex)) | |||||
--print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex)) | |||||
-- if (ifspecial == 0) then | -- if (ifspecial == 0) then | ||||
return ey + bonus | return ey + bonus | ||||
-- else | -- else | ||||
@@ -132,7 +132,7 @@ function recursiveCalculations(px, ex, ey, edx, edy, ifspecial) | |||||
else | else | ||||
local emulatedx = ex + distance | local emulatedx = ex + distance | ||||
local emulatedy = 0 | local emulatedy = 0 | ||||
-- print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (VIRTUAL_WIDTH-ex)) | |||||
----print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (VIRTUAL_WIDTH-ex)) | |||||
return recursiveCalculations(px, emulatedx, emulatedy, edx, -edy, 0) | return recursiveCalculations(px, emulatedx, emulatedy, edx, -edy, 0) | ||||
end | end | ||||
end | end |
@@ -1,4 +1,7 @@ | |||||
function basegame(dt) | function basegame(dt) | ||||
if gameMode == "reverse" then | |||||
reversegame(dt) | |||||
end | |||||
if player1nukescore > 300 then | if player1nukescore > 300 then | ||||
player1nukescore = 300 | player1nukescore = 300 | ||||
end | end | ||||
@@ -11,7 +14,7 @@ function basegame(dt) | |||||
if t < shakeDuration then | if t < shakeDuration then | ||||
t = t + dt | t = t + dt | ||||
end | end | ||||
print("T = " .. tostring(t)) | |||||
--print("T = " .. tostring(t)) | |||||
serveBot() | serveBot() | ||||
if gameState == 'play' then | if gameState == 'play' then | ||||
if (AGAINST_AI == 1) then | if (AGAINST_AI == 1) then | ||||
@@ -25,20 +28,20 @@ function basegame(dt) | |||||
player1.dy = 0 | player1.dy = 0 | ||||
end | end | ||||
if (AGAINST_AI == 0) then | if (AGAINST_AI == 0) then | ||||
if (love.keyboard.isDown(p2control.up)) then | |||||
if ((confirmation == "up2" and love.keyboard.isDown(p2control.up)) or lastSentKeyP2 == p2control.up) then | |||||
player2.dy = (paddle_SPEED + p2bonus) * -1 | player2.dy = (paddle_SPEED + p2bonus) * -1 | ||||
elseif (love.keyboard.isDown(p2control.down)) then | |||||
elseif ((confirmation == "up2" and love.keyboard.isDown(p2control.down)) or lastSentKeyP2 == p2control.down) then | |||||
player2.dy = paddle_SPEED + p2bonus | player2.dy = paddle_SPEED + p2bonus | ||||
else | else | ||||
player2.dy = 0 | player2.dy = 0 | ||||
end | end | ||||
end | end | ||||
print(areanuclear .. striken .. player1score .. player2score) | |||||
--print(areanuclear .. striken .. player1score .. player2score) | |||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
if ball[i]:collides(player1) then | |||||
if rules("p1hit", i) then | |||||
if (areanuclear == 0 and striken == 1 and (player1score > ptw-2 or player2score > ptw-2)) then | if (areanuclear == 0 and striken == 1 and (player1score > ptw-2 or player2score > ptw-2)) then | ||||
print("Calling animation") | |||||
--print("Calling animation") | |||||
superanimator("tensehit", 1) | superanimator("tensehit", 1) | ||||
end | end | ||||
if gameMode == "practice" then | if gameMode == "practice" then | ||||
@@ -156,7 +159,7 @@ function basegame(dt) | |||||
end | end | ||||
end | end | ||||
end | end | ||||
if ball[i]:collides(player2) then | |||||
if rules("p2hit", i) then | |||||
--ameState = 'quickanim' | --ameState = 'quickanim' | ||||
t = 0 | t = 0 | ||||
shakeDuration = 1 | shakeDuration = 1 | ||||
@@ -227,7 +230,7 @@ function basegame(dt) | |||||
ball[i].dx = -ball[i].dx | ball[i].dx = -ball[i].dx | ||||
ball[i].x = player2.x - 30 | ball[i].x = player2.x - 30 | ||||
if (love.keyboard.isDown(p2control.up) or AI_SPEED < 0) then | |||||
if ((confirmation == "up2" and love.keyboard.isDown(p2control.up) ) or AI_SPEED < 0 or lastSentKeyP2 == p2control.up) then | |||||
select = math.random(1, 5) | select = math.random(1, 5) | ||||
if select == 1 then | if select == 1 then | ||||
ball[i].dy = -1 | ball[i].dy = -1 | ||||
@@ -240,7 +243,7 @@ function basegame(dt) | |||||
elseif select == 5 then | elseif select == 5 then | ||||
ball[i].dy = -2 | ball[i].dy = -2 | ||||
end | end | ||||
elseif love.keyboard.isDown(p2control.down) or AI_SPEED > 0 then | |||||
elseif (confirmation == "up2" and love.keyboard.isDown(p2control.down)) or AI_SPEED > 0 or lastSentKeyP2 == p2control.down then | |||||
select = math.random(1, 5) | select = math.random(1, 5) | ||||
if select == 1 then | if select == 1 then | ||||
ball[i].dy = 1 | ball[i].dy = 1 | ||||
@@ -358,77 +361,86 @@ end | |||||
function goalManager() | function goalManager() | ||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
if (ball[i].x < 0 - ballSpeed * 0.5) 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 | |||||
if (rules("p1miss", i)) then | |||||
ball[i].disabled = true | |||||
ball[i].x = 2000 | |||||
if ballsAlive() == false then | |||||
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 | |||||
for i = 1, maxBalls do | for i = 1, maxBalls do | ||||
ball[i]:reset(i) | ball[i]:reset(i) | ||||
end | end | ||||
sounds["win"]:play() | |||||
gameState = "done" | |||||
TEXT = "Player 2 Won!" | |||||
else | |||||
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" | gameState = "1serve" | ||||
serveBot() | serveBot() | ||||
for i = 1, maxBalls do | |||||
end | |||||
end | |||||
player2score = player2score + 1 | |||||
end | |||||
if (rules("p2miss", i)) then | |||||
ball[i].disabled = true | |||||
ball[i].x = 2000 | |||||
if ballsAlive() == false then | |||||
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 | |||||
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) | ball[i]:reset(i) | ||||
end | end | ||||
end | |||||
end | |||||
if (ball[i].x > VIRTUAL_WIDTH + ballSpeed * 0.5) then | |||||
end | |||||
sounds["score"]:play() | 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 | 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 | end | ||||
end | end | ||||
@@ -436,20 +448,20 @@ end | |||||
function powerAvailability() | function powerAvailability() | ||||
if (player1nukescore >= 20 and player1nukescore < 140) then | if (player1nukescore >= 20 and player1nukescore < 140) then | ||||
potentialstrike1 = 1 | potentialstrike1 = 1 | ||||
if (love.keyboard.isDown(p1control.super)) then | |||||
if ((confirmation == "up1" and love.keyboard.isDown(p1control.super)) or (confirmation == "up2" and lastSentKeyP1 == p1control.super)) then | |||||
player1striken = 1 | player1striken = 1 | ||||
player1reverbav = 0 | player1reverbav = 0 | ||||
end | end | ||||
end | end | ||||
if (player1nukescore >= 140) and timeIsSlow2 == false and timeIsSlow == false and maxBalls == 1 and ball[1].x < VIRTUAL_WIDTH / 2 and ball[1].dx < 0 then | if (player1nukescore >= 140) and timeIsSlow2 == false and timeIsSlow == false and maxBalls == 1 and ball[1].x < VIRTUAL_WIDTH / 2 and ball[1].dx < 0 then | ||||
player1reverbav = 1 | player1reverbav = 1 | ||||
if love.keyboard.isDown(p1control.counter) then | |||||
if ((confirmation == "up1" and love.keyboard.isDown(p1control.counter)) or (confirmation == "up2" and lastSentKeyP1 == p1control.counter)) then | |||||
powerControl(1, "special") | powerControl(1, "special") | ||||
end | end | ||||
end | end | ||||
if (player1nukescore >= 200) then | if (player1nukescore >= 200) then | ||||
potentialnuke1 = 1 | potentialnuke1 = 1 | ||||
if (love.keyboard.isDown(p1control.super)) then | |||||
if ((confirmation == "up1" and love.keyboard.isDown(p1control.super)) or (confirmation == "up2" and lastSentKeyP1 == p1control.super)) then | |||||
sounds["nuke"]:play() | sounds["nuke"]:play() | ||||
if areanuclear == 1 then | if areanuclear == 1 then | ||||
maxspeed = maxspeed + 50 | maxspeed = maxspeed + 50 | ||||
@@ -478,7 +490,7 @@ function powerAvailability() | |||||
if (player2nukescore >= 20 and player2nukescore <= 140) then | if (player2nukescore >= 20 and player2nukescore <= 140) then | ||||
potentialstrike2 = 1 | potentialstrike2 = 1 | ||||
if (AGAINST_AI == 0) then | if (AGAINST_AI == 0) then | ||||
if (love.keyboard.isDown(p2control.super)) then | |||||
if ((confirmation == "up2" and love.keyboard.isDown(p2control.super)) or lastSentKeyP2 == p2control.super) then | |||||
player2striken = 1 | player2striken = 1 | ||||
player2reverbav = 0 | player2reverbav = 0 | ||||
end | end | ||||
@@ -486,7 +498,7 @@ function powerAvailability() | |||||
end | end | ||||
if (player2nukescore >= 140) and timeIsSlow == false and timeIsSlow2 == false and maxBalls == 1 and ball[1].x > VIRTUAL_WIDTH / 2 and ball[1].dx > 0 then | if (player2nukescore >= 140) and timeIsSlow == false and timeIsSlow2 == false and maxBalls == 1 and ball[1].x > VIRTUAL_WIDTH / 2 and ball[1].dx > 0 then | ||||
player2reverbav = 1 | player2reverbav = 1 | ||||
if love.keyboard.isDown(p2control.counter) then | |||||
if (confirmation == "up2" and love.keyboard.isDown(p2control.counter)) or lastSentKeyP2 == p2control.counter then | |||||
sounds["time"]:play() | sounds["time"]:play() | ||||
player2reverbav = false | player2reverbav = false | ||||
timeIsSlow2 = true | timeIsSlow2 = true | ||||
@@ -499,7 +511,7 @@ function powerAvailability() | |||||
end | end | ||||
if (player2nukescore >= 200) then | if (player2nukescore >= 200) then | ||||
potentialnuke2 = 1 | potentialnuke2 = 1 | ||||
if (love.keyboard.isDown(p2control.super) and AGAINST_AI == 0) then | |||||
if (((confirmation == "up2" and love.keyboard.isDown(p2control.super)) or lastSentKeyP2 == p2control.super) and AGAINST_AI == 0) then | |||||
sounds["nuke"]:play() | sounds["nuke"]:play() | ||||
if areanuclear == 1 then | if areanuclear == 1 then | ||||
maxspeed = maxspeed + 50 | maxspeed = maxspeed + 50 | ||||
@@ -698,25 +710,25 @@ function baseDraw() | |||||
love.graphics.translate(dx, dy) | love.graphics.translate(dx, dy) | ||||
end | end | ||||
if globalState == 'menu' then | if globalState == 'menu' then | ||||
print("Drawing menuDraw") | |||||
--print("Drawing menuDraw") | |||||
if gameState == 'animation' then | if gameState == 'animation' then | ||||
print("Drawing animation") | |||||
--print("Drawing animation") | |||||
intro() | intro() | ||||
end | end | ||||
if gameState ~= 'animation' then | if gameState ~= 'animation' then | ||||
print("Drawing notanimtaion") | |||||
--print("Drawing notanimtaion") | |||||
love.graphics.setFont(scorefont) | love.graphics.setFont(scorefont) | ||||
menuDraw() | menuDraw() | ||||
end | end | ||||
end | end | ||||
if globalState == 'base' or globalState == 'reverse' then | |||||
if globalState == 'base' or globalState == 'reverse' or globalState == 'nettest' or globalState == 'clienttest' then | |||||
love.graphics.setFont(smallfont) | love.graphics.setFont(smallfont) | ||||
if gameState == 'nuclearExplosion' then | if gameState == 'nuclearExplosion' then | ||||
nuclearDraw() | nuclearDraw() | ||||
end | end | ||||
if gameState == 'play' or gameState == '1serve' or gameState == '2serve' or gameState == 'done' then | if gameState == 'play' or gameState == '1serve' or gameState == '2serve' or gameState == 'done' then | ||||
print("Drawing normally") | |||||
--print("Drawing normally") | |||||
normalDraw() | normalDraw() | ||||
end | end | ||||
@@ -906,4 +918,255 @@ function hitIdentifier() | |||||
end | end | ||||
end | end | ||||
end | end | ||||
end | |||||
function rules(query, i) | |||||
if query == "p1hit" then | |||||
if gameMode == "normal" then | |||||
return ball[i]:collides(player1) | |||||
elseif gameMode == "reversegame" then | |||||
return ball[i].x < 0 and ball[i].disabled == false | |||||
end | |||||
end | |||||
if query == "p2hit" then | |||||
if gameMode == "normal" then | |||||
return ball[i]:collides(player2) | |||||
elseif gameMode == "reversegame" then | |||||
return ball[i].x > VIRTUAL_WIDTH-10 and ball[i].disabled == false | |||||
end | |||||
end | |||||
if query == "p1miss" then | |||||
if gameMode == "reversegame" then | |||||
return ball[i]:collides(player1) | |||||
elseif gameMode == "normal" then | |||||
return ball[i].x < 0 and ball[i].disabled == false | |||||
end | |||||
end | |||||
if query == "p2miss" then | |||||
if gameMode == "reversegame" then | |||||
return ball[i]:collides(player2) | |||||
elseif gameMode == "normal" then | |||||
return ball[i].x > VIRTUAL_WIDTH-10 and ball[i].disabled == false | |||||
end | |||||
end | |||||
end | |||||
function clientsBaseGame(dt) | |||||
if gameMode == "reverse" then | |||||
reversegame(dt) | |||||
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 | |||||
if (lastSentKeyClient == p1control.up) then | |||||
player1.dy = (paddle_SPEED + p1bonus) * -1 | |||||
elseif (lastSentKeyClient == p1control.down) then | |||||
player1.dy = paddle_SPEED + p1bonus | |||||
else | |||||
player1.dy = 0 | |||||
end | |||||
--print("T = " .. tostring(t)) | |||||
serveBot() | |||||
if gameState == 'play' then | |||||
if (AGAINST_AI == 1) then | |||||
AI(player2, maxBalls, AI_LEVEL) | |||||
end | |||||
--print(areanuclear .. striken .. player1score .. player2score) | |||||
for i = 1, maxBalls do | |||||
if rules("p1hit", i) 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 | |||||
end | |||||
if rules("p2hit", i) 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 | |||||
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 | |||||
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 | |||||
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 | |||||
goalManager() | |||||
powerAvailability() | |||||
player1:update(dt) | |||||
player2:update(dt) | |||||
end | end |
@@ -12,468 +12,4 @@ function reversegame(dt) | |||||
elseif(player2.y > ball[1].y) then | elseif(player2.y > ball[1].y) then | ||||
player2.y = player2.y - ballSpeed/50 | player2.y = player2.y - ballSpeed/50 | ||||
end | 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 | 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 | |||||