share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua
author Vatten
Tue, 30 Oct 2012 14:40:40 -0400
branch0.9.18
changeset 7893 50e8f6714b22
child 7895 ac1610a7b7fa
permissions -rw-r--r--
new script specialising in altering weapon behaviour

--kolla stavning
--[[
-fixed so you cant be sabotaged on your selecting continent turn
-moved translations to default locale file.

-NA
	-moved lipstick bullet and pinata bullet to sniperrifle - pinatabullet deals ~23 on direct hit
	-added eagle eye on shotgun (teleport)
-SA
	-reduced duration on birdy from 2 to 1
	-reduced duration on bee  from 2 to 1
	-fixed anno 1032
	-reduced  donut ring with 25% on anno 1032
	-reduced push power
	-reduced birdy from unlimited to 5
	-unlimited bees
-EU
	-increased jetpack from 2 to 3
	added medicine on molotov
-AF
	-fixed Hedgehog projectile
	-reduced drillstrike from 2 to 1
	-increased sticky bomb from 6 to 7
-AS
	-reduced damage on parabomb from 27 to 22
	-increased duration on hellish from 4 to 5
	-per round limit on rope to 3
-AUS
	-fixed baseballbat (mine) range and awareness
-AN
	-reduced teleport from 3 to 2
	-changed portalgun so you will only be able to use it 1s per turn
-KER
	-reduced damage on sabotage from 40% to 0%
	-renamed sabotage so it will sabotage all hogs in the circle + fire up a flare (bomb) + more bombs depending on the amount of hogs
	-increased range on flare (sabotage) with 50%
	-changed scream of walrus so it will deal 20 dmg and 10% of your hogs health
	-sabotage will now visually "boil"
	-added 4 freezers
-ZE
	-fixed random system alot.
	-you will get 3-1 weapons
	-you can now watch your weapon under your turn
]]

--Based on Hadashi:s idea, then largely modified
--Made By Vatten 2012

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

--0.9.17
--[[
function div(val1,val2)
	return val1/val2
end

function ddiv(val1,val2)
	return div(val1*100,val2)*0.01
end
]]

function int_sqrt(num)
	temp=num
	while(temp*temp-div(temp,2)>num)
	do
		temp=div((temp+div(num,temp)),2)
	end
	return math.abs(temp)
end

function hypotenusa(xx,yy)
	--return math.abs(yy)/math.sin(math.atan(math.abs(yy)/math.abs(xx)))
	--AddCaption(int_sqrt((xx^2)+(yy^2)))
	return int_sqrt((xx^2)+(yy^2))
end

local teams_ok = {}
local wepcode_teams={}
local swapweps=false

--run when game starts on real
local australianSpecial=false
local africanSpecial=0
local africaspecial2=0
local asianSpecial=false
local samericanSpecial=false
local namericanSpecial=1
local sniper_s_in_use=false
local kergulenSpecial=1
local shotgun_s=false
local europe_s=0

local austmine=nil
local inpara=false
local asianflame=0

local temp_val=0

--för sabotage
local disallowattack=0
local disallowleft=true
local disable_moving={}

--skall bytas till för alla teams
local continent = {}

local weapontexts = {
loc("Green lipstick bullet: [Is poisonous]"),
loc("Piñata bullet: [Contains some sweet candy!]"),
loc("Anno 1032: [The explosion will make a strong push ~ wide range, wont affect hogs close to the target]"),
loc("Dust storm: [Deals 20 damage to all enemies in the circle]"),
loc("Fire a mine: [Does what it says ~ Cant be dropped close to an enemy ~ 1 sec]"),
loc("Drop a bomb: [drop some heroic wind that will turn into a bomb on impact]"),
loc("Scream from a Walrus: [Deal 20 damage + 10% of your hogs health to all hogs around you and get half back]"),
loc("Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"),
loc("Flare: [fire up some bombs depending on hogs depending on hogs in the circle"),
loc("Lonely Cries: [Rise the water if no hog is in the circle and deal 1 damage to all hogs]"),
loc("Hedgehog projectile: [fire your hog like a Sticky Bomb]"),
loc("Napalm rocket: [Fire a bomb with napalm!]"),
loc("Eagle Eye: [Blink to the impact ~ one shot]"),
loc("Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"),
loc("Sabotage: [Sabotage all hogs in the circle and deal ~10 dmg]")
}

