share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua
changeset 13585 dc4ce9f486b0
parent 13584 ff7378430675
child 13648 690cc84e9fd6
--- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua	Tue Jul 31 19:50:50 2018 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua	Tue Jul 31 22:26:53 2018 +0200
@@ -108,6 +108,19 @@
 
 -- maybe replace (48/100*vCircRadius[i])/2 with something better
 
+-------------------
+-- CAPTION TYPES --
+-------------------
+--[[
+The captions have been carefully assigned to avoid overlapping.
+
+capgrpMessage: Basic bonuses for a simple action, rounds complete
+capgrpMessage2: Extended bonus, awarded for repeating a basic bonus
+capgrpVolume: X-Hit Combo
+capgrpGameState: End of turn information, kamikaze achievements
+capgrpAmmoinfo: Ammo type at start of turn; Multi-shot, Shield Miser
+capgrpAmmostate: Remaining ammo, depleted ammo; Accuracy Bonus, Sniper, They Call Me Bullseye, Point Blank Combo
+]]
 
 ------- CODE FOLLOWS -------
 
@@ -301,6 +314,23 @@
 local vCircWidth = {}
 local vCircCol = {}
 
+-- Colors
+-- Invaders
+local colorDrone = 0xFF0000FF
+local colorBoss = 0x0050FFFF
+local colorBossParticle = colorBoss
+local colorAmmo = 0x00FF00FF
+local colorShield = 0xA800FFFF
+local colorShieldParticle = colorShield
+local colorDisabled = 0xFFFFFFFF -- disabled invader at end of turn
+
+-- Other colors
+local colorMsgDepleted = 0xFF0000FF
+local colorMsgBonus = 0xFFBA00FF
+local colorTimer = 0xFFEE00FF
+local colorScore = 0xFFFFFFFF
+local colorShockwave = 0xFF3300FF
+
 -------------------------------------------
 -- some lazy copypasta/modified methods
 -------------------------------------------
@@ -309,7 +339,7 @@
 
 function HideTag(i)
 
-	SetVisualGearValues(vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xffffff00)
+	SetVisualGearValues(vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xFFFFFF00)
 
 end
 
@@ -321,24 +351,24 @@
 
 	if i == TAG_TIME then
 		yOffset = 40
-		tCol = 0xffee00ff
+		tCol = colorTimer
 		tValue = TimeLeft
 	elseif i == TAG_BARRELS then
 		zoomL = 1.1
 		yOffset = 70
-		tCol = 0x00ff00ff
-		tValue = wepAmmo[wepIndex] --primShotsLeft
+		tCol = colorAmmo
+		tValue = wepAmmo[wepIndex]
 	elseif i == TAG_SHIELD then
 		zoomL = 1.1
 		xOffset = 40 + 35
 		yOffset = 70
-		tCol = 0xa800ffff
+		tCol = colorShield
 		tValue = shieldHealth - 80
 	elseif i == TAG_ROUND_SCORE then
 		zoomL = 1.1
 		xOffset = 40
 		yOffset = 100
-		tCol = 0xffffffff
+		tCol = colorScore
 		tValue = roundScore
 	end
 
@@ -525,7 +555,7 @@
 		statusText = loc("Game over!")
 		scoreText = loc("Final team scores:")
 	else
-		AddCaption(string.format(loc("Rounds complete: %d/%d"), roundNumber, roundLimit, 0xFFFFFFFF))
+		AddCaption(string.format(loc("Rounds complete: %d/%d"), roundNumber, roundLimit), 0xFFFFFFFF, capgrpMessage)
 		return
 	end
 	local displayTime
@@ -546,7 +576,7 @@
 				SetState(hhs[i], bor(GetState(hhs[i]), gstWinner))
 			end
 		end
-		AddCaption(string.format(loc("%s wins!"), winnerTeam))
+		AddCaption(string.format(loc("%s wins!"), winnerTeam), 0xFFFFFFFF, capgrpGameState)
 		SendStat(siGameResult, string.format(loc("%s wins!"), winnerTeam))
 
 		for i = 1, TeamsCount do
@@ -802,6 +832,7 @@
 	if wepIndex == wepCount then
 		wepIndex = 0
 	end
+	AddCaption(wep[wepIndex], GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo)
 end
 
 -- derp tumbler
@@ -823,7 +854,7 @@
 
 			if wepAmmo[wepIndex] == 0 then
 				PlaySound(sndSuddenDeath)
-				AddCaption(loc("Ammo depleted!"),0xff0000ff,capgrpMessage)
+				AddCaption(loc("Ammo depleted!"),colorMsgDepleted,capgrpAmmostate)
 			else
 				PlaySound(sndThrowRelease)
 			end
