--- a/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua Sat Feb 10 06:07:24 2018 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua Sat Feb 10 06:36:07 2018 +0100
@@ -59,104 +59,246 @@
-- STRUCTURES STUFF
----------------------------------------------
-strucID = {}
-strucGear = {}
-strucClan = {}
-strucType = {}
-strucCost = {}
-strucHealth = {}
+local strucID = {}
+local strucGear = {}
+local strucClan = {}
+local strucType = {}
+local strucCost = {}
+local strucHealth = {}
-strucCirc = {}
-strucCircCol = {}
-strucCircRadius = {}
-strucCircType = {}
-strucAltDisplay = {}
+local strucCirc = {}
+local strucCircCol = {}
+local strucCircRadius = {}
+local strucCircType = {}
+local strucAltDisplay = {}
-fortMode = false
+local fortMode = false
+
+local placedExpense = 0
-placedExpense = 0
+local globalTempID = nil
-tempID = nil
+local sUID = 0
-sUID = 0
+local cGear = nil
-colorRed = 0xff0000ff
-colorGreen = 0x00ff00ff
+local colorRed = 0xff0000ff
+local colorGreen = 0x00ff00ff
-clanBoundsSX = {}
-clanBoundsSY = {}
-clanBoundsEX = {}
-clanBoundsEY = {}
+local clanBoundsSX = {}
+local clanBoundsSY = {}
+local clanBoundsEX = {}
+local clanBoundsEY = {}
-clanPower = {}
-clanID = {}
+local clanPower = {}
+local clanID = {}
-- for ease of use let's track previous selection
-teamLStructIndex = {}
-teamLObjectMode = {}
-teamLCrateMode = {}
-teamLMineIndex = {}
-teamLWeapIndex = {}
-teamLUtilIndex = {}
+local teamLStructIndex = {}
+local teamLObjectMode = {}
+local teamLCrateMode = {}
+local teamLMineIndex = {}
+local teamLWeapIndex = {}
+local teamLUtilIndex = {}
-clanUsedExtraTime = {}
-clanCratesSpawned = {}
-clanFirstTurn = {}
+local clanUsedExtraTime = {}
+local clanCratesSpawned = {}
+local clanFirstTurn = {}
-effectTimer = 0
+local effectTimer = 0
-wallsVisible = false
-wX = {}
-wY = {}
-wWidth = {}
-wHeight = {}
-wCol = {}
-margin = 20
+local wallsVisible = false
+local wX = {}
+local wY = {}
+local wWidth = {}
+local wHeight = {}
+local wCol = {}
+local margin = 20
-clanPowerTag = nil
-lastWep = nil
+local clanPowerTag = nil
+local lastWep = nil
-checkForSpecialWeaponsIn = -1
+local checkForSpecialWeaponsIn = -1
-- Fake ammo types, for the overwritten weapons in Construction Mode
-amCMStructurePlacer = amAirAttack
-amCMCratePlacer = amNapalm
-amCMObjectPlacer = amDrillStrike
+local amCMStructurePlacer = amAirAttack
+local amCMCratePlacer = amNapalm
+local amCMObjectPlacer = amDrillStrike
-- Config variables (script parameter)
-conf_initialEnergy = 550
-conf_energyPerRound = 50
-conf_maxEnergy = 1000
-conf_cratesPerRound = 5
+local conf_initialEnergy = 550
+local conf_energyPerRound = 50
+local conf_maxEnergy = 1000
+local conf_cratesPerRound = 5
+
+-----------------------
+-- CRATE DEFINITIONS --
+-----------------------
+-- format:
+-- { ammoType, ammoTypeString, unused, cost }
+
+-- Cost factor
+local placeholder = 20
+
+-- WEAPON CRATES
+-- Weapons which shouldn't be aded:
+-- Air attack, napalm, drillstrike: Overwritten weapons for the Construction Mode tools
+local atkArray = {
+ {amBazooka, "amBazooka", 0, 2*placeholder},
+ --{amBee, "amBee", 0, 4*placeholder},
+ {amMortar, "amMortar", 0, 1*placeholder},
+ {amDrill, "amDrill", 0, 3*placeholder},
+ {amSnowball, "amSnowball", 0, 3*placeholder},
+
+ {amGrenade, "amGrenade", 0, 2*placeholder},
+ {amClusterBomb, "amClusterBomb", 0, 3*placeholder},
+ {amWatermelon, "amWatermelon", 0, 25*placeholder},
+ {amHellishBomb, "amHellishBomb", 0, 25*placeholder},
+ {amMolotov, "amMolotov", 0, 3*placeholder},
+ {amGasBomb, "amGasBomb", 0, 3*placeholder},
+
+ {amShotgun, "amShotgun", 0, 2*placeholder},
+ {amDEagle, "amDEagle", 0, 2*placeholder},
+ {amSniperRifle, "amSniperRifle", 0, 3*placeholder},
+ --{amSineGun, "amSineGun", 0, 6*placeholder},
+ {amFlamethrower, "amFlamethrower", 0, 4*placeholder},
+ {amIceGun, "amIceGun", 0, 15*placeholder},
+
+ {amFirePunch, "amFirePunch", 0, 3*placeholder},
+ {amWhip, "amWhip", 0, 1*placeholder},
+ {amBaseballBat, "amBaseballBat", 0, 7*placeholder},
+ --{amKamikaze, "amKamikaze", 0, 1*placeholder},
+ {amSeduction, "amSeduction", 0, 1*placeholder},
+ {amHammer, "amHammer", 0, 1*placeholder},
+
+ {amMine, "amMine", 0, 1*placeholder},
+ {amDynamite, "amDynamite", 0, 9*placeholder},
+ {amCake, "amCake", 0, 25*placeholder},
+ {amBallgun, "amBallgun", 0, 40*placeholder},
+ --{amRCPlane, "amRCPlane", 0, 25*placeholder},
+ {amSMine, "amSMine", 0, 5*placeholder},
+
+ --{amMineStrike, "amMineStrike", 0, 15*placeholder},
+ --{amPiano, "amPiano", 0, 40*placeholder},
+
+ {amPickHammer, "amPickHammer", 0, 2*placeholder},
+ {amBlowTorch, "amBlowTorch", 0, 4*placeholder},
+ {amKnife, "amKnife", 0, 2*placeholder},
+
+ {amBirdy, "amBirdy", 0, 7*placeholder},
+
+ {amDuck, "amDuck", 0, 2*placeholder}
+}
+
+-- UTILITY CRATES --
+
+-- Utilities which shouldn't be added:
+-- * Teleport: We have teleportation node
+-- * Switch: Always infinite
+-- * Girder, rubber: Requires construction station
+-- * Resurrector: We have the resurrector structure for this
+
+-- Utilities which might be weird for this mode:
+-- * Tardis: Randomly teleports hog, maybe even into enemy clan's area
+local utilArray = {
+ {amLandGun, "amLandGun", 0, 5*placeholder},
+
+ {amRope, "amRope", 0, 7*placeholder},
+ {amParachute, "amParachute", 0, 2*placeholder},
+ {amJetpack, "amJetpack", 0, 8*placeholder},
+ {amPortalGun, "amPortalGun", 0, 15*placeholder},
+
+ {amInvulnerable, "amInvulnerable", 0, 5*placeholder},
+ {amLaserSight, "amLaserSight", 0, 2*placeholder},
+ {amVampiric, "amVampiric", 0, 6*placeholder},
+
+ {amLowGravity, "amLowGravity", 0, 4*placeholder},
+ {amExtraDamage, "amExtraDamage", 0, 6*placeholder},
+ {amExtraTime, "amExtraTime", 0, 8*placeholder}
+}
+
+----------------------------
+-- Placement stuff
+----------------------------
+
+local cGear = nil -- detects placement of girders and objects (using airattack)
+local curWep = amNothing
+
+-- primary placement categories
+local cIndex = 1 -- category index
+local cat = {
+ "Girder Placement Mode",
+ "Rubber Placement Mode",
+ "Mine Placement Mode",
+ "Sticky Mine Placement Mode",
+ "Barrel Placement Mode",
+ "Weapon Crate Placement Mode",
+ "Utility Crate Placement Mode",
+ "Health Crate Placement Mode",
+ "Structure Placement Mode"
+}
+local catReverse = {}
+for c=1, #cat do
+ catReverse[cat[c]] = c
+end
+
+local sProx = {
+ {loc("Girder Placement Mode"),false},
+ {loc("Rubber Placement Mode"),false},
+ {loc("Mine Placement Mode"),false},
+ {loc("Sticky Mine Placement Mode"),false},
+ {loc("Barrel Placement Mode"),false},
+ {loc("Weapon Crate Placement Mode"),false},
+ {loc("Utility Crate Placement Mode"),false},
+ {loc("Health Crate Placement Mode"),false},
+ {loc("Structure Placement Mode"),false},
+ {loc("Teleportation Mode"),false},
+}
+
+
+local pMode = {} -- pMode contains custom subsets of the main categories
+local pIndex = 1
+
+local CGR = 1 -- current girder rotation, we actually need this as HW remembers what rotation you last used
+
+local placedX = {}
+local placedY = {}
+local placedSpec = {}
+local placedSuperSpec = {}
+local placedType = {}
+local placedCount = 0
+
+local sCirc -- circle that appears around selected gears
+local sGear = nil
+
+local tCirc = {} -- array of circles that appear around tagged gears
+
+
function DrawClanPowerTag()
- zoomL = 1.3
-
- xOffset = 40
-
- zoomL = 1.1
- xOffset = 45
- yOffset = 70
- tCol = 0x00ff00ff
- tValue = clanPower[GetHogClan(CurrentHedgehog)]
+ local zoomL = 1.1
+ local xOffset = 45
+ local yOffset = 70
+ local tValue = clanPower[GetHogClan(CurrentHedgehog)]
+ local tCol = 0x00ff00ff
DeleteVisualGear(clanPowerTag)
- clanPowerTag = AddVisualGear(0, 0, vgtHealthTag, 0, false)
- g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(clanPowerTag)
- SetVisualGearValues (
- clanPowerTag, --id
- -div(ScreenWidth,2) + xOffset, --xoffset
- ScreenHeight - yOffset, --yoffset
- 0, --dx
- 0, --dy
- zoomL, --zoom
- 1, --~= 0 means align to screen
- g7, --frameticks
- tValue, --value
- 240000, --timer
- tCol --GetClanColor( GetHogClan(CurrentHedgehog) )
- )
+ clanPowerTag = AddVisualGear(-div(ScreenWidth, 2) + xOffset, ScreenHeight - yOffset, vgtHealthTag, tValue, false)
+
+ SetVisualGearValues(
+ clanPowerTag, -- id
+ nil, -- x offset (set above)
+ nil, -- y offset (set above)
+ 0, -- dx
+ 0, -- dy
+ zoomL, -- zoom
+ 1, -- ~= 0 means align to screen
+ nil, -- frameticks
+ nil, -- value (set above)
+ 240000, -- timer
+ tCol -- color. -- GetClanColor( GetHogClan(CurrentHedgehog) )
+ )
end
@@ -170,7 +312,7 @@
end
-function AddWall(zXMin,zYMin, zWidth, zHeight, zCol)
+function AddWall(zXMin, zYMin, zWidth, zHeight, zCol)
table.insert(wX, zXMin)
table.insert(wY, zYMin)
@@ -182,12 +324,11 @@
function BorderSpark(zXMin,zYMin, zWidth, zHeight, bCol)
- eX = zXMin + GetRandom(zWidth+10)
- eY = zYMin + GetRandom(zHeight+10)
- tempE = AddVisualGear(eX, eY, vgtDust, 0, false)
+ local eX = zXMin + GetRandom(zWidth+10)
+ local eY = zYMin + GetRandom(zHeight+10)
+ local tempE = AddVisualGear(eX, eY, vgtDust, 0, false)
if tempE ~= 0 then
- g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
- SetVisualGearValues(tempE, eX, eY, g3, g4, g5, g6, g7, 1, g9, bCol )
+ SetVisualGearValues(tempE, eX, eY, nil, nil, nil, nil, nil, 1, nil, bCol)
end
end
@@ -244,6 +385,7 @@
function getThreatDamage(gear)
+ local dmg
--- damage amounts for weapons
if (GetGearType(gear) == gtGrenade) or
(GetGearType(gear) == gtClusterBomb) or
@@ -253,8 +395,7 @@
(GetGearType(gear) == gtMolotov) or
(GetGearType(gear) == gtHellishBomb) or
(GetGearType(gear) == gtWatermelon) or
- (GetGearType(gear) == gtSMine)
- then
+ (GetGearType(gear) == gtSMine) then
dmg = 30
elseif (GetGearType(gear) == gtMelonPiece) then
@@ -268,14 +409,13 @@
elseif (GetGearType(gear) == gtFlame) or
(GetGearType(gear) == gtPortal) or
- (GetGearType(gear) == gtDynamite)
- then
+ (GetGearType(gear) == gtDynamite) then
dmg = 0
elseif (GetGearType(gear) == gtBall) then
dmg = 1
- else --normal shell, snowball etc
+ else -- normal shell, snowball etc
dmg = 65
end
@@ -285,7 +425,7 @@
function setGearReflectionValues(gear)
- dmg = getThreatDamage(gear)
+ local dmg = getThreatDamage(gear)
setGearValue(gear,"damage",dmg)
setGearValue(gear,"deflects",0)
@@ -312,11 +452,11 @@
sUID = sUID + 1
- tempG = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
+ local tempG = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
SetGearPosition(tempG, pX, pY)
setGearValue(tempG, "sUID", sUID)
- tempCirc = AddVisualGear(0,0,vgtCircle,0,true)
+ local tempCirc = AddVisualGear(0,0,vgtCircle,0,true)
SetVisualGearValues(tempCirc, 0, 0, 100, 255, 1, 100, 0, 500, 1, 0xFFFFFF00)
@@ -326,11 +466,9 @@
table.insert(strucClan,pClan)
table.insert(strucCost,2)
- frameID = 0
- visualSprite = sprTarget
- madness = AddVisualGear(GetX(tempG), GetY(tempG), vgtStraightShot, 1, true,1)
- g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(madness) --g9
-
+ local frameID = 0
+ local visualSprite = sprTarget
+ local madness = AddVisualGear(GetX(tempG), GetY(tempG), vgtStraightShot, 1, true,1)
if pType == loc("Reflector Shield") then
table.insert(strucHealth,255)
@@ -383,7 +521,7 @@
end
- SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
+ SetVisualGearValues(madness, nil, nil, 0, 0, nil, frameID, nil, visualSprite, nil, nil)
SetState(tempG, bor(GetState(tempG),gstInvisible) )
table.insert(strucAltDisplay, madness)
@@ -393,7 +531,7 @@
-- we may need to expand it for non-gear structures later
function CheckGearForStructureLink(gear)
- respawnerDestroyed = false
+ local respawnerDestroyed = false
for i = 1, #strucID do
if strucID[i] == getGearValue(gear,"sUID") then
@@ -440,7 +578,7 @@
-- this is called when a respawner blows up
function RecalibrateRespawn(gear)
- respawnerList = {}
+ local respawnerList = {}
for i = 1, #strucID do
if (strucType[i] == loc("Respawner")) and (strucClan[i] == GetHogClan(gear)) then
table.insert(respawnerList, i)
@@ -458,7 +596,7 @@
--resposition dead hogs at a respawner if they own one
function FindRespawner(gear)
- respawnerList = {}
+ local respawnerList = {}
for i = 1, #strucID do
if (strucType[i] == loc("Respawner")) and (strucClan[i] == GetHogClan(gear)) then
table.insert(respawnerList, i)
@@ -466,7 +604,7 @@
end
if #respawnerList >= 1 then
- i = GetRandom(#respawnerList)+1
+ local i = GetRandom(#respawnerList)+1
SetGearPosition(gear,GetX(strucGear[respawnerList[i]]),GetY(strucGear[respawnerList[i]])-25)
AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
else -- (this should never happen, but just in case)
@@ -478,14 +616,15 @@
function CheckTeleport(gear, tX, tY)
- teleportOriginSuccessful = false
- teleportDestinationSuccessful = false
+ local teleportOriginSuccessful = false
+ local teleportDestinationSuccessful = false
for i = 1, #strucID do
if (strucType[i] == loc("Teleportation Node")) and (strucClan[i] == GetHogClan(CurrentHedgehog)) then
- dist = GetDistFromGearToXY(CurrentHedgehog,GetX(strucGear[i]), GetY(strucGear[i]))
+ local dist = GetDistFromGearToXY(CurrentHedgehog,GetX(strucGear[i]), GetY(strucGear[i]))
+ local NR
if strucCircType[i] == 0 then
NR = strucCircRadius[i]
else
@@ -520,26 +659,27 @@
--Check for proximity of gears to structures, and make structures behave accordingly
function CheckProximity(gear)
- dist = GetDistFromGearToXY(gear, GetX(strucGear[tempID]), GetY(strucGear[tempID]))
+ local dist = GetDistFromGearToXY(gear, GetX(strucGear[globalTempID]), GetY(strucGear[globalTempID]))
if not dist then
return
end
-- calculate my real radius if I am an aura
- if strucCircType[tempID] == 0 then
- NR = strucCircRadius[tempID]
+ local NR
+ if strucCircType[globalTempID] == 0 then
+ NR = strucCircRadius[globalTempID]
else
- NR = (48/100*strucCircRadius[tempID])/2
+ NR = (48/100*strucCircRadius[globalTempID])/2
end
-- we're in business
if dist <= NR*NR then
-- heal clan hogs
- if strucType[tempID] == loc("Healing Station") then
+ if strucType[globalTempID] == loc("Healing Station") then
if GetGearType(gear) == gtHedgehog then
- if GetHogClan(gear) == strucClan[tempID] then
+ if GetHogClan(gear) == strucClan[globalTempID] then
local hogLife = GetHealth(gear)
-- Heal hog by 1 HP, up to 150 HP total
@@ -553,27 +693,26 @@
end
-- change this to the med kit sprite health ++++s later
- tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
- g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
- SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorGreen )
+ local tempE = AddVisualGear(GetX(strucGear[globalTempID]), GetY(strucGear[globalTempID]), vgtSmoke, 0, true)
+ SetVisualGearValues(tempE, nil, nil, nil, nil, nil, nil, nil, nil, nil, colorGreen)
end
end
-- explode enemy clan hogs
- elseif strucType[tempID] == loc("Bio-Filter") then
+ elseif strucType[globalTempID] == loc("Bio-Filter") then
if GetGearType(gear) == gtHedgehog then
- if (GetHogClan(gear) ~= strucClan[tempID]) and (GetHealth(gear) > 0) then
+ if (GetHogClan(gear) ~= strucClan[globalTempID]) and (GetHealth(gear) > 0) then
AddGear(GetX(gear), GetY(gear), gtGrenade, 0, 0, 0, 1)
end
end
-- were those weapons in your pocket, or were you just happy to see me?
- elseif strucType[tempID] == loc("Weapon Filter") then
+ elseif strucType[globalTempID] == loc("Weapon Filter") then
if GetGearType(gear) == gtHedgehog then
- if (GetHogClan(gear) ~= strucClan[tempID]) then
+ if (GetHogClan(gear) ~= strucClan[globalTempID]) then
for wpnIndex = 1, #atkArray do
AddAmmo(gear, atkArray[wpnIndex][1], 0)
@@ -591,23 +730,23 @@
end
-- BOUNCE! POGO! POGO! POGO! POGO!
- elseif strucType[tempID] == loc("Reflector Shield") then
+ elseif strucType[globalTempID] == loc("Reflector Shield") then
-- add check for whose projectile it is
if gearCanBeDeflected(gear) == true then
- gOwner = getGearValue(gear,"owner")
- gDeflects = getGearValue(gear,"deflects")
- gDmg = getGearValue(gear,"damage")
+ local gOwner = getGearValue(gear,"owner")
+ local gDeflects = getGearValue(gear,"deflects")
+ local gDmg = getGearValue(gear,"damage")
if gDeflects >= 3 then
DeleteGear(gear)
AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
PlaySound(sndVaporize)
- elseif gOwner ~= strucClan[tempID] then
+ elseif gOwner ~= strucClan[globalTempID] then
--whether to vaporize gears or bounce them
if gDmg ~= 0 then
- dx, dy = GetGearVelocity(gear)
+ local dx, dy = GetGearVelocity(gear)
if (dx == 0) and (dy == 0) then
-- static mine, explosive, etc encountered
@@ -624,12 +763,12 @@
AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
PlaySound(sndExplosion)
- strucHealth[tempID] = strucHealth[tempID] - gDmg
- strucCircCol[tempID] = strucCircCol[tempID] - gDmg
+ strucHealth[globalTempID] = strucHealth[globalTempID] - gDmg
+ strucCircCol[globalTempID] = strucCircCol[globalTempID] - gDmg
- if strucHealth[tempID] <= 0 then
- AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtExplosion, 0, false)
- DeleteGear(strucGear[tempID])
+ if strucHealth[globalTempID] <= 0 then
+ AddVisualGear(GetX(strucGear[globalTempID]), GetY(strucGear[globalTempID]), vgtExplosion, 0, false)
+ DeleteGear(strucGear[globalTempID])
PlaySound(sndExplosion)
end
@@ -644,10 +783,10 @@
end
--mark as within range of a teleporter node
- elseif strucType[tempID] == loc("Teleportation Node") then
+ elseif strucType[globalTempID] == loc("Teleportation Node") then
if GetGearType(gear) == gtHedgehog then
- if GetHogClan(gear) == strucClan[tempID] then
+ if GetHogClan(gear) == strucClan[globalTempID] then
for i = 1, #sProx do
if sProx[i][1] == loc("Teleportation Mode") then
@@ -661,11 +800,11 @@
-- mark as within range of construction station
-- and thus allow menu access to placement modes
-- for girders, mines, sticky mines and barrels
- elseif strucType[tempID] == loc("Construction Station") then
+ elseif strucType[globalTempID] == loc("Construction Station") then
if GetGearType(gear) == gtHedgehog then
- if GetHogClan(gear) == strucClan[tempID] then
- tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+ if GetHogClan(gear) == strucClan[globalTempID] then
+ AddVisualGear(GetX(strucGear[globalTempID]), GetY(strucGear[globalTempID]), vgtSmoke, 0, true)
for i = 1, #sProx do
if ((sProx[i][1] == loc("Girder Placement Mode"))
@@ -685,11 +824,11 @@
-- mark as within stupport station range
-- and thus allow menu access to placement modes
-- for weapon, utility, and med crates
- elseif strucType[tempID] == loc("Support Station") then
+ elseif strucType[globalTempID] == loc("Support Station") then
if GetGearType(gear) == gtHedgehog then
- if GetHogClan(gear) == strucClan[tempID] then
- tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+ if GetHogClan(gear) == strucClan[globalTempID] then
+ AddVisualGear(GetX(strucGear[globalTempID]), GetY(strucGear[globalTempID]), vgtSmoke, 0, true)
for i = 1, #sProx do
if ((sProx[i][1] == loc("Health Crate Placement Mode"))
@@ -739,7 +878,7 @@
SetVisualGearValues(strucCirc[i], GetX(strucGear[i]), GetY(strucGear[i]), nil, nil, nil, nil, nil, strucCircRadius[i], nil, strucCircCol[i])
- tempID = i
+ globalTempID = i
SetVisualGearValues(strucAltDisplay[i], GetX(strucGear[i]), GetY(strucGear[i]), 0, 0, nil, nil, 800000, sprTarget)
@@ -780,7 +919,7 @@
-- it just assumes that if you have access to girders, it works for rubbers
-- as that is what the struc implemenation means due to construction station
if GameTime % 100 == 0 and CurrentHedgehog ~= nil then
- anyUIProx = false
+ local anyUIProx = false
for i = 1, #sProx do
if sProx[i][1] == loc("Girder Placement Mode") then
@@ -827,177 +966,29 @@
end
----------------------------------
--- crates are made of this stuff
----------------------------------
-local placeholder = 20
-
--- Weapons which shouldn't be aded:
--- Air attack, napalm, drillstrike: Overwritten weapons for the Construction Mode tools
-atkArray = {
- {amBazooka, "amBazooka", 0, 2*placeholder},
- --{amBee, "amBee", 0, 4*placeholder},
- {amMortar, "amMortar", 0, 1*placeholder},
- {amDrill, "amDrill", 0, 3*placeholder},
- {amSnowball, "amSnowball", 0, 3*placeholder},
-
- {amGrenade, "amGrenade", 0, 2*placeholder},
- {amClusterBomb, "amClusterBomb", 0, 3*placeholder},
- {amWatermelon, "amWatermelon", 0, 25*placeholder},
- {amHellishBomb, "amHellishBomb", 0, 25*placeholder},
- {amMolotov, "amMolotov", 0, 3*placeholder},
- {amGasBomb, "amGasBomb", 0, 3*placeholder},
-
- {amShotgun, "amShotgun", 0, 2*placeholder},
- {amDEagle, "amDEagle", 0, 2*placeholder},
- {amSniperRifle, "amSniperRifle", 0, 3*placeholder},
- --{amSineGun, "amSineGun", 0, 6*placeholder},
- {amFlamethrower, "amFlamethrower", 0, 4*placeholder},
- {amIceGun, "amIceGun", 0, 15*placeholder},
-
- {amFirePunch, "amFirePunch", 0, 3*placeholder},
- {amWhip, "amWhip", 0, 1*placeholder},
- {amBaseballBat, "amBaseballBat", 0, 7*placeholder},
- --{amKamikaze, "amKamikaze", 0, 1*placeholder},
- {amSeduction, "amSeduction", 0, 1*placeholder},
- {amHammer, "amHammer", 0, 1*placeholder},
-
- {amMine, "amMine", 0, 1*placeholder},
- {amDynamite, "amDynamite", 0, 9*placeholder},
- {amCake, "amCake", 0, 25*placeholder},
- {amBallgun, "amBallgun", 0, 40*placeholder},
- --{amRCPlane, "amRCPlane", 0, 25*placeholder},
- {amSMine, "amSMine", 0, 5*placeholder},
-
- --{amMineStrike, "amMineStrike", 0, 15*placeholder},
- --{amPiano, "amPiano", 0, 40*placeholder},
-
- {amPickHammer, "amPickHammer", 0, 2*placeholder},
- {amBlowTorch, "amBlowTorch", 0, 4*placeholder},
- {amKnife, "amKnife", 0, 2*placeholder},
-
- {amBirdy, "amBirdy", 0, 7*placeholder},
-
- {amDuck, "amDuck", 0, 2*placeholder}
-}
-
--- Utilities which shouldn't be added:
--- * Teleport: We have teleportation node
--- * Switch: Always infinite
--- * Girder, rubber: Requires construction station
--- * Resurrector: We have the resurrector structure for this
-
--- Utilities which might be weird for this mode:
--- * Tardis: Randomly teleports hog, maybe even into enemy clan's area
-utilArray = {
- {amLandGun, "amLandGun", 0, 5*placeholder},
-
- {amRope, "amRope", 0, 7*placeholder},
- {amParachute, "amParachute", 0, 2*placeholder},
- {amJetpack, "amJetpack", 0, 8*placeholder},
- {amPortalGun, "amPortalGun", 0, 15*placeholder},
-
- {amInvulnerable, "amInvulnerable", 0, 5*placeholder},
- {amLaserSight, "amLaserSight", 0, 2*placeholder},
- {amVampiric, "amVampiric", 0, 6*placeholder},
-
- {amLowGravity, "amLowGravity", 0, 4*placeholder},
- {amExtraDamage, "amExtraDamage", 0, 6*placeholder},
- {amExtraTime, "amExtraTime", 0, 8*placeholder}
-}
-
-----------------------------
--- Placement stuff
-----------------------------
-
-local cGear = nil -- detects placement of girders and objects (using airattack)
-local curWep = amNothing
-
--- primary placement categories
-local cIndex = 1 -- category index
-local cat = {
- "Girder Placement Mode",
- "Rubber Placement Mode",
- "Mine Placement Mode",
- "Sticky Mine Placement Mode",
- "Barrel Placement Mode",
- "Weapon Crate Placement Mode",
- "Utility Crate Placement Mode",
- "Health Crate Placement Mode",
- "Structure Placement Mode"
-}
-local catReverse = {}
-for c=1, #cat do
- catReverse[cat[c]] = c
-end
-
-sProx = {
- {loc("Girder Placement Mode"),false},
- {loc("Rubber Placement Mode"),false},
- {loc("Mine Placement Mode"),false},
- {loc("Sticky Mine Placement Mode"),false},
- {loc("Barrel Placement Mode"),false},
- {loc("Weapon Crate Placement Mode"),false},
- {loc("Utility Crate Placement Mode"),false},
- {loc("Health Crate Placement Mode"),false},
- {loc("Structure Placement Mode"),false},
- {loc("Teleportation Mode"),false},
-}
-
-
-local pMode = {} -- pMode contains custom subsets of the main categories
-local pIndex = 1
-
-local CGR = 1 -- current girder rotation, we actually need this as HW remembers what rotation you last used
-
-local placedX = {}
-local placedY = {}
-local placedSpec = {}
-local placedSuperSpec = {}
-local placedType = {}
-local placedCount = 0
-
-local sCirc -- circle that appears around selected gears
-local sGear = nil
-local closestDist
-local closestGear = nil
-
-local tCirc = {} -- array of circles that appear around tagged gears
-
------------------------
-- SOME GENERAL METHODS
------------------------
function GetDistFromGearToXY(gear, g2X, g2Y)
- g1X, g1Y = GetGearPosition(gear)
+ local g1X, g1Y = GetGearPosition(gear)
if not g1X then
return nil
end
- q = g1X - g2X
- w = g1Y - g2Y
+ local q = g1X - g2X
+ local w = g1Y - g2Y
return ( (q*q) + (w*w) )
end
function GetDistFromXYtoXY(a, b, c, d)
- q = a - c
- w = b - d
+ local q = a - c
+ local w = b - d
return ( (q*q) + (w*w) )
end
-function SelectGear(gear)
-
- d = GetDistFromGearToXY(gear, placedX[placedCount], placedY[placedCount])
-
- if d < closestDist then
- closestDist = d
- closestGear = gear
- end
-
-end
-
-- essentially called when user clicks the mouse
-- with girders or an airattack
function PlaceObject(x,y)
@@ -1018,6 +1009,7 @@
then
-- For checking if the actual placement succeeded
local placed = false
+ local gear
if cat[cIndex] == "Girder Placement Mode" then
placed = PlaceGirder(x, y, CGR)
placedSpec[placedCount] = CGR
@@ -1257,7 +1249,7 @@
-- some kind of target detected, tell me your story
if cGear ~= nil then
- x,y = GetGearTarget(cGear)
+ local x,y = GetGearTarget(cGear)
if GetGearType(cGear) == gtAirAttack then
DeleteGear(cGear)
@@ -1622,9 +1614,9 @@
teamLUtilIndex[team] = 1
end
- tMapWidth = RightX - LeftX
- tMapHeight = WaterLine - TopY
- clanInterval = div(tMapWidth,ClansCount)
+ local tMapWidth = RightX - LeftX
+ local tMapHeight = WaterLine - TopY
+ local clanInterval = div(tMapWidth,ClansCount)
-- define construction areas for each clan
-- if there are forts-based spawn locations, adjust areas around them