local weaponsets = 
{
{loc("North America"),"Area: 24,709,000 km2, Population: 528,720,588",loc("Special Weapons:").."|"..loc("Shotgun")..": "..weapontexts[13].."|"..loc("Sniper Rifle")..": "..weapontexts[1].."|"..loc("Sniper Rifle")..": "..weapontexts[2],amSniperRifle,
{{amShotgun,100},{amDEagle,100},{amLaserSight,4},{amSniperRifle,100},{amCake,1},{amAirAttack,3},{amSwitch,6}}},

{loc("South America"),"Area: 17,840,000 km2, Population: 387,489,196 ",loc("Special Weapons:").."|"..loc("GasBomb")..": "..weapontexts[3],amGasBomb,
{{amBirdy,5},{amHellishBomb,1},{amBee,100},{amWhip,100},{amGasBomb,100},{amFlamethrower,100},{amNapalm,2},{amExtraDamage,3}}},

{loc("Europe"),"Area: 10,180,000 km2, Population: 739,165,030",loc("Special Weapons:").."|"..loc("Molotov")..": "..weapontexts[14],amBazooka,
{{amBazooka,100},{amGrenade,100},{amMortar,100},{amClusterBomb,5},{amMolotov,5},{amVampiric,4},{amPiano,1},{amResurrector,2},{amJetpack,2}}},

{loc("Africa"),"Area: 30,221,532 km2, Population: 1,032,532,974",loc("Special Weapons:").."|"..loc("Seduction")..": "..weapontexts[4].."|"..loc("Sticky Mine")..": "..weapontexts[11].."|"..loc("Sticky Mine")..": "..weapontexts[12],amSMine,
{{amSMine,6},{amWatermelon,1},{amDrillStrike,1},{amExtraTime,2},{amDrill,100},{amLandGun,3},{amSeduction,100}}},

{loc("Asia"),"Area: 44,579,000 km2, Population: 3,879,000,000",loc("- Will refresh Rope each turn to 3.").."|"..loc("Special Weapons:").."|"..loc("Parachute")..": "..weapontexts[6],amRope,
{{amKamikaze,4},{amRope,100},{amFirePunch,100},{amParachute,1},{amKnife,3}}},

{loc("Australia"),"Area:  8,468,300 km2, Population: 31,260,000",loc("Special Weapons:").."|"..loc("Baseballbat")..": "..weapontexts[5],amBaseballBat,
{{amBaseballBat,100},{amMine,100},{amLowGravity,6},{amBlowTorch,100},{amRCPlane,2},{amTardis,100}}},

{loc("Antarctica"),"Area: 14,000,000 km2, Population: ~1,000",loc("- Will refresh portalgun each turn."),amTeleport,
{{amSnowball,4},{amTeleport,2},{amInvulnerable,6},{amPickHammer,100},{amSineGun,6},{amGirder,4},{amPortalGun,1},{amDynamite,1}}},

{loc("Kerguelen"),"Area: 1,100,000 km2, Population: ~70",loc("Special Weapons:").."|"..loc("Structure")..": "..weapontexts[7].."|"..loc("Structure")..": "..weapontexts[8].." ("..loc("Duration")..": 2)|"..loc("Structure")..": "..weapontexts[9].."|"..loc("Structure")..": "..weapontexts[10],amStructure,
{{amHammer,100},{amMineStrike,2},{amBallgun,1},{amStructure,100},{amIceGun,4}}},
--{{amHammer,100},{amMineStrike,2},{amBallgun,1},{amStructure,100}}},

{loc("Zealandia"),"Area: 3,500,000 km2, Population: 4,650,000",loc("- Will Get 1-3 random weapons"),amInvulnerable,
{{amBazooka,1},{amBlowTorch,1},{amSwitch,1}}}
}

--weapontype,ammo,?,duration,*times your choice,affect on random team (should be placed with 1,0,1,0,1 on the 6th option for better randomness)
local weapons_dmg = {
	{amKamikaze, 0, 1, 0, 1, 0},
	{amSineGun, 0, 1, 0, 1, 1},
	{amBazooka, 0, 1, 0, 1, 0},
	{amMineStrike, 0, 1, 5, 1, 2},
	{amGrenade, 0, 1, 0, 1, 0},
	{amPiano, 0, 1, 5, 1, 1},
	{amClusterBomb, 0, 1, 0, 1, 0},
	{amBee, 0, 1, 1, 1, 0},
	{amShotgun, 0, 0, 0, 1, 1},
	{amMine, 0, 1, 0, 1, 0},
	{amSniperRifle, 0, 1, 0, 1, 1},
	{amDEagle, 0, 1, 0, 1, 0},
	{amDynamite, 0, 1, 0, 1, 1},
	{amFirePunch, 0, 1, 0, 1, 0},
	{amHellishBomb, 0, 1, 5, 1, 2},
	{amWhip, 0, 1, 0, 1, 0},
	{amNapalm, 0, 1, 5, 1, 2},
	{amPickHammer, 0, 1, 0, 1, 0},
	{amBaseballBat, 0, 1, 0, 1, 1},
	{amMortar, 0, 1, 0, 1, 0},
	{amCake, 0, 1, 4, 1, 2},
	{amSeduction, 0, 0, 0, 1, 0},
	{amWatermelon, 0, 1, 5, 1, 2},
	{amDrill, 0, 1, 0, 1, 0},
	{amBallgun, 0, 1, 5, 1, 2},
	{amMolotov, 0, 1, 0, 1, 0},
	{amBirdy, 0, 1, 1, 1, 1},
	{amBlowTorch, 0, 1, 0, 1, 0},
	{amRCPlane, 0, 1, 5, 1, 2},
	{amGasBomb, 0, 0, 0, 1, 0},
	{amAirAttack, 0, 1, 4, 1, 1},
	{amFlamethrower, 0, 1, 0, 1, 0},
	{amSMine, 0, 1, 0, 1, 1},
	{amHammer, 0, 1, 0, 1, 0},
	{amDrillStrike, 0, 1, 4, 1, 2},
	{amSnowball, 0, 1, 0, 1, 0},
	{amStructure, 0, 0, 0, 1, 1}
}
local weapons_supp = {
	{amParachute, 0, 1, 0, 1, 0},
	{amGirder, 0, 1, 0, 1, 0},
	{amSwitch, 0, 1, 0, 1, 0},
	{amLowGravity, 0, 1, 0, 1, 0},
	{amExtraDamage, 0, 1, 2, 1, 0},
	{amRope, 0, 1, 0, 1, 1},
	{amInvulnerable, 0, 1, 0, 1, 0},
	{amExtraTime, 0, 1, 0, 1, 0},
	{amLaserSight, 0, 1, 0, 1, 0},
	{amVampiric, 0, 1, 0, 1, 0},
	{amJetpack, 0, 1, 0, 1, 1},
	{amPortalGun, 0, 1, 3, 1, 1},
	{amResurrector, 0, 1, 3, 1, 0},
	{amTeleport, 0, 1, 0, 1, 0},
	{amLandGun, 0, 1, 0, 1, 0},
	{amTardis, 0, 1, 0, 1, 0},
	{amIceGun, 0, 1, 0, 1, 0},
	{amKnife, 0, 1, 0, 1, 0}
}
	