@@ -837,7 +868,7 @@
 
 	elseif (wepAmmo[wepIndex] == 0) and (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then
 		PlaySound(sndDenied)
-		AddCaption(loc("Ammo depleted!"),0xff0000ff,capgrpMessage)
+		AddCaption(loc("Ammo depleted!"),colorMsgDepleted,capgrpAmmostate)
 	end
 
 	preciseOn = true
@@ -853,17 +884,17 @@
 	if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then
 		shieldMiser = false
 		if shieldHealth == 80 then
-			AddCaption(loc("Shield depleted"),0xff0000ff,capgrpMessage)
+			AddCaption(loc("Shield depleted"),colorMsgDepleted,capgrpAmmostate)
 			PlaySound(sndDenied)
 		elseif (beam == false) and (shieldHealth > 80) then
 			beam = true
-			SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 40, 255, 1, 10, 0, 300, 1, 0xa800ffff)
-			AddCaption( string.format(loc("Shield ON: %d power remaining"), shieldHealth - 80))
+			SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 40, 255, 1, 10, 0, 300, 1, colorShield)
+			AddCaption( string.format(loc("Shield ON: %d power remaining"), shieldHealth - 80), colorShield, capgrpAmmostate)
 			PlaySound(sndInvulnerable)
 		else
 			beam = false
-			SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 0, 0, 1, 10, 0, 0, 0, 0xa800ffff)
-			AddCaption( string.format(loc("Shield OFF: %d power remaining"), shieldHealth - 80))
+			SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 0, 0, 1, 10, 0, 0, 0, colorShield)
+			AddCaption( string.format(loc("Shield OFF: %d power remaining"), shieldHealth - 80), colorShield, capgrpAmmostate)
 		end
 	end
 end
@@ -876,12 +907,12 @@
 			rPingTimer = 0
 			rAlpha = 0
 			radShotsLeft = radShotsLeft -1
-			AddCaption(string.format(loc("Pings left: %d"), radShotsLeft),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage)
+			AddCaption(string.format(loc("Pings left: %d"), radShotsLeft),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmostate)
 			-- Play sonar sound
 			PlaySound(sndJetpackLaunch)
 
 		else
-			AddCaption(loc("No radar pings left!"),0xFF0000FF,capgrpMessage)
+			AddCaption(loc("No radar pings left!"),colorMsgDepleted,capgrpAmmostate)
 			PlaySound(sndDenied)
 		end
 	end
@@ -1147,7 +1178,7 @@
 		for i = 0,(TeamsCount-1) do
 			if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then
 				teamSurfer[i] = true
-				AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume)
+				AddCaption(loc("Surfer! +15 points!"),colorMsgBonus,capgrpMessage)
 				AwardPoints(15)
 			end
 		end
@@ -1170,7 +1201,7 @@
 			if shieldHealth < 80 then
 				shieldHealth = 80
 				beam = false
-				AddCaption(loc("Shield depleted"),0xff0000ff,capgrpMessage)
+				AddCaption(loc("Shield depleted"),colorMsgDepleted,capgrpAmmostate)
 				PlaySound(sndMineTick)
 				PlaySound(sndSwitchHog)
 			end
@@ -1247,7 +1278,9 @@
 		end
 
 		if (TimeLeft == 0) then
-			if PlayerIsFine() then AddCaption(loc("Time's up!")) end
+			if PlayerIsFine() then
+				AddCaption(loc("Time's up!"), 0xFFFFFFFF, capgrpGameState)
+			end
 			if (stopMovement == false) then	--time to stop the player
 				stopMovement = true
 				boosterOn = false
@@ -1264,13 +1297,13 @@
 
 					local p = (roundKills*3.5) - ((roundKills*3.5)%1) + 2
 
-					AddCaption(string.format(loc("Shield Miser! +%d points!"), p),0xffba00ff,capgrpAmmoinfo)
+					AddCaption(string.format(loc("Shield Miser! +%d points!"), p), colorMsgBonus, capgrpAmmoinfo)
 					AwardPoints(p)
 				end
 
 				local accuracy = (shotsHit / shotsFired) * 100
 				if (accuracy >= 80) and (shotsFired > 4) then
-					AddCaption(loc("Accuracy Bonus! +15 points"),0xffba00ff,capgrpVolume)
+					AddCaption(loc("Accuracy Bonus! +15 points"),colorMsgBonus,capgrpAmmostate)
 					AwardPoints(15)
 
 
