Add "Surfer" achievement to Space Invasion.
authormikade
Mon, 31 Oct 2011 19:40:39 +0200
changeset 6253 d73317579ae4
parent 6252 8d598aa498b0
child 6254 e90fb60cb46d
Add "Surfer" achievement to Space Invasion. Balance "Shield Miser" in Space Invasion. Fix disappearing ghost bug in Racer Extend waypoint limit to 8 in Racer Lengthen ghost tracking interval to improve performance in Racer. Allow users to view score between turns now that HideMission() is fixed.
share/hedgewars/Data/Scripts/Multiplayer/Racer.lua
share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Mon Oct 31 16:56:48 2011 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Mon Oct 31 19:40:39 2011 +0200
@@ -1,6 +1,6 @@
 
 ------------------------------------------
--- RACER 0.4
+-- RACER 0.5
 -- map-independant racing script
 -- by mikade
 -----------------------------------------
@@ -52,6 +52,15 @@
 -- update user feedback
 -- add more sounds
 
+-------
+-- 0.5
+-------
+
+-- fix ghost disappearing if hog falls in water or somehow dies
+-- lengthen ghost tracking interval to improve performance on slower machines
+-- increase waypoint limit to 8
+-- allow for persistent showmission information
+
 -----------------------------
 -- SCRIPT BEGINS
 -----------------------------
@@ -116,7 +125,11 @@
 local wpActive = {}
 local wpRad = 450 --75
 local wpCount = 0
-local wpLimit = 5
+local wpLimit = 8
+
+local roundN
+local lastRound
+local RoundHasChanged
 
 -------------------
 -- general methods
@@ -317,31 +330,50 @@
 
 end
 