function validate_weapon(hog,weapon,amount)
	if(MapHasBorder() == false or (MapHasBorder() == true and weapon ~= amAirAttack and weapon ~= amMineStrike and weapon ~= amNapalm and weapon ~= amDrillStrike and weapon ~= amPiano))
	then
		AddAmmo(hog, weapon,amount)
	end
end

--reset all weapons for a team
function cleanweps(hog)

	local i=1
	--+1 for skip
	while(i<=table.getn(weapons_supp)+table.getn(weapons_dmg)+1)
	do
		AddAmmo(hog,i,0)
		i=i+1
	end
	
	AddAmmo(hog,amSkip,100)
end

function load_weaponset(hog, num)
	for v,w in pairs(weaponsets[num][5]) 
	do
		validate_weapon(hog, w[1],w[2])
	end
end

function load_continent_selection(hog)
	for v,w in pairs(weaponsets) 
	do
		validate_weapon(hog, weaponsets[v][4],1)
	end
	AddAmmo(hog,amSwitch) --random continent
end

function show_continent_info(continent,time)
	local ns=false
	if(time==-1)
	then
		time=0
		ns=true
	end
	ShowMission(weaponsets[continent][1],weaponsets[continent][2],weaponsets[continent][3], -weaponsets[continent][4], time)
	if(ns)
	then
		HideMission()
	end
end

function visual_gear_explosion(range,xpos,ypos,gear1,gear2)
	local degr=0
	local lap=30
	while(lap<range)
	do
		while(degr < 6.2831)
		do
			AddVisualGear(xpos+math.cos(degr+0.1)*(lap+5), ypos+math.sin(degr+0.1)*(lap+5), gear1, 0, false)
			if(gear2~=false)
			then
				AddVisualGear(xpos+math.cos(degr)*lap, ypos+math.sin(degr)*lap, gear2, 0, false)
			end
			degr=degr+((3.1415*3)*0.125) --1/8 = 0.125
		end
		lap=lap+30
		degr=degr-6.2831
	end
end

--zealandia
function get_random_weapon(hog)
	local random_weapon = 0
	local old_rand_weap = 0
	local rand_weaponset_power = 0
	
	if(continent[GetHogTeamName(hog)]==9 and (getTeamValue(GetHogTeamName(hog), "rand-done-turn")==false or getTeamValue(GetHogTeamName(hog), "rand-done-turn")==nil))
	then
		cleanweps(hog)
	
		random_weapon = GetRandom(table.getn(weapons_dmg))+1
		while(weapons_dmg[random_weapon][4]>TotalRounds)
		do
			if(random_weapon>=table.getn(weapons_dmg))
			then
				random_weapon=0
			end
			random_weapon = random_weapon+1
		end
		validate_weapon(hog, weapons_dmg[random_weapon][1],1)
		rand_weaponset_power=weapons_dmg[random_weapon][6]
		old_rand_weap = random_weapon
		
		if(rand_weaponset_power <2)
		then
			random_weapon = GetRandom(table.getn(weapons_supp))+1
			while(weapons_supp[random_weapon][4]>TotalRounds or rand_weaponset_power+weapons_supp[random_weapon][6]>2)
			do
				if(random_weapon>=table.getn(weapons_supp))
				then
					random_weapon=0
				end
				random_weapon = random_weapon+1
			end
			validate_weapon(hog, weapons_supp[random_weapon][1],1)
			rand_weaponset_power=rand_weaponset_power+weapons_supp[random_weapon][6]
		end
		--check again if  the power is enough
		if(rand_weaponset_power <1)
		then
			random_weapon = GetRandom(table.getn(weapons_dmg))+1
			while(weapons_dmg[random_weapon][4]>TotalRounds or old_rand_weap == random_weapon or weapons_dmg[random_weapon][6]>0)
			do
				if(random_weapon>=table.getn(weapons_dmg))
				then
					random_weapon=0
				end
				random_weapon = random_weapon+1
			end
			validate_weapon(hog, weapons_dmg[random_weapon][1],1)
		end
			
		setTeamValue(GetHogTeamName(hog), "rand-done-turn", true)
		
		if(GetHogTeamName(hog)==GetHogTeamName(CurrentHedgehog))
		then
			temp_val=false
		end
	end
