Procházet zdrojové kódy

Experimental Online

tags/chalkboard
madiwka3 před 4 roky
rodič
revize
8325401a5f
5 změnil soubory, kde provedl 472 přidání a 569 odebrání
  1. +5
    -1
      eball.lua
  2. +110
    -10
      main.lua
  3. +13
    -13
      src/AI.lua
  4. +344
    -81
      src/baseGame.lua
  5. +0
    -464
      src/reverseGame.lua

+ 5
- 1
eball.lua Zobrazit soubor

@@ -9,6 +9,7 @@ function eball:init(x, y, width, height)
self.dy = math.random(-1, 1)
self.dx = 1
self.disabled = false
end
function eball:collides(paddle)
@@ -39,6 +40,7 @@ else
else
self.dx = ball_DIR
end
self.disabled = false
self.x = VIRTUAL_WIDTH /2 - 2
self.y = VIRTUAL_HEIGHT /2 - 2
self.dy = math.random(-1, 1)
@@ -79,8 +81,10 @@ function eball:update(dt)
else
potentialnuke2 = 0
end
if self.disabled == false then
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
function eball:render(color)


+ 110
- 10
main.lua Zobrazit soubor

@@ -28,6 +28,7 @@ hitNum = {}
hitNum[1] = 0
hitNum[2] = 0
hitNum[3] = 0
confirmation = "disconnected"
hitNum[4] = 0
p1bonus = 0
p2bonus = 0
@@ -68,7 +69,9 @@ craz = 0
AI_LEVEL = 500
isFullscreen = 0
prtext = "Easy"
lastSentKey = "c"
MAP_TYPE = 0
lastSentKeyClient = "c"
difficultyl = 300
req = "pp"
ballSet = 200
@@ -95,7 +98,7 @@ function balancer()
if (player2score == 9 or player1score == 9) then
shakeDuration = 5
if debug then
print("Shaking set to match almost over")
--print("Shaking set to match almost over")
end
end
if (player1score < player2score) then
@@ -140,7 +143,7 @@ function love.load()
configsave = io.open("config.lua", "w")
shader = love.graphics.newShader(shader_code)
time_1 = 0
print("Debug active")
--print("Debug active")
--load

testwalls = love.filesystem.load("save.lua")()
@@ -188,6 +191,28 @@ function love.load()
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(
buttons,
newButton(
@@ -548,7 +573,7 @@ function love.load()
"Reverse Play",
function()
gameState = "1serve"
globalState = "reverse"
gameMode = "reversegame"
end
)
)
@@ -679,13 +704,67 @@ function love.update(dt)
if globalState == "base" then
basegame(dt)
end
if globalState == "reverse" then
reversegame(dt)
end
if globalState == "menu" then
debugCheck(dt)
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
function wallbreaker(x, y)
if (gameState == "editor") then
@@ -806,6 +885,7 @@ function dangerChecker() --CHECK IF CONTROLS ARE DUPLICATING
end
end
function love.keypressed(key)
lastSentKey = key
if gameState == "assign" then
if (req == "p1up") then
p1control.up = key
@@ -904,6 +984,9 @@ end

function love.keyreleased(key)
currentKey = " "
if lastSentKey == key then
lastSentKey = "g"
end
end
function speedSetter(requesttype)
if (requesttype == "ball") then
@@ -1208,13 +1291,13 @@ function love.wheelmoved(x, y)
end

function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SERVES
print("servebot called")
--print("servebot called")
if (gameState == "1serve") then
updateTEXT = ""
if (gameMode ~= "practice") then
TEXT = "PLAYER 1, serve!(q)"
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!"
ball_DIR = 1
for i = 1, maxBalls do
@@ -1236,7 +1319,7 @@ function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SE
gameState = "play"
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"
ball_DIR = -1
for i = 1, maxBalls do
@@ -1325,3 +1408,20 @@ function love.mousereleased(x, y, button)
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

+ 13
- 13
src/AI.lua Zobrazit soubor

@@ -1,8 +1,8 @@
function AI(target, ballCnt, diff)
currentTarget = evaluateClosestBall(target);
print("CLOSEST TARGET IS " .. currentTarget)
--print("CLOSEST TARGET IS " .. currentTarget)
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
target.dy = AI_SPEED
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
end
else
print("Complex targeting")
--print("Complex targeting")
neededTarget = predictBall(ball[currentTarget], target.x)
if neededTarget ~= -1 then
print("Calculated target = " .. neededTarget)
--print("Calculated target = " .. neededTarget)
if (target.y - neededTarget >= -target.height/2) then
target.dy = -AI_SPEED
elseif (neededTarget - target.y >= target.height*0.9) then
@@ -78,27 +78,27 @@ function evaluateClosestBall(target)
return ans
end
function predictBall(target, px)
print("BALLSTATS:" .. target.x .. " " .. target.y)
--print("BALLSTATS:" .. target.x .. " " .. target.y)
if VIRTUAL_WIDTH - target.x < AI_SPEED then
return target.y
elseif target.dx > 0 then
local ans = recursiveCalculations(px, target.x, target.y, target.dx, target.dy, 1)
return ans
else
print("GO TO CENTER!!")
--print("GO TO CENTER!!")
return VIRTUAL_HEIGHT/2
end
end
function recursiveCalculations(px, ex, ey, edx, edy, ifspecial)
if (edy > 0) then
print ("normal" .. ex .." " .. ey .. " " .. edx .. " " .. edy)
--print ("normal" .. ex .." " .. ey .. " " .. edx .. " " .. edy)
local time = (VIRTUAL_HEIGHT-ey) / (ballSpeed * edy)
local distance = (ballSpeed * edx) * time
print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex))
--print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex))
if distance > (px - ex) then
local anstime = (px - ex) / (ballSpeed * edx)
local bonus = (ballSpeed * edy) * anstime
print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex))
--print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex))
-- if (ifspecial == 0) then
return ey + bonus
-- else
@@ -112,10 +112,10 @@ function recursiveCalculations(px, ex, ey, edx, edy, ifspecial)
elseif edy == 0 then
return ey
else
print ("inverse" .. ex .." " .. ey .. " " .. edx .. " " .. edy)
--print ("inverse" .. ex .." " .. ey .. " " .. edx .. " " .. edy)
local time = (ey) / math.abs((ballSpeed * edy))
local distance = (ballSpeed * edx) * time
print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex))
--print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex))

