Compare commits

...

5 Commits

Author SHA1 Message Date
6e60c3413a Add wifi camera 2025-03-31 21:52:15 +02:00
b1dfdfdcff Disable all keybinds 2025-03-31 21:15:39 +02:00
5a6cdcee4c Remove auto loot 2025-03-31 21:11:21 +02:00
584a2d3501 Rework auto pickup to auto item figurouter9000 2025-03-31 19:36:13 +02:00
186bcd214a Update 2025-03-31 19:20:42 +02:00
20 changed files with 1547 additions and 123 deletions

View File

@@ -96,88 +96,88 @@ else
LuaUserData.RegisterType("Barotrauma.Items.Components.Repairable")
LuaUserData.RegisterType("Barotrauma.VisualSlot")
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QUICKSTACK_KEYS) then return end
quickstack.quickStackItems(instance)
end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.STACK_TO_CURSOR) then return end
if not PlayerInput.IsShiftDown() then
quickstack.stackToCursor()
else
quickstack.stackAllToCursor()
end
end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FABRICATOR_KEY) then return end
fabricatorstack.tryStackFabricator(instance)
end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FIX) then return end
hotkeyrepair.tryRepair()
end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.MAX_BUY) then return end
quickbuy.tryBuy()
end, Hook.HookMethodType.After)
local throttle = 0.1
local throttleTimer = 0
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if PlayerInput.Mouse4ButtonClicked() then
cursormacroer.setTargetInventory()
end
if not PlayerInput.IsAltDown() then return end
if Timer.GetTime() < throttleTimer then return end
throttleTimer = Timer.GetTime() + throttle
-- We can not use shift because holding shift means we're moving half a stack
-- Fuck me sideways
-- if not PlayerInput.IsShiftDown() then return end
-- if not PlayerInput.PrimaryMouseButtonClicked() then return end
cursormacroer.tryStackCursorItem()
end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.UNLOAD) then return end
quickunload.tryUnloadCursorItem()
end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.RELOAD) then return end
quickreload.tryReloadCursorItem(PlayerInput.IsShiftDown())
end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.LOOT) then return end
-- quickloot.tryLoot()
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QUICKSTACK_KEYS) then return end
-- quickstack.quickStackItems(instance)
-- end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.SONAR) then return end
sonarpinger.tryPing()
end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.STACK_TO_CURSOR) then return end
-- if not PlayerInput.IsShiftDown() then
-- quickstack.stackToCursor()
-- else
-- quickstack.stackAllToCursor()
-- end
-- end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.AOEPICKUP) then return end
aoepickup.tryAoePickup()
end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FABRICATOR_KEY) then return end
-- fabricatorstack.tryStackFabricator(instance)
-- end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_FABRICATOR) then return end
quickaccess.tryAccessFabricator(PlayerInput.IsShiftDown())
end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.FIX) then return end
-- hotkeyrepair.tryRepair()
-- end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_DECONSTRUCTOR) then return end
quickaccess.tryAccessDeconstructor(PlayerInput.IsShiftDown())
end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.MAX_BUY) then return end
-- quickbuy.tryBuy()
-- end, Hook.HookMethodType.After)
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_MEDICAL_FABRICATOR) then return end
quickaccess.tryAccessMedicalFabricator(PlayerInput.IsShiftDown())
end, Hook.HookMethodType.After)
-- local throttle = 0.1
-- local throttleTimer = 0
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if PlayerInput.Mouse4ButtonClicked() then
-- cursormacroer.setTargetInventory()
-- end
-- if not PlayerInput.IsAltDown() then return end
-- if Timer.GetTime() < throttleTimer then return end
-- throttleTimer = Timer.GetTime() + throttle
-- -- We can not use shift because holding shift means we're moving half a stack
-- -- Fuck me sideways
-- -- if not PlayerInput.IsShiftDown() then return end
-- -- if not PlayerInput.PrimaryMouseButtonClicked() then return end
-- cursormacroer.tryStackCursorItem()
-- end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.UNLOAD) then return end
-- quickunload.tryUnloadCursorItem()
-- end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.RELOAD) then return end
-- quickreload.tryReloadCursorItem(PlayerInput.IsShiftDown())
-- end, Hook.HookMethodType.After)
-- -- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- -- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.LOOT) then return end
-- -- quickloot.tryLoot()
-- -- end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.SONAR) then return end
-- sonarpinger.tryPing()
-- end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.AOEPICKUP) then return end
-- aoepickup.tryAoePickup()
-- end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_FABRICATOR) then return end
-- quickaccess.tryAccessFabricator(PlayerInput.IsShiftDown())
-- end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_DECONSTRUCTOR) then return end
-- quickaccess.tryAccessDeconstructor(PlayerInput.IsShiftDown())
-- end, Hook.HookMethodType.After)
-- Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
-- if not PlayerInput.KeyHit(MyModGlobal.CONFIG.QICK_MEDICAL_FABRICATOR) then return end
-- quickaccess.tryAccessMedicalFabricator(PlayerInput.IsShiftDown())
-- end, Hook.HookMethodType.After)
end

View File