@@ -1387,7 +1420,7 @@
 		if GetHogClan(gear) ~= GetHogClan(CurrentHedgehog) then
 			if (fierceComp == false) then
 				fierceComp = true
-				AddCaption(loc("Fierce Competition! +8 points!"),0xffba00ff,capgrpGameState)
+				AddCaption(loc("Fierce Competition! +8 points!"),colorMsgBonus,capgrpMessage)
 				AwardPoints(8)
 			end
 
@@ -1574,7 +1607,7 @@
 
 		vCircX[i], vCircY[i] = 0,0
 
-		vCircCol[i] = 0xff00ffff
+		vCircCol[i] = 0xFF00FFFF
 
 		SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], vCircMinA[i], vCircMaxA[i], vCircType[i], vCircPulse[i], vCircFuckAll[i], vCircRadius[i], vCircWidth[i], vCircCol[i])
 
@@ -1616,7 +1649,7 @@
 		if (vType[i] == "drone") then
 			PlaySound(sndHellishImpact4)
 			TimeLeft = TimeLeft + timeBonus
-			AddCaption(string.format(loc("Time extended! +%dsec"), timeBonus), 0xff0000ff,capgrpMessage )
+			AddCaption(string.format(loc("Time extended! +%dsec"), timeBonus), colorDrone, capgrpMessage )
 			DrawTag(TAG_TIME)
 
 			local morte = AddGear(vCircX[i], vCircY[i], gtExplosives, 0, 0, 0, 1)
@@ -1625,7 +1658,7 @@
 			RK = RK + 1
 			if RK == 5 then
 				RK = 0
-				AddCaption(loc("Drone Hunter! +10 points!"),0xffba00ff,capgrpMessage2)
+				AddCaption(loc("Drone Hunter! +10 points!"),colorMsgBonus,capgrpMessage2)
 				AwardPoints(10)
 			end
 
@@ -1634,13 +1667,13 @@
 			PlaySound(sndExplosion)
 			PlaySound(sndShotgunReload)
 			wepAmmo[0] = wepAmmo[0] + barrelBonus
-			AddCaption(string.format(loc("+%d Ammo"), barrelBonus), 0x00ff00ff,capgrpMessage)
+			AddCaption(string.format(loc("+%d Ammo"), barrelBonus), colorAmmo,capgrpMessage)
 			DrawTag(TAG_BARRELS)
 
 			GK = GK + 1
 			if GK == 3 then
 				GK = 0
-				AddCaption(loc("Ammo Maniac! +5 points!"),0xffba00ff,capgrpMessage2)
+				AddCaption(loc("Ammo Maniac! +5 points!"),colorMsgBonus,capgrpMessage2)
 				AwardPoints(5)
 			end
 
@@ -1659,17 +1692,18 @@
 			PlaySound(sndVaporize)
 
 			shieldHealth = shieldHealth + shieldBonus
-			AddCaption(string.format(loc("Shield boosted! +%d power"),shieldBonus), 0xa800ffff,capgrpMessage)
 			if shieldHealth >= 250 then
 				shieldHealth = 250
-				AddCaption(loc("Shield is fully recharged!"),0xa800ffff,capgrpMessage)
+				AddCaption(loc("Shield is fully recharged!"),colorShield,capgrpMessage)
+			else
+				AddCaption(string.format(loc("Shield boosted! +%d power"),shieldBonus), colorShield,capgrpMessage)
 			end
 			DrawTag(TAG_SHIELD)
 
 			OK = OK + 1
 			if OK == 3 then
 				OK = 0
-				AddCaption(loc("Shield Seeker! +10 points!"),0xffba00ff,capgrpMessage2)
+				AddCaption(loc("Shield Seeker! +10 points!"),colorShield,capgrpMessage2)
 				AwardPoints(10)
 			end
 
@@ -1678,7 +1712,7 @@
 			tauntTimer = 300
 			tauntSound = sndEnemyDown
 			tauntGear = CurrentHedgehog
-			AddCaption(loc("Boss defeated! +30 points!"), 0x0050ffff,capgrpMessage)
+			AddCaption(loc("Boss defeated! +30 points!"), colorBoss,capgrpMessage)
 
 			local morte = AddGear(vCircX[i], vCircY[i], gtExplosives, 0, 0, 0, 1)
 			SetHealth(morte, 0)
@@ -1686,7 +1720,7 @@
 			BK = BK + 1
 			if BK == 2 then
 				BK = 0
-				AddCaption(loc("Boss Slayer! +25 points!"),0xffba00ff,capgrpMessage2)
+				AddCaption(loc("Boss Slayer! +25 points!"),colorMsgBonus,capgrpMessage2)
 				AwardPoints(25)
 			end
 
