mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-10 01:12:18 +00:00
* Base work for the unathi robot subspecies. * Adds metabolism species, kidney vars, and the robot unathi organs. * Moves some action buttons to organs, pretty much a bay port right now. Todo: the unathi and alien stuff should also go here. * First autakh implant power. * Fixes the organs action button this time. * Finishes more implants, and interactions with flashs and vaurca. * Prepare for great changes. * Drops the real bomb, boss. * He who fights with monsters. * Far more work into augments and limb removing powers. * Limb verbs should be good now. * A LOT of work into the assited organ, allowing it to bleed and etc, as well adding a new chem that will stop bleeding in their case. * Probably the last work on implants. * Some extra touches. * Some tweaks to the species. * More fixes and adds kyre's sprites. * More runtime fixes. * Fixes the species name too. * Fixes travis. * Updates this file too to work with the new tools procs. * Adds changelog * Fixed changelog. * Unathi hair and lore description. * Some tweaks to this too. * Locks away them for now, they will be released after we got all the events and etc done. * Changes this chemical. * Fixes an airlock runtime. * Adds the non scan flag to the autakh, mostly due to some bizzare interactions with changelings and cloning. * Organs removal changes; can't take out the organ if it is too damage. * Restricts them back again. * Robotic organs now have the proper icons and names. * Adds sprites for their organs and some extra tweaks. * Fixes this missing icon. * emp should also now hurt assited organs. * Tweaks more organ related things. * Fixes the head not being properly set as well. * Fixes their flags. * fixes the flag for real this time. * Poze's review. * Changes the au'takh organ buttons to don't be animated. * Helps with adminbus or something. * Fowl's requested changes. * Fixes a typo. * Robotic limb's brute and burn mods are now controlled by the limb model. * Fowl's changes once more. * Stops some spam. * More grammar. * No eal. * Skull's review.
192 lines
5.5 KiB
Plaintext
192 lines
5.5 KiB
Plaintext
/obj/item/weapon/cloaking_device
|
|
name = "cloaking device"
|
|
desc = "Use this to become invisible to the human eye. Contains a removable power cell behind a screwed compartment"
|
|
description_info = "The default power cell will last for five minutes of continuous usage. It can be removed and recharged or replaced with a better one using a screwdriver.\
|
|
</br>This will not make you inaudible, your footsteps can still be heard, and it will make a very distinctive sound when uncloaking.\
|
|
</br>Any items you're holding in your hands can still be seen."
|
|
description_antag = "Being cloaked makes you impossible to click on, which offers a major advantage in combat. People can only hit you by blind-firing in your direction."
|
|
|
|
icon = 'icons/obj/device.dmi'
|
|
icon_state = "shield0"
|
|
var/active = 0.0
|
|
flags = CONDUCT
|
|
item_state = "electronic"
|
|
throwforce = 10.0
|
|
throw_speed = 2
|
|
throw_range = 10
|
|
w_class = 2.0
|
|
origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4)
|
|
|
|
var/power_usage = 35000//A high powered cell allows 5 minutes of continuous usage
|
|
//Note it can be toggled on and off easily. You can make it last an hour if you only use it when
|
|
//people are nearby to see. Carry spare/better cells for extended cloaking.
|
|
var/obj/item/weapon/cell/cell = null
|
|
var/mob/living/owner = null
|
|
var/datum/modifier/cloaking_device/modifier = null
|
|
|
|
/obj/item/weapon/cloaking_device/New()
|
|
..()
|
|
cloaking_devices += src
|
|
cell = new /obj/item/weapon/cell/high(src)
|
|
|
|
/obj/item/weapon/cloaking_device/Destroy()
|
|
. = ..()
|
|
cloaking_devices -= src
|
|
|
|
|
|
/obj/item/weapon/cloaking_device/equipped(var/mob/user, var/slot)
|
|
..()
|
|
//Picked up or switched hands or worn
|
|
register_owner(user)
|
|
|
|
|
|
//Handles dropped or thrown cloakers
|
|
/obj/item/weapon/cloaking_device/dropped(var/mob/user)
|
|
..()
|
|
var/mob/M = get_holding_mob()
|
|
if(!M)
|
|
register_owner(null)
|
|
//Either placed somewhere or given to someone.
|
|
//M will be null if we were dropped on the floor, thats fine, the register function will handle it
|
|
//If M contains someone other than the owner, then this device was just passed to someone
|
|
|
|
//If M contains the owner then the item hasn't actually been dropped, its just the quirk mentioned above
|
|
|
|
/obj/item/weapon/cloaking_device/attack_self(mob/user as mob)
|
|
if (istype(loc, /mob) && loc == user)//safety check incase of shenanigans
|
|
register_owner(user)
|
|
if (active)
|
|
deactivate()
|
|
else
|
|
activate()
|
|
src.add_fingerprint(user)
|
|
return
|
|
|
|
/obj/item/weapon/cloaking_device/proc/activate()
|
|
if (active)
|
|
return
|
|
|
|
if (!cell || !cell.checked_use(power_usage*5*CELLRATE))//Costs a small burst to enter cloak
|
|
if (owner)
|
|
owner << "The [src] clicks uselessly, it has no power left."
|
|
playsound(get_turf(src), 'sound/weapons/empty.ogg', 25, 1)
|
|
return
|
|
|
|
START_PROCESSING(SSprocessing, src)
|
|
active = 1
|
|
src.icon_state = "shield1"
|
|
stop_modifier()
|
|
playsound(src, 'sound/effects/phasein.ogg', 10, 1, -2)//Cloaking is quieter than uncloaking
|
|
if (owner)
|
|
owner << "<span class='notice'>\The [src] is now active.</span>"
|
|
start_modifier()
|
|
|
|
/obj/item/weapon/cloaking_device/proc/deactivate()
|
|
if (!active)
|
|
return
|
|
active = 0
|
|
src.icon_state = "shield0"
|
|
if (owner)
|
|
owner << "<span class='notice'>\The [src] is now inactive.</span>"
|
|
|
|
playsound(src, 'sound/effects/phasein.ogg', 50, 1)
|
|
stop_modifier()
|
|
STOP_PROCESSING(SSprocessing, src)
|
|
|
|
/obj/item/weapon/cloaking_device/emp_act(severity)
|
|
deactivate()
|
|
if (cell)
|
|
cell.emp_act(severity)
|
|
..()
|
|
|
|
|
|
/obj/item/weapon/cloaking_device/proc/register_owner(var/mob/user)
|
|
if (!owner || owner != user)
|
|
stop_modifier()
|
|
owner = user
|
|
|
|
if (!modifier)
|
|
start_modifier()
|
|
|
|
|
|
/obj/item/weapon/cloaking_device/proc/start_modifier()
|
|
if (!owner)
|
|
owner = get_holding_mob()
|
|
|
|
if (owner)
|
|
modifier = owner.add_modifier(/datum/modifier/cloaking_device, MODIFIER_ITEM, src, override = MODIFIER_OVERRIDE_NEIGHBOR, _check_interval = 30)
|
|
|
|
/obj/item/weapon/cloaking_device/proc/stop_modifier()
|
|
if (modifier)
|
|
modifier.stop(1)
|
|
modifier = null
|
|
|
|
|
|
/obj/item/weapon/cloaking_device/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
if(istype(W, /obj/item/weapon/cell))
|
|
if(!cell)
|
|
user.drop_from_inventory(W,src)
|
|
cell = W
|
|
user << "<span class='notice'>You install a cell in [src].</span>"
|
|
update_icon()
|
|
else
|
|
user << "<span class='notice'>[src] already has a cell.</span>"
|
|
|
|
else if(W.isscrewdriver())
|
|
if(cell)
|
|
cell.update_icon()
|
|
cell.forceMove(get_turf(src.loc))
|
|
cell = null
|
|
user << "<span class='notice'>You remove the cell from the [src].</span>"
|
|
deactivate()
|
|
return
|
|
..()
|
|
|
|
|
|
/obj/item/weapon/cloaking_device/examine(mob/user)
|
|
..()
|
|
if (!cell)
|
|
user << "It needs a power cell to function."
|
|
else
|
|
user << "It has [cell.percent()]% power remaining"
|
|
|
|
/obj/item/weapon/cloaking_device/process()
|
|
if (!cell || !cell.checked_use(power_usage*CELLRATE))
|
|
deactivate()
|
|
return
|
|
else if (!modifier)
|
|
owner = null
|
|
start_modifier()
|
|
|
|
/*
|
|
Modifier
|
|
*/
|
|
/datum/modifier/cloaking_device/activate()
|
|
..()
|
|
var/mob/living/L = target
|
|
L.cloaked = 1
|
|
L.mouse_opacity = 0
|
|
L.update_icons()
|
|
|
|
|
|
/datum/modifier/cloaking_device/deactivate()
|
|
..()
|
|
for (var/a in cloaking_devices)//Check for any other cloaks
|
|
if (a != source)
|
|
var/obj/item/weapon/cloaking_device/CD = a
|
|
if (CD.get_holding_mob() == target)
|
|
if (CD.active)//If target is holding another active cloak then we wont remove their stealth
|
|
return
|
|
var/mob/living/L = target
|
|
L.cloaked = 0
|
|
L.mouse_opacity = 1
|
|
L.update_icons()
|
|
|
|
|
|
/datum/modifier/cloaking_device/check_validity()
|
|
.=..()
|
|
if (. == 1)
|
|
var/obj/item/weapon/cloaking_device/C = source
|
|
if (!C.active)
|
|
return validity_fail("Cloak is inactive!")
|