share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua
author mikade
Sun, 11 Sep 2011 04:08:50 +0200
changeset 5845 b20a1e0a0e7e
parent 5827 a416f1070fdf
child 6747 3f85b103f29f
permissions -rw-r--r--
Substitute broken Tumbler-based GaudyRacer with generic, map independant Racer. More changes/updates on this script to come.

----------------------------------
-- 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