@@ -1700,7 +1734,7 @@
 		chainCounter = 3000
 		chainLength = chainLength + 1
 		if chainLength > 1 then
-			AddCaption( string.format(loc("%d-Hit Combo! +%d points!"), chainLength, chainLength*2),0xffba00ff,capgrpAmmostate)
+			AddCaption( string.format(loc("%d-Hit Combo! +%d points!"), chainLength, chainLength*2),colorMsgBonus,capgrpVolume)
 			AwardPoints(chainLength*2)
 		end
 
@@ -1724,12 +1758,12 @@
 
 
 	local r = GetRandom(10)
-	-- 80% of spawning either red/green
+	-- 80% of spawning either drone/ammo
 	if r <= 7 then
 
 		r = GetRandom(2)
 		if r == 0 then
-			vCircCol[i] = 0xff0000ff -- red
+			vCircCol[i] = colorDrone
 			vType[i] = "drone"
 			vCircRadMin[i] = 50	*5
 			vCircRadMax[i] = 90	*5
@@ -1737,7 +1771,7 @@
 			vCircScore[i] = 10
 			vCircHealth[i] = 1
 		elseif r == 1 then
-			vCircCol[i] = 0x00ff00ff -- green
+			vCircCol[i] = colorAmmo
 			vType[i] = "ammo"
 			vCircRadMin[i] = 25	*7
 			vCircRadMax[i] = 30	*7
@@ -1749,7 +1783,7 @@
 	else
 		r = GetRandom(5)
 		if r <= 1 then
-			vCircCol[i] = 0x0050ffff -- sexy blue
+			vCircCol[i] = colorBoss
 			vType[i] = "blueboss"
 			vCircRadMin[i] = 100*5
 			vCircRadMax[i] = 180*5
@@ -1758,7 +1792,7 @@
 			vCircScore[i] = 30
 			vCircHealth[i] = 3
 		else
-			vCircCol[i] = 0xa800ffff -- purp
+			vCircCol[i] = colorShield
 			vType[i] = "bonus"
 			vCircRadMin[i] = 20 *7
 			vCircRadMax[i] = 40 *7
@@ -1780,9 +1814,9 @@
 
 	vCircRadius[i] = vCircRadMax[i] - GetRandom(vCircRadMin[i])
 
-	SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], nil, nil, nil, nil, nil, vCircRadius[i], vCircWidth[i], vCircCol[i]-0x000000ff)
-
-	SetVisualGearValues(rCirc[i], 0, 0, nil, nil, nil, nil, nil, nil, nil, vCircCol[i]-0x000000ff)
+	SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], nil, nil, nil, nil, nil, vCircRadius[i], vCircWidth[i], vCircCol[i]-0x000000FF)
+
+	SetVisualGearValues(rCirc[i], 0, 0, nil, nil, nil, nil, nil, nil, nil, vCircCol[i]-0x000000FF)
 
 
 	vCircActive[i] = true
@@ -1815,10 +1849,10 @@
 	end
 
 	playerIsFine = false
-	AddCaption(loc("GOTCHA!"))
 	FailGraphics()
 
 	if not kamikaze then
+		AddCaption(loc("GOTCHA!"), 0xFFFFFFFF, capgrpGameState)
 		PlaySound(sndHellish)
 	end
 
@@ -1829,7 +1863,7 @@
 -- Turn all circles white to indicate they can't be hit anymore
 function FailGraphics()
 	for i = 0,(vCCount-1) do
-		vCircCol[i] = 0xffffffff
+		vCircCol[i] = colorDisabled
 	end
 end
 
@@ -1859,18 +1893,18 @@
 				dist = (GetDistFromXYtoXY(vCircX[i], vCircY[i], getGearValue(gear,"XP"), getGearValue(gear,"YP")) - (NR*NR))
 				if dist >= 1000000 then
 					sniperHits = sniperHits +1
-					AddCaption(loc("Sniper! +8 points!"),0xffba00ff,capgrpGameState)
+					AddCaption(loc("Sniper! +8 points!"),colorMsgBonus,capgrpAmmostate)
 					AwardPoints(8)
 					if sniperHits == 3 then
 						sniperHits = 0
-						AddCaption(loc("They Call Me Bullseye! +16 points!"),0xffba00ff,capgrpGameState)
+						AddCaption(loc("They Call Me Bullseye! +16 points!"),colorMsgBonus,capgrpAmmostate)
 						AwardPoints(16)
 					end
 				elseif dist <= 6000 then
 					pointBlankHits = pointBlankHits +1
 					if pointBlankHits == 3 then
 						pointBlankHits = 0