end


function setweapons(skipafter)

	cleanweps(CurrentHedgehog)
	load_weaponset(CurrentHedgehog,continent[GetHogTeamName(CurrentHedgehog)])
	if(skipafter==true)
	then
		ParseCommand("setweap " .. string.char(amSkip))
	end
	
	--AddCaption(loc("You have recieved weapons from ") .. weaponsets[continent[GetHogTeamName(CurrentHedgehog)]][1] .. "!")
	show_continent_info(continent[GetHogTeamName(CurrentHedgehog)],0)
end

function show_damage_tag(hog,damage)
	healthtag=AddVisualGear(GetX(hog), GetY(hog), vgtHealthTag, damage, false)
	v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 = GetVisualGearValues(healthtag)
	SetVisualGearValues(healthtag, v1, v2, v3, v4, v5, v6, v7, v8, v9, GetClanColor(GetHogClan(hog)))
end

function fire_gear(hedgehog,geartype,vx,vy,timer)
	return AddGear(div((GetGearRadius(hedgehog)*2*vx),hypotenusa(vx,vy))+GetX(hedgehog), div((GetGearRadius(hedgehog)*2*vy),hypotenusa(vx,vy))+GetY(hedgehog), geartype, 0, vx, vy, timer)
end

--==========================run throw all hog/gear weapons ==========================
function weapon_aust_check(hog)
	if(gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 50, false)==true and hog ~= CurrentHedgehog)
	then
		temp_val=1
	end
end

function weapon_duststorm(hog)
	local dmg=20
	if(gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 250, false)==true and GetHogClan(hog) ~= GetHogClan(CurrentHedgehog))
	then
		if(GetHealth(hog) > dmg)
		then
			SetHealth(hog, GetHealth(hog)-dmg)
		else
			SetHealth(hog, 0)
		end
		show_damage_tag(hog,dmg)
	end
end

function weapon_scream_walrus(hog)
	if(gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 120, false)==true and GetHogClan(hog) ~= GetHogClan(CurrentHedgehog))
	then
		if(GetHealth(hog)>(20+GetHealth(CurrentHedgehog)*0.1))
		then
			SetHealth(hog, GetHealth(hog)-(20+GetHealth(CurrentHedgehog)*0.1))
			temp_val=temp_val+10+GetHealth(CurrentHedgehog)*0.05
		else
			SetHealth(hog, 0)
			temp_val=temp_val+(GetHealth(hog)*0.5)+(GetHealth(CurrentHedgehog)*0.05)
		end
		show_damage_tag(hog,(20+GetHealth(CurrentHedgehog)*0.1))
		AddVisualGear(GetX(hog), GetY(hog), vgtExplosion, 0, false)
		AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmokeWhite, 0, false)
	end
end

function weapon_swap_kerg(hog)
	if(kergulenSpecial ~= -1 and GetHogClan(hog) ~= GetHogClan(CurrentHedgehog) and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 450, false))
	then
		local thisX=GetX(CurrentHedgehog)
		local thisY=GetY(CurrentHedgehog)
		SetGearPosition(CurrentHedgehog, GetX(hog), GetY(hog))
		SetGearPosition(hog, thisX, thisY)
		kergulenSpecial=-1
	end
end

function weapon_flare(hog)
	if(GetHogClan(hog) ~= GetHogClan(CurrentHedgehog) and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 45, false))
	then
		if(GetX(hog)<=GetX(CurrentHedgehog))
		then
			dirker=1
		else
			dirker=-1
		end
		AddVisualGear(GetX(hog), GetY(hog), vgtFire, 0, false)
		SetGearPosition(CurrentHedgehog, GetX(CurrentHedgehog), GetY(CurrentHedgehog)-5)
		SetGearVelocity(CurrentHedgehog, 100000*dirker, -300000)
		AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)-20, gtCluster, 0, -10000*dirker, -1000000, 35)
		PlaySound(sndHellishImpact2)
	end
end

function weapon_sabotage(hog)
	if(GetHogClan(hog) ~= GetHogClan(CurrentHedgehog) and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 100, false))
	then
		disable_moving[hog]=true
		AddGear(GetX(hog), GetY(hog), gtCluster, 0, 0, 0, 10)
		PlaySound(sndNooo,hog)
	end
end