--print("Why th efuck ")
@@ -123,7 +123,7 @@ function recursiveCalculations(px, ex, ey, edx, edy, ifspecial)
if distance > (px - ex) then
local anstime = (px - ex) / (ballSpeed * edx)
local bonus = (ballSpeed * edy) * anstime
print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex))
--print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex))
-- if (ifspecial == 0) then
return ey + bonus
-- else
@@ -132,7 +132,7 @@ function recursiveCalculations(px, ex, ey, edx, edy, ifspecial)
else
local emulatedx = ex + distance
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)
end
end

+ 344
- 81
src/baseGame.lua Zobrazit soubor

@@ -1,4 +1,7 @@
function basegame(dt)
if gameMode == "reverse" then
reversegame(dt)
end
if player1nukescore > 300 then
player1nukescore = 300
end
@@ -11,7 +14,7 @@ function basegame(dt)
if t < shakeDuration then
t = t + dt
end
print("T = " .. tostring(t))
--print("T = " .. tostring(t))
serveBot()
if gameState == 'play' then
if (AGAINST_AI == 1) then
@@ -25,20 +28,20 @@ function basegame(dt)
player1.dy = 0
end
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
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
else
player2.dy = 0
end
end
print(areanuclear .. striken .. player1score .. player2score)
--print(areanuclear .. striken .. player1score .. player2score)
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
print("Calling animation")
--print("Calling animation")
superanimator("tensehit", 1)
end
if gameMode == "practice" then
@@ -156,7 +159,7 @@ function basegame(dt)
end
end
end
if ball[i]:collides(player2) then
if rules("p2hit", i) then
--ameState = 'quickanim'
t = 0
shakeDuration = 1
@@ -227,7 +230,7 @@ function basegame(dt)
ball[i].dx = -ball[i].dx
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)
if select == 1 then
ball[i].dy = -1
@@ -240,7 +243,7 @@ function basegame(dt)
elseif select == 5 then
ball[i].dy = -2
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)
if select == 1 then
ball[i].dy = 1
@@ -358,77 +361,86 @@ end

function goalManager()
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
ball[i]:reset(i)
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"
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)
end
end
end
if (ball[i].x > VIRTUAL_WIDTH + ballSpeed * 0.5) then
end
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
@@ -436,20 +448,20 @@ end
function powerAvailability()
if (player1nukescore >= 20 and player1nukescore < 140) then
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
player1reverbav = 0
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
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")
end
end
if (player1nukescore >= 200) then
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()
if areanuclear == 1 then
maxspeed = maxspeed + 50
@@ -478,7 +490,7 @@ function powerAvailability()
if (player2nukescore >= 20 and player2nukescore <= 140) then
potentialstrike2 = 1
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
player2reverbav = 0
end
@@ -486,7 +498,7 @@ function powerAvailability()
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
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()
player2reverbav = false
timeIsSlow2 = true
@@ -499,7 +511,7 @@ function powerAvailability()
end
if (player2nukescore >= 200) then
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()
if areanuclear == 1 then
maxspeed = maxspeed + 50
@@ -698,25 +710,25 @@ function baseDraw()
love.graphics.translate(dx, dy)
end
if globalState == 'menu' then
print("Drawing menuDraw")
--print("Drawing menuDraw")
if gameState == 'animation' then
print("Drawing animation")
--print("Drawing animation")
intro()
end
if gameState ~= 'animation' then
print("Drawing notanimtaion")
--print("Drawing notanimtaion")
love.graphics.setFont(scorefont)
menuDraw()
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)
if gameState == 'nuclearExplosion' then
nuclearDraw()
end
if gameState == 'play' or gameState == '1serve' or gameState == '2serve' or gameState == 'done' then
print("Drawing normally")
--print("Drawing normally")
normalDraw()
end

@@ -906,4 +918,255 @@ function hitIdentifier()
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

+ 0
- 464
src/reverseGame.lua Zobrazit soubor

@@ -12,468 +12,4 @@ function reversegame(dt)
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


Načítá se…
Zrušit
Uložit