@@ -3,4 +3,3 @@ rm game.zip | |||
zip -r game * | |||
mv game.zip game.love | |||
love game.love | |||
rm game.love |
@@ -12,6 +12,8 @@ vec4 effect(vec4 color, Image image, vec2 uvs, vec2 screen_coords) { | |||
debug = true | |||
--GLOBAL VARIABLES | |||
frameratecap = 1/60 | |||
realtimer = 0 | |||
status = "offline" | |||
gameMode = "normal" | |||
ts = 0 | |||
@@ -60,7 +62,7 @@ nuckemodactive = 0 | |||
maxspeed = 700 | |||
DIFFERENCE_X = 1 | |||
DIFFERENCE_Y = 1 | |||
paddle_SPEED = 20 | |||
paddle_SPEED = 200 | |||
textamount = 15 | |||
AI_STRIKEMOD = 1000 | |||
resolutionWin = 0 | |||
@@ -68,7 +70,7 @@ AGAINST_AI = 0 | |||
RESOLUTION_SET = 0 | |||
AI_NUKEMOD = 1000 | |||
animstart = true | |||
AI_SPEED = 30 | |||
AI_SPEED = 300 | |||
craz = 0 | |||
AI_LEVEL = 500 | |||
isFullscreen = 0 | |||
@@ -698,7 +700,7 @@ function startShake(duration, magnitude) | |||
end | |||
function displayFPS() | |||
--love.window.setTitle(love.timer.getFPS()) | |||
love.window.setTitle(globalState .. " " .. gameState) | |||
--love.window.setTitle(globalState .. " " .. gameState .. " " .. paddle_SPEED .. " " .. p1bonus .. " " .. player1.dy) | |||
if love.keyboard.isDown("space") then | |||
player1nukescore = 200 | |||
player1score = player1score + 0.2 | |||
@@ -715,6 +717,7 @@ end | |||
function love.update(dt) | |||
--print("IMPORTANT!!!!!" .. globalState .. gameState) | |||
staticanimatorcounter(dt) | |||
if gameState == "chooseIP" then | |||
checkCurrentServer(dt) | |||
@@ -982,7 +985,7 @@ function hardmanager(diff) | |||
if (diff == "easy") then | |||
INDIC[1] = ">" | |||
AGAINST_AI = 1 | |||
AI_SPEED = ballSet / 10 | |||
AI_SPEED = ballSet | |||
AI_STRIKEMOD = 100 | |||
AI_NUKEMOD = 1000 | |||
AI_LEVEL = 350 | |||
@@ -993,7 +996,7 @@ function hardmanager(diff) | |||
end | |||
if (diff == "normal") then | |||
INDIC[2] = ">" | |||
AI_SPEED = ballSet / 10 | |||
AI_SPEED = ballSet | |||
AI_LEVEL = 500 | |||
AI_NUKEMOD = 250 | |||
AI_STRIKEMOD = 60 | |||
@@ -1006,7 +1009,6 @@ function hardmanager(diff) | |||
if (diff == "hard") then | |||
INDIC[3] = ">" | |||
AI_SPEED = ballSpeed * 1.1 + 50 | |||
AI_SPEED = AI_SPEED / 10 | |||
AI_LEVEL = 700 | |||
AI_NUKEMOD = 200 | |||
AI_STRIKEMOD = 20 | |||
@@ -1019,7 +1021,6 @@ function hardmanager(diff) | |||
if (diff == "smart") then | |||
INDIC[3] = ">" | |||
AI_SPEED = ballSpeed * 1.1 + 50 | |||
AI_SPEED = AI_SPEED / 10 | |||
AI_LEVEL = 1500 | |||
AI_NUKEMOD = 200 | |||
AI_STRIKEMOD = 20 | |||
@@ -1032,7 +1033,6 @@ function hardmanager(diff) | |||
if (diff == "practice") then | |||
INDIC[3] = ">" | |||
AI_SPEED = ballSpeed * 500 + 50 | |||
AI_SPEED = AI_SPEED / 10 | |||
AI_LEVEL = 700 | |||
AI_NUKEMOD = 9000000000 | |||
AI_STRIKEMOD = 90000000 | |||
@@ -1239,15 +1239,15 @@ function speedSetter(requesttype) | |||
synctype = 0 | |||
maxspeed = 700 | |||
synctext = "Independent" | |||
paddle_SPEED = ballSet / 10 | |||
AI_SPEED = ballSet / 10 | |||
paddle_SPEED = ballSet | |||
AI_SPEED = ballSet | |||
end | |||
if (nuckemodactive == 1) then | |||
areanuclear = 1 | |||
ballSet = 2000 | |||
maxspeed = 2000 | |||
paddle_SPEED = ballSet / 10 | |||
AI_SPEED = ballSet / 10 | |||
paddle_SPEED = ballSet | |||
AI_SPEED = ballSet | |||
synctext = "death is imminent" | |||
end | |||
ballSpeed = ballSet | |||
@@ -1526,9 +1526,13 @@ function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SE | |||
if ((globalState ~= "clienttest" and love.keyboard.isDown("q")) or (globalState == "clienttest" and lastSentKeyP1 == "q")) then | |||
TEXT = "Lets Begin!" | |||
ball_DIR = 1 | |||
for i = 1, maxBalls do | |||
ball[i]:reset(i, 1) | |||
end | |||
if maxBalls == 1 then | |||
ball[1]:reset(1, 1) | |||
else | |||
for i = 1, maxBalls do | |||
ball[i]:reset(i) | |||
end | |||
end | |||
gameState = "play" | |||
end | |||
@@ -1538,9 +1542,13 @@ function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SE | |||
if (AGAINST_AI == 1) then | |||
TEXT = "" | |||
ball_DIR = -1 | |||
for i = 1, maxBalls do | |||
ball[i]:reset(i, 2) | |||
end | |||
if maxBalls == 1 then | |||
ball[2]:reset(i, 2) | |||
else | |||
for i = 1, maxBalls do | |||
ball[i]:reset(i) | |||
end | |||
end | |||
gameState = "play" | |||
@@ -1548,9 +1556,13 @@ function serveBot() --THIS IS USED TO CHANGE TEXT/BALL DIRECTION ON DIFFERENT SE | |||
if (((globalState == "nettest" and lastSentKeyClient == "p") or ((globalState ~= "nettest") and love.keyboard.isDown("p")))and AGAINST_AI == 0) then | |||
TEXT = "Lets Begin" | |||
ball_DIR = -1 | |||
for i = 1, maxBalls do | |||
ball[i]:reset(i, 2) | |||
end | |||
if maxBalls == 1 then | |||
ball[1]:reset(1, 2) | |||
else | |||
for i = 1, maxBalls do | |||
ball[i]:reset(i) | |||
end | |||
end | |||
--love.window.setTitle("An atttttttt") | |||
gameState = "play" | |||
@@ -1594,7 +1606,7 @@ function resettinggenius() | |||
for i = 1, maxBalls do | |||
ball[i]:reset(i) | |||
end | |||
paddle_SPEED = 20 | |||
paddle_SPEED = 200 | |||
nuclearanimation = 3 | |||
timeIsSlow = false | |||
timeIsSlow2 = false | |||
@@ -1685,4 +1697,112 @@ function checkCurrentServer(dt) | |||
end | |||
end | |||
function selfHost(dt) | |||
local running = true | |||
local socket = require 'socket' | |||
local udp = socket.udp() | |||
local player1ip, player2ip, player1port, player2port = "127.0.0.1", "none", nil, nil | |||
udp:settimeout(0) | |||
udp:setsockname('*', 12345) | |||
local p1ping = 0 | |||
local p2ping = 0 | |||
local requesterip | |||
local requresterport | |||
while running do | |||
local data, msg_or_ip, port_or_nil | |||
local p1data, p2data | |||
repeat | |||
data, msg_or_ip, port_or_nil = udp:receivefrom() | |||
if data then | |||
if data == "HELLO" then | |||
requesterip = msg_or_ip | |||
requesterport = port_or_nil | |||
else | |||
print(string.sub(data,1,1) .. "Playerlist: " .. player1ip .. " " .. player2ip) | |||
if (player1ip == msg_or_ip) then | |||
p1ping = 0 | |||
p1data = data | |||
elseif player2ip == msg_or_ip then | |||
p2data = data | |||
p2ping = 0 | |||
else | |||
if (player1ip == "none") then | |||
player1ip = msg_or_ip | |||
p1data = data | |||
p1ping = 0 | |||
player1port = port_or_nil | |||
print("CONNECTED: PLAYER 1 FROM: " .. player1ip) | |||
elseif player2ip == "none" and msg_or_ip ~= player1ip then | |||
player2ip = msg_or_ip | |||
p2data = data | |||
p2ping = 0 | |||
player2port = port_or_nil | |||
print("CONNECTED: PLAYER 2 FROM: " .. player2ip) | |||
elseif (player1ip ~= msg_or_ip and player2ip ~= msg_or_ip) then | |||
print("Lobby Full!" .. player1ip .. player2ip) | |||
end | |||
end | |||
end | |||
end | |||
until not data | |||
if player1ip ~= "none" then | |||
p1ping = p1ping + 1 | |||
if p1ping > 100 then | |||
if p2data then | |||
udp:sendto(p2data .. '|' .. p1ping, player1ip, player1port) | |||
end | |||
print("PLAYER 1 DISCONNECTED") | |||
p1data = nil | |||
player1ip = "none" | |||
player1port = nil | |||
end | |||
end | |||
if player2ip ~= "none" then | |||
p2ping = p2ping + 1 | |||
if p2ping > 100 then | |||
if p1data then | |||
udp:sendto(p1data .. '|' .. p2ping, player2ip, player2port) | |||
end | |||
print("PLAYER 2 DISCONNECTED") | |||
p2data = nil | |||
player2ip = "none" | |||
player2port = nil | |||
end | |||
end | |||
if p1data and player2port then | |||
udp:sendto(p1data .. '|' .. p2ping, player2ip, player2port) | |||
print("SENT TO " .. player2ip .. ":" .. player2port .. " : " .. string.sub(p1data,1,1)) | |||
end | |||
if p2data and player1port then | |||
udp:sendto(p2data .. '|' .. p1ping, player1ip, player1port) | |||
print("SENT TO " .. player1ip .. ":" .. player1port .. " : " .. string.sub(p2data,1,1)) | |||
--print("1::" .. p1data) | |||
--print("2::" .. p2data) | |||
--print("SENT1: " .. player2ip .. " " .. player2port .. " " .. p1data) | |||
--print("SENT2: " .. player1ip .. " " .. player1port .. " " .. p2data) | |||
end | |||
if requesterip then | |||
print("getting pnged!") | |||
if player1ip == "none" then | |||
udp:sendto("nettest",requesterip, requesterport) | |||
print("nettest av to: " .. requesterip) | |||
elseif player2ip == "none" then | |||
udp:sendto("clienttest", requesterip, requesterport) | |||
print("clienttest av to: " .. requesterip) | |||
else | |||
udp:sendto("full", requesterip, requesterport) | |||
print("full to: " .. msg_or_ip) | |||
end | |||
requesterip, requesterport = nil | |||
end | |||
socket.sleep(0.015) | |||
end | |||
end |
@@ -17,6 +17,7 @@ function paddle:init(x, y, width, height, player) | |||
end | |||
function paddle:update(dt) | |||
--love.window.setTitle(tostring(player1.velocity * dt) .. " " .. tostring(player1.dy) .. " " .. tostring(dt) ) | |||
if areanuclear == 0 then | |||
self.RED = 1 | |||
self.GREEN = 1 | |||
@@ -30,22 +31,23 @@ function paddle:update(dt) | |||
self.dy = self.dy / 2 | |||
end | |||
if (self.dy == 0) then | |||
self.velocity = self.velocity / 1.1 | |||
if (self.velocity < 1 and self.velocity > -1) then | |||
self.velocity = self.velocity - (self.velocity - self.velocity / (1.4))*dt*20 | |||
if (self.velocity*dt < 0.5 and self.velocity*dt > -0.5) then | |||
self.velocity = 0 | |||
end | |||
else | |||
self.velocity = self.velocity + self.dy*dt | |||
self.velocity = self.velocity + self.dy*7*dt | |||
end | |||
if (self.velocity < 0) then | |||
if (self.y > 0) then | |||
self.y = self.y + self.velocity | |||
self.y = self.y + self.velocity * dt | |||
else | |||
self.velocity = 0 | |||
end | |||
elseif (self.velocity > 0) then | |||
if (self.y < VIRTUAL_HEIGHT - 80) then | |||
self.y = self.y + self.velocity | |||
self.y = self.y + self.velocity * dt | |||
else | |||
self.velocity = 0 | |||
end | |||
@@ -58,9 +60,9 @@ function paddle:update(dt) | |||
self.yx = self.y | |||
end | |||
if (self.yx < self.y) then | |||
self.yx = self.yx + math.abs(paddle_SPEED/1.7) | |||
self.yx = self.yx + math.abs(paddle_SPEED/1.7) * dt | |||
elseif (self.yx > self.y) then | |||
self.yx = self.yx - math.abs(paddle_SPEED/1.7) | |||
self.yx = self.yx - math.abs(paddle_SPEED/1.7) * dt | |||
end | |||
end | |||
@@ -79,9 +79,7 @@ function evaluateClosestBall(target) | |||
end | |||
function predictBall(target, px) | |||
--print("BALLSTATS:" .. target.x .. " " .. target.y) | |||
if VIRTUAL_WIDTH - target.x < AI_SPEED then | |||
return target.y | |||
elseif target.dx > 0 then | |||
if target.dx > 0 then | |||
local ans = recursiveCalculations(px, target.x, target.y, target.dx, target.dy, 1) | |||
return ans | |||
else | |||
@@ -90,50 +88,64 @@ function predictBall(target, px) | |||
end | |||
end | |||
function recursiveCalculations(px, ex, ey, edx, edy, ifspecial) | |||
if (edy > 0) then | |||
--print ("normal" .. ex .." " .. ey .. " " .. edx .. " " .. edy) | |||
local time = (VIRTUAL_HEIGHT-ey) / (ballSpeed * edy) | |||
local distance = (ballSpeed * edx) * time | |||
--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)) | |||
-- if (ifspecial == 0) then | |||
return ey + bonus | |||
-- else | |||
-- return -1 | |||
--end | |||
else | |||
local emulatedx = ex + distance | |||
local emulatedy = VIRTUAL_HEIGHT | |||
return recursiveCalculations(px, emulatedx, emulatedy, edx, -edy, 0) | |||
end | |||
elseif edy == 0 then | |||
return ey | |||
else | |||
--print ("inverse" .. ex .." " .. ey .. " " .. edx .. " " .. edy) | |||
local time = (ey) / math.abs((ballSpeed * edy)) | |||
local distance = (ballSpeed * edx) * time | |||
--print(distance .. " " .. edx .. " " .. time .. " " .. (px-ex)) | |||
if VIRTUAL_WIDTH - ex < AI_SPEED then | |||
local time = (VIRTUAL_WIDTH - ex)/(ballSpeed*edx) | |||
local distance = (ballSpeed * edy) * time | |||
love.window.setTitle(ey + (distance*edy)) | |||
return ey + (distance*edy) | |||
else | |||
--print("Why th efuck ") | |||
if (edy > 0) then | |||
--print ("normal" .. ex .." " .. ey .. " " .. edx .. " " .. edy) | |||
local time = (VIRTUAL_HEIGHT-ey) / (ballSpeed * edy) | |||
local distance = (ballSpeed * edx) * time | |||
--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)) | |||
-- if (ifspecial == 0) then | |||
return ey + bonus | |||
-- else | |||
-- return -1 | |||
--end | |||
else | |||
local emulatedx = ex + distance | |||
local emulatedy = VIRTUAL_HEIGHT | |||
local answer = recursiveCalculations(px, emulatedx, emulatedy, edx, -edy, 0) | |||
love.window.setTitle(answer) | |||
return answer | |||
end | |||
elseif edy == 0 then | |||
return ey | |||
else | |||
--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("Why th efuck ") | |||
if distance > (px - ex) then | |||
local anstime = (px - ex) / (ballSpeed * edx) | |||
local bonus = (ballSpeed * edy) * anstime | |||
--print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex)) | |||
-- if (ifspecial == 0) then | |||
return ey + bonus | |||
-- else | |||
-- return -1 | |||
-- end | |||
else | |||
local emulatedx = ex + distance | |||
local emulatedy = 0 | |||
----print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (VIRTUAL_WIDTH-ex)) | |||
return recursiveCalculations(px, emulatedx, emulatedy, edx, -edy, 0) | |||
if distance > (px - ex) then | |||
local anstime = (px - ex) / (ballSpeed * edx) | |||
local bonus = (ballSpeed * edy) * anstime | |||
--print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (px-ex)) | |||
-- if (ifspecial == 0) then | |||
local answer = ey + bonus | |||
love.window.setTitle(answer) | |||
return answer | |||
-- else | |||
-- return -1 | |||
-- end | |||
else | |||
local emulatedx = ex + distance | |||
local emulatedy = 0 | |||
----print("results: " .. bonus .. " " .. edx .. " " .. anstime .. " " .. (VIRTUAL_WIDTH-ex)) | |||
local answer = recursiveCalculations(px, emulatedx, emulatedy, edx, -edy, 0) | |||
love.window.setTitle(answer) | |||
return answer | |||
end | |||
end | |||
end | |||
end |
@@ -93,7 +93,7 @@ function basegame(dt) | |||
if (synctype == 0) then | |||
paddle_SPEED = paddle_SPEED * 1.10 | |||
elseif (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
end | |||
if (synctype == 0) then | |||
AI_SPEED = AI_SPEED * 1.10 | |||
@@ -209,7 +209,7 @@ function basegame(dt) | |||
paddle_SPEED = paddle_SPEED * 1.10 | |||
end | |||
if (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
end | |||
if (synctype == 0) then | |||
AI_SPEED = AI_SPEED * 1.10 | |||
@@ -383,10 +383,10 @@ function goalManager() | |||
player2striken = 0 | |||
ballSpeed = ballSet | |||
if (synctype == 0) then | |||
paddle_SPEED = ballSet / 10 | |||
paddle_SPEED = ballSet | |||
end | |||
if (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
end | |||
AI_SPEED = difficultyl / 10 | |||
@@ -425,15 +425,15 @@ function goalManager() | |||
ballSpeed = ballSet | |||
if (synctype == 0) then | |||
paddle_SPEED = ballSet / 10 | |||
AI_SPEED = ballSet / 10 | |||
paddle_SPEED = ballSet | |||
AI_SPEED = ballSet | |||
end | |||
if (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
AI_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
AI_SPEED = ballSpeed | |||
end | |||
AI_SPEED = difficultyl / 10 | |||
AI_SPEED = difficultyl | |||
if (player1score == ptw) then | |||
ball[i]:reset(i) | |||
@@ -488,7 +488,7 @@ function powerAvailability() | |||
paddle_SPEED = paddle_SPEED * 2 | |||
end | |||
if (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
end | |||
if (synctype == 0) then | |||
AI_SPEED = AI_SPEED * 2.2 | |||
@@ -538,7 +538,7 @@ function powerAvailability() | |||
paddle_SPEED = paddle_SPEED * 2 | |||
end | |||
if (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
end | |||
if (synctype == 0) then | |||
AI_SPEED = AI_SPEED * 2.2 | |||
@@ -1094,7 +1094,7 @@ function clientsBaseGame(dt) | |||
if (synctype == 0) then | |||
paddle_SPEED = paddle_SPEED * 1.10 | |||
elseif (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
end | |||
if (synctype == 0) then | |||
AI_SPEED = AI_SPEED * 1.10 | |||
@@ -1154,7 +1154,7 @@ function clientsBaseGame(dt) | |||
paddle_SPEED = paddle_SPEED * 1.10 | |||
end | |||
if (synctype == 1) then | |||
paddle_SPEED = ballSpeed / 10 | |||
paddle_SPEED = ballSpeed | |||
end | |||
if (synctype == 0) then | |||
AI_SPEED = AI_SPEED * 1.10 | |||
@@ -1291,5 +1291,6 @@ function clientsBaseGame(dt) | |||
goalManager() | |||
powerAvailability() | |||
player1:update(dt) | |||
love.event.quit() | |||
player2:update(dt) | |||
end |