function weapon_anno_south(hog)
	local power_radius_outer=250
	local power_radius_inner=40
	local power_sa=6000
	if(gearIsInCircle(hog,GetX(temp_val), GetY(temp_val), power_radius_outer, false) and gearIsInCircle(hog,GetX(temp_val), GetY(temp_val), power_radius_inner, false)==false)
	then
		if(hog == CurrentHedgehog)
		then
			SetState(CurrentHedgehog, gstMoving)
		end
		SetGearPosition(hog, GetX(hog),GetY(hog)-3)
		SetGearVelocity(hog, div((power_radius_outer-hypotenusa(math.abs(GetX(hog)-GetX(temp_val)),math.abs(GetY(hog)-GetY(temp_val))))*power_sa*(GetX(hog)-GetX(temp_val)),power_radius_outer), div((power_radius_outer-hypotenusa(math.abs(GetX(hog)-GetX(temp_val)),math.abs(GetY(hog)-GetY(temp_val))))*power_sa*(GetY(hog)-GetY(temp_val)),power_radius_outer))
	end
end

function weapon_cries_a(hog)
	if(GetHogClan(hog) ~= GetHogClan(CurrentHedgehog) and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 500, false))
	then
		kergulenSpecial=-1
	end
end

function weapon_cries_b(hog)
	if(GetHogClan(hog) ~= GetHogClan(CurrentHedgehog))
	then
		SetHealth(hog, GetHealth(hog)-1)
		show_damage_tag(hog,1)
		AddVisualGear(GetX(hog), GetY(hog)-30, vgtEvilTrace, 0, false)
	end
end

function weapon_lipstick(hog)
	if(gearIsInCircle(temp_val,GetX(hog), GetY(hog), 20, false))
	then
		SetEffect(hog, hePoisoned, 1)
		PlaySound(sndBump)
	end
end

function weapon_health(hog)
	if(gearIsInCircle(temp_val,GetX(hog), GetY(hog), 100, false))
	then
		SetHealth(hog, GetHealth(hog)+25)
		SetEffect(hog, hePoisoned, false)
	end
end
--============================================================================

--set each weapons settings
function onAmmoStoreInit()

	SetAmmo(amSkip, 9, 0, 0, 0)
	
	for v,w in pairs(weapons_dmg) 
	do
		SetAmmo(w[1], w[2], w[3], w[4], w[5])
	end
	
	for v,w in pairs(weapons_supp) 
	do
		SetAmmo(w[1], w[2], w[3], w[4], w[5])
	end
end

function onGameStart()
	trackTeams()

	ShowMission(loc("Continental supplies").." 1.1a",loc("Let a Continent provide your weapons!"),
	loc("- Per team weapons|- 9 weaponschemes|- Unique new weapons| |Select continent first round with the Weapon Menu or by ([switch/tab]=Increase,[presice/left shift]=Decrease) on Skip|Some weapons have a second option. Find them with [switch/tab]"), -amLowGravity, 0)
end

