--- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Tue Jan 21 23:46:48 2014 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Tue Jan 21 23:53:26 2014 +0100
@@ -1,615 +1,615 @@
-local MUTANT_VERSION = "v0.9.5"
-
---[[ ___ ___
- ( ) ( )
-___ .-. .-. ___ ___ | |_ .---. ___ .-. | |_
-( ) ' ( )( ( __) / .-, ( ) ( __)
-| .-. .-. | | | | | | (__) ; || .-. .| |
-| | | | | | | | | | | ___ .'` || | | || | ___
-| | | | | | | | | | |( / .'| || | | || |( )
-| | | | | | | | | | | | | / | || | | || | | |
-| | | | | | | ; ' | ' | ; | ; || | | || ' | |
-| | | | | ' `-' / ' `-' ' `-' || | | |' `-' ;
-(___)(___)(___'.__.' `.__.`.__.'_(___)(___)`.__.
-
-
----- Recommended settings:
----- * one hedgehog per team
----- * 'Small' one-island map
-
---]]
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-HedgewarsScriptLoad("/Scripts/Tracker.lua")
-
---[[
- MUTANT SCRIPT
-
- To Do: -Clean-up this fucking piece of code
- -Debug
- -Find a girlfriend
- -Fix Sheepluva's hat +[p]
- -Cookies
------------------------]]
-
-local hhs = {}
-local numhhs = 0
-local meh = false
-
-local gameOver=false
-
-local mutant = nil
-local mutant_base_health = 200
-local mutant_base_disease = 25
-local disease_timer = 2000
-
-local kill_reward = nil
-local mt_hurt=false
-
-local killsCounter = 0
-
-local team_fire_punishment = 3
-local mutant_kill_reward = 2
-
-local hh_weapons = { amBazooka, amGrenade, amShotgun, amMine}
-
-local mt_weapons = {amWatermelon, amHellishBomb, amBallgun, amRCPlane, amTeleport}
-
-local disease=0
-local timer=0
-
-local winScore = 15
-local hogsLimit = 1
-
-local teams = {}
-
-local circles = {}
-local circleFrame = -1
-
-function showStartingInfo()
-
- ruleSet = loc("RULES") .. ": " ..
- " |" .. --" |" ..
- loc("The first player to kill someone becomes the Mutant.") .. "|" ..
- loc("The Mutant has super-weapons and a lot of health.") .. "|" ..
- loc("The Mutant loses health quickly if he doesn't keep scoring kills.") .. "|" ..
- " |" ..
- loc("Normal players can only score points by killing the mutant.") .. "|" ..
- " |" .. "" ..
- loc("The player with least points (or most deaths) becomes the Bottom Feeder.") .. "|" ..
- loc("The Bottom Feeder can score points by killing anyone.") .. "|" ..
- " |" ..
- loc("POINTS") .. ": " ..
- " |" ..
- loc("+2 for becoming a Mutant") .. "|" ..
- loc("+1 to a Mutant for killing anyone") .. "|" ..
- loc("+1 to a Bottom Feeder for killing anyone") .. "|" ..
- loc("-1 to anyone for a suicide") .. "|" ..
- loc("Other kills don't give you points.")
-
- ShowMission(loc("Mutant"),
- loc("a Hedgewars tag game"),
- ruleSet, 0, 5000)
-
-end
-
-function onGameInit()
- TurnTime = 20000
- WaterRise = 0
- GameFlags = GameFlags + gfResetWeps + gfPerHogAmmo
- HealthCaseProb=0
- HealthCaseAmount=0
- MinesTime=1000
- CaseFreq = 2
-end
-
-
-function limitHogs(gear)
- cnthhs = cnthhs + 1
- if cnthhs > 1 then
- hogLimitHit = true
- SetEffect(gear, heResurrectable, false)
- --SetHealth(gear, 0)
- SetGearPosition(gear, -100,LAND_HEIGHT)
- end
-end
-
-function onGameStart()
- trackTeams()
- teamScan()
- runOnHogs(saveStuff)
- --local str = "/say " .. MUTANT_VERSION
- --ParseCommand(str)
-
- hogLimitHit = false
- for i=0 , TeamsCount - 1 do
- cnthhs = 0
- runOnHogsInTeam(limitHogs, teams[i])
- end
- if hogLimitHit then
- AddCaption(loc("ONE HOG PER TEAM! KILLING EXCESS HEDGES"))
- end
- showStartingInfo()
-end
-
-
-
-function giveWeapons(gear)
- if gear == mutant then
- AddAmmo(gear, amRope)
- for i=1, #mt_weapons do
- AddAmmo(gear, mt_weapons[i])
- end
-
- else
- for i=1, #hh_weapons do
- AddAmmo(gear,hh_weapons[i])
- end
- end
-end
-
-function onAmmoStoreInit()
-
- SetAmmo(amSkip, 9, 0, 0, 0)
- SetAmmo(amRope,0,1,0,5)
- SetAmmo(amSnowball,0,1,0,1)
-
- for i=1, #hh_weapons do
- SetAmmo(hh_weapons[i], 0, 0, 0, 1)
- end
-
- for i=1, #mt_weapons do
- SetAmmo(mt_weapons[i], 0, 3, 0, 1)
- end
-
-end
-
-function drawCircles()
- for i = 0, #hhs do
- if circles[hhs[i]] ~= nil then
- DeleteVisualGear(circles[hhs[i]])
- circles[hhs[i]] = nil
- end
-
- if hhs[i] ~= CurrentHedgehog then
- if mutant == nil then
- circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
- SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
- elseif CurrentHedgehog == mutant then
- circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
- SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
- elseif getGearValue(CurrentHedgehog, "Feeder") and hhs[i] ~= mutant then
- circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
- SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
- elseif hhs[i] == mutant then
- circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
- SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
- end
- end
- end
- circleFrame = 0
-end
-
-function onNewTurn()
-
- trackTeams()
- killsCounter = 0
-
- if mutant == nil then
- AddCaption( loc("FIRST BLOOD MUTATES") )
- end
-
- checkScore()
- giveWeapons(CurrentHedgehog)
- drawCircles()
- setAIHints()
- kill_reward= numhhs*10
-
- if CurrentHedgehog == mutant then
- mt_hurt=true
- disease= mutant_base_disease - numhhs
- else
- mt_hurt=false
- end
-
- setGearValue(CurrentHedgehog, "Alive", true)
-
-end
-
-function countBodies()
- if killsCounter == 2 then
- AddCaption(loc("DOUBLE KILL"))
- elseif killsCounter == 3 then
- AddCaption(loc("MEGA KILL"))
- PlaySound(sndRegret)
- elseif killsCounter == 4 then
- AddCaption(loc("ULTRA KILL"))
- elseif killsCounter == 5 then
- AddCaption(loc("MONSTER KILL"))
- PlaySound(sndIllGetYou)
- elseif killsCounter == 6 then
- AddCaption(loc("LUDICROUS KILL"))
- PlaySound(sndNutter)
- elseif killsCounter == 7 then
- AddCaption(loc("HOLY SHYTE!"))
- PlaySound(sndLaugh)
- elseif killsCounter > 8 then
- AddCaption(loc("INSANITY"))
- end
-end
-
-function onGameTick()
-
- if circleFrame > -1 then
- for i = 0, #hhs do
- if circles[hhs[i]] ~= nil and hhs[i]~= nil then
- hhx, hhy = GetGearPosition(hhs[i])
- X, Y, dX, dY, Angle, Frame, FrameTicks, State, Timer, Tint = GetVisualGearValues(circles[hhs[i]])
- SetVisualGearValues(circles[hhs[i]], hhx + 1, hhy - 3, 0, 0, 0, 0, 0, 40 - (circleFrame % 25), Timer, Tint)
- end
- end
-
- circleFrame = circleFrame + 0.06
-
- if circleFrame >= 25 then
- for i = 0, #hhs do
- if circles[hhs[i]] ~= nil then
- DeleteVisualGear(circles[hhs[i]])
- circles[hhs[i]] = nil
- end
- end
- end
- end
-
- if TurnTimeLeft==0 and mt_hurt then
- mt_hurt = false
- end
-
- if mt_hurt and mutant~=nil then
- timer = timer + 1
- if timer > disease_timer then
- timer = 0
- SetHealth(mutant, GetHealth(mutant)-disease )
- AddVisualGear(GetX(mutant), GetY(mutant)-5, vgtHealthTag, disease, true)
- if GetHealth(mutant)<=0 then
- SetHealth(mutant,0)
- mt_hurt= false
- setGearValue(mutant,"SelfDestruct",true)
- TurnTimeLeft = 0
- end
- end
- end
-
-end
-
-function saveStuff(gear)
- setGearValue(gear,"Name",GetHogName(gear))
- setGearValue(gear,"Hat",GetHogHat(gear))
-end
-
-function armageddon(gear)
- SetState(gear, gstLoser)
- SetEffect(gear, heResurrectable, false)
- SetHealth(gear, 0)
-end
-
-function updateScore()
-
- local showScore = ""
-
- for i=0, TeamsCount-1 do
- if teams[i]~= nil then
-
- local curr_score = getTeamValue(teams[i], "Score")
- showScore = showScore .. teams[i] .. ": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
-
- end
- end
-
- ShowMission(loc("Score"),
- "-------",
- showScore, 0, 200)
-
- HideMission()
-
-end
-
-function checkScore()
-local showScore = ""
-local lowest_score_team = nil
-local min_score=nil
-local winTeam = nil
-
-local only_low_score = true
-
- for i=0, TeamsCount-1 do
- if teams[i]~=nil then
- local curr_score = getTeamValue(teams[i], "Score")
-
- runOnHogsInTeam(removeFeeder, teams[i])
-
- showScore = showScore .. teams[i] ..": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
-
- if curr_score >= winScore then
- gameOver = true
- winTeam = teams[i]
- end
-
- if min_score==nil then
- min_score= curr_score
- lowest_score_team = teams[i]
- else
- if curr_score <= min_score then
- if curr_score == min_score then
- if getTeamValue(teams[i], "DeadHogs") == getTeamValue(lowest_score_team, "DeadHogs") then
- only_low_score = false
- else
- if getTeamValue(teams[i], "DeadHogs") > getTeamValue(lowest_score_team, "DeadHogs") then
- lowest_score_team = teams[i]
- end
- only_low_score = true
- end
-
- else
- min_score= curr_score
- lowest_score_team = teams[i]
- only_low_score = true
- end
- end
- end
- end
- end
-
- if gameOver then
- TurnTimeLeft = 0
- for i=0, #teams do
- if teams[i]~=winTeam then
- runOnHogsInTeam(armageddon, teams[i])
- end
- end
-
- ShowMission( loc("WINNER IS ") .. winTeam,
- "~~~~~~~~~~~~~~~~~~~~~~~~~",
- showScore, 0, 200)
- else
-
- if only_low_score then
- runOnHogsInTeam(setFeeder, lowest_score_team)
- end
-
- if meh == false then
- meh = true
- else
- ShowMission( loc("Score"),
- loc("-------"),
- showScore, 0, 200)
- end
-
- end
-end
-
-function backToNormal(gear)
- SetHogName(gear, getGearValue(gear,"Name"))
- SetHogHat(gear, 'NoHat')
- SetHogHat(gear, getGearValue(gear,"Hat"))
- setGearValue(mutant,"SelfDestruct",false)
- mt_hurt=false
- mutant=nil
-end
-
-function setAIHints()
- for i = 0, #hhs do
- if mutant == nil or hhs[i] == mutant or CurrentHedgehog == mutant then
- SetGearAIHints(hhs[i], aihUsual)
- else
- SetGearAIHints(hhs[i], aihDoesntMatter)
- end
- end
-end
-
-function removeFeeder(gear)
- if gear~=nil then
- setGearValue(gear,"Feeder",false)
- if gear~= mutant then
- SetHogName(gear, getGearValue(gear,"Name") )
- SetHogHat(gear, 'NoHat')
- SetHogHat(gear, getGearValue(gear,"Hat"))
- end
- end
-end
-
-function setFeeder(gear)
- if gear~= mutant and gear~= nil then
- SetHogName(gear,"BOTTOM FEEDER")
- SetHogHat(gear, 'poke_slowpoke')
- setGearValue(gear,"Feeder", true)
- end
-end
-
-function setMutantStuff(gear)
- mutant = gear
-
- SetHogName(gear,"MUTANT")
- SetHogHat(gear,'WhySoSerious')
- SetHealth(gear, ( mutant_base_health + numhhs*25) )
- SetEffect(gear, hePoisoned, 1)
- setGearValue(mutant,"SelfDestruct",false)
- setGearValue(gear, "Feeder", false)
-
- AddCaption(getGearValue(gear, "Name") .. loc(" HAS MUTATED"))
-
- TurnTimeLeft=0
-
- AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
- AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
- AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
- AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
- AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
- PlaySound(sndSuddenDeath)
-end
-
-function teamScan()
-
- for i=0, TeamsCount-1 do --nil filling
- teams[i]=nil
- end
-
- for i=0, #hhs do
- for j=0, TeamsCount-1 do
- if teams[j] ==nil and hhs[i]~=nil then
- teams[j] = GetHogTeamName(hhs[i])
- setTeamValue(teams[j],"Score",0)
- setTeamValue(teams[j], "DeadHogs",0)
- break
- end
-
- if teams[j] == GetHogTeamName(hhs[i]) then
- break
- end
- end
- end
-
- ---***---
-end
-
-function set_Mutant_and_Score(gear)
-
-local curr_team = GetHogTeamName(CurrentHedgehog)
-
- if gear == CurrentHedgehog then
- if CurrentHedgehog == mutant then
- PlaySound(sndHomerun)
- if getGearValue(gear, "SelfDestruct")==false then
- decreaseTeamValue(curr_team,"Score")
- end
- backToNormal(gear)
- else
- decreaseTeamValue(curr_team,"Score")
- end
-
- else
- if gear == mutant then
- backToNormal(mutant)
- if curr_team ~=GetHogTeamName(gear) then
- if getGearValue(CurrentHedgehog, "Alive") then
- setMutantStuff(CurrentHedgehog)
- setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
- end
- else
- setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
- end
- else
- if mutant==nil then
- if curr_team ~=GetHogTeamName(gear) then
- if getGearValue(CurrentHedgehog, "Alive") then
- setMutantStuff(CurrentHedgehog)
- setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
- else
- increaseTeamValue(curr_team,"Score")
- end
- else
- setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
- end
- else
- if curr_team ~=GetHogTeamName(gear) then
- if CurrentHedgehog==mutant and getGearValue(mutant,"SelfDestruct")==false then
- SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+kill_reward)
- AddCaption("+" .. kill_reward .. loc(" HP") )
- increaseTeamValue(curr_team,"Score")
- end
- if getGearValue(CurrentHedgehog,"Feeder") then
- increaseTeamValue(curr_team,"Score")
- end
- else
- setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
- end
- end
- end
- end
-end
-
-function onGearResurrect(gear)
-if not gameOver then
- if GetGearType(gear) == gtHedgehog then
-
- increaseTeamValue(GetHogTeamName(gear), "DeadHogs")
-
- if gear==CurrentHedgehog then
- setGearValue(CurrentHedgehog, "Alive", false)
- end
- set_Mutant_and_Score(gear)
- if gear~=CurrentHedgehog then
- killsCounter = killsCounter + 1
- countBodies()
- end
- AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
- PlaySound(sndWhack)
- updateScore()
- end
-end
-end
-
-function onGearAdd(gear)
-
- -- Catch hedgehogs for the tracker
- if GetGearType(gear) == gtHedgehog then
- trackGear(gear)
- hhs[numhhs] = gear
- numhhs = numhhs + 1
- SetEffect(gear, heResurrectable, 1)
- end
-end
-
-function checkEmptyTeam (teamName)
- for i=0 , #hhs do
- if hhs[i]~=nil then
- if teamName == GetHogTeamName(hhs[i]) then
- return false
- end
- end
- end
- return true
-end
-
-function onGearDelete(gear)
- -- Remove hogs that are gone
- if GetGearType(gear) == gtHedgehog then
- numhhs = numhhs - 1
-
- local found
- for i=0, #hhs do
- if hhs[i] == gear then
- found = i
- break
- end
- end
- for i = found, #hhs - 1 do
- hhs[i] = hhs[i + 1]
- end
- hhs[#hhs] = nil
-
- local t_name = GetHogTeamName(gear)
- if checkEmptyTeam(t_name) then
- for i = 0, TeamsCount - 1 do
- if teams[i] == t_name then
- found = i
- break
- end
- end
- for i = found, TeamsCount - 2 do
- teams[i] = teams[i + 1]
- end
- teams[TeamsCount - 1] = nil
- TeamsCount = TeamsCount - 1
- end
- AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
- trackDeletion(gear)
- end
-end
-
---[[
-S T A R R I N G
- prof - Coding, implementing and evangelism
- vos - Initial idea and script improvements
- mikade - Moving the `how to play` into the game so that people know `how to play`, and whitespace :D
---]]
+local MUTANT_VERSION = "v0.9.5"
+
+--[[ ___ ___
+ ( ) ( )
+___ .-. .-. ___ ___ | |_ .---. ___ .-. | |_
+( ) ' ( )( ( __) / .-, ( ) ( __)
+| .-. .-. | | | | | | (__) ; || .-. .| |
+| | | | | | | | | | | ___ .'` || | | || | ___
+| | | | | | | | | | |( / .'| || | | || |( )
+| | | | | | | | | | | | | / | || | | || | | |
+| | | | | | | ; ' | ' | ; | ; || | | || ' | |
+| | | | | ' `-' / ' `-' ' `-' || | | |' `-' ;
+(___)(___)(___'.__.' `.__.`.__.'_(___)(___)`.__.
+
+
+---- Recommended settings:
+---- * one hedgehog per team
+---- * 'Small' one-island map
+
+--]]
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+
+--[[
+ MUTANT SCRIPT
+
+ To Do: -Clean-up this fucking piece of code
+ -Debug
+ -Find a girlfriend
+ -Fix Sheepluva's hat +[p]
+ -Cookies
+-----------------------]]
+
+local hhs = {}
+local numhhs = 0
+local meh = false
+
+local gameOver=false
+
+local mutant = nil
+local mutant_base_health = 200
+local mutant_base_disease = 25
+local disease_timer = 2000
+
+local kill_reward = nil
+local mt_hurt=false
+
+local killsCounter = 0
+
+local team_fire_punishment = 3
+local mutant_kill_reward = 2
+
+local hh_weapons = { amBazooka, amGrenade, amShotgun, amMine}
+
+local mt_weapons = {amWatermelon, amHellishBomb, amBallgun, amRCPlane, amTeleport}
+
+local disease=0
+local timer=0
+
+local winScore = 15
+local hogsLimit = 1
+
+local teams = {}
+
+local circles = {}
+local circleFrame = -1
+
+function showStartingInfo()
+
+ ruleSet = loc("RULES") .. ": " ..
+ " |" .. --" |" ..
+ loc("The first player to kill someone becomes the Mutant.") .. "|" ..
+ loc("The Mutant has super-weapons and a lot of health.") .. "|" ..
+ loc("The Mutant loses health quickly if he doesn't keep scoring kills.") .. "|" ..
+ " |" ..
+ loc("Normal players can only score points by killing the mutant.") .. "|" ..
+ " |" .. "" ..
+ loc("The player with least points (or most deaths) becomes the Bottom Feeder.") .. "|" ..
+ loc("The Bottom Feeder can score points by killing anyone.") .. "|" ..
+ " |" ..
+ loc("POINTS") .. ": " ..
+ " |" ..
+ loc("+2 for becoming a Mutant") .. "|" ..
+ loc("+1 to a Mutant for killing anyone") .. "|" ..
+ loc("+1 to a Bottom Feeder for killing anyone") .. "|" ..
+ loc("-1 to anyone for a suicide") .. "|" ..
+ loc("Other kills don't give you points.")
+
+ ShowMission(loc("Mutant"),
+ loc("a Hedgewars tag game"),
+ ruleSet, 0, 5000)
+
+end
+
+function onGameInit()
+ TurnTime = 20000
+ WaterRise = 0
+ EnableGameFlags(gfResetWeps, gfPerHogAmmo)
+ HealthCaseProb=0
+ HealthCaseAmount=0
+ MinesTime=1000
+ CaseFreq = 2
+end
+
+
+function limitHogs(gear)
+ cnthhs = cnthhs + 1
+ if cnthhs > 1 then
+ hogLimitHit = true
+ SetEffect(gear, heResurrectable, false)
+ --SetHealth(gear, 0)
+ SetGearPosition(gear, -100,LAND_HEIGHT)
+ end
+end
+
+function onGameStart()
+ trackTeams()
+ teamScan()
+ runOnHogs(saveStuff)
+ --local str = "/say " .. MUTANT_VERSION
+ --ParseCommand(str)
+
+ hogLimitHit = false
+ for i=0 , TeamsCount - 1 do
+ cnthhs = 0
+ runOnHogsInTeam(limitHogs, teams[i])
+ end
+ if hogLimitHit then
+ AddCaption(loc("ONE HOG PER TEAM! KILLING EXCESS HEDGES"))
+ end
+ showStartingInfo()
+end
+
+
+
+function giveWeapons(gear)
+ if gear == mutant then
+ AddAmmo(gear, amRope)
+ for i=1, #mt_weapons do
+ AddAmmo(gear, mt_weapons[i])
+ end
+
+ else
+ for i=1, #hh_weapons do
+ AddAmmo(gear,hh_weapons[i])
+ end
+ end
+end
+
+function onAmmoStoreInit()
+
+ SetAmmo(amSkip, 9, 0, 0, 0)
+ SetAmmo(amRope,0,1,0,5)
+ SetAmmo(amSnowball,0,1,0,1)
+
+ for i=1, #hh_weapons do
+ SetAmmo(hh_weapons[i], 0, 0, 0, 1)
+ end
+
+ for i=1, #mt_weapons do
+ SetAmmo(mt_weapons[i], 0, 3, 0, 1)
+ end
+
+end
+
+function drawCircles()
+ for i = 0, #hhs do
+ if circles[hhs[i]] ~= nil then
+ DeleteVisualGear(circles[hhs[i]])
+ circles[hhs[i]] = nil
+ end
+
+ if hhs[i] ~= CurrentHedgehog then
+ if mutant == nil then
+ circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+ SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
+ elseif CurrentHedgehog == mutant then
+ circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+ SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
+ elseif getGearValue(CurrentHedgehog, "Feeder") and hhs[i] ~= mutant then
+ circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+ SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
+ elseif hhs[i] == mutant then
+ circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+ SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
+ end
+ end
+ end
+ circleFrame = 0
+end
+
+function onNewTurn()
+
+ trackTeams()
+ killsCounter = 0
+
+ if mutant == nil then
+ AddCaption( loc("FIRST BLOOD MUTATES") )
+ end
+
+ checkScore()
+ giveWeapons(CurrentHedgehog)
+ drawCircles()
+ setAIHints()
+ kill_reward= numhhs*10
+
+ if CurrentHedgehog == mutant then
+ mt_hurt=true
+ disease= mutant_base_disease - numhhs
+ else
+ mt_hurt=false
+ end
+
+ setGearValue(CurrentHedgehog, "Alive", true)
+
+end
+
+function countBodies()
+ if killsCounter == 2 then
+ AddCaption(loc("DOUBLE KILL"))
+ elseif killsCounter == 3 then
+ AddCaption(loc("MEGA KILL"))
+ PlaySound(sndRegret)
+ elseif killsCounter == 4 then
+ AddCaption(loc("ULTRA KILL"))
+ elseif killsCounter == 5 then
+ AddCaption(loc("MONSTER KILL"))
+ PlaySound(sndIllGetYou)
+ elseif killsCounter == 6 then
+ AddCaption(loc("LUDICROUS KILL"))
+ PlaySound(sndNutter)
+ elseif killsCounter == 7 then
+ AddCaption(loc("HOLY SHYTE!"))
+ PlaySound(sndLaugh)
+ elseif killsCounter > 8 then
+ AddCaption(loc("INSANITY"))
+ end
+end
+
+function onGameTick()
+
+ if circleFrame > -1 then
+ for i = 0, #hhs do
+ if circles[hhs[i]] ~= nil and hhs[i]~= nil then
+ hhx, hhy = GetGearPosition(hhs[i])
+ X, Y, dX, dY, Angle, Frame, FrameTicks, State, Timer, Tint = GetVisualGearValues(circles[hhs[i]])
+ SetVisualGearValues(circles[hhs[i]], hhx + 1, hhy - 3, 0, 0, 0, 0, 0, 40 - (circleFrame % 25), Timer, Tint)
+ end
+ end
+
+ circleFrame = circleFrame + 0.06
+
+ if circleFrame >= 25 then
+ for i = 0, #hhs do
+ if circles[hhs[i]] ~= nil then
+ DeleteVisualGear(circles[hhs[i]])
+ circles[hhs[i]] = nil
+ end
+ end
+ end
+ end
+
+ if TurnTimeLeft==0 and mt_hurt then
+ mt_hurt = false
+ end
+
+ if mt_hurt and mutant~=nil then
+ timer = timer + 1
+ if timer > disease_timer then
+ timer = 0
+ SetHealth(mutant, GetHealth(mutant)-disease )
+ AddVisualGear(GetX(mutant), GetY(mutant)-5, vgtHealthTag, disease, true)
+ if GetHealth(mutant)<=0 then
+ SetHealth(mutant,0)
+ mt_hurt= false
+ setGearValue(mutant,"SelfDestruct",true)
+ TurnTimeLeft = 0
+ end
+ end
+ end
+
+end
+
+function saveStuff(gear)
+ setGearValue(gear,"Name",GetHogName(gear))
+ setGearValue(gear,"Hat",GetHogHat(gear))
+end
+
+function armageddon(gear)
+ SetState(gear, gstLoser)
+ SetEffect(gear, heResurrectable, false)
+ SetHealth(gear, 0)
+end
+
+function updateScore()
+
+ local showScore = ""
+
+ for i=0, TeamsCount-1 do
+ if teams[i]~= nil then
+
+ local curr_score = getTeamValue(teams[i], "Score")
+ showScore = showScore .. teams[i] .. ": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
+
+ end
+ end
+
+ ShowMission(loc("Score"),
+ "-------",
+ showScore, 0, 200)
+
+ HideMission()
+
+end
+
+function checkScore()
+local showScore = ""
+local lowest_score_team = nil
+local min_score=nil
+local winTeam = nil
+
+local only_low_score = true
+
+ for i=0, TeamsCount-1 do
+ if teams[i]~=nil then
+ local curr_score = getTeamValue(teams[i], "Score")
+
+ runOnHogsInTeam(removeFeeder, teams[i])
+
+ showScore = showScore .. teams[i] ..": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
+
+ if curr_score >= winScore then
+ gameOver = true
+ winTeam = teams[i]
+ end
+
+ if min_score==nil then
+ min_score= curr_score
+ lowest_score_team = teams[i]
+ else
+ if curr_score <= min_score then
+ if curr_score == min_score then
+ if getTeamValue(teams[i], "DeadHogs") == getTeamValue(lowest_score_team, "DeadHogs") then
+ only_low_score = false
+ else
+ if getTeamValue(teams[i], "DeadHogs") > getTeamValue(lowest_score_team, "DeadHogs") then
+ lowest_score_team = teams[i]
+ end
+ only_low_score = true
+ end
+
+ else
+ min_score= curr_score
+ lowest_score_team = teams[i]
+ only_low_score = true
+ end
+ end
+ end
+ end
+ end
+
+ if gameOver then
+ TurnTimeLeft = 0
+ for i=0, #teams do
+ if teams[i]~=winTeam then
+ runOnHogsInTeam(armageddon, teams[i])
+ end
+ end
+
+ ShowMission( loc("WINNER IS ") .. winTeam,
+ "~~~~~~~~~~~~~~~~~~~~~~~~~",
+ showScore, 0, 200)
+ else
+
+ if only_low_score then
+ runOnHogsInTeam(setFeeder, lowest_score_team)
+ end
+
+ if meh == false then
+ meh = true
+ else
+ ShowMission( loc("Score"),
+ loc("-------"),
+ showScore, 0, 200)
+ end
+
+ end
+end
+
+function backToNormal(gear)
+ SetHogName(gear, getGearValue(gear,"Name"))
+ SetHogHat(gear, 'NoHat')
+ SetHogHat(gear, getGearValue(gear,"Hat"))
+ setGearValue(mutant,"SelfDestruct",false)
+ mt_hurt=false
+ mutant=nil
+end
+
+function setAIHints()
+ for i = 0, #hhs do
+ if mutant == nil or hhs[i] == mutant or CurrentHedgehog == mutant then
+ SetGearAIHints(hhs[i], aihUsual)
+ else
+ SetGearAIHints(hhs[i], aihDoesntMatter)
+ end
+ end
+end
+
+function removeFeeder(gear)
+ if gear~=nil then
+ setGearValue(gear,"Feeder",false)
+ if gear~= mutant then
+ SetHogName(gear, getGearValue(gear,"Name") )
+ SetHogHat(gear, 'NoHat')
+ SetHogHat(gear, getGearValue(gear,"Hat"))
+ end
+ end
+end
+
+function setFeeder(gear)
+ if gear~= mutant and gear~= nil then
+ SetHogName(gear,"BOTTOM FEEDER")
+ SetHogHat(gear, 'poke_slowpoke')
+ setGearValue(gear,"Feeder", true)
+ end
+end
+
+function setMutantStuff(gear)
+ mutant = gear
+
+ SetHogName(gear,"MUTANT")
+ SetHogHat(gear,'WhySoSerious')
+ SetHealth(gear, ( mutant_base_health + numhhs*25) )
+ SetEffect(gear, hePoisoned, 1)
+ setGearValue(mutant,"SelfDestruct",false)
+ setGearValue(gear, "Feeder", false)
+
+ AddCaption(getGearValue(gear, "Name") .. loc(" HAS MUTATED"))
+
+ TurnTimeLeft=0
+
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+ PlaySound(sndSuddenDeath)
+end
+
+function teamScan()
+
+ for i=0, TeamsCount-1 do --nil filling
+ teams[i]=nil
+ end
+
+ for i=0, #hhs do
+ for j=0, TeamsCount-1 do
+ if teams[j] ==nil and hhs[i]~=nil then
+ teams[j] = GetHogTeamName(hhs[i])
+ setTeamValue(teams[j],"Score",0)
+ setTeamValue(teams[j], "DeadHogs",0)
+ break
+ end
+
+ if teams[j] == GetHogTeamName(hhs[i]) then
+ break
+ end
+ end
+ end
+
+ ---***---
+end
+
+function set_Mutant_and_Score(gear)
+
+local curr_team = GetHogTeamName(CurrentHedgehog)
+
+ if gear == CurrentHedgehog then
+ if CurrentHedgehog == mutant then
+ PlaySound(sndHomerun)
+ if getGearValue(gear, "SelfDestruct")==false then
+ decreaseTeamValue(curr_team,"Score")
+ end
+ backToNormal(gear)
+ else
+ decreaseTeamValue(curr_team,"Score")
+ end
+
+ else
+ if gear == mutant then
+ backToNormal(mutant)
+ if curr_team ~=GetHogTeamName(gear) then
+ if getGearValue(CurrentHedgehog, "Alive") then
+ setMutantStuff(CurrentHedgehog)
+ setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
+ end
+ else
+ setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+ end
+ else
+ if mutant==nil then
+ if curr_team ~=GetHogTeamName(gear) then
+ if getGearValue(CurrentHedgehog, "Alive") then
+ setMutantStuff(CurrentHedgehog)
+ setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
+ else
+ increaseTeamValue(curr_team,"Score")
+ end
+ else
+ setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+ end
+ else
+ if curr_team ~=GetHogTeamName(gear) then
+ if CurrentHedgehog==mutant and getGearValue(mutant,"SelfDestruct")==false then
+ SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+kill_reward)
+ AddCaption("+" .. kill_reward .. loc(" HP") )
+ increaseTeamValue(curr_team,"Score")
+ end
+ if getGearValue(CurrentHedgehog,"Feeder") then
+ increaseTeamValue(curr_team,"Score")
+ end
+ else
+ setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+ end
+ end
+ end
+ end
+end
+
+function onGearResurrect(gear)
+if not gameOver then
+ if GetGearType(gear) == gtHedgehog then
+
+ increaseTeamValue(GetHogTeamName(gear), "DeadHogs")
+
+ if gear==CurrentHedgehog then
+ setGearValue(CurrentHedgehog, "Alive", false)
+ end
+ set_Mutant_and_Score(gear)
+ if gear~=CurrentHedgehog then
+ killsCounter = killsCounter + 1
+ countBodies()
+ end
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+ PlaySound(sndWhack)
+ updateScore()
+ end
+end
+end
+
+function onGearAdd(gear)
+
+ -- Catch hedgehogs for the tracker
+ if GetGearType(gear) == gtHedgehog then
+ trackGear(gear)
+ hhs[numhhs] = gear
+ numhhs = numhhs + 1
+ SetEffect(gear, heResurrectable, 1)
+ end
+end
+
+function checkEmptyTeam (teamName)
+ for i=0 , #hhs do
+ if hhs[i]~=nil then
+ if teamName == GetHogTeamName(hhs[i]) then
+ return false
+ end
+ end
+ end
+ return true
+end
+
+function onGearDelete(gear)
+ -- Remove hogs that are gone
+ if GetGearType(gear) == gtHedgehog then
+ numhhs = numhhs - 1
+
+ local found
+ for i=0, #hhs do
+ if hhs[i] == gear then
+ found = i
+ break
+ end
+ end
+ for i = found, #hhs - 1 do
+ hhs[i] = hhs[i + 1]
+ end
+ hhs[#hhs] = nil
+
+ local t_name = GetHogTeamName(gear)
+ if checkEmptyTeam(t_name) then
+ for i = 0, TeamsCount - 1 do
+ if teams[i] == t_name then
+ found = i
+ break
+ end
+ end
+ for i = found, TeamsCount - 2 do
+ teams[i] = teams[i + 1]
+ end
+ teams[TeamsCount - 1] = nil
+ TeamsCount = TeamsCount - 1
+ end
+ AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+ trackDeletion(gear)
+ end
+end
+
+--[[
+S T A R R I N G
+ prof - Coding, implementing and evangelism
+ vos - Initial idea and script improvements
+ mikade - Moving the `how to play` into the game so that people know `how to play`, and whitespace :D
+--]]