+function onNewRound()
+
+	roundNumber = roundNumber + 1
+
+	totalComment = ""
+	for i = 0, (TeamsCount-1) do
+			if teamNameArr[i] ~= " " then				-- teamScore[teamClan[i]]
+				teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
+				totalComment = totalComment .. teamComment[i]
+			elseif teamNameArr[i] == " " then
+				teamComment[i] = "|"
+			end
+	end
+
+	ShowMission(	loc("RACER"),
+					loc("STATUS UPDATE"),
+					loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
+					loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
+
+	-- end game if its at round limit
+	if roundNumber == roundLimit then
+		for i = 0, (numhhs-1) do
+			if GetHogClan(hhs[i]) ~= bestClan then
+				SetEffect(hhs[i], heResurrectable, false)
+				SetHealth(hhs[i],0)
+			end
+		end
+		gameOver = true
+		TurnTimeLeft = 1
+	end
+
+end
+
 function CheckForNewRound()
 
-	if GetHogClan(CurrentHedgehog) == firstClan then
-
-		roundNumber = roundNumber + 1
+	-------------
+	------ new
+	-------------
 
-		totalComment = ""
-		for i = 0, (TeamsCount-1) do
-				if teamNameArr[i] ~= " " then				-- teamScore[teamClan[i]]
-					teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
-					totalComment = totalComment .. teamComment[i]
-				elseif teamNameArr[i] == " " then
-					teamComment[i] = "|"
-				end
-		end
-
-		ShowMission(	loc("RACER"),
-				loc("STATUS UPDATE"),
-				loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
-				loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
-
-		-- end game if its at round limit
-		if roundNumber == roundLimit then
+	--[[turnN = turnN + 1
+	if gameBegun == false then
+		if turnN == 2 then
 			for i = 0, (numhhs-1) do
-				if GetHogClan(hhs[i]) ~= bestClan then
+				if hhs[i] ~= nil then
 					SetEffect(hhs[i], heResurrectable, false)
 					SetHealth(hhs[i],0)
 				end
@@ -349,7 +381,39 @@
 			gameOver = true
 			TurnTimeLeft = 1
 		end
+	else
 
+
+	end]]
+
+	--[[if roundBegun == true then
+
+		if RoundHasChanged == true then
+			roundN = roundN + 1
+			RoundHasChanged = false
+			onNewRound()
+		end
+
+		if lastRound ~= TotalRounds then -- new round, but not really
+
+			if RoundHasChanged == false then
+				RoundHasChanged = true
+			end
+
+		end
+
+		AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+
+		lastRound = TotalRounds
+
+	end]]
+
+	------------
+	----- old
+	------------
+
+	if GetHogClan(CurrentHedgehog) == firstClan then
+		onNewRound()
 	end
 
 end
@@ -402,6 +466,11 @@
 
 
 function onGameStart()
+
+	roundN = 0
+	lastRound = TotalRounds
+	RoundHasChanged = false -- true
+
 	RebuildTeamInfo()
 
 	ShowMission	(
@@ -413,8 +482,6 @@
 
 				"", 4, 4000
 				)
-
-
 end
 
 function PlaceWayPoint(x,y)
@@ -490,7 +557,7 @@
 	-- airstrike detected, convert this into a potential waypoint spot
 	if cGear ~= nil then
 		x,y = GetGearTarget(cGear)
-		
+
 		DeleteGear(cGear)
 
 		if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
@@ -525,7 +592,8 @@
 				SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
 				AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
 				FollowGear(CurrentHedgehog)
-				ShowMission("...", "...", "...", 2, 1)
+
+				HideMission()
 
 			else
 				-- still in placement mode
@@ -546,7 +614,7 @@
 
 			--ghost
 			gTimer = gTimer + 1
-			if gTimer == 15 then
+			if gTimer == 40 then
 				gTimer = 0
 				HandleGhost()
 			end
@@ -584,6 +652,10 @@
 
 	AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
 
+	if gear == CurrentHedgehog then
+		DisableTumbler()
+	end
+
 	-- if the player stops and "dies" or flies into water, stop him racing
 	--[[if gear == CurrentHedgehog then
 		DisableTumbler()
--- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua	Mon Oct 31 16:56:48 2011 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua	Mon Oct 31 19:40:39 2011 +0200
@@ -5,7 +5,7 @@
 ---------------------------------------------------
 ---------------------------------------------------
 ---------------------------------------------------
---- Space Invasion Code Follows (0.9)
+--- Space Invasion Code Follows (1.0)
 ---------------------------------------------------
 ---------------------------------------------------
 -- VERSION HISTORY
@@ -86,7 +86,7 @@
 -- Boss Slayer (Destroy 2 blue circles for +25 points)
 
 -- Shield Master (disolve 5 shells for +10 points)
--- Shield Miser (don't use your shield at all (2.5*roundkills)+2 points)
+-- Shield Miser (don't use your shield at all (3.5*roundkills)+2 points)
 
 -- Depleted Kamikaze! (kamikaze into a blue/red circ when you are out of ammo) 5pts
 -- Timed Kamikaze! (kamikaze into a blue/red circ when you only have 5s left) 10pts
@@ -122,6 +122,16 @@
 -- experimental radar (it's INTERACTIVE and math-heavy :D) (visual gears are safe... right? D:)
 -- bugfix and balance for multishot
 
+------------------------
+-- version 1.0
+------------------------
+
+-- if only version numbers actually worked like this, wouldn't that be awful :D
+
+-- added surfer achievement
+-- increased value of shield miser by 1 point per kill (OP?)
+
+
 --------------------------
 --notes for later
 --------------------------
@@ -152,6 +162,7 @@
 AddCaption(LOC_NOT("BOOM! +50 points!"),0xffba00ff,capgrpVolume)
 AddCaption(LOC_NOT("BOOM! BOOM! BOOM! +100 points!"),0xffba00ff,capgrpVolume)
 AddCaption(LOC_NOT("Accuracy Bonus! +15 points!"),0xffba00ff,capgrpVolume)
+AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume)
 
 -----------------
 capgrpMessage
@@ -207,6 +218,10 @@
 local sdName = {}
 local sdKills = {}
 
+local roundN = 0
+local lastRound
+local RoundHasChanged = true
+
 --------------------------
 -- hog and team tracking variales
 --------------------------
@@ -223,6 +238,7 @@
 local teamComment = {}
 local teamScore = {}
 local teamCircsKilled = {}
+local teamSurfer = {}
 
 -- stats variables
 --local teamRed = {}
@@ -240,6 +256,7 @@
 local chainLength = 0
 local shotsFired = 0
 local shotsHit = 0
+local SurfTime = 0
 
 ---------------------
 -- tumbler goods
@@ -382,6 +399,7 @@
 		teamIndex[i] = 0
 		teamScore[i] = 0
 		teamCircsKilled[i] = 0
+		teamSurfer[i] = false
 	end
 	numTeams = 0
 
@@ -445,7 +463,7 @@
 function AwardKills(t)
 
 	roundKills = roundKills + 1
-	
+
 	for i = 0,(TeamsCount-1) do
 		if teamClan[i] == GetHogClan(CurrentHedgehog) then
 			teamCircsKilled[i] = teamCircsKilled[i] + 1
@@ -533,36 +551,66 @@
 
 end
 
+function onNewRound()
+	roundNumber = roundNumber + 1
+
+	CommentOnScore()
+
+	-- end game if its at round limit
+	if roundNumber == roundLimit then
+
+		for i = 0, (TeamsCount-1) do
+			if teamScore[i] > bestScore then
+				bestScore = teamScore[i]
+				bestClan = teamClan[i]
+			end
+		end
+
+		for i = 0, (numhhs-1) do
+			if GetHogClan(hhs[i]) ~= bestClan then
+				SetEffect(hhs[i], heResurrectable, false)
+				SetHealth(hhs[i],0)
+			end
+		end
+		gameOver = true
+		TurnTimeLeft = 0	--1
+		TimeLeft = 0
+	end
+end
+
 -- gaudy racer
 function CheckForNewRound()
 
+	----------
+	-- new
+	----------
+
+	--[[if gameBegun == true then
+
+		if RoundHasChanged == true then
+			roundN = roundN + 1
+			RoundHasChanged = false
+			onNewRound()
+		end
+
+		if lastRound ~= TotalRounds then -- new round, but not really
+
+			if RoundHasChanged == false then
+				RoundHasChanged = true
+			end
+
+		end
+
+		--AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+		lastRound = TotalRounds
+
+	end]]
+
+	----------
+	-- old
+	----------
 	if GetHogClan(CurrentHedgehog) == firstClan then
-
-		roundNumber = roundNumber + 1
-
-		CommentOnScore()
-
-		-- end game if its at round limit
-		if roundNumber == roundLimit then
-
-			for i = 0, (TeamsCount-1) do
-				if teamScore[i] > bestScore then
-					bestScore = teamScore[i]
-					bestClan = teamClan[i]
-				end
-			end
-
-			for i = 0, (numhhs-1) do
-				if GetHogClan(hhs[i]) ~= bestClan then
-					SetEffect(hhs[i], heResurrectable, false)
-					SetHealth(hhs[i],0)
-				end
-			end
-			gameOver = true
-			TurnTimeLeft = 0	--1
-			TimeLeft = 0
-		end
-
+		onNewRound()
 	end
 
 end
@@ -730,7 +778,7 @@
 
 function onHJump()
 
-	if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and 
+	if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and
 	(rAlpha == 255) and (radShotsLeft > 0) then
 		rPingTimer = 0
 		rAlpha = 0
@@ -833,6 +881,7 @@
 
 	CreateMeSomeCircles()
 	RebuildTeamInfo() -- control
+	lastRound = TotalRounds
 
 end
 
@@ -867,6 +916,7 @@
 	shotsHit = 0
 	chainLength = 0
 	chainCounter = 0
+	SurfTime = 12
 
 	-------------------------
 	-- gaudy racer
@@ -1024,12 +1074,8 @@
 				--nw WriteLnToConsole("Player is out of luck")
 
 				if shieldMiser == true then
-					
-					p = (roundKills*2.5) - ((roundKills*2.5)%1) + 2
-					--p = (roundKills*2.5) + 2
-					--if (p%2 ~= 0) then
-					--	p = p -0.5					
-					--end
+
+					p = (roundKills*3.5) - ((roundKills*3.5)%1) + 2
 
 					AddCaption(loc("Shield Miser!") .." +" .. p .." ".. loc("points") .. "!",0xffba00ff,capgrpAmmoinfo)
 					AwardPoints(p)
@@ -1073,6 +1119,30 @@
 				--------------
 				--------------
 
+				------------------------
+				-- surfer achievement
+				------------------------
+
+				if (WaterLine - GetY(CurrentHedgehog)) < 15 then
+					SurfTime = SurfTime -1
+				end
+
+				if SurfTime ~= 12 then
+
+					SurfTime = SurfTime - 1
+					if SurfTime <= 0 then
+						for i = 0,(TeamsCount-1) do
+							if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then
+								teamSurfer[i] = true
+								SurfTime = 12
+								AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume)
+								AwardPoints(15)
+							end
+						end
+					end
+				end
+
+
 				dx, dy = GetGearVelocity(CurrentHedgehog)
 
 				--WriteLnToConsole("I just got the velocity of currenthedgehog. It is dx: " .. dx .. "; dy: " .. dy)
@@ -1123,7 +1193,7 @@
 	end
 
 	--WriteLnToConsole("End of GameTick")
-	
+
 end
 
 function onGearResurrect(gear)
@@ -1211,31 +1281,31 @@
 
 function DoHorribleThings(cUID)
 
-	-- maybe	
+	-- maybe
 	-- add a check to draw it inside the circ and not past it if
 	-- it is closer than 150 or w/e
 
-	-- work out the distance to the target	
+	-- work out the distance to the target
 	g1X, g1Y = GetGearPosition(CurrentHedgehog)
 	g2X, g2Y = vCircX[cUID], vCircY[cUID]
-	q = g1X - g2X				
-	w = g1Y - g2Y				
+	q = g1X - g2X
+	w = g1Y - g2Y
 	r = math.sqrt( (q*q) + (w*w) )	--alternate
-	
-
-	opp = w	
+
+
+	opp = w
 	if opp < 0 then
 		opp = opp*-1
 	end
 
 	-- work out the angle (theta) to the target
 	t = math.deg ( math.asin(opp / r) )
-		
-	-- based on the radius of the radar, calculate what x/y displacement should be	
+
+	-- based on the radius of the radar, calculate what x/y displacement should be
 	NR = 150 -- radius at which to draw circs
 	NX = math.cos( math.rad(t) ) * NR
-	NY = math.sin( math.rad(t) ) * NR	
-		
+	NY = math.sin( math.rad(t) ) * NR
+
 	-- displace xy based on where this thing actually is
 	if q > 0 then
 		rCircX[cUID] = g1X - NX
@@ -1248,7 +1318,7 @@
 	else
 		rCircY[cUID] = g1Y + NY
 	end
-	
+
 end
 
 function PlayerIsFine()
@@ -1573,7 +1643,7 @@
 
 	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(rCirc[i])
 	SetVisualGearValues(rCirc[i], 0, 0, g3, g4, g5, g6, g7, g8, g9, vCircCol[i]-0x000000ff)
-	
+
 
 	vCircActive[i] = true -- new
 
@@ -1816,25 +1886,25 @@
 
 	end]]
 
-	
+
 	if rAlpha ~= 255 then
-		
+
 		rPingTimer = rPingTimer + 1
 		if rPingTimer == 100 then
-			rPingTimer = 0	
-			
+			rPingTimer = 0
+
 			rAlpha = rAlpha + 5
 			if rAlpha >= 255 then
 				rAlpha = 255
-			end	
+			end
 		end
-	
+
 	end
 
 	for i = 0,(vCCount-1) do
 
 		--if (vCircActive[i] == true) then
-			SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha)	
+			SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha)
 		--end
 
 		vCounter[i] = vCounter[i] + 1
@@ -1987,8 +2057,8 @@
 			vCircX[i] = vCircX[i] + vCircDX[i]
 			vCircY[i] = vCircY[i] + vCircDY[i]
 
-			if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then			
-				DoHorribleThings(i)--(i, g1X, g1Y, g2X, g2Y, dist)				
+			if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then
+				DoHorribleThings(i)--(i, g1X, g1Y, g2X, g2Y, dist)
 			end
 
 		end