--what happen when a turn starts
function onNewTurn()

	australianSpecial=true
	asianSpecial=false
	austmine=nil
	africanSpecial=0
	samericanSpecial=false
	africaspecial2=0
	kergulenSpecial=1
	namericanSpecial=1
	asianflame=0
	shotgun_s=false
	sniper_s_in_use=false
	europe_s=0
	
	temp_val=0
	
	disallowattack=0
	disallowleft=true
	--when all hogs are "placed"
	
	if(GetCurAmmoType()~=amTeleport)
	then
		--will run once when the game really starts (after placing hogs and so on
		if(teams_ok[GetHogTeamName(CurrentHedgehog)] == nil)
		then
			disable_moving[CurrentHedgehog]=false
			AddCaption("["..loc("Select continent!").."]")
			load_continent_selection(CurrentHedgehog)
			continent[GetHogTeamName(CurrentHedgehog)]=0
			swapweps=true
			teams_ok[GetHogTeamName(CurrentHedgehog)] = 2
		else
			swapweps=false
			if(continent[GetHogTeamName(CurrentHedgehog)]==0)
			then
				continent[GetHogTeamName(CurrentHedgehog)]=GetRandom(table.getn(weaponsets))+1
				setweapons(true)
			end
			show_continent_info(continent[GetHogTeamName(CurrentHedgehog)],-1)
		end
	end
	
	if(continent[GetHogTeamName(CurrentHedgehog)]==7)
	then
		AddAmmo(CurrentHedgehog,amPortalGun,0)
		AddAmmo(CurrentHedgehog,amPortalGun,1)
	elseif(continent[GetHogTeamName(CurrentHedgehog)]==5)
	then
		AddAmmo(CurrentHedgehog,amParachute,0)
		AddAmmo(CurrentHedgehog,amParachute,1)
	end
	
	temp_val=true
	runOnHogs(get_random_weapon)
	
	if(temp_val==true and continent[GetHogTeamName(CurrentHedgehog)]==9 and getTeamValue(GetHogTeamName(CurrentHedgehog), "rand-done-turn")==true)
	then
		setTeamValue(GetHogTeamName(CurrentHedgehog), "rand-done-turn", false)
	end

end

--what happens when you press "tab" (common button)
function onSwitch()
	
	--place mine (australia)
	if(GetCurAmmoType() == amBaseballBat and australianSpecial==true)
	then
		temp_val=0
		runOnHogs(weapon_aust_check)
		
		if(temp_val==0)
		then
			austmine=AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)+5, gtMine, 0, 0, 0, 0)
			SetHealth(austmine, 100)
			SetTimer(austmine, 1000)
			australianSpecial=false
			swapweps=false
		else
			PlaySound(sndDenied)
		end
	end
	
	--Asian special
	if(asianSpecial==false and inpara~=false)
	then
		asiabomb=AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)+3, gtSnowball, 0, 0, 0, 0)
		SetGearMessage(asiabomb, 1)
		asianSpecial=true
		swapweps=false
	end
	
	--africa
	if(GetCurAmmoType() == amSeduction)
	then
		if(africanSpecial==0)
		then
			africanSpecial = 1
			AddCaption(weapontexts[4])
		else
			africanSpecial = 0
			AddCaption(loc("NORMAL"))
		end
	end
	--south america
	if(GetCurAmmoType() == amGasBomb)
	then
		if(samericanSpecial==false)
		then
			samericanSpecial = true
			AddCaption(weapontexts[3])
		else
			samericanSpecial = false
			AddCaption(loc("NORMAL"))
		end
	end
	--africa
	if(GetCurAmmoType() == amSMine)
	then
		if(africaspecial2==0)
		then
			africaspecial2 = 1
			AddCaption(weapontexts[11])
		elseif(africaspecial2 == 1)
		then
			africaspecial2 = 2
			AddCaption(weapontexts[12])
		elseif(africaspecial2 == 2)
		then
			africaspecial2 = 0
			AddCaption(loc("NORMAL"))
		end
	end
	
	--north america
	if(GetCurAmmoType() == amSniperRifle and sniper_s_in_use==false)
	then
		if(namericanSpecial==3)
		then
			namericanSpecial = 1
			AddCaption(loc("NORMAL"))
		elseif(namericanSpecial==1)
		then
			namericanSpecial = 2
			AddCaption("#"..weapontexts[1])
		elseif(namericanSpecial==2)
		then
			namericanSpecial = 3
			AddCaption("##"..weapontexts[2])
		end
	end
	
	if(GetCurAmmoType() == amShotgun and shotgun_s~=nil)
	then
		if(shotgun_s==false)
		then
			shotgun_s = true
			AddCaption(weapontexts[13])
		else
			shotgun_s = false
			AddCaption(loc("NORMAL"))
		end
	end
	
	if(GetCurAmmoType() == amMolotov)
	then
		if(europe_s==0)
		then
			europe_s = 1
			AddCaption(weapontexts[14])
		else
			europe_s = 0
			AddCaption(loc("NORMAL"))
		end
	end
	
	if(swapweps==true and GetCurAmmoType() == amSkip)
	then
		continent[GetHogTeamName(CurrentHedgehog)]=continent[GetHogTeamName(CurrentHedgehog)]+1
		
		if(continent[GetHogTeamName(CurrentHedgehog)]> table.getn(weaponsets))
		then
			continent[GetHogTeamName(CurrentHedgehog)]=1
		end
		setweapons(true)
	end
	
	if(GetCurAmmoType() == amStructure)
	then
		if(kergulenSpecial==5)
		then
			kergulenSpecial = 1
			AddCaption("#"..weapontexts[7])
		elseif(kergulenSpecial==1 and TotalRounds>=1)
		then
			kergulenSpecial = 2
			AddCaption("##"..weapontexts[8])
		elseif(kergulenSpecial==2 or (kergulenSpecial==1 and TotalRounds<1))
		then
			kergulenSpecial = 3
			AddCaption("###"..weapontexts[9])
		elseif(kergulenSpecial==3)
		then
			kergulenSpecial = 4
			AddCaption("####"..weapontexts[10])
		elseif(kergulenSpecial==4)
		then
			kergulenSpecial = 5
			AddCaption("#####"..weapontexts[15])
		end
	end
end

function onPrecise()
	if(swapweps==true and GetCurAmmoType() == amSkip)
	then
		continent[GetHogTeamName(CurrentHedgehog)]=continent[GetHogTeamName(CurrentHedgehog)]-1
		
		if(continent[GetHogTeamName(CurrentHedgehog)]<=0)
		then
			continent[GetHogTeamName(CurrentHedgehog)]=9
		end
		setweapons(true)
	end
end

function onSlot()
	if(continent[GetHogTeamName(CurrentHedgehog)]==0) then
		ParseCommand("setweap " .. string.char(amSkip))
	end
end

