share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua
changeset 11718 f699978eae19
parent 11717 f35139700d22
child 11719 9fea4e2dceaa
equal deleted inserted replaced
11717:f35139700d22 11718:f699978eae19
   184 	xOffset = 40
   184 	xOffset = 40
   185 
   185 
   186 	if i == 0 then
   186 	if i == 0 then
   187 		yOffset = 40
   187 		yOffset = 40
   188 		tCol = 0xffba00ff
   188 		tCol = 0xffba00ff
   189 		tValue = 30--TimeLeft
   189 		tValue = 30
   190 	elseif i == 1 then
   190 	elseif i == 1 then
   191 		zoomL = 1.1
   191 		zoomL = 1.1
   192 		xOffset = 45
   192 		xOffset = 45
   193 		yOffset = 70
   193 		yOffset = 70
   194 		tCol = 0x00ff00ff
   194 		tCol = 0x00ff00ff
   196 	elseif i == 2 then
   196 	elseif i == 2 then
   197 		zoomL = 1.1
   197 		zoomL = 1.1
   198 		xOffset = 60 + 35
   198 		xOffset = 60 + 35
   199 		yOffset = 70
   199 		yOffset = 70
   200 		tCol = 0xa800ffff
   200 		tCol = 0xa800ffff
   201 		tValue = 10--shieldHealth - 80
   201 		tValue = 10
   202 	end
   202 	end
   203 
   203 
   204 	DeleteVisualGear(vTag[i])
   204 	DeleteVisualGear(vTag[i])
   205 	vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
   205 	vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
   206 	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vTag[i])
   206 	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vTag[i])
   264 end
   264 end
   265 
   265 
   266 function HandleBorderEffects()
   266 function HandleBorderEffects()
   267 
   267 
   268 	effectTimer = effectTimer + 1
   268 	effectTimer = effectTimer + 1
   269 	if effectTimer > 15 then --25
   269 	if effectTimer > 15 then
   270 		effectTimer = 1
   270 		effectTimer = 1
   271 		for i = 1, #wX do
   271 		for i = 1, #wX do
   272 			BorderSpark(wX[i],wY[i],wWidth[i],wHeight[i], wCol[i])
   272 			BorderSpark(wX[i],wY[i],wWidth[i],wHeight[i], wCol[i])
   273 		end
   273 		end
   274 	end
   274 	end
   280 ---
   280 ---
   281 
   281 
   282 function gearCanBeDeflected(gear)
   282 function gearCanBeDeflected(gear)
   283 
   283 
   284 	if 	(GetGearType(gear) == gtShell) or
   284 	if 	(GetGearType(gear) == gtShell) or
   285 		--(GetGearType(gear) == gtBee) or
       
   286 		(GetGearType(gear) == gtGrenade) or
   285 		(GetGearType(gear) == gtGrenade) or
   287 		(GetGearType(gear) == gtAirBomb) or
   286 		(GetGearType(gear) == gtAirBomb) or
   288 		--(GetGearType(gear) == gtRCPlane) or
       
   289 		--(GetGearType(gear) == gtRope) or
       
   290 		(GetGearType(gear) == gtClusterBomb) or
   287 		(GetGearType(gear) == gtClusterBomb) or
   291 		(GetGearType(gear) == gtCluster) or
   288 		(GetGearType(gear) == gtCluster) or
   292 		(GetGearType(gear) == gtGasBomb) or
   289 		(GetGearType(gear) == gtGasBomb) or
   293 		--(GetGearType(gear) == gtSeduction) or
   290 		(GetGearType(gear) == gtMine) or
   294 		(GetGearType(gear) == gtMine) or	-------
       
   295 		(GetGearType(gear) == gtMortar) or
   291 		(GetGearType(gear) == gtMortar) or
   296 		(GetGearType(gear) == gtHellishBomb) or
   292 		(GetGearType(gear) == gtHellishBomb) or
   297 		(GetGearType(gear) == gtWatermelon) or
   293 		(GetGearType(gear) == gtWatermelon) or
   298 		(GetGearType(gear) == gtMelonPiece)	or
   294 		(GetGearType(gear) == gtMelonPiece)	or
   299 		(GetGearType(gear) == gtEgg) or
   295 		(GetGearType(gear) == gtEgg) or
   300 		(GetGearType(gear) == gtDrill) or
   296 		(GetGearType(gear) == gtDrill) or
   301 		(GetGearType(gear) == gtBall) or
   297 		(GetGearType(gear) == gtBall) or
   302 		(GetGearType(gear) == gtExplosives) or	------
   298 		(GetGearType(gear) == gtExplosives) or
   303 			(GetGearType(gear) == gtFlame) or
   299 			(GetGearType(gear) == gtFlame) or
   304 			(GetGearType(gear) == gtPortal) or
   300 			(GetGearType(gear) == gtPortal) or
   305 			(GetGearType(gear) == gtDynamite) or
   301 			(GetGearType(gear) == gtDynamite) or
   306 			(GetGearType(gear) == gtSMine) or
   302 			(GetGearType(gear) == gtSMine) or
   307 			--(GetGearType(gear) == gtKamikaze) or
       
   308 			--(GetGearType(gear) == gtRCPlane) or
       
   309 			--(GetGearType(gear) == gtCake) or
       
   310 			--(GetGearType(gear) == gtHedgehog) or ------
       
   311 		(GetGearType(gear) == gtKnife) or
   303 		(GetGearType(gear) == gtKnife) or
   312 		(GetGearType(gear) == gtJetpack) or -- test this and birdy plz
   304 		(GetGearType(gear) == gtJetpack) or -- test this and birdy plz
   313 		(GetGearType(gear) == gtBirdy) or -- test this and birdy plz
   305 		(GetGearType(gear) == gtBirdy) or -- test this and birdy plz
   314 		(GetGearType(gear) == gtSnowball) or
   306 		(GetGearType(gear) == gtSnowball) or
   315 		(GetGearType(gear) == gtMolotov)
   307 		(GetGearType(gear) == gtMolotov)
   346 		dmg = 20
   338 		dmg = 20
   347 
   339 
   348 	elseif (GetGearType(gear) == gtFlame) or
   340 	elseif (GetGearType(gear) == gtFlame) or
   349 			(GetGearType(gear) == gtPortal) or
   341 			(GetGearType(gear) == gtPortal) or
   350 			(GetGearType(gear) == gtDynamite)
   342 			(GetGearType(gear) == gtDynamite)
   351 			--(GetGearType(gear) == gtKamikaze) or
       
   352 			--(GetGearType(gear) == gtRCPlane) or
       
   353 
       
   354 			--(GetGearType(gear) == gtCake)
       
   355 	then
   343 	then
   356 		dmg = 0
   344 		dmg = 0
   357 
   345 
   358 	elseif (GetGearType(gear) == gtBall) then
   346 	elseif (GetGearType(gear) == gtBall) then
   359 		dmg = 1
   347 		dmg = 1
   370 
   358 
   371 	dmg = getThreatDamage(gear)
   359 	dmg = getThreatDamage(gear)
   372 	setGearValue(gear,"damage",dmg)
   360 	setGearValue(gear,"damage",dmg)
   373 	setGearValue(gear,"deflects",0)
   361 	setGearValue(gear,"deflects",0)
   374 
   362 
   375 	if (CurrentHedgehog ~= nil) then --and (gameStarted == true) then
   363 	if (CurrentHedgehog ~= nil) then
   376 		setGearValue(gear,"owner",GetHogClan(CurrentHedgehog)) -- NEW NEEDS CHANGE?
   364 		setGearValue(gear,"owner",GetHogClan(CurrentHedgehog)) -- NEW NEEDS CHANGE?
   377 	else
   365 	else
   378 		setGearValue(gear,"owner",10) -- nil
   366 		setGearValue(gear,"owner",10)
   379 	end
   367 	end
   380 
   368 
   381 end
   369 end
   382 
   370 
   383 function AddStruc(pX,pY, pType, pClan)
   371 function AddStruc(pX,pY, pType, pClan)
   405 
   393 
   406 
   394 
   407 	if pType == loc("Reflector Shield") then
   395 	if pType == loc("Reflector Shield") then
   408 		table.insert(strucHealth,255)
   396 		table.insert(strucHealth,255)
   409 
   397 
   410 		--SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
       
   411 		--SetState(tempG, bor(GetState(tempG),gstInvisible) )
       
   412 		--table.insert(strucAltDisplay, madness)
       
   413 
       
   414 	else
   398 	else
   415 		table.insert(strucHealth,1)
   399 		table.insert(strucHealth,1)
   416 		--table.insert(strucAltDisplay, 1)
       
   417 	end
   400 	end
   418 
   401 
   419 	table.insert(strucCirc,tempCirc)
   402 	table.insert(strucCirc,tempCirc)
   420 
   403 
   421 	table.insert(strucCircType, 1)
   404 	table.insert(strucCircType, 1)
   423 		table.insert(strucCircCol,colorRed)
   406 		table.insert(strucCircCol,colorRed)
   424 		table.insert(strucCircRadius,1000)
   407 		table.insert(strucCircRadius,1000)
   425 		frameID = 7
   408 		frameID = 7
   426 	elseif pType == loc("Healing Station") then
   409 	elseif pType == loc("Healing Station") then
   427 		table.insert(strucCircCol,0xFF00FF00)
   410 		table.insert(strucCircCol,0xFF00FF00)
   428 		--table.insert(strucCircCol,colorGreen)
       
   429 		table.insert(strucCircRadius,500)
   411 		table.insert(strucCircRadius,500)
   430 		frameID = 3
   412 		frameID = 3
   431 	elseif pType == loc("Respawner") then
   413 	elseif pType == loc("Respawner") then
   432 		table.insert(strucCircCol,0xFF00FF00)
   414 		table.insert(strucCircCol,0xFF00FF00)
   433 		--table.insert(strucCircCol,0xFF00FFFF)
       
   434 		table.insert(strucCircRadius,75)
   415 		table.insert(strucCircRadius,75)
   435 		runOnHogs(EnableHogResurrectionForThisClan)
   416 		runOnHogs(EnableHogResurrectionForThisClan)
   436 		frameID = 1
   417 		frameID = 1
   437 	elseif pType == loc("Teleportation Node") then
   418 	elseif pType == loc("Teleportation Node") then
   438 		table.insert(strucCircCol,0x0000FFFF)
   419 		table.insert(strucCircCol,0x0000FFFF)
   467 
   448 
   468 	SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
   449 	SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
   469 	SetState(tempG, bor(GetState(tempG),gstInvisible) )
   450 	SetState(tempG, bor(GetState(tempG),gstInvisible) )
   470 	table.insert(strucAltDisplay, madness)
   451 	table.insert(strucAltDisplay, madness)
   471 
   452 
   472 	-- may be needed for non gear-based structures
       
   473 	--table.insert(strucX, GetX(tempG))
       
   474 	--table.insert(strucY, GetY(tempG))
       
   475 
       
   476 end
   453 end
   477 
   454 
   478 -- this is basically onStructureDelete
   455 -- this is basically onStructureDelete
   479 -- we may need to expand it for non-gear structures later
   456 -- we may need to expand it for non-gear structures later
   480 function CheckGearForStructureLink(gear)
   457 function CheckGearForStructureLink(gear)
   580 			dist = GetDistFromGearToXY(CurrentHedgehog,GetX(strucGear[i]), GetY(strucGear[i]))
   557 			dist = GetDistFromGearToXY(CurrentHedgehog,GetX(strucGear[i]), GetY(strucGear[i]))
   581 			if strucCircType[i] == 0 then
   558 			if strucCircType[i] == 0 then
   582 				NR = strucCircRadius[i]
   559 				NR = strucCircRadius[i]
   583 			else
   560 			else
   584 				NR = (48/100*strucCircRadius[i])/2
   561 				NR = (48/100*strucCircRadius[i])/2
   585 				--NR = div((div(48,100) * strucCircRadius[tempID]),2)
       
   586 			end
   562 			end
   587 			if dist <= NR*NR then
   563 			if dist <= NR*NR then
   588 				teleportOriginSuccessful = true
   564 				teleportOriginSuccessful = true
   589 			end
   565 			end
   590 
   566 
   591 			dist = GetDistFromXYtoXY(tX,tY,GetX(strucGear[i]), GetY(strucGear[i]))
   567 			dist = GetDistFromXYtoXY(tX,tY,GetX(strucGear[i]), GetY(strucGear[i]))
   592 			if strucCircType[i] == 0 then
   568 			if strucCircType[i] == 0 then
   593 				NR = strucCircRadius[i]
   569 				NR = strucCircRadius[i]
   594 			else
   570 			else
   595 				NR = (48/100*strucCircRadius[i])/2
   571 				NR = (48/100*strucCircRadius[i])/2
   596 				--NR = div((div(48,100) * strucCircRadius[tempID]),2)
       
   597 			end
   572 			end
   598 			if dist <= NR*NR then
   573 			if dist <= NR*NR then
   599 				teleportDestinationSuccessful = true
   574 				teleportDestinationSuccessful = true
   600 			end
   575 			end
   601 
   576 
   612 end
   587 end
   613 
   588 
   614 --Check for proximity of gears to structures, and make structures behave accordingly
   589 --Check for proximity of gears to structures, and make structures behave accordingly
   615 function CheckProximity(gear)
   590 function CheckProximity(gear)
   616 
   591 
   617 	--if isAStructureEffectingGear(gear) then
   592 	dist = GetDistFromGearToXY(gear, GetX(strucGear[tempID]), GetY(strucGear[tempID]))
   618 
   593 
   619 		dist = GetDistFromGearToXY(gear, GetX(strucGear[tempID]), GetY(strucGear[tempID]))
   594 	-- calculate my real radius if I am an aura
   620 
   595 	if strucCircType[tempID] == 0 then
   621 		-- calculate my real radius if I am an aura
   596 		NR = strucCircRadius[tempID]
   622 		if strucCircType[tempID] == 0 then
   597 	else
   623 			NR = strucCircRadius[tempID]
   598 		NR = (48/100*strucCircRadius[tempID])/2
   624 		else
   599 	end
   625 			NR = (48/100*strucCircRadius[tempID])/2
   600 
   626 			--NR = div((div(48,100) * strucCircRadius[tempID]),2) -- doesn't work ffff
   601 	-- we're in business
   627 				--NR = div((48/100*strucCircRadius[tempID]),2) -- still works
   602 	if dist <= NR*NR then
   628 
   603 
   629 		end
   604 
   630 
   605 		-- heal clan hogs
   631 		-- we're in business
   606 		if strucType[tempID] == loc("Healing Station") then
   632 		if dist <= NR*NR then
   607 
   633 
   608 			if GetGearType(gear) == gtHedgehog then
   634 
   609 				if GetHogClan(gear) == strucClan[tempID] then
   635 			-- heal clan hogs
   610 
   636 			if strucType[tempID] == loc("Healing Station") then
   611 					hogLife = GetHealth(gear) + 1
   637 
   612 					if hogLife > 150 then
   638 				if GetGearType(gear) == gtHedgehog then
   613 						hogLife = 150
   639 					if GetHogClan(gear) == strucClan[tempID] then
   614 					end
   640 
   615 					SetHealth(gear, hogLife)
   641 						hogLife = GetHealth(gear) + 1
   616 
   642 						if hogLife > 150 then
   617 					-- change this to the med kit sprite health ++++s later
   643 							hogLife = 150
   618 					tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
       
   619 					g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
       
   620 					SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorGreen )
       
   621 
       
   622 				end
       
   623 			end
       
   624 
       
   625 		-- explode enemy clan hogs
       
   626 		elseif strucType[tempID] == loc("Bio-Filter") then
       
   627 
       
   628 			if GetGearType(gear) == gtHedgehog then
       
   629 				if (GetHogClan(gear) ~= strucClan[tempID]) and (GetHealth(gear) > 0) then
       
   630 					AddGear(GetX(gear), GetY(gear), gtGrenade, 0, 0, 0, 1)
       
   631 				end
       
   632 			end
       
   633 
       
   634 		-- were those weapons in your pocket, or were you just happy to see me?
       
   635 		elseif strucType[tempID] == loc("Weapon Filter") then
       
   636 
       
   637 			if GetGearType(gear) == gtHedgehog then
       
   638 				if (GetHogClan(gear) ~= strucClan[tempID]) then
       
   639 
       
   640 					for wpnIndex = 1, #atkArray do
       
   641 						AddAmmo(gear, atkArray[wpnIndex][1], 0)
       
   642 					end
       
   643 
       
   644 					for wpnIndex = 1, #utilArray do
       
   645 						AddAmmo(gear, utilArray[wpnIndex][1], 0)
       
   646 					end
       
   647 
       
   648 					AddAmmo(gear, amAirAttack, 100)
       
   649 					AddAmmo(gear, amSwitch, 100)
       
   650 					AddAmmo(gear, amSkip, 100)
       
   651 
       
   652 				end
       
   653 			end
       
   654 
       
   655 		-- BOUNCE! POGO! POGO! POGO! POGO!
       
   656 		elseif strucType[tempID] == loc("Reflector Shield") then
       
   657 
       
   658 			-- add check for whose projectile it is
       
   659 			if gearCanBeDeflected(gear) == true then
       
   660 
       
   661 				gOwner = getGearValue(gear,"owner")
       
   662 				gDeflects = getGearValue(gear,"deflects")
       
   663 				gDmg = getGearValue(gear,"damage")
       
   664 
       
   665 				if gDeflects >= 3 then
       
   666 					DeleteGear(gear)
       
   667 					AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
       
   668 					PlaySound(sndVaporize)
       
   669 				elseif gOwner ~= strucClan[tempID] then
       
   670 					--whether to vaporize gears or bounce them
       
   671 					if gDmg ~= 0 then
       
   672 						dx, dy = GetGearVelocity(gear)
       
   673 
       
   674 						if (dx == 0) and (dy == 0) then
       
   675 							-- static mine, explosive, etc encountered
       
   676 							-- do nothing
       
   677 							else
       
   678 
       
   679 							--let's bounce something!
       
   680 
       
   681 							dx = dx*(-1)
       
   682 							dy = dy*(-1)
       
   683 							SetGearVelocity(gear,dx,dy)
       
   684 							setGearValue(gear,"deflects",(gDeflects+1))
       
   685 
       
   686 							AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
       
   687 							PlaySound(sndExplosion)
       
   688 
       
   689 							strucHealth[tempID] = strucHealth[tempID] - gDmg
       
   690 							strucCircCol[tempID] = strucCircCol[tempID] - gDmg
       
   691 
       
   692 							if strucHealth[tempID] <= 0 then
       
   693 								AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtExplosion, 0, false)
       
   694 								DeleteGear(strucGear[tempID])
       
   695 								PlaySound(sndExplosion)
       
   696 							end
       
   697 
   644 						end
   698 						end
   645 						SetHealth(gear, hogLife)
   699 
   646 
   700 					else
   647 						-- change this to the med kit sprite health ++++s later
       
   648 						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
       
   649 						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
       
   650 						SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorGreen )
       
   651 
       
   652 
       
   653 					end
       
   654 				end
       
   655 
       
   656 			-- explode enemy clan hogs
       
   657 			elseif strucType[tempID] == loc("Bio-Filter") then
       
   658 
       
   659 				--tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
       
   660 				--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
       
   661 				--SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorRed )
       
   662 
       
   663 				if GetGearType(gear) == gtHedgehog then
       
   664 					if (GetHogClan(gear) ~= strucClan[tempID]) and (GetHealth(gear) > 0) then
       
   665 						AddGear(GetX(gear), GetY(gear), gtGrenade, 0, 0, 0, 1)
       
   666 					end
       
   667 				end
       
   668 
       
   669 			-- were those weapons in your pocket, or were you just happy to see me?
       
   670 			elseif strucType[tempID] == loc("Weapon Filter") then
       
   671 
       
   672 				if GetGearType(gear) == gtHedgehog then
       
   673 					if (GetHogClan(gear) ~= strucClan[tempID]) then
       
   674 
       
   675 						for wpnIndex = 1, #atkArray do
       
   676 							AddAmmo(gear, atkArray[wpnIndex][1], 0)
       
   677 						end
       
   678 
       
   679 						for wpnIndex = 1, #utilArray do
       
   680 							AddAmmo(gear, utilArray[wpnIndex][1], 0)
       
   681 						end
       
   682 
       
   683 						AddAmmo(gear, amAirAttack, 100)
       
   684 						AddAmmo(gear, amSwitch, 100)
       
   685 						AddAmmo(gear, amSkip, 100)
       
   686 
       
   687 					end
       
   688 				end
       
   689 
       
   690 			-- BOUNCE! POGO! POGO! POGO! POGO!
       
   691 			elseif strucType[tempID] == loc("Reflector Shield") then
       
   692 
       
   693 				-- add check for whose projectile it is
       
   694 				if gearCanBeDeflected(gear) == true then
       
   695 
       
   696 					gOwner = getGearValue(gear,"owner")
       
   697 					gDeflects = getGearValue(gear,"deflects")
       
   698 					gDmg = getGearValue(gear,"damage")
       
   699 
       
   700 					if gDeflects >= 3 then
       
   701 						DeleteGear(gear)
   701 						DeleteGear(gear)
   702 						AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
   702 						AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
   703 						PlaySound(sndVaporize)
   703 						PlaySound(sndVaporize)
   704 					elseif gOwner ~= strucClan[tempID] then
   704 					end
   705 						--whether to vaporize gears or bounce them
   705 				end
   706 						if gDmg ~= 0 then
   706 			end
   707 							dx, dy = GetGearVelocity(gear)
   707 
   708 
   708 		--mark as within range of a teleporter node
   709 							if (dx == 0) and (dy == 0) then
   709 		elseif strucType[tempID] == loc("Teleportation Node") then
   710 								-- static mine, explosive, etc encountered
   710 
   711 								-- do nothing
   711 			if GetGearType(gear) == gtHedgehog then
   712 							else
   712 				if GetHogClan(gear) == strucClan[tempID] then
   713 
   713 
   714 								--let's bounce something!
   714 					for i = 1, #sProx do
   715 
   715 						if sProx[i][1] == loc("Teleportation Mode") then
   716 								--if dx == 0 then
   716 							sProx[i][2] = true
   717 									-- bounce away eggs
       
   718 								--	dx = 0.5
       
   719 								--end
       
   720 
       
   721 								dx = dx*(-1)
       
   722 								dy = dy*(-1)
       
   723 								SetGearVelocity(gear,dx,dy)
       
   724 								setGearValue(gear,"deflects",(gDeflects+1))
       
   725 
       
   726 								AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
       
   727 								PlaySound(sndExplosion)
       
   728 
       
   729 								strucHealth[tempID] = strucHealth[tempID] - gDmg
       
   730 								strucCircCol[tempID] = strucCircCol[tempID] - gDmg
       
   731 
       
   732 								if strucHealth[tempID] <= 0 then
       
   733 									AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtExplosion, 0, false)
       
   734 									DeleteGear(strucGear[tempID])
       
   735 									PlaySound(sndExplosion)
       
   736 								end
       
   737 
       
   738 							end
       
   739 
       
   740 						else
       
   741 							DeleteGear(gear)
       
   742 							AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
       
   743 							PlaySound(sndVaporize)
       
   744 						end
   717 						end
   745 					end
   718 					end
       
   719 
   746 				end
   720 				end
   747 
   721 			end
   748 			--mark as within range of a teleporter node
   722 
   749 			elseif strucType[tempID] == loc("Teleportation Node") then
   723 		-- mark as within range of construction station
   750 
   724 		-- and thus allow menu access to placement modes
   751 				if GetGearType(gear) == gtHedgehog then
   725 		-- for girders, mines, sticky mines and barrels
   752 					if GetHogClan(gear) == strucClan[tempID] then
   726 		elseif strucType[tempID] == loc("Construction Station") then
   753 						--tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
   727 
   754 
   728 			if GetGearType(gear) == gtHedgehog then
   755 						for i = 1, #sProx do
   729 				if GetHogClan(gear) == strucClan[tempID] then
   756 							if sProx[i][1] == loc("Teleportation Mode") then
   730 					tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
   757 								sProx[i][2] = true
   731 
   758 							end
   732 					for i = 1, #sProx do
       
   733 						if ((sProx[i][1] == loc("Girder Placement Mode"))
       
   734 						or (sProx[i][1] == loc("Rubber Placement Mode"))
       
   735 						or (sProx[i][1] == loc("Mine Placement Mode"))
       
   736 						or (sProx[i][1] == loc("Sticky Mine Placement Mode"))
       
   737 						or (sProx[i][1] == loc("Barrel Placement Mode")))
       
   738 						then
       
   739 							sProx[i][2] = true
   759 						end
   740 						end
   760 
       
   761 					end
   741 					end
       
   742 
       
   743 
   762 				end
   744 				end
   763 
   745 			end
   764 			-- mark as within range of construction station
   746 
   765 			-- and thus allow menu access to placement modes
   747 		-- mark as within stupport station range
   766 			-- for girders, mines, sticky mines and barrels
   748 		-- and thus allow menu access to placement modes
   767 			elseif strucType[tempID] == loc("Construction Station") then
   749 		-- for weapon, utility, and med crates
   768 
   750 		elseif strucType[tempID] == loc("Support Station") then
   769 				if GetGearType(gear) == gtHedgehog then
   751 
   770 					if GetHogClan(gear) == strucClan[tempID] then
   752 			if GetGearType(gear) == gtHedgehog then
   771 						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
   753 				if GetHogClan(gear) == strucClan[tempID] then
   772 
   754 					tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
   773 						for i = 1, #sProx do
   755 
   774 							if ((sProx[i][1] == loc("Girder Placement Mode"))
   756 					for i = 1, #sProx do
   775 							or (sProx[i][1] == loc("Rubber Placement Mode"))
   757 						if ((sProx[i][1] == loc("Health Crate Placement Mode"))
   776 							or (sProx[i][1] == loc("Mine Placement Mode"))
   758 						or (sProx[i][1] == loc("Weapon Crate Placement Mode"))
   777 							or (sProx[i][1] == loc("Sticky Mine Placement Mode"))
   759 						or (sProx[i][1] == loc("Utility Crate Placement Mode")))
   778 							or (sProx[i][1] == loc("Barrel Placement Mode")))
   760 						then
   779 							then
   761 							sProx[i][2] = true
   780 								sProx[i][2] = true
       
   781 							end
       
   782 						end
   762 						end
   783 
       
   784 
       
   785 					end
   763 					end
       
   764 
       
   765 
   786 				end
   766 				end
   787 
   767 			end
   788 			-- mark as within stupport station range
   768 
   789 			-- and thus allow menu access to placement modes
   769 		-- doesn't do shit
   790 			-- for weapon, utility, and med crates
   770 		elseif strucType[tempID] == loc("Core") then
   791 			elseif strucType[tempID] == loc("Support Station") then
   771 
   792 
   772 			if GetGearType(gear) == gtHedgehog then
   793 				if GetGearType(gear) == gtHedgehog then
   773 				if GetHogClan(gear) == strucClan[tempID] then
   794 					if GetHogClan(gear) == strucClan[tempID] then
   774 
   795 						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
   775 				tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
   796 
   776 					g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
   797 						for i = 1, #sProx do
   777 					SetVisualGearValues(tempE, g1+20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
   798 							if ((sProx[i][1] == loc("Health Crate Placement Mode"))
   778 
   799 							or (sProx[i][1] == loc("Weapon Crate Placement Mode"))
   779 					tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
   800 							or (sProx[i][1] == loc("Utility Crate Placement Mode")))
   780 					g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
   801 							then
   781 					SetVisualGearValues(tempE, g1-20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
   802 								sProx[i][2] = true
   782 
   803 								--AddCaption("wahey in a support station")
       
   804 							end
       
   805 						end
       
   806 
       
   807 
       
   808 					end
       
   809 				end
   783 				end
   810 
   784 			end
   811 			-- doesn't do shit
   785 
   812 			elseif strucType[tempID] == loc("Core") then
   786 		end
   813 
   787 
   814 				if GetGearType(gear) == gtHedgehog then
   788 	end
   815 					if GetHogClan(gear) == strucClan[tempID] then
       
   816 
       
   817 						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
       
   818 						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
       
   819 						SetVisualGearValues(tempE, g1+20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
       
   820 
       
   821 						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
       
   822 						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
       
   823 						SetVisualGearValues(tempE, g1-20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
       
   824 
       
   825 					end
       
   826 				end
       
   827 
       
   828 			end
       
   829 
       
   830 		end
       
   831 
       
   832 	--end
       
   833 
   789 
   834 end
   790 end
   835 
   791 
   836 -- used to check if we need to run through all hogs or just currenthedgehog
   792 -- used to check if we need to run through all hogs or just currenthedgehog
   837 function isAStructureThatAppliesToMultipleGears(pID)
   793 function isAStructureThatAppliesToMultipleGears(pID)
   880 			tempE = AddVisualGear(GetX(strucGear[i]), GetY(strucGear[i]), vgtSmoke, 0, true)
   836 			tempE = AddVisualGear(GetX(strucGear[i]), GetY(strucGear[i]), vgtSmoke, 0, true)
   881 			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
   837 			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
   882 			SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[i]) )
   838 			SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[i]) )
   883 		elseif strucType[i] == loc("Reflector Shield") then
   839 		elseif strucType[i] == loc("Reflector Shield") then
   884 
   840 
   885 
       
   886 
       
   887 			--frameID = 1
       
   888 			--visualSprite = sprTarget
       
   889 			--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(strucAltDisplay[i])			--frameID / g6
       
   890 			--SetVisualGearValues(strucAltDisplay[i], GetX(strucGear[i]), GetY(strucGear[i]), 0, 0, g5, g6, 8000, visualSprite, g9, g10 )
       
   891 
       
   892 		elseif strucType[i] == loc("Generator") then
   841 		elseif strucType[i] == loc("Generator") then
   893 
   842 
   894 			--frameID = 1
       
   895 			--visualSprite = sprTarget
       
   896 																									--layer
       
   897 			--tempE = AddVisualGear(GetX(strucGear[i]), GetY(strucGear[i]), vgtStraightShot, 1, true,1)
       
   898 			--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)	--g9
       
   899 			--SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
       
   900 			--SetState(strucGear[i], bor(GetState(strucGear[i]),gstInvisible) )
       
   901 
       
   902 			--currently generate power for all clans.
       
   903 			-- or should power only be generated for current clan?
       
   904 			for z = 0, ClansCount-1 do
   843 			for z = 0, ClansCount-1 do
   905 				if z == strucClan[i] then
   844 				if z == strucClan[i] then
   906 					increaseGearValue(strucGear[i],"power")
   845 					increaseGearValue(strucGear[i],"power")
   907 					if getGearValue(strucGear[i],"power") == 10 then
   846 					if getGearValue(strucGear[i],"power") == 10 then
   908 						setGearValue(strucGear[i],"power",0)
   847 						setGearValue(strucGear[i],"power",0)
   955 		if (sProx[i][2] == true) then
   894 		if (sProx[i][2] == true) then
   956 			anyUIProx = true
   895 			anyUIProx = true
   957 		end
   896 		end
   958 
   897 
   959 	end
   898 	end
   960 
       
   961 	-- doesn't do shit atm, maybe later when we add cores we can use this
       
   962 	--if anyUIProx == true then --(and core is placed)
       
   963 	--	AddAmmo(CurrentHedgehog, amAirAttack, 100)
       
   964 	--else
       
   965 	--	AddAmmo(CurrentHedgehog, amAirAttack, 0)
       
   966 	--end
       
   967 
       
   968 
   899 
   969 end
   900 end
   970 
   901 
   971 
   902 
   972 function checkForSpecialWeapons()
   903 function checkForSpecialWeapons()
  1105 				"Sticky Mine Placement Mode",
  1036 				"Sticky Mine Placement Mode",
  1106 				"Barrel Placement Mode",
  1037 				"Barrel Placement Mode",
  1107 				"Health Crate Placement Mode",
  1038 				"Health Crate Placement Mode",
  1108 				"Weapon Crate Placement Mode",
  1039 				"Weapon Crate Placement Mode",
  1109 				"Utility Crate Placement Mode",
  1040 				"Utility Crate Placement Mode",
  1110 				--"Target Placement Mode",
       
  1111 				--"Cleaver Placement Mode",
       
  1112 
       
  1113 				--"Advanced Repositioning Mode",
       
  1114 				--"Tagging Mode",
       
  1115 				--"Sprite Testing Mode",
       
  1116 				--"Sprite Placement Mode",
       
  1117 				"Structure Placement Mode"
  1041 				"Structure Placement Mode"
  1118 				}
  1042 				}
  1119 
  1043 
  1120 
  1044 
  1121  sProx = 	{
  1045  sProx = 	{
  1125 				{loc("Sticky Mine Placement Mode"),false},
  1049 				{loc("Sticky Mine Placement Mode"),false},
  1126 				{loc("Barrel Placement Mode"),false},
  1050 				{loc("Barrel Placement Mode"),false},
  1127 				{loc("Health Crate Placement Mode"),false},
  1051 				{loc("Health Crate Placement Mode"),false},
  1128 				{loc("Weapon Crate Placement Mode"),false},
  1052 				{loc("Weapon Crate Placement Mode"),false},
  1129 				{loc("Utility Crate Placement Mode"),false},
  1053 				{loc("Utility Crate Placement Mode"),false},
  1130 				--{loc("Target Placement Mode"),false},
       
  1131 				--{loc("Cleaver Placement Mode"),false},
       
  1132 
       
  1133 				--{loc("Advanced Repositioning Mode"),false},
       
  1134 				--{loc("Tagging Mode"),false},
       
  1135 				--{loc("Sprite Testing Mode"),false},
       
  1136 				--{loc("Sprite Placement Mode"),false},
       
  1137 				{loc("Structure Placement Mode"),false},
  1054 				{loc("Structure Placement Mode"),false},
  1138 				{loc("Teleportation Mode"),false}
  1055 				{loc("Teleportation Mode"),false}
  1139 				}
  1056 				}
  1140 
  1057 
  1141 
  1058 
  1215 		if cat[cIndex] == "Girder Placement Mode" then
  1132 		if cat[cIndex] == "Girder Placement Mode" then
  1216 			PlaceGirder(x, y, CGR)
  1133 			PlaceGirder(x, y, CGR)
  1217 			placedSpec[placedCount] = CGR
  1134 			placedSpec[placedCount] = CGR
  1218 		elseif cat[cIndex] == "Rubber Placement Mode" then
  1135 		elseif cat[cIndex] == "Rubber Placement Mode" then
  1219 			PlaceSprite(x,y, sprAmRubber, CGR, nil, nil, nil, nil, lfBouncy)
  1136 			PlaceSprite(x,y, sprAmRubber, CGR, nil, nil, nil, nil, lfBouncy)
  1220 			--PlaceGirder(x, y, CGR)
       
  1221 			placedSpec[placedCount] = CGR
  1137 			placedSpec[placedCount] = CGR
  1222 		elseif cat[cIndex] == "Target Placement Mode" then
  1138 		elseif cat[cIndex] == "Target Placement Mode" then
  1223 			gear = AddGear(x, y, gtTarget, 0, 0, 0, 0)
  1139 			gear = AddGear(x, y, gtTarget, 0, 0, 0, 0)
  1224 		elseif cat[cIndex] == "Cleaver Placement Mode" then
  1140 		elseif cat[cIndex] == "Cleaver Placement Mode" then
  1225 			gear = AddGear(x, y, gtKnife, 0, 0, 0, 0)
  1141 			gear = AddGear(x, y, gtKnife, 0, 0, 0, 0)
  1279 				if getGearValue(closestGear,"tag") == nil then
  1195 				if getGearValue(closestGear,"tag") == nil then
  1280 
  1196 
  1281 					--if there is no tag, add a victory/failure tag and circle
  1197 					--if there is no tag, add a victory/failure tag and circle
  1282 					setGearValue(closestGear, "tCirc",AddVisualGear(0,0,vgtCircle,0,true))
  1198 					setGearValue(closestGear, "tCirc",AddVisualGear(0,0,vgtCircle,0,true))
  1283 
  1199 
  1284 					--AddCaption("circ added",0xffba00ff,capgrpVolume)
       
  1285 
       
  1286 					if pMode[pIndex] == "Tag Victory Mode" then
  1200 					if pMode[pIndex] == "Tag Victory Mode" then
  1287 						setGearValue(closestGear, "tag","victory")
  1201 						setGearValue(closestGear, "tag","victory")
  1288 						SetVisualGearValues(getGearValue(closestGear,"tCirc"), 0, 0, 100, 255, 1, 10, 0, 40, 3, 0xff0000ff)
  1202 						SetVisualGearValues(getGearValue(closestGear,"tCirc"), 0, 0, 100, 255, 1, 10, 0, 40, 3, 0xff0000ff)
  1289 					elseif pMode[pIndex] == "Tag Failure Mode" then
  1203 					elseif pMode[pIndex] == "Tag Failure Mode" then
  1290 						setGearValue(closestGear, "tag","failure")
  1204 						setGearValue(closestGear, "tag","failure")
  1292 					end
  1206 					end
  1293 
  1207 
  1294 
  1208 
  1295 				else
  1209 				else
  1296 					-- remove tag and delete circ
  1210 					-- remove tag and delete circ
  1297 					--AddCaption("circ removed",0xffba00ff,capgrpVolume)
       
  1298 					setGearValue(closestGear, "tag", nil)
  1211 					setGearValue(closestGear, "tag", nil)
  1299 					DeleteVisualGear(getGearValue(closestGear,"tCirc"))
  1212 					DeleteVisualGear(getGearValue(closestGear,"tCirc"))
  1300 					setGearValue(closestGear, "tCirc", nil)
  1213 					setGearValue(closestGear, "tCirc", nil)
  1301 				end
  1214 				end
  1302 
  1215 
  1305 
  1218 
  1306 		elseif cat[cIndex] == "Sprite Testing Mode" then
  1219 		elseif cat[cIndex] == "Sprite Testing Mode" then
  1307 
  1220 
  1308 			frameID = 1
  1221 			frameID = 1
  1309 			visualSprite = reducedSpriteIDArray[pIndex]
  1222 			visualSprite = reducedSpriteIDArray[pIndex]
  1310 			--visualSprite = spriteIDArray[pIndex]
       
  1311 			tempE = AddVisualGear(x, y, vgtStraightShot, 0, true)
  1223 			tempE = AddVisualGear(x, y, vgtStraightShot, 0, true)
  1312 			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
  1224 			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
  1313 			SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
  1225 			SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
  1314 	--sprHorizonLong crashes game, so does skyL, as does flake
  1226 	--sprHorizonLong crashes game, so does skyL, as does flake
  1315 
  1227 
  1318 		--sprAMAmmos, sprAMSlotKeys, sprTurnsLeft, sprExplosivesRoll + maybe some others like the health case, arrows, etc
  1230 		--sprAMAmmos, sprAMSlotKeys, sprTurnsLeft, sprExplosivesRoll + maybe some others like the health case, arrows, etc
  1319 
  1231 
  1320 		elseif cat[cIndex] == "Sprite Placement Mode" then
  1232 		elseif cat[cIndex] == "Sprite Placement Mode" then
  1321 
  1233 
  1322 			PlaceSprite(x,y, reducedSpriteIDArray[pIndex], 1, nil, nil, nil, nil, landType)
  1234 			PlaceSprite(x,y, reducedSpriteIDArray[pIndex], 1, nil, nil, nil, nil, landType)
  1323 			--PlaceGirder(x, y, CGR)
       
  1324 			placedSpec[placedCount] = reducedSpriteTextArray[pIndex]
  1235 			placedSpec[placedCount] = reducedSpriteTextArray[pIndex]
  1325 			placedSuperSpec[placedCount] = landType
  1236 			placedSuperSpec[placedCount] = landType
  1326 
  1237 
  1327 			if landType == lfIce then
  1238 			if landType == lfIce then
  1328 				placedSuperSpec[placedCount] = "lfIce"
  1239 				placedSuperSpec[placedCount] = "lfIce"
  1365 	placedExpense = 1
  1276 	placedExpense = 1
  1366 
  1277 
  1367 	if cat[cIndex] == "Girder Placement Mode" then
  1278 	if cat[cIndex] == "Girder Placement Mode" then
  1368 		pIndex = CGR
  1279 		pIndex = CGR
  1369 		pMode = {loc("Girder")}
  1280 		pMode = {loc("Girder")}
  1370 		--	pCount = 1
       
  1371 	elseif cat[cIndex] == "Rubber Placement Mode" then
  1281 	elseif cat[cIndex] == "Rubber Placement Mode" then
  1372 		pIndex = CGR
  1282 		pIndex = CGR
  1373 		pMode = {loc("Rubber")}
  1283 		pMode = {loc("Rubber")}
  1374 		placedExpense = 3
  1284 		placedExpense = 3
  1375 	--	pCount = 1???
       
  1376 	elseif cat[cIndex] == "Target Placement Mode" then
  1285 	elseif cat[cIndex] == "Target Placement Mode" then
  1377 		pMode = {loc("Target")}
  1286 		pMode = {loc("Target")}
  1378 	elseif cat[cIndex] == "Cleaver Placement Mode" then
  1287 	elseif cat[cIndex] == "Cleaver Placement Mode" then
  1379 		pMode = {loc("Cleaver")}
  1288 		pMode = {loc("Cleaver")}
  1380 	elseif cat[cIndex] == "Barrel Placement Mode" then
  1289 	elseif cat[cIndex] == "Barrel Placement Mode" then
  1383 	elseif cat[cIndex] == "Health Crate Placement Mode" then
  1292 	elseif cat[cIndex] == "Health Crate Placement Mode" then
  1384 		pMode = {25}
  1293 		pMode = {25}
  1385 		placedExpense = 5
  1294 		placedExpense = 5
  1386 	elseif cat[cIndex] == "Weapon Crate Placement Mode" then
  1295 	elseif cat[cIndex] == "Weapon Crate Placement Mode" then
  1387 		for i = 1, #atkArray do
  1296 		for i = 1, #atkArray do
  1388 			pMode[i] = atkArray[i][4] -- was [2]
  1297 			pMode[i] = atkArray[i][4]
  1389 		end
  1298 		end
  1390 		placedExpense = atkArray[pIndex][5]
  1299 		placedExpense = atkArray[pIndex][5]
  1391 	elseif cat[cIndex] == "Utility Crate Placement Mode" then
  1300 	elseif cat[cIndex] == "Utility Crate Placement Mode" then
  1392 		for i = 1, #utilArray do
  1301 		for i = 1, #utilArray do
  1393 			pMode[i] = utilArray[i][4] -- was [2]
  1302 			pMode[i] = utilArray[i][4]
  1394 		end
  1303 		end
  1395 		placedExpense = utilArray[pIndex][5]
  1304 		placedExpense = utilArray[pIndex][5]
  1396 	elseif cat[cIndex] == "Mine Placement Mode" then
  1305 	elseif cat[cIndex] == "Mine Placement Mode" then
  1397 		pMode = {0,1000,2000,3000,4000,5000}
  1306 		pMode = {0,1000,2000,3000,4000,5000}
  1398 		placedExpense = 15
  1307 		placedExpense = 15
  1399 	elseif cat[cIndex] == "Sticky Mine Placement Mode" then
  1308 	elseif cat[cIndex] == "Sticky Mine Placement Mode" then
  1400 		pMode = {loc("Sticky Mine")}
  1309 		pMode = {loc("Sticky Mine")}
  1401 	--elseif cat[cIndex] == "Gear Repositioning Mode" then
       
  1402 	--	for i = 1, #hhs do
       
  1403 	--		pMode[i] = GetHogName(hhs[i])
       
  1404 	--	end
       
  1405 		placedExpense = 20
  1310 		placedExpense = 20
  1406 	elseif cat[cIndex] == "Advanced Repositioning Mode" then
  1311 	elseif cat[cIndex] == "Advanced Repositioning Mode" then
  1407 		pMode = {"Selection Mode","Placement Mode"}
  1312 		pMode = {"Selection Mode","Placement Mode"}
  1408 	elseif cat[cIndex] == "Tagging Mode" then
  1313 	elseif cat[cIndex] == "Tagging Mode" then
  1409 		pMode = {"Tag Victory Mode","Tag Failure Mode"}
  1314 		pMode = {"Tag Victory Mode","Tag Failure Mode"}
  1410 	elseif cat[cIndex] == "Sprite Testing Mode" or cat[cIndex] == "Sprite Placement Mode" then
  1315 	elseif cat[cIndex] == "Sprite Testing Mode" or cat[cIndex] == "Sprite Placement Mode" then
  1411 		--for i = 1, #spriteTextArray do
       
  1412 		--	pMode[i] = spriteTextArray[i]
       
  1413 		--end
       
  1414 		for i = 1, #reducedSpriteTextArray do
  1316 		for i = 1, #reducedSpriteTextArray do
  1415 			pMode[i] = reducedSpriteTextArray[i]
  1317 			pMode[i] = reducedSpriteTextArray[i]
  1416 		end
  1318 		end
  1417 		placedExpense = 100
  1319 		placedExpense = 100
  1418 	elseif cat[cIndex] == "Structure Placement Mode" then
  1320 	elseif cat[cIndex] == "Structure Placement Mode" then
  1419 		pMode = {loc("Healing Station"), loc("Bio-Filter"), loc("Weapon Filter"), loc("Reflector Shield"), loc("Respawner"),loc("Teleportation Node"),--[[loc("Core"),]]loc("Generator"),loc("Construction Station"),loc("Support Station")}
  1321 		pMode = {loc("Healing Station"), loc("Bio-Filter"), loc("Weapon Filter"), loc("Reflector Shield"), loc("Respawner"),loc("Teleportation Node"),loc("Generator"),loc("Construction Station"),loc("Support Station")}
  1420 		--placedExpense = 100
       
  1421 	end
  1322 	end
  1422 
  1323 
  1423 
  1324 
  1424 
  1325 
  1425 
  1326 
  1464 			elseif (cIndex ~=2) and (curWep == amRubber) then
  1365 			elseif (cIndex ~=2) and (curWep == amRubber) then
  1465 				cIndex = 2
  1366 				cIndex = 2
  1466 				RedefineSubset()
  1367 				RedefineSubset()
  1467 			-- change to generic mode if girder no longer selected
  1368 			-- change to generic mode if girder no longer selected
  1468 			elseif (cIndex == 1) and (curWep ~= amGirder) then
  1369 			elseif (cIndex == 1) and (curWep ~= amGirder) then
  1469 				cIndex = 3 -- was 2
  1370 				cIndex = 3
  1470 				RedefineSubset()
  1371 				RedefineSubset()
  1471 			elseif (cIndex == 2) and (curWep ~= amRubber) then
  1372 			elseif (cIndex == 2) and (curWep ~= amRubber) then
  1472 				cIndex = 3 --new
  1373 				cIndex = 3
  1473 				RedefineSubset()
  1374 				RedefineSubset()
  1474 
  1375 
  1475 			end
  1376 			end
  1476 
  1377 
  1477 			-- update display selection criteria
  1378 			-- update display selection criteria
  1551 				cGear = nil
  1452 				cGear = nil
  1552 		elseif GetGearType(cGear) == gtGirder then
  1453 		elseif GetGearType(cGear) == gtGirder then
  1553 
  1454 
  1554 			CGR = GetState(cGear)
  1455 			CGR = GetState(cGear)
  1555 
  1456 
  1556 			-- improve rectangle test based on CGR when you can be bothered
  1457 			PlaceObject(x, y)
  1557 			--if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
       
  1558 			--	AddCaption("Invalid Girder Placement",0xffba00ff,capgrpVolume)
       
  1559 			--else
       
  1560 				PlaceObject(x, y)
       
  1561 			--end
       
  1562 
       
  1563 			-- this allows the girder tool to be used like a mining laser
       
  1564 
       
  1565 		--[[
       
  1566 
       
  1567 			if CGR < 4 then
       
  1568 				AddGear(x, y, gtGrenade, 0, 0, 0, 1)
       
  1569 			elseif CGR == 4 then
       
  1570 				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, 1)
       
  1571 				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, 1)
       
  1572 			elseif CGR == 5 then -------
       
  1573 				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, 1)
       
  1574 				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, 1)
       
  1575 			elseif CGR == 6 then
       
  1576 				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, 1)
       
  1577 				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, 1)
       
  1578 			elseif CGR == 7 then -------
       
  1579 				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, 1)
       
  1580 				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, 1)
       
  1581 			end
       
  1582 ]]
       
  1583 		end
  1458 		end
  1584 
  1459 
  1585 	end
  1460 	end
  1586 
  1461 
  1587 end
  1462 end
  1685 			cIndex = #cat
  1560 			cIndex = #cat
  1686 		elseif cIndex > #cat then
  1561 		elseif cIndex > #cat then
  1687 			cIndex = 3	 -- 2 ----we no longer hit girder by normal means
  1562 			cIndex = 3	 -- 2 ----we no longer hit girder by normal means
  1688 		end
  1563 		end
  1689 
  1564 
  1690 		-- new way of doing things
       
  1691 		-- sProx[cIndex][2] == true just basically means we have ACCESS to something
       
  1692 		-- but that doesn't neccessarily mean we are in the correct content menu, anymore
       
  1693 		-- so we need to refine this a little
       
  1694 		if sProx[cIndex][2] == true then
  1565 		if sProx[cIndex][2] == true then
  1695 			if (GetCurAmmoType() == amNapalm) then
  1566 			if (GetCurAmmoType() == amNapalm) then
  1696 				if (sProx[cIndex][1] == loc("Health Crate Placement Mode")) or
  1567 				if (sProx[cIndex][1] == loc("Health Crate Placement Mode")) or
  1697 					(sProx[cIndex][1] == loc("Weapon Crate Placement Mode")) or
  1568 					(sProx[cIndex][1] == loc("Weapon Crate Placement Mode")) or
  1698 					(sProx[cIndex][1] == loc("Utility Crate Placement Mode"))
  1569 					(sProx[cIndex][1] == loc("Utility Crate Placement Mode"))
  1713 			end
  1584 			end
  1714 		end
  1585 		end
  1715 
  1586 
  1716 
  1587 
  1717 		if foundMatch == true then
  1588 		if foundMatch == true then
  1718 		--if sProx[cIndex][2] == true then
       
  1719 			-- normal case (scrolling through)
       
  1720 			--foundMatch = true
       
  1721 			RedefineSubset()
  1589 			RedefineSubset()
  1722 			updateCost()
  1590 			updateCost()
  1723 		end
  1591 		end
  1724 
  1592 
  1725 	end
  1593 	end
  1781 	ShowMission	(
  1649 	ShowMission	(
  1782 				loc("CONSTRUCTION MODE"),
  1650 				loc("CONSTRUCTION MODE"),
  1783 				loc("a Hedgewars mini-game"),
  1651 				loc("a Hedgewars mini-game"),
  1784 				" " .. "|" ..
  1652 				" " .. "|" ..
  1785 				loc("Build a fortress and destroy your enemy.") .. "|" ..
  1653 				loc("Build a fortress and destroy your enemy.") .. "|" ..
  1786 				--loc("Defend your core from the enemy.") .. "|" ..
       
  1787 				loc("There are a variety of structures available to aid you.") .. "|" ..
  1654 				loc("There are a variety of structures available to aid you.") .. "|" ..
  1788 				loc("Use the air-attack weapons and the arrow keys to select structures.") .. "|" ..
  1655 				loc("Use the air-attack weapons and the arrow keys to select structures.") .. "|" ..
  1789 				" " .. "|" ..
  1656 				" " .. "|" ..
  1790 				--loc("Core") .. ": " .. loc("Allows placement of structures.")  .. "|" ..
       
  1791 				loc("Healing Station") .. ": " .. loc("Grants nearby hogs life-regeneration.")  .. "|" ..
  1657 				loc("Healing Station") .. ": " .. loc("Grants nearby hogs life-regeneration.")  .. "|" ..
  1792 				loc("Bio-Filter") .. ": " .. loc("Aggressively removes enemy hedgehogs.")  .. "|" ..
  1658 				loc("Bio-Filter") .. ": " .. loc("Aggressively removes enemy hedgehogs.")  .. "|" ..
  1793 				loc("Weapon Filter") .. ": " .. loc("Dematerializes weapons and equipment carried by enemy hedgehogs.")  .. "|" ..
  1659 				loc("Weapon Filter") .. ": " .. loc("Dematerializes weapons and equipment carried by enemy hedgehogs.")  .. "|" ..
  1794 				loc("Reflector Shield") .. ": " .. loc("Reflects enemy projectiles.")  .. "|" ..
  1660 				loc("Reflector Shield") .. ": " .. loc("Reflects enemy projectiles.")  .. "|" ..
  1795 
  1661 
  1799 				loc("Construction Station") .. ": " .. loc("Allows placement of girders, rubber-bands, mines, sticky mines and barrels.")  .. "|" ..
  1665 				loc("Construction Station") .. ": " .. loc("Allows placement of girders, rubber-bands, mines, sticky mines and barrels.")  .. "|" ..
  1800 				loc("Support Station") .. ": " .. loc("Allows the placement of weapons, utiliites, and health crates.")  .. "|" ..
  1666 				loc("Support Station") .. ": " .. loc("Allows the placement of weapons, utiliites, and health crates.")  .. "|" ..
  1801 
  1667 
  1802 
  1668 
  1803 				" " .. "|" ..
  1669 				" " .. "|" ..
  1804 				--" " .. "|" ..
       
  1805 				"", 4, 5000
  1670 				"", 4, 5000
  1806 				)
  1671 				)
  1807 
  1672 
  1808 
  1673 
  1809 	sCirc = AddVisualGear(0,0,vgtCircle,0,true)
  1674 	sCirc = AddVisualGear(0,0,vgtCircle,0,true)
  1871 
  1736 
  1872 -- track hedgehogs and placement gears
  1737 -- track hedgehogs and placement gears
  1873 function onGearAdd(gear)
  1738 function onGearAdd(gear)
  1874 
  1739 
  1875 	if GetGearType(gear) == gtHedgehog then
  1740 	if GetGearType(gear) == gtHedgehog then
  1876 		--table.insert(hhs, gear)
       
  1877 	elseif (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtTeleport) or (GetGearType(gear) == gtGirder) then
  1741 	elseif (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtTeleport) or (GetGearType(gear) == gtGirder) then
  1878 		cGear = gear
  1742 		cGear = gear
  1879 
  1743 
  1880 	end
  1744 	end
  1881 
  1745