@@ -33,32 +33,32 @@ local function getNearbyItems(source, distanceThreshold)
-- log[#log + 1] = string.format("Item %s is in an inventory", tostring(item))
goto continue
end
tags = tostring(item.Tags)
if not string.find(tags, "item") then
-- log[#log + 1] = string.format("Item %s is not an item (but a structure) - %s", tostring(item), tags)
goto continue
end
for component in item.Components do
-- For some God forsaken reason this does not work
-- Not that it classifies the incorrect items
-- But it just literally does not work
-- The code does not execute
-- Some of the items vanish into thin air, as if they never existed
-- I have no idea why
-- So we'll do this in 2 steps...
-- if string.find(blacklistedComponents, component.Name) then
-- log[#log + 1] = string.format("Item %s has blacklisted component %s - %s", tostring(item), component.Name, component.Name)
-- goto continue
-- end
if string.find(whitelistedComponents, component.Name) then
hasAnyOfComponent = true
break
end
end
if not hasAnyOfComponent then
-- log[#log + 1] = string.format("Item %s is not %s", tostring(item), whitelistedComponents)
goto continue
end
-- tags = tostring(item.Tags)
-- if not string.find(tags, "item") then
-- -- log[#log + 1] = string.format("Item %s is not an item (but a structure) - %s", tostring(item), tags)
-- goto continue
-- end
-- for component in item.Components do
-- -- For some God forsaken reason this does not work
-- -- Not that it classifies the incorrect items
-- -- But it just literally does not work
-- -- The code does not execute
-- -- Some of the items vanish into thin air, as if they never existed
-- -- I have no idea why
-- -- So we'll do this in 2 steps...
-- -- if string.find(blacklistedComponents, component.Name) then
-- -- log[#log + 1] = string.format("Item %s has blacklisted component %s - %s", tostring(item), component.Name, component.Name)
-- -- goto continue
-- -- end
-- if string.find(whitelistedComponents, component.Name) then
-- hasAnyOfComponent = true
-- break
-- end
-- end
-- if not hasAnyOfComponent then
-- -- log[#log + 1] = string.format("Item %s is not %s", tostring(item), whitelistedComponents)
-- goto continue
-- end
distance = getDistanceQuick(item.WorldPosition, source)
if distance > distanceThreshold then
@@ -74,8 +74,19 @@ local function getNearbyItems(source, distanceThreshold)
-- print(table.concat(log, "\n"))
table.sort(items, function(a, b)
return a.distance < b.distance
return a.distance > b.distance
end)
local log = ""
for _, item in pairs(items) do
local components = ""
for component in item.item.Components do
components = components .. component.Name .. ", "
end
log = log ..
string.format("%s d:%d t:%s c:%s\n", tostring(item.item.Prefab.Identifier.Value), item.distance, tostring(item.item.Tags),
components)
end
print(log)
-- local str = ""
-- for _, item in pairs(items) do
@@ -89,17 +100,17 @@ local function getNearbyItems(source, distanceThreshold)
-- end
-- print(str)
local filteredItems = {}
for _, item in pairs(items) do
for component in item.item.Components do
if string.find(blacklistedComponents, component.Name) then
goto continue
end
end
filteredItems[#filteredItems + 1] = item.item
::continue::
end
dump(filteredItems)
-- local filteredItems = {}
-- for _, item in pairs(items) do
-- for component in item.item.Components do
-- if string.find(blacklistedComponents, component.Name) then
-- goto continue
-- end
-- end
-- filteredItems[#filteredItems + 1] = item.item
-- ::continue::
-- end
-- dump(filteredItems)
-- str = ""
-- for _, item in pairs(filteredItems) do
@@ -130,14 +141,14 @@ local function tryAoePickup()
return
end
local distanceThreshold = 2000
local distanceThreshold = 500
local characterPos = character.WorldPosition
local nearbyItems = getNearbyItems(characterPos, distanceThreshold)
local errors = quickstack.tryMoveItems(nearbyItems, itemTree, true)
for _, error in pairs(errors) do
MyModGlobal.debugPrint(string.format("Error moving items: %s", error))
end
-- local errors = quickstack.tryMoveItems(nearbyItems, itemTree, true)
-- for _, error in pairs(errors) do
-- MyModGlobal.debugPrint(string.format("Error moving items: %s", error))
-- end
end
return {

View File

@@ -3,6 +3,8 @@ if not CLIENT then return end
local utils = require "Cyka.utils"
local dump = require "Cyka.dump"
-- TODO: Also cook terminal
-- terminal d:28 t:logic,smallitem c:Terminal, Holdable, ConnectionPanel,
local machines = "fabricator,deconstructor,medicalfabricator"
Hook.Patch("Cyka", "Barotrauma.Character", "CanInteractWith",
{ "Barotrauma.Item", "System.Single&", "System.Boolean" },

View File

@@ -1,7 +1,7 @@
-- luacheck: globals Character Timer Hook SERVER CLIENT
if not SERVER then return end
local amountExperience = 6000
local passiveExperienceDelay = 2
local passiveExperienceDelay = 60
local passiveExperienceTimer = 0
Hook.Add("think", "examples.passiveExperience", function()

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<QuickInteractionsUI Absolute="[2,-457,,]" Anchor="[0,1]" BackgroundColor="255,255,255,255" BackgroundSprite="{ Path: CUI.png, SourceRect: [128,32,32,32] }" FitContent="[True,True]" IgnoreEvents="true" OutlineColor="0,0,0,0" Relative="[-0.5,0,,]" ResizibleLeft="false" ResizibleRight="false" Visible="false">
<CUIVerticalList AKA="layout" BottomGap="0" BreakSerialization="true" FitContent="[True,True]" IgnoreEvents="true" Relative="[0,0,1,1]" Scrollable="true" Visible="false" />
<QuickInteractionsUI Absolute="[2,-457,,]" Anchor="[0,1]" BackgroundColor="255,255,255,255" BackgroundSprite="{ Path: CUI.png, SourceRect: [128,32,32,32] }" FitContent="[True,True]" OutlineColor="0,0,0,0" Relative="[-0.5,0,,]" ResizibleLeft="false" ResizibleRight="false">
<CUIVerticalList AKA="layout" BottomGap="0" BreakSerialization="true" FitContent="[True,True]" Relative="[0,0,1,1]" Scrollable="true" />
</QuickInteractionsUI>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<Afflictions>
<Affliction name="Camera HUD" identifier="camhud" description="" type="None" limbspecific="false" indicatorlimb="Torso" showiconthreshold="1000" showicontoothersthreshold="1000" showinhealthscannerthreshold="1000" treatmentthreshold="1000" maxstrength="1" affectmachines="false" healableinmedicalclinic="false">
<Effect minstrength="0" maxstrength="1" minscreenblur="0.2" maxscreenblur="0.2" minradialdistort="0.5" maxradialdistort="0.5" mingrainstrength="0.5" maxgrainstrength="0.5" minchromaticaberration="3.0" maxchromaticaberration="3.0" strengthchange="-4" MinAfflictionOverlayAlphaMultiplier="1.0" MaxAfflictionOverlayAlphaMultiplier="1.0" />
<PeriodicEffect interval="2.0">
<StatusEffect target="Character" multiplyafflictionsbymaxvitality="true">
<Affliction identifier="camhudrec" strength="1" />
</StatusEffect>
</PeriodicEffect>
<AfflictionOverlay texture="%ModDir:3020618603%/UI/CamOverlay.png" />
</Affliction>
<Affliction name="Camera REC" identifier="camhudrec" description="" type="None" limbspecific="false" indicatorlimb="Torso" showiconthreshold="1000" showicontoothersthreshold="1000" showinhealthscannerthreshold="1000" treatmentthreshold="1000" maxstrength="1" affectmachines="false" healableinmedicalclinic="false">
<Effect minstrength="0" maxstrength="1" strengthchange="-1" MinAfflictionOverlayAlphaMultiplier="1.0" MaxAfflictionOverlayAlphaMultiplier="1.0" />
<PeriodicEffect interval="2.0">
<StatusEffect target="Character">
<Affliction identifier="camhudrec" strength="2" />
</StatusEffect>
</PeriodicEffect>
<AfflictionOverlay texture="%ModDir:3020618603%/UI/RecOverlay.png" />
</Affliction>
</Afflictions>

View File

@@ -0,0 +1,285 @@
<?xml version="1.0" encoding="utf-8"?>
<ItemAssembly name="Camera Monitor" description="" hideinmenus="false">
<Item name="" identifier="bluewire" ID="1079" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="51,121,173,255" InventoryIconColor="51,121,173,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" nodes="-266;-9.5;-232;0;-208;0;-200;-8" />
</Item>
<Item name="" identifier="bluewire" ID="1071" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="51,121,173,255" InventoryIconColor="51,121,173,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="wificomponent" ID="1063" rect="-50616,-16072,16,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="signal,circuitboxcomponent,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<WifiComponent Range="20000" Channel="0" AllowCrossTeamCommunication="False" LinkToChat="False" MinChatMessageInterval="1" DiscardDuplicateChatMessages="True" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" channelmemory="0,1,2,3,4,5,6,7,8,9" />
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in" />
<output name="signal_out" />
<input name="set_channel">
<link w="1071" i="1" />
</input>
</ConnectionPanel>
</Item>
<Item name="" identifier="concatcomponent" ID="1059" rect="-50616,-16072,16,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="circuitboxcomponent,smallitem,logic" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<ConcatComponent MaxOutputLength="256" Separator=" " TimeFrame="0" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in1">
<link w="1070" i="1" />
</input>
<input name="signal_in2">
<link w="1069" i="1" />
</input>
<output name="signal_out" />
</ConnectionPanel>
</Item>
<Item name="" identifier="orangewire" ID="1070" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,140,13,255" InventoryIconColor="255,140,13,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="orangewire" ID="1069" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,140,13,255" InventoryIconColor="255,140,13,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="redwire" ID="1078" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="254,23,17,255" InventoryIconColor="254,23,17,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" nodes="-266;-9.5;-232;-8;-200;-8" />
</Item>
<Item name="" identifier="redwire" ID="1065" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="254,23,17,255" InventoryIconColor="254,23,17,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="redwire" ID="1064" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="254,23,17,255" InventoryIconColor="254,23,17,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="blackwire" ID="1077" rect="-50629,-16072,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="50,50,50,255" InventoryIconColor="50,50,50,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" nodes="-200;-8;-208;-16;-232;-16;-266;-9.5" />
</Item>
<Item name="" identifier="delaycomponent" ID="1057" rect="-50616,-16072,16,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="circuitboxcomponent,smallitem,logic" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<DelayComponent Delay="0.1" ResetWhenSignalReceived="True" ResetWhenDifferentSignalReceived="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in" />
<output name="signal_out">
<link w="1066" i="0" />
</output>
<input name="set_delay" />
</ConnectionPanel>
</Item>
<Item name="" identifier="addercomponent" ID="1058" rect="-50616,-16072,16,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="circuitboxcomponent,smallitem,logic" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<AdderComponent ClampMax="999999" ClampMin="-999999" TimeFrame="0" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in1">
<link w="1066" i="1" />
</input>
<input name="signal_in2">
<link w="1068" i="1" />
</input>
<output name="signal_out">
<link w="1064" i="0" />
</output>
</ConnectionPanel>
</Item>
<Item name="" identifier="memorycomponent" ID="1062" rect="-50616,-16072,16,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="circuitboxcomponent,smallitem,logic" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<MemoryComponent MaxValueLength="200" Value="CH:" Writeable="True" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in" />
<input name="lock_state" />
<output name="signal_out">
<link w="1070" i="0" />
</output>
</ConnectionPanel>
</Item>
<Item name="" identifier="memorycomponent" ID="1061" rect="-50616,-16072,16,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="circuitboxcomponent,smallitem,logic" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<MemoryComponent MaxValueLength="4" Value="1" Writeable="True" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in">
<link w="1064" i="1" />
<link w="1065" i="1" />
</input>
<input name="lock_state" />
<output name="signal_out">
<link w="1067" i="0" />
<link w="1068" i="0" />
<link w="1069" i="0" />
<link w="1071" i="0" />
</output>
</ConnectionPanel>
</Item>
<Item name="" identifier="signalcheckcomponent" ID="1060" rect="-50616,-16072,16,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="circuitboxcomponent,smallitem,logic" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<SignalCheckComponent MaxOutputLength="4" Output="1" FalseOutput="" TargetSignal="7" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in">
<link w="1067" i="1" />
</input>
<input name="set_output" />
<input name="set_targetsignal" />
<output name="signal_out">
<link w="1065" i="0" />
</output>
</ConnectionPanel>
</Item>
<Item name="" identifier="circuitbox" ID="1056" rect="-216,8,32,32" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100">
<Holdable Attached="True" SpriteDepthWhenDropped="0.55" PickingTime="5" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="signal_in1">
<link w="1079" i="1" />
</input>
<input name="signal_in2">
<link w="1078" i="1" />
</input>
<input name="signal_in3" />
<input name="signal_in4" />
<input name="signal_in5" />
<input name="signal_in6" />
<input name="signal_in7" />
<input name="signal_in8" />
<output name="signal_out1">
<link w="1077" i="0" />
</output>
<output name="signal_out2" />
<output name="signal_out3" />
<output name="signal_out4" />
<output name="signal_out5" />
<output name="signal_out6" />
<output name="signal_out7" />
<output name="signal_out8" />
</ConnectionPanel>
<ItemContainer QuickUseMovesItemsInside="False" ContainableRestrictions="" AutoFill="True" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" contained="1057,1058,1059,1060,1061,1062,1063,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,," ExtraStackSize="0" />
<ItemContainer QuickUseMovesItemsInside="False" ContainableRestrictions="" AutoFill="True" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" contained="1064;1065,1066;1067;1068,1069;1070,1071,,,,,," ExtraStackSize="0" />
<CircuitBox PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgInteractSelect">
<InputNode pos="-805.3133,47.29297" />
<OutputNode pos="1120.5836,47.41577" />
<Component id="0" position="-496.56104,-109.7872" backingitemid="0,0" usedresource="fpgacircuit" />
<Component id="1" position="150.38062,-115.77286" backingitemid="1,0" usedresource="fpgacircuit" />
<Component id="2" position="662.0154,269.75433" backingitemid="2,0" usedresource="fpgacircuit" />
<Component id="3" position="176.8888,-641.6171" backingitemid="3,0" usedresource="fpgacircuit" />
<Component id="4" position="154.21436,-368.83014" backingitemid="4,0" usedresource="fpgacircuit" />
<Component id="5" position="150.5741,399.9847" backingitemid="5,0" usedresource="fpgacircuit" />
<Component id="6" position="799.1293,16.431671" backingitemid="6,0" usedresource="fpgacircuit" />
<Wire id="2" backingitemid="" prefab="redwire">
<From name="signal_out" target="2" />
<To name="signal_out1" target="" />
</Wire>
<Wire id="8" backingitemid="3,0" prefab="bluewire">
<From name="signal_out" target="4" />
<To name="set_channel" target="6" />
</Wire>
<Wire id="5" backingitemid="1,0" prefab="greenwire">
<From name="signal_out" target="0" />
<To name="signal_in1" target="1" />
</Wire>
<Wire id="7" backingitemid="0,0" prefab="redwire">
<From name="signal_out" target="1" />
<To name="signal_in" target="4" />
</Wire>
<Wire id="4" backingitemid="0,1" prefab="redwire">
<From name="signal_out" target="3" />
<To name="signal_in" target="4" />
</Wire>
<Wire id="3" backingitemid="1,1" prefab="greenwire">
<From name="signal_out" target="4" />
<To name="signal_in" target="3" />
</Wire>
<Wire id="1" backingitemid="2,0" prefab="orangewire">
<From name="signal_out" target="4" />
<To name="signal_in2" target="2" />
</Wire>
<Wire id="0" backingitemid="2,1" prefab="orangewire">
<From name="signal_out" target="5" />
<To name="signal_in1" target="2" />
</Wire>
<Wire id="10" backingitemid="1,2" prefab="greenwire">
<From name="signal_out" target="4" />
<To name="signal_in2" target="1" />
</Wire>
<Wire id="6" backingitemid="" prefab="redwire">
<From name="signal_in2" target="" />
<To name="signal_in" target="0" />
</Wire>
<Wire id="11" backingitemid="" prefab="bluewire">
<From name="signal_in1" target="" />
<To name="signal_in" target="6" />
</Wire>
</CircuitBox>
<itemstats />
</Item>
<Item name="" identifier="greenwire" ID="1068" rect="-829,-1080,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="56,143,111,255" InventoryIconColor="56,143,111,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="greenwire" ID="1067" rect="-829,-1080,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="56,143,111,255" InventoryIconColor="56,143,111,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="greenwire" ID="1066" rect="-829,-1080,42,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="56,143,111,255" InventoryIconColor="56,143,111,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="wire,smallitem" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.8" HiddenInGame="False" conditionpercentage="100" hideinassemblypreview="true">
<Holdable SpriteDepthWhenDropped="0.55" PickingTime="0" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgPickUpSelect" />
<Wire NoAutoLock="False" UseSpriteDepth="False" DropOnConnect="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="label" ID="1075" rect="-176,0,368,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="1" SpriteColor="255,255,255,0" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.001" HiddenInGame="True" conditionpercentage="100">
<ItemLabel Padding="0,0,0,0" Text="Max. Channel = Channel number +1 as Target signal of Signal Component" IgnoreLocalization="False" TextColor="255,255,255,255" TextScale="1" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="label" ID="1074" rect="-176,16,320,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="1" SpriteColor="255,255,255,0" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.001" HiddenInGame="True" conditionpercentage="100">
<ItemLabel Padding="0,0,0,0" Text="Min. Channel = Channel number as Output of Signal Component" IgnoreLocalization="False" TextColor="255,255,255,255" TextScale="1" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="label" ID="1073" rect="-176,48,384,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="1" SpriteColor="255,255,255,0" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.001" HiddenInGame="True" conditionpercentage="100">
<ItemLabel Padding="0,0,0,0" Text="You can change the min. and max channel the camera monitor can switch to:" IgnoreLocalization="False" TextColor="255,255,255,255" TextScale="1" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="" identifier="label" ID="1072" rect="-176,-32,496,16" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="1" SpriteColor="255,255,255,0" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.001" HiddenInGame="True" conditionpercentage="100">
<ItemLabel Padding="0,0,0,0" Text="Make sure to set the value inside the Memory component (middle one) to your min. channel value!" IgnoreLocalization="False" TextColor="255,255,255,255" TextScale="1" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
</Item>
<Item name="Camera Monitor" identifier="cammonitor" ID="1076" rect="-312,24,92,67" NonInteractable="False" NonPlayerTeamInteractable="False" AllowSwapping="True" Rotation="0" Scale="0.5" SpriteColor="255,255,255,255" InventoryIconColor="255,255,255,255" ContainerColor="255,255,255,255" InvulnerableToDamage="False" Tags="periscope,light" DisplaySideBySideWhenLinked="False" DisallowedUpgrades="" SpriteDepth="0.7" HiddenInGame="False" conditionpercentage="100">
<LightComponent Range="70" CastShadows="False" DrawBehindSubs="False" IsOn="True" Flicker="0" FlickerSpeed="1" PulseFrequency="0" PulseAmount="0" BlinkFrequency="0" LightColor="255,255,255,100" IsActive="True" MinVoltage="0" PowerConsumption="0" Voltage="1" VulnerableToEMP="True" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="False" Msg="" />
<Holdable Attached="True" SpriteDepthWhenDropped="0.55" PickingTime="3" CanBePicked="True" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgDetachWrench">
<requireditem items="wrench" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
</Holdable>
<Controller IsToggle="False" Output="1" FalseOutput="0" State="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="False" Msg="ItemMsgInteractSelect">
<limbposition limb="LeftHand" position="87,-105" allowusinglimb="false" />
<limbposition limb="RightHand" position="87,-105" allowusinglimb="false" />
</Controller>
<ItemLabel Padding="48,39,10,12" Text="CH: 1" IgnoreLocalization="False" TextColor="255,255,255,255" TextScale="0.7" Scrollable="True" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="" />
<ConnectionPanel Locked="False" PickingTime="0" CanBePicked="False" LockGuiFramePosition="False" GuiFrameOffset="0,0" AllowInGameEditing="True" Msg="ItemMsgRewireScrewdriver">
<requireditem items="screwdriver" type="Equipped" characterinventoryslottype="None" optional="false" ignoreineditor="false" excludebroken="true" requireempty="false" excludefullcondition="false" targetslot="-1" allowvariants="true" rotation="0" setactive="false" />
<input name="set_text">
<link w="1077" i="1" />
</input>
<input name="set_color" />
<input name="set_text_color" />
<output name="position_out">
<link w="1079" i="0" />
</output>
<output name="trigger_out">
<link w="1078" i="0" />
</output>
</ConnectionPanel>
</Item>
</ItemAssembly>

BIN
Wifi Camera/Items/SurveillanceCam.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Wifi Camera/Items/WifiCam.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Wifi Camera/Items/WifiMonitor.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,997 @@
<?xml version="1.0" encoding="utf-8"?>
<Items>
<!-- Periscope override to add the visual effects - Disabled -->
<!--
<Override>
<Item name="" description="" identifier="periscope" tags="periscope" category="Machine,Weapon" type="Controller" disableitemusagewhenselected="true" scale="0.5" isshootable="true" requireaimtouse="false" requireaimtosecondaryuse="false">
<SwappableItem canbebought="false" origin="67,0"/>
<Sprite texture="Content/Items/Weapons/TurretsAndDepthCharges.png" depth="0.1" sourcerect="2,210,134,203" origin="0.5,0.5" />
<Controller UserPos="-35.0, -50.0" direction="Right" canbeselected="true" AllowSelectingWhenSelectedByBot="true" AllowSelectingWhenSelectedByOther="false" msg="ItemMsgInteractSelect">
<limbposition limb="Head" position="-10,-135" />
<limbposition limb="Torso" position="-10,-200" />
<limbposition limb="LeftHand" position="67,-170" />
<limbposition limb="RightHand" position="67,-170" />
<StatusEffect type="OnActive" target="Character" interval="0.1" setvalue="true" multiplyafflictionsbymaxvitality="true">
<Affliction identifier="camhud" amount="1" />
</StatusEffect>
</Controller>
<ConnectionPanel selectkey="Action" canbeselected="true" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<output name="position_out" displayname="connection.turretaimingout" fallbackdisplayname="inputtype.aim" />
<output name="trigger_out" displayname="connection.turrettriggerout" fallbackdisplayname="inputtype.shoot" />
</ConnectionPanel>
</Item>
</Override>
-->
<Item name="Camera Monitor Wiring Diagram" identifier="monitorwiringdiagram" category="Electrical" Tags="smallitem,logic" description="Displays the intended wiring setup for the camera monitor when equipped." cargocontaineridentifier="metalcrate" scale="0.25" impactsoundtag="impact_metal_light" isshootable="true">
<Upgrade gameversion="0.9.9000.0" scale="0.25" />
<PreferredContainer primary="reactorcab" secondary="engcab" />
<Deconstruct time="5" />
<Fabricate suitablefabricators="fabricator" requiredtime="5">
<RequiredSkill identifier="mechanical" level="5" />
<RequiredItem identifier="plastic" />
</Fabricate>
<InventoryIcon texture="Content/Items/InventoryIconAtlas2.png" sourcerect="323,193,60,61" origin="0.5,0.5" />
<Sprite texture="Content/Items/Electricity/signalcomp.png" sourcerect="149,371,69,93" depth="0.8" origin="0.5,0.5" />
<Body width="60" height="90" density="15" />
<Holdable slots="Any,RightHand,LeftHand" holdangle="30" handle1="-10,0" msg="ItemMsgPickUpSelect" />
<Terminal canbeselected="true" msg="ItemMsgInteractSelect" AllowInGameEditing="false" AutoHideScrollbar="true" readonly="true" autoscrolltobottom="false" linestartsymbol="" marginmultiplier="1.5" drawhudwhenequipped="true">
<GuiFrame relativesize="1.0,1.0" anchor="Center" style="MonitorWiringDiagram" hidedragicons="true" />
</Terminal>
</Item>
<Item name="Wifi Surveillance Camera" identifier="wifisurveillancecamera" category="Equipment" Tags="smallitem,signal,camera" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Broadcasts the view to the configured wifi channel when wired to a power source. Can be attached anywhere on the inside and on fins and beams on the outside of your submarine." scale="0.325" impactsoundtag="impact_metal_light" isshootable="true">
<PreferredContainer primary="divingcab,crewcab" />
<Deconstruct time="5">
<Item identifier="copper" />
<Item identifier="plastic" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredSkill identifier="mechanical" level="30" />
<RequiredItem identifier="fpgacircuit" />
<RequiredItem identifier="plastic" />
</Fabricate>
<InventoryIcon texture="%ModDir:3020618603%/Items/SurveillanceCam.png" sourcerect="0,0,68,68" origin="0.5,0.5" />
<Sprite texture="%ModDir:3020618603%/Items/SurveillanceCam.png" depth="0.699" sourcerect="0,0,68,68" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="255.0,0.0,0.0,200.0" range="3" alphablend="true" blinkfrequency="0.5" castshadows="false" powerconsumption="10" allowingameediting="false" IsOn="true">
<LightTexture texture="Content/Lights/visioncircle.png" origin="0.5,0.5" size="0.1,0.1" />
<!-- Activate the camera by setting linktochat="true" if it receives power and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if no power is supplied or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface selectkey="Select" canbeselected="true" drawhudwhenequipped="false" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body width="64" height="64" density="12" />
<Holdable selectkey="Select" pickkey="Use" slots="RightHand,LeftHand,Any" msg="ItemMsgDetachWrench" PickingTime="2.0" aimpos="65,-10" holdpos="10,-40" handle1="1,1" handle2="0,0" attachable="true" aimable="true" attachedbydefault="false" allowingameediting="false" canflipx="false">
<RequiredItem items="wrench" type="Equipped" />
</Holdable>
<!-- ConnectionPanel which needs all the pins for the item to work, despite only the power_in should actually be used ingame. Sadly no way to lock/hide the other pins -->
<ConnectionPanel selectkey="Action" canbeselected="true" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="power_in" displayname="connection.powerin" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Camera Monitor" description="A monitor to watch the wifi camera broadcasts. Needs to be connected to a wifi component." identifier="cammonitor" tags="periscope" category="Machine,Weapon" type="Controller" disableitemusagewhenselected="true" scale="0.5" isshootable="true" requireaimtouse="false" requireaimtosecondaryuse="false" canflipx="false">
<Sprite texture="%ModDir:3020618603%/Items/WifiMonitor.png" sourcerect="0,0,184,135" depth="0.7" origin="0.5,0.5" canflipx="false" />
<!--DecorativeSprite texture="%ModDir:3020618603%/Items/WifiMonitor.png" depth="0.699" sourcerect="0,135,184,135" usewhenattached="true" HideWhenNotVisible="true" origin="0.5,0.5" canflipx="false">
<IsActiveConditional attached="true" targetitemcomponent="Holdable" />
</DecorativeSprite-->
<LightComponent range="70.0" lightcolor="255,255,255,10" powerconsumption="0" IsOn="true" alphablend="false" castshadows="false" allowingameediting="false">
<IsActive attached="true" targetitemcomponent="Holdable" />
<sprite texture="%ModDir:3020618603%/Items/WifiMonitor.png" depth="0.699" sourcerect="0,135,184,135" alpha="1.0" origin="0.5,0.5" canflipx="false" />
</LightComponent>
<Body width="160" height="128" density="15" />
<Deconstruct time="20">
<Item identifier="fpgacircuit" />
<Item identifier="plastic" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredSkill identifier="mechanical" level="30" />
<RequiredItem identifier="fpgacircuit" />
<RequiredItem identifier="fpgacircuit" />
<RequiredItem identifier="plastic" />
<RequiredItem identifier="plastic" />
</Fabricate>
<Holdable selectkey="Select" pickkey="Use" slots="RightHand+LeftHand" msg="ItemMsgDetachWrench" PickingTime="3.0" aimpos="65,-10" holdpos="10,-40" handle1="1,1" handle2="0,0" attachable="true" aimable="true" attachedbydefault="false" allowingameediting="false" canflipx="false">
<RequiredItem items="wrench" type="Equipped" />
</Holdable>
<Controller canbeselected="true" AllowSelectingWhenSelectedByBot="true" AllowSelectingWhenSelectedByOther="true" msg="ItemMsgInteractSelect" allowingameediting="false">
<Conditional attached="true" />
<limbposition limb="LeftHand" position="87,-105" />
<limbposition limb="RightHand" position="87,-105" />
<!-- Add a camera HUD and visual effects to the player using the monitor by applying an invisible affliction -->
<StatusEffect type="OnActive" target="Character" interval="0.1" setvalue="true" multiplyafflictionsbymaxvitality="true">
<Affliction identifier="camhud" amount="1" />
</StatusEffect>
</Controller>
<ItemLabel scrollable="true" padding="48,39,10,12" textcolor="1,1,1,1" textscale="0.7" canbeselected="false">
<Upgrade gameversion="1.0.21.0" padding="48,39,10,12" />
</ItemLabel>
<ConnectionPanel selectkey="Use" canbeselected="true" drawhudwhenequipped="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="set_text" displayname="connection.set_text" fallbackdisplayname="connection.setoutput" />
<input name="set_color" displayname="connection.setcolor" />
<input name="set_text_color" displayname="connection.settextcolor" />
<output name="position_out" displayname="connection.turretaimingout" fallbackdisplayname="inputtype.aim" />
<output name="trigger_out" displayname="connection.turrettriggerout" fallbackdisplayname="inputtype.shoot" />
</ConnectionPanel>
</Item>
<Item name="Wifi Camera" identifier="wificam" category="Equipment" Tags="smallitem,signal,camera" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_light" isshootable="true">
<PreferredContainer primary="divingcab,crewcab" />
<PreferredContainer secondary="wreckengcab,abandonedengcab,outpostengcab,beaconengcab" amount="1" spawnprobability="0.05" />
<Deconstruct time="5">
<Item identifier="copper" />
<Item identifier="plastic" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredSkill identifier="mechanical" level="30" />
<RequiredItem identifier="fpgacircuit" />
<RequiredItem identifier="plastic" />
</Fabricate>
<Sprite name="Wifi Camera" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="0,0,52,23" depth="0.6" origin="0.5,0.5" />
<ContainedSprite texture="%ModDir:3020618603%/Items/WifiCam.png" usewhenattached="true" decorativespritebehavior="HideWhenNotVisible" depth="0.55" sourcerect="52,0,33,78" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body width="28" height="26" density="11.5" />
<Holdable pickkey="Select" slots="LeftHand,RightHand,Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" msg="ItemMsgPickUpSelect">
<sprite name="Wifi Camera Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" sourcerect="0,0,52,23" origin="0.7,0.8" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<!-- HELMETS -->
<Item name="Separatist Camera Helmet" identifier="wificampiratehelmet" category="Equipment" Tags="smallitem,signal,camera,clothing" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Protects your head and broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="armcab" secondary="secarmcab" />
<Deconstruct time="5">
<Item identifier="piratehelmet" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="piratehelmet" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Separatist Camera Helmet 1" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="424,206,88,95" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body radius="30" density="30" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" armorvalue="20.0" msg="ItemMsgPickUpSelect">
<damagemodifier afflictionidentifiers="lacerations,gunshotwound" armorsector="0.0,360.0" damagemultiplier="0.2" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="bitewounds, blunttrauma" armorsector="0.0,360.0" damagemultiplier="0.3" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictiontypes="bleeding" armorsector="0.0,360.0" damagemultiplier="0.1" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="concussion" armorsector="0.0,360.0" damagemultiplier="0.0" damagesound="" deflectprojectiles="true" />
<SkillModifier skillidentifier="weapons" skillvalue="5" />
<sprite name="Separatist Camera Helmet 1 Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.7" hidewearablesoftype="Hair" sourcerect="424,206,88,95" origin="0.6,0.5" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Ballistic Camera Helmet" identifier="wificamballistichelmet1" category="Equipment" Tags="smallitem,signal,camera,clothing" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Protects your head and broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="armcab" secondary="secarmcab" />
<Deconstruct time="5">
<Item identifier="ballistichelmet1" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="ballistichelmet1" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Ballistic Camera Helmet 1" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="7,215,85,68" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body radius="30" density="25" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" armorvalue="20.0" msg="ItemMsgPickUpSelect">
<damagemodifier afflictionidentifiers="lacerations,gunshotwound" armorsector="0.0,360.0" damagemultiplier="0.2" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="bitewounds, blunttrauma" armorsector="0.0,360.0" damagemultiplier="0.3" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictiontypes="bleeding" armorsector="0.0,360.0" damagemultiplier="0.1" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="concussion" armorsector="0.0,360.0" damagemultiplier="0.0" damagesound="" deflectprojectiles="true" />
<sprite name="Ballistic Camera Helmet 1 Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" hidewearablesoftype="Hair" sourcerect="7,215,85,68" origin="0.5,0.7" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Gunner's Camera Helmet" identifier="wificamballistichelmet2" category="Equipment" Tags="smallitem,signal,camera,clothing" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Protects your head and broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="armcab" secondary="secarmcab" />
<Deconstruct time="5">
<Item identifier="ballistichelmet2" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="ballistichelmet2" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Ballistic Camera Helmet 2" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="112,213,82,94" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body radius="30" density="25" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" armorvalue="20.0" msg="ItemMsgPickUpSelect">
<damagemodifier afflictionidentifiers="blunttrauma,lacerations,gunshotwound" armorsector="0.0,360.0" damagemultiplier="0.4" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="bitewounds" armorsector="0.0,360.0" damagemultiplier="0.5" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictiontypes="bleeding" armorsector="0.0,360.0" damagemultiplier="0.3" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="concussion" armorsector="0.0,360.0" damagemultiplier="0.0" damagesound="" deflectprojectiles="true" />
<SkillModifier skillidentifier="weapons" skillvalue="10" />
<sprite name="Ballistic Helmet 2 Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" hidewearablesoftype="Hair" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" sourcerect="112,213,82,94" origin="0.625,0.5" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Riot Camera Helmet" identifier="wificamballistichelmet3" category="Equipment" Tags="smallitem,signal,camera,clothing" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Protects your head and broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="armcab" secondary="secarmcab" />
<Deconstruct time="5">
<Item identifier="ballistichelmet3" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="ballistichelmet3" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Ballistic Camera Helmet 3" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="207,201,104,101" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body radius="30" density="25" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" armorvalue="20.0" msg="ItemMsgPickUpSelect">
<damagemodifier afflictionidentifiers="blunttrauma,lacerations" armorsector="0.0,360.0" damagemultiplier="0.2" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="bitewounds, gunshotwound" armorsector="0.0,360.0" damagemultiplier="0.3" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictiontypes="bleeding" armorsector="0.0,360.0" damagemultiplier="0.1" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="concussion" armorsector="0.0,360.0" damagemultiplier="0.0" damagesound="" deflectprojectiles="true" />
<sprite name="Ballistic Helmet 3 Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" hidewearablesoftype="Hair" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" sourcerect="207,201,104,101" origin="0.575,0.55" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Chitin Camera Helmet" identifier="wificamchitinhelmet" category="Equipment" Tags="smallitem,signal,camera,clothing" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Protects your head and broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="armcab" secondary="secarmcab" />
<Deconstruct time="5">
<Item identifier="chitinhelmet" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="chitinhelmet" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Chitin Camera Helmet" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="207,8,100,95" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body radius="30" density="20" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" armorvalue="20.0" msg="ItemMsgPickUpSelect">
<damagemodifier afflictionidentifiers="blunttrauma,lacerations,gunshotwound" armorsector="0.0,360.0" damagemultiplier="0.4" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictionidentifiers="bitewounds" armorsector="0.0,360.0" damagemultiplier="0.6" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictiontypes="bleeding" armorsector="0.0,360.0" damagemultiplier="0.2" damagesound="LimbArmor" deflectprojectiles="true" />
<sprite texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" hidewearablesoftype="Hair" sourcerect="207,8,100,95" origin="0.55,0.5" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Iron Camera Helmet" identifier="wificamironhelmet" category="Equipment" Tags="smallitem,signal,camera,clothing" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Protects your head and broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="armcab" secondary="secarmcab" />
<Deconstruct time="5">
<Item identifier="ironhelmet" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="ironhelmet" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Iron Camera Helmet" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="249,529,90,102" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body width="70" height="80" density="30" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" armorvalue="20.0" msg="ItemMsgPickUpSelect">
<StatusEffect type="OnWearing" target="Character" HideFace="true" ObstructVision="true" SpeedMultiplier="0.9" setvalue="true" disabledeltatime="true" />
<damagemodifier afflictionidentifiers="lacerations, bitewounds" armorsector="0.0,360.0" damagemultiplier="0.15" damagesound="LimbArmor" deflectprojectiles="true" />
<damagemodifier afflictiontypes="bleeding" armorsector="0.0,360.0" damagemultiplier="0.2" damagesound="LimbArmor" deflectprojectiles="true" />
<sprite name="Iron Helmet" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" hidewearablesoftype="Hair" sourcerect="249,529,90,102" origin="0.5,0.5" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<!-- MASKS -->
<Item name="Clown Camera Mask" identifier="wificamclownmask" category="Equipment" Tags="smallitem,signal,camera,clothing,clownmask" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Be a clown and broadcast your performance to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="crewcab" />
<Deconstruct time="5">
<Item identifier="clownmask" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="clownmask" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Clown Camera Mask" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="414,318,89,71" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body width="40" radius="30" density="15" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" msg="ItemMsgPickUpSelect">
<sprite name="Clown Camera Mask Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.75" sourcerect="414,318,89,71" origin="0.5,0.6" />
<StatusEffect tags="clown" type="OnWearing" target="Character" HideFace="true" duration="0.1" stackable="false" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Mother's Countenance with Camera" identifier="wificamclownmaskunique" category="Equipment" Tags="smallitem,signal,camera,clothing,clownmask" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Broadcast the actions of Honkmother to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="crewcab" />
<Deconstruct time="5">
<Item identifier="clownmaskunique" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="clownmaskunique" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Clown Camera Mask Unique" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="414,417,89,71" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body width="40" radius="30" density="15" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" msg="ItemMsgPickUpSelect">
<sprite name="Clown Camera Mask Unique Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" sourcerect="414,417,89,71" origin="0.5,0.6" />
<StatusEffect tags="clown" type="OnWearing" target="Character" HideFace="true" duration="0.1" stackable="false" />
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Clown Camera Diving Mask" identifier="wificamclowndivingmask" category="Equipment,Diving" Tags="smallitem,signal,camera,clownmask,diving,lightdiving" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Be a clown and broadcast your underwater performance to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="divingcab" secondary="supplycab" />
<Deconstruct time="5">
<Item identifier="clowndivingmask" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="clowndivingmask" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Clown Camera Diving Mask" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="421,529,80,70" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" targetslot="1" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery" autoinject="true">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="64,448,64,64" origin="0.5,0.5" />
<SlotIcon slotindex="1" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="oxygensource,weldingtoolfuel" excludeditems="oxygenitetank" />
<Containable items="oxygenitetank">
<StatusEffect type="OnWearing" target="Character" SpeedMultiplier="1.2" setvalue="true" targetslot="0">
<Conditional IsDead="false" />
</StatusEffect>
</Containable>
<SubContainer capacity="1" maxstacksize="1">
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</SubContainer>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body width="5" radius="25" density="15" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" msg="ItemMsgPickUpSelect" displaycontainedstatus="true">
<sprite name="Clown Diving Mask Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.65" sourcerect="421,529,80,70" origin="0.45,0.4" />
<StatusEffect tags="clown" type="OnWearing" target="Character" HideFace="true" duration="0.1" stackable="false" />
<StatusEffect type="OnWearing" target="Contained,Character" targetslot="0" OxygenAvailable="1000.0" Condition="-0.5" comparison="Or">
<Conditional IsDead="false" />
<RequiredItem items="oxygensource" type="Contained" />
</StatusEffect>
<StatusEffect type="OnWearing" target="Contained,Character" targetslot="0" OxygenAvailable="-100.0" Oxygen="-5.0" Condition="-5.0">
<Conditional IsDead="false" />
<RequiredItem items="weldingfueltank" type="Contained" />
</StatusEffect>
<StatusEffect type="OnWearing" target="Contained,Character" targetslot="0" targetlimbs="Torso" OxygenAvailable="-100.0" Oxygen="-7.0" Condition="-5.0">
<RequiredItem items="incendiumfueltank" type="Contained" />
<Affliction identifier="burn" amount="3.0" />
</StatusEffect>
<StatusEffect type="OnWearing" target="Contained,Character" SpeedMultiplier="1.2" setvalue="true" comparison="Or">
<Conditional IsDead="false" />
<RequiredItem items="oxygenitetank" type="Contained" />
</StatusEffect>
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
<Item name="Camera Diving Mask" identifier="wificamdivingmask" category="Equipment,Diving" Tags="smallitem,signal,camera,diving,lightdiving" focusonselected="true" offsetonselected="500" maxstacksize="1" cargocontaineridentifier="metalcrate" description="Prevents you from drowning and broadcasts your view to the configured wifi channel. Requires a battery." scale="0.325" impactsoundtag="impact_metal_heavy" isshootable="false">
<PreferredContainer primary="divingcab" secondary="supplycab" />
<Deconstruct time="5">
<Item identifier="divingmask" />
<Item identifier="wificam" />
</Deconstruct>
<Fabricate suitablefabricators="fabricator" requiredtime="10">
<RequiredItem identifier="divingmask" />
<RequiredItem identifier="wificam" />
</Fabricate>
<Sprite name="Camera Diving Mask" texture="%ModDir:3020618603%/Items/WifiCam.png" sourcerect="226,326,69,68" depth="0.6" origin="0.5,0.5" />
<!-- WifiComponent to transmit the signal to another wifi component with the same channel configured -->
<WifiComponent canbeselected="false" MinChatMessageInterval="0.0" range="35000.0" DiscardDuplicateChatMessages="true" linktochat="false" channel="1" drawhudwhenequipped="false" allowingameediting="false" />
<!-- LightComponent that doesn't provide any light. Used to activate/deactivate the camera -->
<LightComponent LightColor="0.0,0.0,0.0,0.0" range="0" alphablend="true" powerconsumption="1" allowingameediting="false" IsOn="false">
<!-- Drain batteries by decreasing their condition by 0.05 each second. ~33 min duration with regular battery cell -->
<StatusEffect type="OnActive" targettype="Contained" targetslot="1" Condition="-0.05" interval="1" disabledeltatime="true">
<RequiredItem items="mobilebattery" type="Contained" />
</StatusEffect>
<!-- Activate the camera by setting linktochat="true" if it receives power from a battery and the LightComponent is on. linktochat="true" is what allows the camera to transmit the view -->
<StatusEffect type="OnActive" target="This" linktochat="true" setvalue="true" comparison="and" interval="0.5">
<Conditional IsOn="true" />
<Conditional voltage="gte 0.5" />
</StatusEffect>
<!-- Deactivate the camera by setting linktochat="false" if the battery doesn't provide power or the LightComponent is off -->
<StatusEffect type="Always" target="This" linktochat="false" setvalue="true" comparison="or" interval="0.5">
<Conditional IsOn="false" />
<Conditional voltage="lt 0.5" />
</StatusEffect>
</LightComponent>
<ItemContainer capacity="1" maxstacksize="1" hideitems="true" containedstateindicatorstyle="battery" autoinject="true">
<SlotIcon slotindex="0" texture="Content/UI/StatusMonitorUI.png" sourcerect="64,448,64,64" origin="0.5,0.5" />
<SlotIcon slotindex="1" texture="Content/UI/StatusMonitorUI.png" sourcerect="128,448,64,64" origin="0.5,0.5" />
<Containable items="oxygensource,weldingtoolfuel" excludeditems="oxygenitetank" />
<Containable items="oxygenitetank">
<StatusEffect type="OnWearing" target="Character" SpeedMultiplier="1.2" setvalue="true" targetslot="0">
<Conditional IsDead="false" />
</StatusEffect>
</Containable>
<SubContainer capacity="1" maxstacksize="1">
<Containable items="mobilebattery">
<StatusEffect type="OnContaining" targettype="This" Voltage="1.0" setvalue="true" />
</Containable>
</SubContainer>
</ItemContainer>
<!-- Tickbox interface to toggle the camera on and off -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="-50,0" anchor="BottomCenter" relativesize="0.07,0.08" />
<TickBox text="ON/OFF">
<StatusEffect type="OnUse" target="This" IsOn="true" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="false" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraBeep.ogg" range="200" loop="false" volume="3" />
</StatusEffect>
<StatusEffect type="OnSecondaryUse" target="This" IsOn="false" duration="1" targetitemcomponent="LightComponent" setvalue="true" comparison="And">
<Conditional IsOn="true" targetitemcomponent="LightComponent" />
<Conditional voltage="gt 0.5" />
<Sound file="%ModDir:3020618603%/Sounds/CameraTurnOff.ogg" range="200" loop="true" volume="3" />
</StatusEffect>
</TickBox>
</CustomInterface>
<!-- Textbox interface to type and set the desired channel to broadcast in -->
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="false">
<GuiFrame style="ItemUI" absoluteoffset="50,0" anchor="BottomCenter" relativesize="0.12,0.08" />
<TextBox text="Set Channel" propertyname="channel" maxtextlength="4" />
</CustomInterface>
<Body width="40" height="35" density="15" />
<Holdable pickkey="Select" slots="Any" attachable="true" canbepicked="true" />
<Wearable limbtype="Head" slots="Head" msg="ItemMsgPickUpSelect" displaycontainedstatus="true">
<sprite name="Camera Diving Mask Wearable" texture="%ModDir:3020618603%/Items/WifiCam.png" limb="Head" inheritlimbdepth="true" inheritscale="true" ignorelimbscale="true" scale="0.7" hidelimb="false" hideotherwearables="false" sourcerect="226,326,69,68" origin="0.4,0.3" hidewearablesoftype="moustache,beard" />
<StatusEffect type="OnWearing" target="Character" HideFace="true" SpeedMultiplier="0.9" setvalue="true" disabledeltatime="true" />
<StatusEffect type="OnWearing" target="Contained,Character" targetslot="0" OxygenAvailable="1000.0" Condition="-0.5" comparison="Or">
<Conditional IsDead="false" />
<RequiredItem items="oxygensource" type="Contained" />
</StatusEffect>
<StatusEffect type="OnWearing" target="Contained,Character" targetslot="0" OxygenAvailable="-100.0" Oxygen="-5.0" Condition="-5.0">
<Conditional IsDead="false" />
<RequiredItem items="weldingfueltank" type="Contained" />
</StatusEffect>
<StatusEffect type="OnWearing" target="Contained,Character" targetslot="0" targetlimbs="Torso" OxygenAvailable="-100.0" Oxygen="-7.0" Condition="-5.0">
<RequiredItem items="incendiumfueltank" type="Contained" />
<Affliction identifier="burn" amount="3.0" />
</StatusEffect>
</Wearable>
<!-- ConnectionPanel which is required to exist inside the item for the WifiComponent to function, but is set to be inaccessable since it's not supposed to be used by the player -->
<ConnectionPanel selectkey="Action" canbeselected="false" allowingameediting="false" msg="ItemMsgRewireScrewdriver" hudpriority="10">
<GuiFrame relativesize="0.2,0.32" minsize="400,350" maxsize="480,420" anchor="Center" style="ConnectionPanel" />
<RequiredItem items="screwdriver" type="Equipped" />
<input name="signal_in" displayname="connection.signalin" />
<output name="signal_out" displayname="connection.signalout" />
<input name="set_channel" displayname="connection.setchannel" />
</ConnectionPanel>
</Item>
</Items>

BIN
Wifi Camera/Sounds/CameraBeep.ogg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Wifi Camera/Sounds/CameraTurnOff.ogg (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<infotexts language="English" nowhitespace="false" translatedname="English">
<entityname.cammonitor>Camera Monitor</entityname.cammonitor>
<entityname.wificam>Wifi Camera</entityname.wificam>
<entityname.wificampiratehelmet>Separatist Camera Helmet</entityname.wificampiratehelmet>
<entityname.wificamballistichelmet1>Ballistic Camera Helmet</entityname.wificamballistichelmet1>
<entityname.wificamballistichelmet2>Gunner's Camera Helmet</entityname.wificamballistichelmet2>
<entityname.wificamballistichelmet3>Riot Camera Helmet</entityname.wificamballistichelmet3>
<entityname.wificamchitinhelmet>Chitin Camera Helmet</entityname.wificamchitinhelmet>
<entityname.wificamironhelmet>Iron Camera Helmet</entityname.wificamironhelmet>
<entityname.wificamclownmask>Clown Camera Mask</entityname.wificamclownmask>
<entityname.wificamclownmaskunique>Mother's Countenance with Camera</entityname.wificamclownmaskunique>
<entityname.wificamclowndivingmask>Clown Camera Diving Mask</entityname.wificamclowndivingmask>
<entityname.wificamdivingmask>Camera Diving Mask</entityname.wificamdivingmask>
<entityname.monitorwiringdiagram>Camera Monitor Wiring Diagram</entityname.monitorwiringdiagram>
<entityname.surveillancecamera>Wifi Surveillance Camera</entityname.surveillancecamera>
<entitydescription.cammonitor>A monitor to watch the wifi camera broadcasts. Needs to be connected to a wifi component.</entitydescription.cammonitor>
<entitydescription.wificam>Broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificam>
<entitydescription.wificampiratehelmet>Protects your head and broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificampiratehelmet>
<entitydescription.wificamballistichelmet1>Protects your head and broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificamballistichelmet1>
<entitydescription.wificamballistichelmet2>Protects your head and broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificamballistichelmet2>
<entitydescription.wificamballistichelmet3>Protects your head and broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificamballistichelmet3>
<entitydescription.wificamchitinhelmet>Protects your head and broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificamchitinhelmet>
<entitydescription.wificamironhelmet>Protects your head and broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificamironhelmet>
<entitydescription.wificamclownmask>Be a clown and broadcast your performance to the configured wifi channel. Requires a battery.</entitydescription.wificamclownmask>
<entitydescription.wificamclownmaskunique>Broadcast the actions of Honkmother to the configured wifi channel. Requires a battery.</entitydescription.wificamclownmaskunique>
<entitydescription.wificamclowndivingmask>Be a clown and broadcast your underwater performance to the configured wifi channel. Requires a battery.</entitydescription.wificamclowndivingmask>
<entitydescription.wificamdivingmask>Prevents you from drowning and broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificamdivingmask>
<entitydescription.monitorwiringdiagram>Displays the intended wiring setup for the camera monitor when equipped.</entitydescription.monitorwiringdiagram>
<entitydescription.surveillancecamera>Broadcasts the view to the configured wifi channel when wired to a power source. Can be attached anywhere on the inside and on fins and beams on the outside of your submarine.</entitydescription.surveillancecamera>
<!-- UNUSED ASSETS -->
<entityname.wificamheadset>Wifi Camera-Headset</entityname.wificamheadset>
<entityname.wificaminjectorheadset>Wifi Auto-Injector Camera-Headset</entityname.wificaminjectorheadset>
<entitydescription.wificamheadset>A heaset with a built-on camera. Broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificamheadset>
<entitydescription.wificaminjectorheadset>A heaset with a built-on camera. Broadcasts your view to the configured wifi channel. Requires a battery.</entitydescription.wificaminjectorheadset>
</infotexts>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Translated by Kato Yuki (Plasma) -->
<infotexts language="Russian" nowhitespace="false" translatedname="Русский">
<entityname.cammonitor>Монитор для Видеонаблюдения</entityname.cammonitor>
<entityname.wificam>Wi-Fi камера</entityname.wificam>
<entityname.wificampiratehelmet>Шлем сепаратиста с камерой</entityname.wificampiratehelmet>
<entityname.wificamballistichelmet1>Баллистический шлем с камерой</entityname.wificamballistichelmet1>
<entityname.wificamballistichelmet2>Шлем стрелка с камерой</entityname.wificamballistichelmet2>
<entityname.wificamballistichelmet3>Полицейский шлем с камерой</entityname.wificamballistichelmet3>
<entityname.wificamchitinhelmet>Хитиновый шлем с камерой</entityname.wificamchitinhelmet>
<entityname.wificamironhelmet>Железный шлем с камерой</entityname.wificamironhelmet>
<entityname.wificamclownmask>Маска клоуна с камерой</entityname.wificamclownmask>
<entityname.wificamclownmaskunique>Материнский взгляд, теперь через Wi-Fi!</entityname.wificamclownmaskunique>
<entityname.wificamclowndivingmask>Подводная маска клоуна с камерой</entityname.wificamclowndivingmask>
<entityname.wificamdivingmask>Подводная маска с камерой</entityname.wificamdivingmask>
<entitydescription.cammonitor>Монитор видеонаблюдения для просмотра изображений со всех Wi-Fi камер. требуется подключение к Wi-Fi компоненту</entitydescription.cammonitor>
<entitydescription.wificam>Wi-Fi камера. Оденьте её или повесьте на стену, и вы сможете дистанционно просматривать изображение с камер через монитор видеонаблюдения! Для работы требуеться аккумулятор.</entitydescription.wificam>
<entitydescription.wificampiratehelmet>"Пусть всё смотрят как Коалиция сгинет!"</entitydescription.wificampiratehelmet>
<entitydescription.wificamballistichelmet1>Камера тоже пуленепробиваймая!</entitydescription.wificamballistichelmet1>
<entitydescription.wificamballistichelmet2>Увы, но перескоп через камеру не видно.</entitydescription.wificamballistichelmet2>
<entitydescription.wificamballistichelmet3>"Давай, попробуй нарушить закон, пусть всё сморят!"</entitydescription.wificamballistichelmet3>
<entitydescription.wificamchitinhelmet>Сила технологий и природы</entitydescription.wificamchitinhelmet>
<entitydescription.wificamironhelmet>"Тише, мы проводим реконструкцию боя Руди и раптора."</entitydescription.wificamironhelmet>
<entitydescription.wificamclownmask>Материнский взгляд у вас над ухом.</entitydescription.wificamclownmask>
<entitydescription.wificamclownmaskunique>Маме тоже нужен присмотр.</entitydescription.wificamclownmaskunique>
<entitydescription.wificamclowndivingmask>Материнский взгляд даже под водой</entitydescription.wificamclowndivingmask>
<entitydescription.wificamdivingmask>Полезай в балласт, а мы посмотрим.</entitydescription.wificamdivingmask>
<!-- UNUSED ASSETS -->
<entityname.wificamheadset>Наушники с камерой</entityname.wificamheadset>
<entityname.wificaminjectorheadset>Гарнитура с инжектором и камерой</entityname.wificaminjectorheadset>
<entitydescription.wificamheadset>Для связи и наблюдения. Два по цене одного!</entitydescription.wificamheadset>
<entitydescription.wificaminjectorheadset>Для связи, наблюдения, и лечения. Три по цене одного!</entitydescription.wificaminjectorheadset>
</infotexts>

BIN
Wifi Camera/UI/CamOverlay.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Wifi Camera/UI/CameraMonitorDiagram.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Wifi Camera/UI/RecOverlay.png (Stored with Git LFS) Normal file

Binary file not shown.

9
Wifi Camera/filelist.xml Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<contentpackage name="Wifi Camera" modversion="1.0.10" corepackage="False" steamworkshopid="3020618603" gameversion="1.6.17.0" expectedhash="4CF948BD22563AB4D8D9E1665D55744F">
<Afflictions file="%ModDir%/Afflictions.xml" />
<Item file="%ModDir%/Items/wificam.xml" />
<ItemAssembly file="%ModDir%/Camera Monitor.xml" />
<Text file="%ModDir%/Texts/English.xml" />
<Text file="%ModDir%/Texts/Russian.xml" />
<UIStyle file="%ModDir%/style.xml" />
</contentpackage>

6
Wifi Camera/style.xml Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<style>
<MonitorWiringDiagram color="255,255,255,242" textcolor="0,0,0,255">
<Sprite name="MonitorWiringDiagram" texture="%ModDir%/UI/CameraMonitorDiagram.png" size="0.0, 0.0" sourcerect="0,0,1256,772" slice="0,0,1256,772" origin="0.5,0.5" compress="false" />
</MonitorWiringDiagram>
</style>