function onGameTick20()

	if(teams_ok[GetHogTeamName(CurrentHedgehog)] == 2)
	then
		if(GetCurAmmoType()~=amTeleport and swapweps==true and TurnTime-TurnTimeLeft>=100)
		then
			teams_ok[GetHogTeamName(CurrentHedgehog)] = true
			ParseCommand("setweap " .. string.char(amSkip))
		end
	end
	
	if(continent[GetHogTeamName(CurrentHedgehog)]==0)
	then
		if(GetCurAmmoType()==amSniperRifle) then
			continent[GetHogTeamName(CurrentHedgehog)]=1
			setweapons(false)
		elseif(GetCurAmmoType()==amGasBomb) then
			continent[GetHogTeamName(CurrentHedgehog)]=2
			setweapons(false)
		elseif(GetCurAmmoType()==amBazooka) then
			continent[GetHogTeamName(CurrentHedgehog)]=3
			setweapons(false)
		elseif(GetCurAmmoType()==amSMine) then
			continent[GetHogTeamName(CurrentHedgehog)]=4
			setweapons(false)
		elseif(GetCurAmmoType()==amRope) then
			continent[GetHogTeamName(CurrentHedgehog)]=5
			setweapons(false)
		elseif(GetCurAmmoType()==amBaseballBat) then
			continent[GetHogTeamName(CurrentHedgehog)]=6
			setweapons(false)
		elseif(GetCurAmmoType()==amTeleport) then
			continent[GetHogTeamName(CurrentHedgehog)]=7
			setweapons(false)
		elseif(GetCurAmmoType()==amStructure) then
			continent[GetHogTeamName(CurrentHedgehog)]=8
			setweapons(false)
		elseif(GetCurAmmoType()==amInvulnerable) then
			continent[GetHogTeamName(CurrentHedgehog)]=9
			setweapons(false)
		elseif(GetCurAmmoType()==amSwitch) then
			continent[GetHogTeamName(CurrentHedgehog)]=GetRandom(table.getn(weaponsets))+1
			setweapons(false)
		end
	end
	
	if(kergulenSpecial ~= 0 and GetCurAmmoType() == amStructure)
	then
		if(kergulenSpecial == 1)
		then
			if(visualcircle==nil)
			then
				visualcircle=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtCircle, 120, false)
			end
			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 120, 4, 0xff0000ee)
		elseif(kergulenSpecial == 2)
		then
			if(visualcircle==nil)
			then
				visualcircle=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtCircle, 450, false)
			end
			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 450, 3, 0xffff00ee)
		elseif(kergulenSpecial == 3)
		then
			if(visualcircle==nil)
			then
				visualcircle=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtCircle, 45, false)
			end
			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 45, 6, 0x00ff00ee)
		elseif(kergulenSpecial == 4)
		then
			if(visualcircle==nil)
			then
				visualcircle=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtCircle, 500, false)
			end
			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 500, 1, 0x0000ffee)
		elseif(kergulenSpecial == 5)
		then
			if(visualcircle==nil)
			then
				visualcircle=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtCircle, 100, false)
			end
			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 100, 10, 0xeeeeeeee)
		end
	
	elseif(visualcircle~=nil)
	then
		DeleteVisualGear(visualcircle)
		visualcircle=nil
	end
	
	if(disable_moving[CurrentHedgehog]==true)
	then
	
		if(TurnTimeLeft<=3000)
		then
			disable_moving[CurrentHedgehog]=false
			SetHogLevel(CurrentHedgehog,0)
		elseif(disallowattack>=300 and disallowattack >= 400)
		then
			disallowattack=0
			SetHogLevel(CurrentHedgehog,1)
			AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmokeWhite, 0, false)
		elseif(GetHogLevel(CurrentHedgehog)==1)
		then
			SetHogLevel(CurrentHedgehog,0)
		else
			disallowattack=disallowattack+1
		end
	
	end
	
end

--if you used hogswitch or any similar weapon, dont enable any weaponchange
function onAttack()
	swapweps=false
	local around=false
	
	--african special
	if(africanSpecial == 1 and GetCurAmmoType() == amSeduction)
	then
		SetState(CurrentHedgehog, gstAttacked)
		
		runOnHogs(weapon_duststorm)

		--visual stuff
		visual_gear_explosion(250,GetX(CurrentHedgehog), GetY(CurrentHedgehog),vgtSmoke,vgtSmokeWhite)
		PlaySound(sndParachute)
	end
	
	--Kerguelen specials
	if(GetCurAmmoType() == amStructure)
	then
		SetState(CurrentHedgehog, gstAttacked)
		if(kergulenSpecial == 1)
		then
			temp_val=0
			runOnHogs(weapon_scream_walrus)
			SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+temp_val)
			PlaySound(sndHellish)
			
		elseif(kergulenSpecial == 2 and TotalRounds>=1)
		then
			runOnHogs(weapon_swap_kerg)
			PlaySound(sndPiano3)
		elseif(kergulenSpecial == 3)
		then
			runOnHogs(weapon_flare)
			PlaySound(sndThrowRelease)
			AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmokeWhite, 0, false)
			AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)-20, gtCluster, 0, 0, -1000000, 30)
				
		elseif(kergulenSpecial == 4)
		then
			runOnHogs(weapon_cries_a)
			if(kergulenSpecial~=-1)
			then
				AddGear(0, 0, gtWaterUp, 0, 0,0,0)
				PlaySound(sndWarp)
				PlaySound(sndMolotov)
				
				runOnHogs(weapon_cries_b)
			else
				HogSay(CurrentHedgehog, loc("Hogs in sight!"), SAY_SAY)
			end
		elseif(kergulenSpecial == 5)
		then
			runOnHogs(weapon_sabotage)
		end
		DeleteVisualGear(visualcircle)
		visualcircle=nil
	end

	--Australian special
	if(GetGearType(austmine) == gtMine and austmine ~= nil)
	then
		temp_val=0
		runOnHogs(weapon_aust_check)
		
		if(gearIsInCircle(austmine,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 30, false)==false or temp_val==1)
		then
			AddVisualGear(GetX(austmine), GetY(austmine), vgtDust, 0, false)
			DeleteGear(austmine)
			PlaySound(sndDenied)
		end
		
		austmine=nil
	end
	
	if(disable_moving[CurrentHedgehog]==true)
	then
		disable_moving[CurrentHedgehog]=false
		SetHogLevel(CurrentHedgehog,0)
	end
	
	australianSpecial=false