-						AddCaption(loc("Point Blank Combo! +5 points!"),0xffba00ff,capgrpGameState)
+						AddCaption(loc("Point Blank Combo! +5 points!"),colorMsgBonus,capgrpAmmostate)
 						AwardPoints(5)
 					end
 				end
@@ -1882,7 +1916,7 @@
 
 				circsHit = circsHit + 1
 				if circsHit > 1 then
-					AddCaption(loc("Multi-shot! +15 points!"),0xffba00ff,capgrpAmmostate)
+					AddCaption(loc("Multi-shot! +15 points!"),colorMsgBonus,capgrpAmmoinfo)
 					AwardPoints(15)
 						circsHit = 0
 				end
@@ -1902,14 +1936,14 @@
 
 			if dist < 3000 then
 				local tempE = AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, true)
-				SetVisualGearValues(tempE, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0xff00ffff )
+				SetVisualGearValues(tempE, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0xFF00FFFF)
 				PlaySound(sndVaporize)
 				DeleteGear(gear)
 
 				SK = SK + 1
 				if SK == 5 then
 					SK = 0
-					AddCaption(loc("Shield Master! +10 points!"),0xffba00ff,capgrpAmmoinfo)
+					AddCaption(loc("Shield Master! +10 points!"),colorMsgBonus,capgrpMessage)
 					AwardPoints(10)
 				end
 			end
@@ -1969,17 +2003,17 @@
 				local kamikaze = false
 				if ss == "fatal" then
 					if (wepAmmo[0] == 0) and (TimeLeft <= 9) then
-						AddCaption(loc("Kamikaze Expert! +15 points!"),0xffba00ff,capgrpMessage)
+						AddCaption(loc("Kamikaze Expert! +15 points!"),colorMsgBonus,capgrpGameState)
 						AwardPoints(15)
 						PlaySound(sndKamikaze, CurrentHedgehog)
 						kamikaze = true
 					elseif (wepAmmo[0] == 0) then
-						AddCaption(loc("Depleted Kamikaze! +5 points!"),0xffba00ff,capgrpMessage)
+						AddCaption(loc("Depleted Kamikaze! +5 points!"),colorMsgBonus,capgrpGameState)
 						AwardPoints(5)
 						PlaySound(sndKamikaze, CurrentHedgehog)
 						kamikaze = true
 					elseif TimeLeft <= 9 then
-						AddCaption(loc("Timed Kamikaze! +10 points!"),0xffba00ff,capgrpMessage)
+						AddCaption(loc("Timed Kamikaze! +10 points!"),colorMsgBonus,capgrpGameState)
 						AwardPoints(10)
 						PlaySound(sndKamikaze, CurrentHedgehog)
 						kamikaze = true
@@ -2067,14 +2101,14 @@
 				elseif vType[i] == "bonus" then
 
 					local tempE = AddVisualGear(vCircX[i], vCircY[i], vgtDust, 0, true)
-					SetVisualGearValues(tempE, vCircX[i], vCircY[i], nil, nil, nil, nil, nil, 1, nil, 0xff00ffff )
+					SetVisualGearValues(tempE, vCircX[i], vCircY[i], nil, nil, nil, nil, nil, 1, nil, colorShieldParticle)
 
 
 				elseif vType[i] == "blueboss" then
 
 					local k = 25
 					local g = vgtSteam
-					local trailColour = 0xae00ffff
+					local trailColour = colorBossParticle
 
 					local tempE = AddVisualGear(vCircX[i], vCircY[i], g, 0, true)
 					SetVisualGearValues(tempE, vCircX[i], vCircY[i]+k, nil, nil, nil, nil, nil, nil, nil, trailColour-75 )
@@ -2187,14 +2221,14 @@
 
 	if (CurrentHedgehog ~= nil) then
 		if beam == true then
-			SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 200, nil, 0xa800ffff-0x000000ff - -shieldHealth )
+			SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 200, nil, colorShield-0x000000FF - -shieldHealth )
 			DrawTag(TAG_SHIELD)
 		else
 			SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 0)
 		end
 
 		if shockwaveHealth > 0 then
-			SetVisualGearValues(shockwave, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, shockwaveRad, nil, 0xff3300ff-0x000000ff - -shockwaveHealth )
+			SetVisualGearValues(shockwave, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, shockwaveRad, nil, colorShockwave-0x000000FF - -shockwaveHealth )
 		else
 			SetVisualGearValues(shockwave, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 0)
 		end