share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua
author mikade
Fri, 09 Sep 2011 02:11:51 +0200
changeset 5817 70208e400a59
parent 5797 d61cd92865c2
child 5827 a416f1070fdf
permissions -rw-r--r--
For now, don't spawn anything other than health crates.

----------------------------------
-- THE SPECIALISTS MODE 0.6
-- by mikade
----------------------------------

-- version history
-----------------
-- version 0.1
-----------------
-- concept test

----------------
-- version 0.2
----------------
-- added gfRandomOrder to gameflags
-- removed some deprecated variables/methods
-- fixed lack of portal reset

----------------
-- version 0.3
----------------
-- added switching on start
-- removed switch from engineer weaponset

----------------
-- version 0.4
----------------
-- Attempted to:
-- fix potential switch explit
-- improve user feedback on start

----------------
-- version 0.5
----------------
-- provision for variable minetimer / demo mines set to 5000ms
-- don't autoswitch if player only has 1 hog on his team

----------------
-- version 0.6
----------------
-- for the meanwhile, don't drop any crates except health crates

--------------------
--TO DO
--------------------

-- balance hog health, maybe
-- add proper gameflag checking, maybe (so that we can throw in a .cfg and let the users break everything)
-- set crate drops etc. (super crate for each class? or will this ruin the mode's simplicity?)

loadfile(GetDataPath() .. "Scripts/Locale.lua")()
loadfile(GetDataPath() .. "Scripts/Tracker.lua")()

local numhhs = 0
local hhs = {}

local currName
local lastName
local started = false
local switchStage = 0

local hogCounter

function CountHog(gear)
	hogCounter = hogCounter +1
end

function CreateTeam()

        currTeam = ""
        lastTeam = ""
        z = 0

        for i = 0, (numhhs-1) do

                currTeam = GetHogTeamName(hhs[i])

                if currTeam == lastTeam then
                        z = z + 1
                else
                        z = 1
                end

                if z == 1 then

                        SetHogName(hhs[i],"Soldier")
                        SetHogHat(hhs[i], "sf_vega")
                        SetHealth(hhs[i],200)

                elseif z == 2 then

                        SetHogHat(hhs[i], "Glasses")
                        SetHogName(hhs[i],"Engineer")

                elseif z == 3 then

                        SetHogName(hhs[i],"Ninja")
                        SetHogHat(hhs[i], "NinjaFull")
                        SetHealth(hhs[i],80)

                elseif z == 4 then

                        SetHogName(hhs[i],"Demo")
                        SetHogHat(hhs[i], "Skull")
                        SetHealth(hhs[i],200)

                elseif z == 5 then

                        SetHogName(hhs[i],"Sniper")
                        SetHogHat(hhs[i], "Sniper")
                        SetHealth(hhs[i],120)

                elseif z == 6 then

                        SetHogName(hhs[i],"Saint")
                        SetHogHat(hhs[i], "angel")
                        SetHealth(hhs[i],300)

                elseif z == 7 then

                        SetHogName(hhs[i],"Pyro")
                        SetHogHat(hhs[i], "Gasmask")
                        SetHealth(hhs[i],150)

                elseif z == 8 then

                        SetHogName(hhs[i],"Loon")
                        SetHogHat(hhs[i], "clown")
                        SetHealth(hhs[i],100)

                end

                lastTeam = GetHogTeamName(hhs[i])

        end

end

function ResetAllAmmo()

        AddAmmo(CurrentHedgehog, amBazooka, 0)
        AddAmmo(CurrentHedgehog, amGrenade, 0)
        AddAmmo(CurrentHedgehog, amShotgun, 0)

        AddAmmo(CurrentHedgehog, amGirder, 0)
        AddAmmo(CurrentHedgehog, amBlowTorch, 0)
        AddAmmo(CurrentHedgehog, amPickHammer, 0)
        AddAmmo(CurrentHedgehog, amSwitch, 0)

        AddAmmo(CurrentHedgehog, amRope, 0)
        AddAmmo(CurrentHedgehog, amParachute, 0)
        AddAmmo(CurrentHedgehog, amFirePunch, 0)

        AddAmmo(CurrentHedgehog, amDynamite, 0)
        AddAmmo(CurrentHedgehog, amDrill, 0)
        AddAmmo(CurrentHedgehog, amMine, 0)

        AddAmmo(CurrentHedgehog, amSniperRifle, 0)
        AddAmmo(CurrentHedgehog, amDEagle, 0)
        AddAmmo(CurrentHedgehog, amPortalGun, 0)

        AddAmmo(CurrentHedgehog, amSeduction, 0)
        AddAmmo(CurrentHedgehog, amResurrector, 0)
        AddAmmo(CurrentHedgehog, amInvulnerable, 0)

        AddAmmo(CurrentHedgehog, amFlamethrower, 0)
        AddAmmo(CurrentHedgehog, amMolotov, 0)
        AddAmmo(CurrentHedgehog, amNapalm, 0)

        AddAmmo(CurrentHedgehog, amBaseballBat, 0)
        AddAmmo(CurrentHedgehog, amGasBomb, 0)
        AddAmmo(CurrentHedgehog, amKamikaze, 0)

end

function AssignAmmo()

        ResetAllAmmo()
        n = GetHogName(CurrentHedgehog)

        AddAmmo(CurrentHedgehog, amSkip,100)

        if n == "Soldier" then
                AddAmmo(CurrentHedgehog, amBazooka,1)
                AddAmmo(CurrentHedgehog, amGrenade,1)
                AddAmmo(CurrentHedgehog, amShotgun,1)
        elseif n == "Engineer" then
                AddAmmo(CurrentHedgehog, amGirder, 2)
                AddAmmo(CurrentHedgehog, amBlowTorch, 1)
                AddAmmo(CurrentHedgehog, amPickHammer, 1)
        elseif n == "Ninja" then
                AddAmmo(CurrentHedgehog, amRope, 100)
                AddAmmo(CurrentHedgehog, amParachute, 100)
                AddAmmo(CurrentHedgehog, amFirePunch, 1)
        elseif n == "Demo" then
                AddAmmo(CurrentHedgehog, amDynamite, 1)
                AddAmmo(CurrentHedgehog, amMine, 1)
                AddAmmo(CurrentHedgehog, amDrill, 1)
        elseif n == "Sniper" then
                AddAmmo(CurrentHedgehog, amSniperRifle, 1)
                AddAmmo(CurrentHedgehog, amDEagle, 1)
                AddAmmo(CurrentHedgehog, amPortalGun, 2)
        elseif n == "Saint" then
                AddAmmo(CurrentHedgehog, amSeduction, 100)
                AddAmmo(CurrentHedgehog, amResurrector, 1)
                AddAmmo(CurrentHedgehog, amInvulnerable, 1)
        elseif n == "Pyro" then
                AddAmmo(CurrentHedgehog, amFlamethrower, 1)
                AddAmmo(CurrentHedgehog, amMolotov, 1)
                AddAmmo(CurrentHedgehog, amNapalm, 1)
        elseif n == "Loon" then
                AddAmmo(CurrentHedgehog, amBaseballBat, 1)
                AddAmmo(CurrentHedgehog, amGasBomb, 1)
                AddAmmo(CurrentHedgehog, amKamikaze, 1)
        end

end

function onGameInit()
        GameFlags = gfRandomOrder + gfResetWeps + gfInfAttack + gfPlaceHog
        Delay = 10
	HealthCaseProb = 100
end

function onGameStart()

        CreateTeam()

        ShowMission     (
                                loc("THE SPECIALISTS"),
                                loc("a Hedgewars mini-game"),

                                loc("Eliminate the enemy specialists.") .. "|" ..
                                " " .. "|" ..

                                loc("Game Modifiers: ") .. "|" ..
                                loc("Per-Hog Ammo") .. "|" ..
                                loc("Weapons Reset") .. "|" ..
                                loc("Unlimited Attacks") .. "|" ..

                                "", 4, 4000
                                )

	trackTeams()

end


function onNewTurn()
        currName = GetHogName(CurrentHedgehog)
        lastName = GetHogName(CurrentHedgehog)
        AssignAmmo()
        started = true
        switchStage = 0
end

function onGameTick()

	if (CurrentHedgehog ~= nil) then

		currName = GetHogName(CurrentHedgehog)
		
		if (currName ~= lastName) and (switchStage > 100) then
			AddCaption(loc("Switched to ") .. currName .. "!")
			AssignAmmo()		
		end

		if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) and (switchStage < 100) then			
			
			AddCaption(loc("Prepare yourself") .. ", " .. currName .. "!") 

			hogCounter = 0
			runOnHogsInTeam(CountHog, GetHogTeamName(CurrentHedgehog) )

			if hogCounter > 1 then

				switchStage = switchStage + 1	
			
				if switchStage == 1 then
					AddAmmo(CurrentHedgehog, amSwitch, 1)
				
				elseif switchStage == 2 then
					ParseCommand("setweap " .. string.char(amSwitch))
				elseif switchStage == 3 then
					SetGearMessage(CurrentHedgehog,gmAttack) 
				elseif switchStage == 4 then
					switchStage = 110
					AddAmmo(CurrentHedgehog, amSwitch, 0)
				end
			
			else
				switchStage = 110
			end


		end		
		
		lastName = currName

	end

end

function onGearAdd(gear)

        if GetGearType(gear) == gtHedgehog then
                hhs[numhhs] = gear
                numhhs = numhhs + 1
        elseif (GetGearType(gear) == gtMine) and (started == true) then
		SetTimer(gear,5000)	
	end
	
	if (GetGearType(gear) == gtHedgehog) or (GetGearType(gear) == gtResurrector) then
		trackGear(gear)
	end 


end

function onGearDelete(gear)
	if (GetGearType(gear) == gtHedgehog) or (GetGearType(gear) == gtResurrector) then
		trackDeletion(gear)
	end 
end

function onAmmoStoreInit()
--
end