end

function onGearAdd(gearUid)
	swapweps=false
	
	trackGear(gearUid)
	
	--remove gasclouds on gasbombspecial
	if(GetGearType(gearUid)==gtPoisonCloud and samericanSpecial == true)
	then
		DeleteGear(gearUid)

	elseif(GetGearType(gearUid)==gtSMine)
	then
		vx,vy=GetGearVelocity(gearUid)
		if(africaspecial2 == 1)
		then
			SetState(CurrentHedgehog, gstHHDriven+gstMoving)
			SetGearPosition(CurrentHedgehog, GetX(CurrentHedgehog),GetY(CurrentHedgehog)-3)
			SetGearVelocity(CurrentHedgehog, vx, vy)
			DeleteGear(gearUid)
			--africaspecial2=0
			--SetEffect(CurrentHedgehog, heInvulnerable, true)
		elseif(africaspecial2 == 2)
		then
			fire_gear(CurrentHedgehog,gtNapalmBomb, vx, vy, 0)
			DeleteGear(gearUid)
			--africaspecial2=0
		end

	elseif(GetGearType(gearUid)==gtSniperRifleShot)
	then
		sniper_s_in_use=true
		if(namericanSpecial~=1)
		then
			SetHealth(gearUid, 1)
		end

	elseif(GetGearType(gearUid)==gtShotgunShot)
	then
		if(shotgun_s==true)
		then
			AddVisualGear(GetX(gearUid), GetY(gearUid), vgtFeather, 0, false)
			AddVisualGear(GetX(gearUid), GetY(gearUid), vgtFeather, 0, false)
			AddVisualGear(GetX(gearUid), GetY(gearUid), vgtFeather, 0, false)
			PlaySound(sndBirdyLay)
		else
			shotgun_s=nil
		end
		
	elseif(GetGearType(gearUid)==gtMolotov and europe_s==1)
	then
		vx,vy=GetGearVelocity(gearUid)
		e_health=fire_gear(CurrentHedgehog,gtCluster, vx, vy, 1)
		SetGearMessage(e_health, 2)
		DeleteGear(gearUid)
		
	elseif(GetGearType(gearUid)==gtParachute)
	then
		inpara=gearUid
	end
end

function onGearDelete(gearUid)

	trackDeletion(gearUid)
	--north american specials
	if(GetGearType(gearUid)==gtSniperRifleShot )
	then
		sniper_s_in_use=false
		if(namericanSpecial==2)
		then
			temp_val=gearUid
			runOnHogs(weapon_lipstick)
			
		elseif(namericanSpecial==3)
		then
			AddVisualGear(GetX(gearUid), GetY(gearUid), vgtExplosion, 0, false)
			
			pinata=AddGear(GetX(gearUid), GetY(gearUid), gtCluster, 0, 0, 0, 5)
			SetGearMessage(pinata,1)
		end
		
	elseif(GetGearType(gearUid)==gtCluster and GetGearMessage(gearUid)==1 and namericanSpecial==3)
	then
		AddGear(GetX(gearUid), GetY(gearUid), gtCluster, 0, 0, 0, 24)
	
	elseif(GetGearType(gearUid)==gtShotgunShot and shotgun_s==true)
	then
		SetState(CurrentHedgehog, gstMoving)
		SetGearPosition(CurrentHedgehog, GetX(gearUid), GetY(gearUid)+7)
		PlaySound(sndWarp)

	--south american special
	elseif(GetGearType(gearUid)==gtGasBomb and samericanSpecial == true)
	then
		temp_val=gearUid
		runOnGears(weapon_anno_south)
		AddVisualGear(GetX(gearUid), GetY(gearUid), vgtExplosion, 0, false)

	elseif(GetGearType(gearUid)==gtSnowball and GetGearMessage(gearUid)==1)
	then
		AddGear(GetX(gearUid), GetY(gearUid)+3, gtCluster, 0, 0, 0, 22)
		
	elseif(GetGearType(gearUid)==gtCluster and GetGearMessage(gearUid)==2)
	then
		temp_val=gearUid
		runOnGears(weapon_health)
		visual_gear_explosion(100,GetX(gearUid), GetY(gearUid),vgtSmokeWhite,vgtSmokeWhite)
		AddVisualGear(GetX(gearUid), GetY(gearUid), vgtExplosion, 0, false)
		PlaySound(sndGraveImpact)
		
	elseif(GetGearType(gearUid)==gtParachute)
	then
		inpara=false
	end
end