|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654 |
- local counter = 0
- local ship_timer = 0
- function basegame(dt)
- shipManager(dt)
- if gameMode == "reversegame" then
- reversegame(dt)
- end
- if player1nukescore > 300 then
- player1nukescore = 300
- end
- if player2nukescore > 300 then
- player2nukescore = 300
- end
- speedControl()
- balancer()
- effectControl()
- if t < shakeDuration then
- t = t + dt
- end
- --print("T = " .. tostring(t))
- serveBot()
- if gameState == 'play' then
- if (AGAINST_AI == 1) then
- AI(player2, maxBalls, AI_LEVEL)
- end
- if (love.keyboard.isDown(p1control.up) or sectortouched(2)) then
- player1.dy = (paddle_SPEED + p1bonus) * -1
- elseif (love.keyboard.isDown(p1control.down) or sectortouched(3)) then
- player1.dy = paddle_SPEED + p1bonus
- else
- player1.dy = 0
- end
- if (AGAINST_AI == 0) then
- if ((globalState ~= "nettest" and (love.keyboard.isDown(p2control.up) or sectortouched(1))) ) then
- player2.dy = (paddle_SPEED + p2bonus) * -1
- elseif ((globalState ~= "nettest" and (love.keyboard.isDown(p2control.down) or sectortouched(4)))) then
- player2.dy = paddle_SPEED + p2bonus
- elseif (globalState ~= "nettest") then
- player2.dy = 0
- end
- end
- --print(areanuclear .. striken .. player1score .. player2score)
- for i = 1, maxBalls do
- if rules("p1hit", i) then
- --print("inserted")
- if (areanuclear == 0 and striken == 1 and (player1score > ptw*0.8 or player2score > ptw*0.8)) then
- --print("Calling animation")
- --print("AREA NUCLEAR?" .. areanuclear)
- 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
- background_scroll_speed = ballSpeed / 20
- 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
- --print("AREA NUCLEAR?" .. areanuclear)
- if areanuclear == 0 then
- superanimator("tensehit", 1)
- end
- 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.5
- if (synctype == 0) then
- paddle_SPEED = paddle_SPEED * 1.10
- elseif (synctype == 1) then
- paddle_SPEED = ballSpeed
- 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
- background_scroll_speed = ballSpeed / 20
- end
- player1nukescore = player1nukescore + 10
- ball[i].dx = -ball[i].dx
- ball[i].x = player1.x + 30
-
- if (love.keyboard.isDown(p1control.up) or sectortouched(2)) 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) or sectortouched(3) 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 rules("p2hit", i) then
- --ameState = 'quickanim'
- t = 0
- shakeDuration = 1
- if
- (areanuclear == 0 and
- (striken == 1 and (player1score > ptw*0.8 or player2score > ptw*0.8)))
- then
- --print("AREA NUCLEAR?" .. areanuclear)
- 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
- background_scroll_speed = ballSpeed / 20
- striken = 1
- player2striken = 0
- potentialnuke2 = 0
- player2nukescore = 0
- potentialstrike2 = 0
- --print("AREA NUCLEAR?" .. areanuclear)
- if areanuclear == 0 then
- superanimator("tensehit", 2)
- end
- 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
- 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
- background_scroll_speed = ballSpeed / 20
- 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 ((globalState ~= "nettest" and (love.keyboard.isDown(p2control.up) or sectortouched(1)) ) or AI_SPEED < 0 or lastSentKeyClient == p2control.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 (globalState ~= "nettest" and (love.keyboard.isDown(p2control.down)or sectortouched(4))) or AI_SPEED > 0 or lastSentKeyClient == p2control.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
- 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 = 300
- ballSpeed = ballSpeed / (1 + (dt * 2))
- background_scroll_speed = ballSpeed / 20
- end
- player1nukescore = player1nukescore - (dt * 50)
- if player1nukescore < 1 or ball[1].dx > 0 then
- timeIsSlow = false
- player1reverbav = false
- ballSpeed = originalSpeed
- background_scroll_speed = ballSpeed / 20
- sounds["time"]:stop()
- paddle_SPEED = originalPaddle
- end
- end
- if timeIsSlow2 then
- if ballSpeed > originalSpeed / 3 then
- ballSpeed = ballSpeed / (1 + (dt * 2))
- background_scroll_speed = ballSpeed / 20
- end
- player2nukescore = player2nukescore - (dt * 50)
- if player2nukescore < 1 or ball[1].dx < 0 then
- paddle_SPEED = 300
- timeIsSlow2 = false
- player2reverbav = false
- ballSpeed = originalSpeed
- background_scroll_speed = ballSpeed / 20
-
- sounds["time"]:stop()
- paddle_SPEED = originalPaddle
- end
- end
- ball[i]:update(dt)
- end
- end
- goalManager()
- powerAvailability()
- player1:update(dt)
- player2:update(dt)
- end
-
-
-
-
- function debugCheck(dt)
-
- if (gameState == "menu") then
- updateTEXT = "0.8 Galaxy"
- end
- dangerChecker()
- elapsed = elapsed + dt
- rotation = math.sin(elapsed * 2.5) * 0.7
-
- editor()
- mapChanger()
- end
-
- function goalManager()
- for i = 1, maxBalls do
- 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
- background_scroll_speed = ballSpeed / 20
- if (synctype == 0) then
- paddle_SPEED = ballSet
- end
- if (synctype == 1) then
- paddle_SPEED = ballSpeed
- end
-
- AI_SPEED = difficultyl
- for i = 1, maxBalls do
- ball[i]:reset(i, 2)
- end
- if (player2score+1 == ptw+maxBalls-1 and gameMode ~= "practice") then
- for i = 1, maxBalls do
- ball[i]:reset(i)
- end
- sounds["win"]:play()
- gameState = "done"
- TEXT = "Player 2 Won!"
- else
- if globalState ~= "clienttest" or (globalState == "clienttest" and gameState == "1serve") then
- gameState = "1serve"
- serveBot()
- ball[i]:reset(i, 1)
- end
- 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
- background_scroll_speed = ballSpeed / 20
- if (synctype == 0) then
- paddle_SPEED = ballSet
- AI_SPEED = ballSet
- end
- if (synctype == 1) then
- paddle_SPEED = ballSpeed
- AI_SPEED = ballSpeed
- end
-
- AI_SPEED = difficultyl
-
- if (player1score+1 == ptw+maxBalls-1) then
- ball[i]:reset(i)
-
- sounds["win"]:play()
- gameState = "done"
- TEXT = "Player 1 Won"
- else
- if globalState ~= "nettest" or (globalState == "nettest" and gameState == "2serve") then
- gameState = "2serve"
- serveBot()
-
- ball[i]:reset(i, 2)
- end
-
-
- end
- end
- sounds["score"]:play()
- player1score = player1score + 1
-
- end
- end
- end
-
- function powerAvailability()
- if (player1nukescore >= 20 and player1nukescore < 200) then
- potentialstrike1 = 1
- if (((globalState ~= "clienttest" and (love.keyboard.isDown(p1control.super) or doubleclick1 == true)) or (globalState == "clienttest" and lastSentKeyP1 == p1control.super)) ) then
- player1striken = 1
- doubleclick1 = false
- player1reverbav = 0
- end
- end
- if (player1nukescore >= 140) and timeIsSlow2 == false and timeIsSlow == false and (maxBalls > 1 or (ball[1].dx < 0 and ball[1].x < VIRTUAL_WIDTH/2))then
- player1reverbav = 1
- if ((globalState == "clienttest" and lastSentKeyP1 == p1control.counter) or (globalState ~= "clienttest" and (love.keyboard.isDown(p1control.counter) or hold1 == true))) then
- powerControl(1, "special")
- end
- end
- if (player1nukescore >= 200) then
- potentialnuke1 = 1
- if ((globalState == "clienttest" and (lastSentKeyP1 == p1control.super or doubleclick1 == true))or (globalState ~= "clienttest" and (love.keyboard.isDown(p1control.super) or doubleclick1 == true))) then
- sounds["nuke"]:play()
- doubleclick1 = false
- if areanuclear == 1 then
- maxspeed = maxspeed + 50
- end
- areanuclear = 1
- potentialstrike1 = 0
- striken = 0
- ballSpeed = ballSpeed * 2
- background_scroll_speed = ballSpeed / 20
- if (synctype == 0) then
- paddle_SPEED = paddle_SPEED * 2
- end
- if (synctype == 1) then
- paddle_SPEED = ballSpeed
- end
- if (synctype == 0) then
- AI_SPEED = AI_SPEED * 2.2
- end
- if (synctype == 1) then
- AI_SPEED = ballSpeed * 1.1 / 10
- end
- player1nukescore = 0
- player1reverbav = 0
- potentialnuke1 = 0
- end
- end
- if (player2nukescore >= 20 and player2nukescore < 200) then
- potentialstrike2 = 1
- if (AGAINST_AI == 0) then
- if ((globalState ~= "nettest" and (love.keyboard.isDown(p2control.super) or doubleclick2)) or lastSentKeyClient == p2control.super ) then
- player2striken = 1
- player2reverbav = 0
- doubleclick2 = false
- end
- end
- end
- if (player2nukescore >= 140) and timeIsSlow == false and timeIsSlow2 == false and (maxBalls > 1 or (ball[1].dx > 0 and ball[1].x > VIRTUAL_WIDTH/2)) then
- player2reverbav = 1
- --print("Available counter, " .. globalState .. tostring(love.keyboard.isDown(p2control.counter)))
- if (globalState ~= "nettest" and (love.keyboard.isDown(p2control.counter) or hold2)) or lastSentKeyClient == p2control.counter then
- sounds["time"]:play()
- player2reverbav = false
- timeIsSlow2 = true
- originalPaddle = paddle_SPEED
- originalSpeed = ballSpeed
- player2reverbav = 0
- potentialnuke2 = 0
- potentialstrike2 = 0
- end
- end
- if (player2nukescore >= 200) then
- potentialnuke2 = 1
- if (((globalState ~= "nettest" and (love.keyboard.isDown(p2control.super) or doubleclick2)) or lastSentKeyClient == p2control.super)) and AGAINST_AI == 0 then
- sounds["nuke"]:play()
- doubleclick2 = false
- if areanuclear == 1 then
- maxspeed = maxspeed + 50
- end
- potentialstrike2 = 0
- areanuclear = 1
- player2reverbav = 0
- ballSpeed = ballSpeed * 2
- background_scroll_speed = ballSpeed / 20
- if (synctype == 0) then
- paddle_SPEED = paddle_SPEED * 2
- end
- if (synctype == 1) then
- paddle_SPEED = ballSpeed
- 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
- potentialnuke2 = 0
- end
- end
- end
-
- function editor()
- if (gameState == "editor") then
- if debug then
- --print("Editor is active!")
- end
- local mx, my = love.mouse.getPosition()
- mx = mx * DIFFERENCE_X
- my = my * DIFFERENCE_Y
- if (love.mouse.isDown(2)) then
- wallbreaker(mx, my)
- end
- if (love.mouse.isDown(3)) then
- table.insert(walls, newWall(mx, my, 10, wall1width))
- end
- end
- end
-
- function nuclearDraw()
- love.graphics.setColor(1, 1, 1, 1)
- for i = 1, maxBalls do
- love.graphics.circle("fill", ball[i].x, ball[i].y, explosionRange * 100, 100)
- end
- player1.RED, player1.GREEN, player1.BLUE, player2.RED, player2.GREEN, player2.BLUE =
- nuclearanimation / 3,
- nuclearanimation / 3,
- nuclearanimation / 3,
- nuclearanimation / 3,
- nuclearanimation / 3,
- nuclearanimation / 3
-
-
- for i = 1, maxBalls do
- love.graphics.setColor(nuclearanimation / 3, nuclearanimation / 3, nuclearanimation / 3, 1)
- ball[i]:render("controlled")
- end
- player1:render()
- player2:render()
- end
-
- function winDraw(who)
-
- love.graphics.setColor(0, 0, 0, 1)
- if who == 1 then
- love.graphics.circle("fill", player2.x, player2.y, explosionRange * 100, 100)
- love.graphics.setColor(0.7, 0.1, 0.1, 1)
- love.graphics.circle("fill", player2.x, player2.y, explosionRange * 90, 100)
- love.graphics.setColor(0.1, 0.7, 0.1, 1)
- love.graphics.circle("fill", player2.x, player2.y, explosionRange * 80, 100)
- love.graphics.setColor(0.1, 0.1, 0.7, 1)
- love.graphics.circle("fill", player2.x, player2.y, explosionRange * 70, 100)
- love.graphics.setColor(0, 0, 0, 1)
- love.graphics.circle("fill", player2.x, player2.y, explosionRange * 60, 100)
- --print("cicrleexplostion at " .. explosionRange)
- else
- love.graphics.circle("fill", player1.x, player1.y, explosionRange * 100, 100)
- love.graphics.setColor(0.7, 0.1, 0.1, 1)
- love.graphics.circle("fill", player1.x, player1.y, explosionRange * 90, 100)
- love.graphics.setColor(0.1, 0.7, 0.1, 1)
- love.graphics.circle("fill", player1.x, player1.y, explosionRange * 80, 100)
- love.graphics.setColor(0.1, 0.1, 0.7, 1)
- love.graphics.circle("fill", player1.x, player1.y, explosionRange * 70, 100)
- love.graphics.setColor(0, 0, 0, 1)
- love.graphics.circle("fill", player1.x, player1.y, explosionRange * 60, 100)
- end
- love.graphics.setColor(1, 1, 1, 1)
- love.graphics.printf(TEXT, 0, 20, VIRTUAL_WIDTH, "center")
- end
-
- function normalDraw()
- if (areanuclear == 1) then
- love.graphics.clear(1, 1, 1, 1)
- else
- love.graphics.clear(40 / 255, 40 / 255, 40 / 255, 1)
- love.graphics.draw(background, 0, -backgroundScroll)
- for k, ship in pairs(ships) do
- ship:render()
- end
- end
- if gameState == "assign" then
- love.graphics.clear(50 / 255, 50 / 255, 50 / 255, 255)
- love.graphics.printf("SELECT BUTTON", 0, VIRTUAL_HEIGHT / 2, VIRTUAL_WIDTH, "center")
- end
- for i, explosion in ipairs(explosions) do
- explosion:render()
- --print("exploding")
- end
- staticanimator()
-
- if MAP_TYPE == 1 then
- love.graphics.setColor(1, 0, 0.20, 1)
- love.graphics.rectangle("fill", VIRTUAL_WIDTH * 0.5, 0, 10, VIRTUAL_HEIGHT * 0.3)
- love.graphics.rectangle("fill", VIRTUAL_WIDTH * 0.5, VIRTUAL_HEIGHT * 0.7, 10, VIRTUAL_HEIGHT * 0.3)
- love.graphics.setColor(1, 1, 1, 1)
- end
- if MAP_TYPE == 2 then
- for i, wall in ipairs(walls) do
- love.graphics.setColor(1, 1, 1, 1)
- love.graphics.rectangle("fill", wall.wallx, wall.wally, 10, wall.wallheight)
- end
- end
-
- pongDraw()
- love.graphics.setFont(smallfont)
- for i = 1, maxBalls do
- if areanuclear == 1 then
- --love.window.setTitle('rendering black')
- ball[i]:render("black")
- else
- --love.window.setTitle('rendering white')
- ball[i]:render(" ")
- end
- end
-
- end
- function pongDraw()
- --print("Drawing classic pong")
- love.graphics.setColor(1, 1, 1, 1)
- love.graphics.printf(TEXT, 0, 20, VIRTUAL_WIDTH, "center")
- love.graphics.setFont(smallfont)
- love.graphics.setFont(scorefont)
- if (areanuclear == 1) then
- love.graphics.setColor(0, 0, 0, 1)
- end
- love.graphics.print(tostring(math.floor(player1score)), VIRTUAL_WIDTH / 2 - 500, VIRTUAL_HEIGHT / 12)
- love.graphics.print(tostring(math.floor(player2score)), VIRTUAL_WIDTH / 2 + 400, VIRTUAL_HEIGHT / 12)
- love.graphics.setColor(1, 1, 1, 1)
- displayPoints()
- player1:render()
- player2:render()
-
- end
- function practiceDraw()
- player1:render()
- love.graphics.rectangle("fill", VIRTUAL_WIDTH-10, 0, 10, VIRTUAL_HEIGHT)
- love.graphics.setColor(1, 1, 1, 1)
- love.graphics.printf(TEXT, 0, 20, VIRTUAL_WIDTH, "center")
- love.graphics.setFont(smallfont)
- love.graphics.setFont(scorefont)
- love.graphics.print(tostring(math.floor(player1score)), VIRTUAL_WIDTH / 2 - 500, VIRTUAL_HEIGHT / 12)
- end
- function menuDraw()
- love.graphics.setColor(1, 1, 1, 1)
- love.graphics.printf(TEXT, 0, 20, VIRTUAL_WIDTH, "center")
- love.graphics.setFont(smallfont)
- love.graphics.printf(updateTEXT, 0, VIRTUAL_HEIGHT * 0.95, VIRTUAL_WIDTH, "left")
- if MAP_TYPE == 1 then
- love.graphics.setColor(1, 0, 0.20, 1)
- love.graphics.rectangle("fill", VIRTUAL_WIDTH * 0.5, 0, 10, VIRTUAL_HEIGHT * 0.3)
- love.graphics.rectangle("fill", VIRTUAL_WIDTH * 0.5, VIRTUAL_HEIGHT * 0.7, 10, VIRTUAL_HEIGHT * 0.3)
- love.graphics.setColor(1, 1, 1, 1)
- end
- if MAP_TYPE == 2 then
- for i, wall in ipairs(walls) do
- love.graphics.setColor(1, 1, 1, 1)
- love.graphics.rectangle("fill", wall.wallx, wall.wally, 10, wall.wallheight)
- end
- end
- player1:render()
- player2:render()
- ball[1]:render("controlled")
- if gameState == "touchcontrols" then
- if doubleclick1 or doubleclick2 then
- gameState = "menu"
- globalState = "menu"
- resettinggenius()
- end
- love.graphics.setFont(smallfont)
- love.graphics.printf("The green zones are for moving up and down, double tap the red zone for special attack or to start the serve.", 10, 150, VIRTUAL_WIDTH, "center")
- love.graphics.printf("Swipe from red to green for stopping time", 10, 450, VIRTUAL_WIDTH, "center")
- end
- if gameState == "windowsettings" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, settings, sounds, "right")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "editor" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, editorpicks, sounds, "right")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "speedSettings" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, speedParameters, sounds, "middle")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "controlSettings" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, controlSettings, sounds, "control")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "gameMode" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, modeSelectorButtons, sounds, "middle")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "chooseIP" then
- IPselect = {}
- if isAndroid then
- table.insert(
- IPselect,
- newButton(
- IPnew,
- function()
- love.keyboard.setTextInput( true, 0, VIRTUAL_HEIGHT, VIRTUAL_WIDTH, VIRTUAL_HEIGHT/3)
- end,
- "stationary"
- )
- )
- end
- table.insert(
- IPselect,
- newButton(
- "LANHost",
- function()
- globalState = "selfhost"
- AGAINST_AI = 0
- gameState = "1serve"
- ball[1]:reset(1, 1)
- player2.dy = 0
- end,
- "stationary"
- )
- )
- table.insert(
- IPselect,
- newButton(
- "Check Server",
- function()
- IP = IPnew
- counter = 0
- end,
- "stationary"
- )
- )
- if status == "offline" then
- animateConnection()
- elseif status == "nettest" and IP == IPnew then
- table.insert(
- IPselect,
- newButton(
- "Connect as Host",
- function()
- resettinggenius()
- globalState = "nettest"
- AGAINST_AI = 0
- gameState = "1serve"
- ball[1]:reset(1, 1)
- player2.dy = 0
- end,
- "stationary"
- )
- )
-
- elseif status == "clienttest" and IP == IPnew then
- table.insert(
- IPselect,
- newButton(
- "Connect as Guest",
- function()
- resettinggenius()
- globalState = "clienttest"
- AGAINST_AI = 0
- gameState = "1serve"
- ball[1]:reset(1, 1)
- player2.dy = 0
- end,
- "stationary"
- )
- )
- elseif status == "full" then
- love.graphics.printf("SERVER FULL", 0, VIRTUAL_HEIGHT / 2, VIRTUAL_WIDTH, "center")
- end
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, IPselect, sounds, "middle")
- love.keyboard.mouseisReleased = false
- if not isAndroid then
- love.graphics.printf(IPnew, 0, VIRTUAL_HEIGHT / 4, VIRTUAL_WIDTH, "center")
- end
- love.keyboard.mouseisReleased = false
- end
- if gameState == "menu" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, buttons, sounds, "middle")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "difficulty" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, difbuttons, sounds, "middle")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "multiMode" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, playerCountButtons, sounds, "middle")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "prdiff" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, pracdiff, sounds, "playercount")
- love.keyboard.mouseisReleased = false
- end
- if gameState == 'start' then
- love.graphics.push()
- love.graphics.translate(VIRTUAL_WIDTH * 0.4, VIRTUAL_HEIGHT * 0.5)
- love.graphics.rotate(rotation)
- love.graphics.setFont(smallfont)
- love.graphics.setColor(200/255, 200/255, 200/255, 1)
- if isAndroid then
- love.graphics.print("Tap to Start", WINDOW_WIDTH / -10, VIRTUAL_HEIGHT / 8)
- else
- love.graphics.print("Press Enter to Start", WINDOW_WIDTH / -10, VIRTUAL_HEIGHT / 8)
- end
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.pop()
- end
- end
- function baseDraw()
- love.graphics.setColor(255, 255, 255, 1)
- love.graphics.draw(background, 0,-backgroundScroll)
-
- if shakeDuration > t then
-
- local dx = love.math.random(-shakeMagnitude, shakeMagnitude)
- local dy = love.math.random(-shakeMagnitude, shakeMagnitude)
- love.graphics.translate(dx, dy)
- end
- if globalState == 'menu' then
- --print("Drawing menuDraw")
- if gameState == 'animation' then
-
- --print("Drawing animation")
- intro()
- end
- if gameState ~= 'animation' then
- --print("Drawing notanimtaion")
- love.graphics.setFont(scorefont)
- menuDraw()
- end
- end
-
- 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")
- normalDraw()
-
- end
- if gameState == 'done' and player1score > player2score then
- winDraw(1)
- elseif gameState == 'done' and player1score < player2score then
- winDraw(2)
- end
- end
- if paused then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, pauseButtons, sounds, "middle")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "done" then
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, doneButtons, sounds, "middle")
- love.keyboard.mouseisReleased = false
- end
- if gameState == "assign" then
- love.graphics.clear(50 / 255, 50 / 255, 50 / 255, 255)
- love.graphics.printf("SELECT BUTTON", 0, VIRTUAL_HEIGHT / 2, VIRTUAL_WIDTH, "center")
- end
- end
- function androidDraw()
- --HOME BUTTON HERE
- mymenu:butt(gameState, VIRTUAL_WIDTH, VIRTUAL_HEIGHT, androidButtons, sounds, "android")
- if showTouchControls then
- love.graphics.setColor(15/255, 255/255, 15/255, 0.5)
- love.graphics.rectangle("fill", 0, 0, 100, VIRTUAL_HEIGHT)
- love.graphics.setColor(15/255, 255/255, 15/255, 0.5)
- love.graphics.rectangle("fill", VIRTUAL_WIDTH-100, 0, 50, VIRTUAL_HEIGHT)
- love.graphics.setColor(255/255, 15/255, 15/255, 0.5)
- love.graphics.rectangle("fill", 100, 0, VIRTUAL_WIDTH/2-100, VIRTUAL_HEIGHT)
- love.graphics.rectangle("fill", VIRTUAL_WIDTH/2, 0, VIRTUAL_WIDTH/2-100, VIRTUAL_HEIGHT)
- love.graphics.setColor(0, 0, 0, 0.5)
- love.graphics.rectangle("fill", VIRTUAL_WIDTH/2-5, 0, 10, VIRTUAL_HEIGHT)
- end
- end
- function renderEditor()
- if not blockinput then
- love.graphics.setColor(1, 0, 0, 1)
- love.graphics.rectangle("fill", mx, my, 10, wall1width)
- love.graphics.setColor(1, 1, 1, 1)
- end
- for i, wall in ipairs(walls) do
- love.graphics.setColor(1, 1, 1, 1)
- love.graphics.rectangle("fill", wall.wallx, wall.wally, 10, wall.wallheight)
- end
- end
-
- function intro()
- love.graphics.draw(background, 0,0)
- love.graphics.setColor(255, 255, 255, light / 255)
- love.graphics.draw(image, 0, 0)
- end
-
-
- function displayPoints()
- love.graphics.setFont(smallfont)
- if areanuclear == 1 then
- love.graphics.setColor(0,0,0,1)
- end
- if (potentialstrike1 == 1 and potentialnuke1 == 0 and player1reverbav == 0) then --FLAG: AVAILABLE SUPER
- if (player1striken == 0) then
- love.graphics.print(
- tostring(math.floor(player1nukescore) .. "[" .. p1control.super .. "]"),
- VIRTUAL_WIDTH / 2 - 500,
- VIRTUAL_HEIGHT / 60
- )
- else
- love.graphics.print(tostring("READY"), VIRTUAL_WIDTH / 2 - 500, VIRTUAL_HEIGHT / 60)
- end
- elseif (player1reverbav == 1 and potentialnuke1 == 0 ) then
- love.graphics.print(
- tostring(
- math.floor(player1nukescore) .. "[" .. p1control.super .. "]" .. " [" .. p1control.counter .. "]"
- ),
- VIRTUAL_WIDTH / 2 - 500,
- VIRTUAL_HEIGHT / 60
- )
- elseif (potentialnuke1 == 1) then
- love.graphics.setColor(255, 0, 0, 255)
- love.graphics.print(
- tostring(
- math.floor(player1nukescore) .. "[" .. p1control.super .. "]" .. " [" .. p1control.counter .. "]"
- ),
- VIRTUAL_WIDTH / 2 - 500,
- VIRTUAL_HEIGHT / 60
- )
- love.graphics.setColor(255, 255, 255, 255)
- elseif (potentialnuke1 == 1) then
- love.graphics.setColor(255, 0, 0, 255)
- love.graphics.print(
- tostring(
- math.floor(player1nukescore) .. "[" .. p1control.super .. "]"
- ),
- VIRTUAL_WIDTH / 2 - 500,
- VIRTUAL_HEIGHT / 60
- )
- love.graphics.setColor(255, 255, 255, 255)
- else
- love.graphics.print(tostring(math.floor(player1nukescore)), VIRTUAL_WIDTH / 2 - 500, VIRTUAL_HEIGHT / 60)
- end
- if (potentialstrike2 == 1 and player2reverbav == 0) then
- if (player2striken == 0) then
- love.graphics.print(
- tostring(math.floor(player2nukescore) .. "[" .. p2control.super .. "]"),
- VIRTUAL_WIDTH / 2 + 430,
- VIRTUAL_HEIGHT / 60
- )
- else
- love.graphics.print(tostring("READY"), VIRTUAL_WIDTH / 2 + 430, VIRTUAL_HEIGHT / 60)
- end
- elseif (potentialnuke2 == 1) then
- love.graphics.setColor(255, 0, 0, 255)
- love.graphics.print(
- tostring(math.floor(player2nukescore) .. "[" .. p2control.super .. "] [" .. p2control.counter .. "]"),
- VIRTUAL_WIDTH / 2 + 400,
- VIRTUAL_HEIGHT / 60
- )
- love.graphics.setColor(255, 255, 255, 255)
- elseif (potentialnuke2 == 1 and maxBalls > 1) then
- love.graphics.setColor(255, 0, 0, 255)
- love.graphics.print(
- tostring(math.floor(player2nukescore) .. "[" .. p2control.super .. "]"),
- VIRTUAL_WIDTH / 2 + 430,
- VIRTUAL_HEIGHT / 60
- )
- love.graphics.setColor(255, 255, 255, 255)
- elseif (player2reverbav == 1 and potentialnuke2 == 0 ) then
- love.graphics.print(
- tostring(math.floor(player2nukescore) .. "[" .. p2control.super .. "] [" .. p2control.counter .. "]"),
- VIRTUAL_WIDTH / 2 + 400,
- VIRTUAL_HEIGHT / 60
- )
- else
- love.graphics.print(tostring(math.floor(player2nukescore)), VIRTUAL_WIDTH / 2 + 430, VIRTUAL_HEIGHT / 60)
- end
- end
-
- function hitIdentifier()
- if (gameMode == "practice") then
- MAP_TYPE = 0
- if ball[i].x > VIRTUAL_WIDTH * 0.99 then
- soundtype = love.math.random(1, 5)
- sounds["wallhit"]:setPitch(ballSpeed / 250)
- sounds["wallhit"]:play()
- if (ball[i].dx > 0) then
- ball[i].x = ball[i].x - 20
- else
- ball[i].x = ball[i].x + 20
- end
- ball[i].dx = -ball[i].dx
- end
- end
- if (MAP_TYPE == 1) then
- if
- ball[i].y < VIRTUAL_HEIGHT * 0.3 and ball[i].x > VIRTUAL_WIDTH * 0.5 and
- ball[i].x < VIRTUAL_WIDTH * 0.5 + 5
- then
- soundtype = love.math.random(1, 5)
- sounds["wallhit"]:setPitch(ballSpeed / 250)
- sounds["wallhit"]:play()
- if (ball[i].dx > 0) then
- ball[i].x = ball[i].x - 20
- else
- ball[i].x = ball[i].x + 20
- end
- ball[i].dx = -ball[i].dx
- end
- if
- ball[i].y > VIRTUAL_HEIGHT * 0.7 and ball[i].x > VIRTUAL_WIDTH * 0.5 and
- ball[i].x < VIRTUAL_WIDTH * 0.5 + 5
- then
- soundtype = love.math.random(1, 5)
- sounds["wallhit"]:setPitch(ballSpeed / 250)
- sounds["wallhit"]:play()
- if (ball[i].dx > 0) then
- ball[i].x = ball[i].x - 20
- else
- ball[i].x = ball[i].x + 20
- end
- ball[i].dx = -ball[i].dx
- end
- end
- if (MAP_TYPE == 2) then
- for i, wall in ipairs(walls) do
- if
- (ball[1].y > wall.wally and ball[1].y < wall.wally + wall.wallheight and
- ball[1].x > wall.wallx - ballSpeed / 200 and
- ball[1].x < wall.wallx + 10 + ballSpeed / 200)
- then
- controllerSer()
- soundtype = love.math.random(1, 5)
- sounds["wallhit"]:setPitch(ballSpeed / 250)
- sounds["wallhit"]:play()
- if (ball[1].dx > 0) then
- ball[1].x = ball[1].x - 1
- else
- ball[1].x = ball[1].x + 1
- end
- ball[1].dx = -ball[1].dx
- elseif
- (ball[1].y > wall.wally - 15 and ball[1].y < wall.wally + wall.wallheight + 10 and
- ball[1].x > wall.wallx and
- ball[1].x < wall.wallx + 10)
- then
- controllerSer()
- soundtype = love.math.random(1, 5)
- sounds["wallhit"]:setPitch(ballSpeed / 250)
- sounds["wallhit"]:play()
- if (ball[1].dy > 0) then
- ball[1].y = ball[1].y - 1
- else
- ball[1].y = ball[1].y + 1
- end
- ball[1].dy = -ball[1].dy
- 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 < -10 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 and ball[i].disabled == false
- end
- end
- end
- function clientsBaseGame(dt)
- shipManager(dt)
- if gameMode == "reverse" then
- reversegame(dt)
- end
- if player1nukescore > 300 then
- player1nukescore = 300
- end
- if player2nukescore > 300 then
- player2nukescore = 300
- end
- speedControl()
- balancer()
- effectControl()
- if t < shakeDuration then
- t = t + dt
- end
-
- if (lastSentKeyP1 == p1control.up) then
- player1.dy = (paddle_SPEED + p2bonus) * -1
- --print("moving player1 up")
- elseif (lastSentKeyP1 == p1control.down) then
- player1.dy = paddle_SPEED + p2bonus
- --print("moving player1 down")
- else
- player1.dy = 0
- ----print("stopping player")
- end
- if ((love.keyboard.isDown(p2control.up) or sectortouched(1))) then
- player2.dy = (paddle_SPEED + p2bonus) * -1
- elseif ((love.keyboard.isDown(p2control.down)) or sectortouched(4)) then
- player2.dy = paddle_SPEED + p2bonus
- else
- player2.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*0.8 or player2score > ptw*0.8)) then
- --print("Calling animation")
- superanimator("tensehit", 1)
- --print("AREA NUCLEAR?" .. areanuclear)
- 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
- background_scroll_speed = ballSpeed / 20
- 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
- if areanuclear == 0 then
- superanimator("tensehit", 1)
- end
- 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.5
- if (synctype == 0) then
- paddle_SPEED = paddle_SPEED * 1.10
- elseif (synctype == 1) then
- paddle_SPEED = ballSpeed
- 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
- background_scroll_speed = ballSpeed / 20
- 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*0.8 or player2score > ptw*0.8)))
- then
- --print("AREA NUCLEAR?" .. areanuclear)
- 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
- background_scroll_speed = ballSpeed / 20
- striken = 1
- player2striken = 0
- potentialnuke2 = 0
- player2nukescore = 0
- potentialstrike2 = 0
- --print("AREA NUCLEAR?" .. areanuclear)
- if areanuclear == 0 then
- superanimator("tensehit", 2)
- end
- 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
- 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
- background_scroll_speed = ballSpeed / 20
- 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 sectortouched(1)) 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 sectortouched(4))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 = 300
- ballSpeed = ballSpeed / (1 + (dt * 2))
- background_scroll_speed = ballSpeed / 20
- end
- player1nukescore = player1nukescore - (dt * 50)
- if player1nukescore < 1 or ball[1].dx > 0 then
- timeIsSlow = false
- player1reverbav = false
- ballSpeed = originalSpeed
- background_scroll_speed = ballSpeed / 20
- sounds["time"]:stop()
- paddle_SPEED = originalPaddle
- end
- end
- if timeIsSlow2 then
- if ballSpeed > originalSpeed / 3 then
- ballSpeed = ballSpeed / (1 + (dt * 2))
- background_scroll_speed = ballSpeed / 20
- end
- player2nukescore = player2nukescore - (dt * 50)
- if player2nukescore < 1 or ball[1].dx < 0 then
- paddle_SPEED = 300
- timeIsSlow2 = false
- player2reverbav = false
- ballSpeed = originalSpeed
- background_scroll_speed = ballSpeed / 20
- sounds["time"]:stop()
- paddle_SPEED = originalPaddle
- end
- end
- ball[i]:update(dt)
- end
- end
- goalManager()
- powerAvailability()
- player1:update(dt)
- player2:update(dt)
- end
-
- function animateConnection()
- if GetIPType(IP) ~= 1 then
- love.graphics.printf("WRONG SYNTAX", 0, VIRTUAL_HEIGHT-80, VIRTUAL_WIDTH, "center")
- else
- counter = counter + 1 / love.timer.getFPS()
- if counter < 0.8 then
- love.graphics.printf("TRYING TO CONNECT.", 0, VIRTUAL_HEIGHT-80, VIRTUAL_WIDTH, "center")
- elseif counter < 1.6 then
- love.graphics.printf("TRYING TO CONNECT..", 0, VIRTUAL_HEIGHT-80, VIRTUAL_WIDTH, "center")
- elseif counter < 2.4 then
- love.graphics.printf("TRYING TO CONNECT...", 0, VIRTUAL_HEIGHT-80, VIRTUAL_WIDTH, "center")
- else
- love.graphics.printf("NO CONNECTION!", 0, VIRTUAL_HEIGHT-80, VIRTUAL_WIDTH, "center")
- end
- end
- end
- function GetIPType(ip)
- -- must pass in a string value
- if ip == nil or type(ip) ~= "string" then
- return 0
- end
-
- -- check for format 1.11.111.111 for ipv4
- local chunks = {ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)")}
- if (#chunks == 4) then
- for _,v in pairs(chunks) do
- if (tonumber(v) < 0 or tonumber(v) > 255) then
- return 0
- end
- end
- return 1
- else
- return 0
- end
-
- -- check for ipv6 format, should be 8 'chunks' of numbers/letters
- local _, chunks = ip:gsub("[%a%d]+%:?", "")
- if chunks == 8 then
- return 2
- end
-
- -- if we get here, assume we've been given a random string
- return 3
- end
-
- function menuDemo(dt)
- paddle_SPEED = 200
- ballSpeed = 200
- background_scroll_speed = ballSpeed / 20
- if ball[1].dx > 0 then
- AI(player2, maxBalls, 1300)
- player1.goal = 360
- elseif ball[1].dx < 0 then
- AI(player1, maxBalls, 1300)
- player2.goal = 360
- end
- --print(neededTarget, neededTarget1)
- --print("menu demo active")
- ball[1]:update(dt)
- player1:update(dt)
- player2:update(dt)
- if ball[1].x < player1.x+15 then
- player1.y = ball[1].y-player1.height
- end
- if ball[1].x > player2.x-15 then
- player2.y = ball[1].y-player2.height
- end
- if ball[1].x >= player2.x-7 then
- sounds["beep"]:setPitch(ballSpeed / 250)
- sounds["beep"]:play()
- select = math.random(1, 2)
- if ball[1].dy < 0 then
- select = math.random(1, 5)
- if select == 1 then
- ball[1].dy = -1
- elseif select == 2 then
- ball[1].dy = -1.2
- elseif select == 3 then
- ball[1].dy = -1.5
- elseif select == 4 then
- ball[1].dy = -1.8
- elseif select == 5 then
- ball[1].dy = -2
- end
- else
- select = math.random(1, 5)
- if select == 1 then
- ball[1].dy = 1
- elseif select == 2 then
- ball[1].dy = 1.2
- elseif select == 3 then
- ball[1].dy = 1.5
- elseif select == 4 then
- ball[1].dy = 1.8
- elseif select == 5 then
- ball[1].dy = 2
- end
- end
- ball[1].x = player2.x-8
- ball[1].dx = -ball[1].dx
- end
- if ball[1].x <= player1.x+7 then
- sounds["beep"]:setPitch(ballSpeed / 250)
- sounds["beep"]:play()
- select = math.random(1, 2)
- if ball[1].dy < 0 then
- select = math.random(1, 5)
- if select == 1 then
- ball[1].dy = -1
- elseif select == 2 then
- ball[1].dy = -1.2
- elseif select == 3 then
- ball[1].dy = -1.5
- elseif select == 4 then
- ball[1].dy = -1.8
- elseif select == 5 then
- ball[1].dy = -2
- end
- else
- select = math.random(1, 5)
- if select == 1 then
- ball[1].dy = 1
- elseif select == 2 then
- ball[1].dy = 1.2
- elseif select == 3 then
- ball[1].dy = 1.5
- elseif select == 4 then
- ball[1].dy = 1.8
- elseif select == 5 then
- ball[1].dy = 2
- end
- end
- ball[1].x = player1.x+8
- ball[1].dx = -ball[1].dx
- end
-
- if ball[1].y <= 0 then
- soundtype = love.math.random(1, 5)
- sounds["wallhit"]:setPitch(ballSpeed / 250)
- sounds["wallhit"]:play()
- ball[1].y = 0
- ball[1].dy = -ball[1].dy
- end
-
- -- -4 to account for the ball's size
- if ball[1].y >= VIRTUAL_HEIGHT - 40 then
- soundtype = love.math.random(1, 5)
- sounds["wallhit"]:setPitch(ballSpeed / 250)
- sounds["wallhit"]:play()
- ball[1].y = VIRTUAL_HEIGHT - 40
- ball[1].dy = -ball[1].dy
-
- end
- end
- function effectControl()
- if player1score > 0.8 * ptw or player2score > 0.8 * ptw then
- for i = 1, maxBalls do
- if math.abs(ball[i].x - VIRTUAL_WIDTH/2) < 10 and #explosions < 1 then
- table.insert(explosions, explosion(love.math.random(100, VIRTUAL_WIDTH-100), love.math.random(player1.y, player2.y), 100, {player1.y/2.81/255,player2.y/2.81/255,ball[1].y/2.81/255,0.4}))
- end
- end
- end
- for i, explosion in ipairs(explosions) do
- if explosion.killed then
- table.remove(explosions, i)
- --print("buried the body")
- end
- end
- end
- local ship_goal = love.math.random(2, 20)
- function shipManager(dt)
- ship_timer = ship_timer + dt
- if ship_timer > ship_goal then
- print("summoning ship")
- ship_timer = 0
- ship_goal = love.math.random(2,20)
- table.insert(ships, ship())
- end
- for k, ship in pairs(ships) do
- ship:update(dt)
-
- if ship.y < -ship.height and ship.direction == 0 then
- table.remove(ships, k)
- elseif ship.y > VIRTUAL_HEIGHT + ship.height and ship.direction == 1 then
- table.remove(ships, k)
- end
- end
- end
|