mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Action buttons will now only update when needed instead of every Life().
The action buttons now update their icon instantly. Fixes versions of pickup(),equipped() and dropped not calling the parent. Fixes drone not being able to remove a defib from their storage. You can now cycle the mime mask by clicking it in your hand. The action buttons for hardsuit and hooded suits now only appears when you're wearing the suit. Created two mob helper procs getBeltSlot() and getBackSlot(). Created /datum/species/proc/on_species_loss() to handle stuff when our race change, currently only used by jelly and slime race to remove their exotic blood from our reagents and to remove slime people's action buttons.
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
#define AB_CHECK_RESTRAINED 1
|
||||
#define AB_CHECK_STUNNED 2
|
||||
#define AB_CHECK_LYING 4
|
||||
#define AB_CHECK_ALIVE 8
|
||||
#define AB_CHECK_INSIDE 16
|
||||
#define AB_CHECK_CONSCIOUS 8
|
||||
|
||||
|
||||
/datum/action
|
||||
@@ -31,6 +30,13 @@
|
||||
Remove(owner)
|
||||
owner = T
|
||||
T.actions += src
|
||||
|
||||
if(!button)
|
||||
button = new
|
||||
button.linked_action = src
|
||||
button.name = UpdateName()
|
||||
if(T.client)
|
||||
T.client.screen += button
|
||||
T.update_action_buttons()
|
||||
|
||||
/datum/action/proc/Remove(mob/living/T)
|
||||
@@ -44,37 +50,28 @@
|
||||
owner = null
|
||||
|
||||
/datum/action/proc/Trigger()
|
||||
if(!Checks())
|
||||
if(!IsAvailable())
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/action/proc/Process()
|
||||
return
|
||||
|
||||
/datum/action/proc/CheckRemoval(mob/living/user) // 1 if action is no longer valid for this mob and should be removed
|
||||
return 0
|
||||
|
||||
/datum/action/proc/IsAvailable()
|
||||
return Checks()
|
||||
|
||||
/datum/action/proc/Checks()// returns 1 if all checks pass
|
||||
if(!owner)
|
||||
return 0
|
||||
if(check_flags & AB_CHECK_RESTRAINED)
|
||||
if(owner.restrained())
|
||||
return 0
|
||||
if(check_flags & AB_CHECK_STUNNED)
|
||||
if(owner.stunned)
|
||||
if(owner.stunned || owner.weakened)
|
||||
return 0
|
||||
if(check_flags & AB_CHECK_LYING)
|
||||
if(owner.lying)
|
||||
return 0
|
||||
if(check_flags & AB_CHECK_ALIVE)
|
||||
if(check_flags & AB_CHECK_CONSCIOUS)
|
||||
if(owner.stat)
|
||||
return 0
|
||||
if(check_flags & AB_CHECK_INSIDE)
|
||||
if(!(target in owner) && !(target.action_button_internal))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/action/proc/UpdateName()
|
||||
@@ -90,8 +87,8 @@
|
||||
current_button.overlays += img
|
||||
|
||||
/obj/screen/movable/action_button
|
||||
var/datum/action/owner
|
||||
screen_loc = "WEST,NORTH"
|
||||
var/datum/action/linked_action
|
||||
screen_loc = null
|
||||
|
||||
/obj/screen/movable/action_button/Click(location,control,params)
|
||||
var/list/modifiers = params2list(params)
|
||||
@@ -100,18 +97,18 @@
|
||||
return 1
|
||||
if(usr.next_move >= world.time) // Is this needed ?
|
||||
return
|
||||
owner.Trigger()
|
||||
linked_action.Trigger()
|
||||
return 1
|
||||
|
||||
/obj/screen/movable/action_button/proc/UpdateIcon()
|
||||
if(!owner)
|
||||
if(!linked_action)
|
||||
return
|
||||
icon = owner.button_icon
|
||||
icon_state = owner.background_icon_state
|
||||
icon = linked_action.button_icon
|
||||
icon_state = linked_action.background_icon_state
|
||||
|
||||
owner.ApplyIcon(src)
|
||||
linked_action.ApplyIcon(src)
|
||||
|
||||
if(!owner.IsAvailable())
|
||||
if(!linked_action.IsAvailable())
|
||||
color = rgb(128,0,0,128)
|
||||
else
|
||||
color = rgb(255,255,255,255)
|
||||
@@ -163,7 +160,11 @@
|
||||
|
||||
|
||||
//This is the proc used to update all the action buttons. Properly defined in /mob/living/
|
||||
/mob/proc/update_action_buttons()
|
||||
/mob/proc/update_action_buttons(reload_screen)
|
||||
return
|
||||
|
||||
//used to update the buttons icon.
|
||||
/mob/proc/update_action_buttons_icon()
|
||||
return
|
||||
|
||||
#define AB_MAX_COLUMNS 10
|
||||
@@ -191,7 +192,7 @@
|
||||
|
||||
//Presets for item actions
|
||||
/datum/action/item_action
|
||||
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_ALIVE|AB_CHECK_INSIDE
|
||||
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS
|
||||
|
||||
/datum/action/item_action/Trigger()
|
||||
if(!..())
|
||||
@@ -201,9 +202,6 @@
|
||||
item.ui_action_click()
|
||||
return 1
|
||||
|
||||
/datum/action/item_action/CheckRemoval(mob/living/user)
|
||||
return !(target in user)
|
||||
|
||||
/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button)
|
||||
current_button.overlays.Cut()
|
||||
if(target)
|
||||
@@ -214,17 +212,10 @@
|
||||
I.layer = old
|
||||
|
||||
/datum/action/item_action/hands_free
|
||||
check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
|
||||
/datum/action/item_action/organ_action
|
||||
check_flags = AB_CHECK_ALIVE
|
||||
|
||||
/datum/action/item_action/organ_action/CheckRemoval(mob/living/carbon/user)
|
||||
if(!iscarbon(user))
|
||||
return 1
|
||||
if(target in user.internal_organs)
|
||||
return 0
|
||||
return 1
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
|
||||
/datum/action/item_action/organ_action/IsAvailable()
|
||||
var/obj/item/organ/internal/I = target
|
||||
@@ -246,8 +237,7 @@
|
||||
return 1
|
||||
|
||||
/datum/action/spell_action/UpdateName()
|
||||
var/obj/effect/proc_holder/spell/spell = target
|
||||
return spell.name
|
||||
return target.name
|
||||
|
||||
/datum/action/spell_action/IsAvailable()
|
||||
if(!target)
|
||||
@@ -261,12 +251,6 @@
|
||||
return spell.can_cast(owner)
|
||||
return 1
|
||||
|
||||
/datum/action/spell_action/CheckRemoval()
|
||||
if(owner.mind)
|
||||
if(target in owner.mind.spell_list)
|
||||
return 0
|
||||
return !(target in owner.mob_spell_list)
|
||||
|
||||
//Preset for general and toggled actions
|
||||
/datum/action/innate
|
||||
check_flags = 0
|
||||
@@ -304,7 +288,7 @@
|
||||
/datum/action/innate/scan_mode
|
||||
name = "Toggle Research Scanner"
|
||||
button_icon_state = "scan_mode"
|
||||
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_ALIVE
|
||||
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_CONSCIOUS
|
||||
var/devices = 0 //How may enabled scanners the mob has
|
||||
|
||||
/datum/action/innate/scan_mode/Activate()
|
||||
@@ -320,11 +304,6 @@
|
||||
/datum/action/innate/scan_mode/Grant(mob/living/T)
|
||||
..(T)
|
||||
|
||||
/datum/action/innate/scan_mode/CheckRemoval(mob/living/user)
|
||||
if(devices)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/action/innate/scan_mode/Remove(mob/living/T)
|
||||
owner.research_scanner = 0
|
||||
active = 0
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
|
||||
/datum/hud/New(mob/owner)
|
||||
mymob = owner
|
||||
hide_actions_toggle = new
|
||||
hide_actions_toggle.InitialiseIcon(mymob)
|
||||
|
||||
/datum/hud/Destroy()
|
||||
if(mymob.hud_used == src)
|
||||
@@ -135,6 +137,8 @@
|
||||
if(infodisplay.len)
|
||||
mymob.client.screen += infodisplay
|
||||
|
||||
mymob.client.screen += hide_actions_toggle
|
||||
|
||||
if(action_intent)
|
||||
action_intent.screen_loc = initial(action_intent.screen_loc) //Restore intent selection to the original position
|
||||
|
||||
@@ -171,7 +175,7 @@
|
||||
|
||||
hud_version = display_hud_version
|
||||
persistant_inventory_update()
|
||||
mymob.update_action_buttons()
|
||||
mymob.update_action_buttons(1)
|
||||
reorganize_alerts()
|
||||
mymob.reload_fullscreen()
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
var/pix_Y = text2num(screen_loc_Y[2]) - 16
|
||||
screen_loc = "[screen_loc_X[1]]:[pix_X],[screen_loc_Y[1]]:[pix_Y]"
|
||||
|
||||
moved = TRUE
|
||||
moved = screen_loc
|
||||
|
||||
|
||||
//Debug procs
|
||||
|
||||
@@ -174,9 +174,7 @@
|
||||
|
||||
/mob/living/carbon/set_species(datum/species/mrace = null, icon_update = 1)
|
||||
if(mrace && has_dna())
|
||||
if(dna.species.exotic_blood)
|
||||
var/datum/reagent/EB = dna.species.exotic_blood
|
||||
reagents.del_reagent(initial(EB.id))
|
||||
dna.species.on_species_loss(src)
|
||||
dna.species = new mrace()
|
||||
|
||||
/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = 1)
|
||||
|
||||
@@ -248,14 +248,6 @@
|
||||
/datum/action/innate/blob
|
||||
background_icon_state = "bg_alien"
|
||||
|
||||
/datum/action/innate/blob/CheckRemoval()
|
||||
if(ticker.mode.name != "blob" || !ishuman(owner))
|
||||
return 1
|
||||
var/datum/game_mode/blob/B = ticker.mode
|
||||
if(!owner.mind || !(owner.mind in B.infected_crew))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/action/innate/blob/earlyhelp
|
||||
name = "Blob Help"
|
||||
button_icon_state = "blob"
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/cultblade/pickup(mob/living/user)
|
||||
..()
|
||||
if(!iscultist(user))
|
||||
user << "<span class='cultlarge'>\"I wouldn't advise that.\"</span>"
|
||||
user << "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/datum/action/innate/godspeak
|
||||
name = "Godspeak"
|
||||
button_icon_state = "godspeak"
|
||||
check_flags = AB_CHECK_ALIVE
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
var/mob/camera/god/god = null
|
||||
|
||||
/datum/action/innate/godspeak/IsAvailable()
|
||||
@@ -19,3 +19,7 @@
|
||||
return
|
||||
god << "<span class='notice'><B>[owner]:</B> [msg]</span>"
|
||||
owner << "You say: [msg]"
|
||||
|
||||
/datum/action/innate/godspeak/Destroy()
|
||||
god = null
|
||||
return ..()
|
||||
@@ -22,7 +22,7 @@
|
||||
var/list/conduits = list()
|
||||
var/prophets_sacrificed_in_name = 0
|
||||
var/image/ghostimage = null //For observer with darkness off visiblity
|
||||
|
||||
var/list/prophet_hats = list()
|
||||
|
||||
/mob/camera/god/New()
|
||||
..()
|
||||
@@ -51,6 +51,10 @@
|
||||
for(var/datum/mind/F in followers)
|
||||
if(F.current)
|
||||
F.current << "<span class='danger'>Your god is DEAD!</span>"
|
||||
for(var/X in prophet_hats)
|
||||
var/obj/item/clothing/head/helmet/plate/crusader/prophet/P = X
|
||||
if(P.speak2god && P.speak2god.god == src)
|
||||
qdel(P.speak2god)
|
||||
ghost_darkness_images -= ghostimage
|
||||
updateallghostimages()
|
||||
return ..()
|
||||
|
||||
@@ -147,7 +147,12 @@
|
||||
else
|
||||
speak2god = new()
|
||||
speak2god.god = G
|
||||
G.prophet_hats += src
|
||||
|
||||
/obj/item/clothing/head/helmet/plate/crusader/prophet/Destroy()
|
||||
if(speak2god)
|
||||
qdel(speak2god)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/helmet/plate/crusader/prophet/equipped(mob/user, slot)
|
||||
if(slot == slot_head)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
origin_tech = "materials=5;biotech=4;powerstorage=5"
|
||||
armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15)
|
||||
action_button_name = "Activate"
|
||||
action_button_is_hands_free = 1
|
||||
action_button_type = /datum/action/item_action/hands_free
|
||||
var/mode = VEST_STEALTH
|
||||
var/stealth_active = 0
|
||||
var/combat_cooldown = 10
|
||||
@@ -29,20 +29,19 @@
|
||||
DeactivateStealth()
|
||||
armor = combat_armor
|
||||
icon_state = "vest_combat"
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_wear_suit()
|
||||
return
|
||||
if(VEST_COMBAT)// TO STEALTH
|
||||
mode = VEST_STEALTH
|
||||
armor = stealth_armor
|
||||
icon_state = "vest_stealth"
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_wear_suit()
|
||||
return
|
||||
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_wear_suit()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user)
|
||||
if(slot == slot_wear_suit) //we only give the mob the ability to activate the vest if he's actually wearing it.
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry)
|
||||
disguise = entry
|
||||
|
||||
@@ -169,9 +169,6 @@
|
||||
return
|
||||
target.attack_animal(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/morph/update_action_buttons() //So all eaten objects are not counted every life
|
||||
return
|
||||
|
||||
//Spawn Event
|
||||
|
||||
/datum/round_event_control/morph
|
||||
|
||||
@@ -79,7 +79,8 @@
|
||||
name = "[initial(name)] ([cast_amount]E)"
|
||||
user.reveal(reveal)
|
||||
user.stun(stun)
|
||||
user.update_action_buttons()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
return 1
|
||||
|
||||
//Overload Light: Breaks a light that's online and sends out lightning bolts to all nearby people.
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
flash_protect = -1
|
||||
unacidable = 1
|
||||
action_button_name = "Shift Nerves"
|
||||
action_button_is_hands_free = 1
|
||||
action_button_type = /datum/action/item_action/hands_free
|
||||
var/max_darkness_view = 8
|
||||
var/min_darkness_view = 0
|
||||
flags = ABSTRACT | NODROP
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
usability = 1
|
||||
|
||||
/obj/item/device/soulstone/pickup(mob/living/user)
|
||||
..()
|
||||
if(!iscultist(user) && !iswizard(user) && !usability)
|
||||
user << "<span class='danger'>An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.</span>"
|
||||
user.Dizzy(120)
|
||||
|
||||
@@ -1036,9 +1036,12 @@ var/year_integer = text2num(year) // = 2013???
|
||||
|
||||
|
||||
/datum/action/innate/mecha
|
||||
check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_ALIVE
|
||||
check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS
|
||||
var/obj/mecha/chassis
|
||||
|
||||
/datum/action/innate/mecha/Destroy()
|
||||
chassis = null
|
||||
return ..()
|
||||
|
||||
/datum/action/innate/mecha/mech_eject
|
||||
name = "Eject From Mech"
|
||||
|
||||
@@ -35,8 +35,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
|
||||
//If this is set, The item will make an action button on the player's HUD when picked up.
|
||||
var/action_button_name //It is also the text which gets displayed on the action button. If not set it defaults to 'Use [name]'. If it's not set, there'll be no button.
|
||||
var/action_button_is_hands_free = 0 //If 1, bypass the restrained, lying, and stunned checks action buttons normally test for
|
||||
var/action_button_internal = 0 //If 1, bypass the inside check action buttons test for
|
||||
var/action_button_type = null //if we want a special type of item action, not the standard one.
|
||||
var/datum/action/item_action/action = null
|
||||
|
||||
//Since any item can now be a piece of clothing, this has to be put here so all items share it.
|
||||
@@ -363,12 +362,14 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
return
|
||||
|
||||
/obj/item/proc/dropped(mob/user)
|
||||
return
|
||||
if(action)
|
||||
action.Remove(user)
|
||||
|
||||
// called just as an item is picked up (loc is not yet changed)
|
||||
/obj/item/proc/pickup(mob/user)
|
||||
return
|
||||
|
||||
|
||||
// called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
|
||||
/obj/item/proc/on_exit_storage(obj/item/weapon/storage/S)
|
||||
return
|
||||
@@ -387,7 +388,20 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
// for items that can be placed in multiple slots
|
||||
// note this isn't called during the initial dressing of a player
|
||||
/obj/item/proc/equipped(mob/user, slot)
|
||||
return
|
||||
if(action_button_name)
|
||||
if(!action)
|
||||
if(action_button_type)
|
||||
action = new action_button_type
|
||||
else
|
||||
action = new/datum/action/item_action
|
||||
action.name = action_button_name
|
||||
action.target = src
|
||||
if(item_action_slot_check(slot, user)) //some items only give their action button when in a specific slot.
|
||||
action.Grant(user)
|
||||
|
||||
//sometimes we only want to grant the item's action if it's equipped in a specific slot.
|
||||
obj/item/proc/item_action_slot_check(slot, mob/user)
|
||||
return 1
|
||||
|
||||
//the mob M is attempting to equip this item into the slot passed through as 'slot'. Return 1 if it can do this and 0 if it can't.
|
||||
//If you are making custom procs but would like to retain partial or complete functionality of this one, include a 'return ..()' to where you want this to happen.
|
||||
|
||||
@@ -91,12 +91,14 @@
|
||||
|
||||
|
||||
/obj/item/candle/pickup(mob/user)
|
||||
..()
|
||||
if(lit)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(CANDLE_LUMINOSITY)
|
||||
|
||||
|
||||
/obj/item/candle/dropped(mob/user)
|
||||
..()
|
||||
if(lit)
|
||||
user.AddLuminosity(-CANDLE_LUMINOSITY)
|
||||
SetLuminosity(CANDLE_LUMINOSITY)
|
||||
|
||||
@@ -210,11 +210,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
* The Actual PDA
|
||||
*/
|
||||
/obj/item/device/pda/pickup(mob/user)
|
||||
..()
|
||||
if(fon)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(f_lum)
|
||||
|
||||
/obj/item/device/pda/dropped(mob/user)
|
||||
..()
|
||||
if(fon)
|
||||
user.AddLuminosity(-f_lum)
|
||||
SetLuminosity(f_lum)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
saved_appearance = initial(butt.appearance)
|
||||
|
||||
/obj/item/device/chameleon/dropped()
|
||||
..()
|
||||
disrupt()
|
||||
|
||||
/obj/item/device/chameleon/equipped()
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
return 0
|
||||
on = !on
|
||||
update_brightness(user)
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -84,12 +86,14 @@
|
||||
|
||||
|
||||
/obj/item/device/flashlight/pickup(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
user.AddLuminosity(brightness_on)
|
||||
SetLuminosity(0)
|
||||
|
||||
|
||||
/obj/item/device/flashlight/dropped(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
user.AddLuminosity(-brightness_on)
|
||||
SetLuminosity(brightness_on)
|
||||
|
||||
@@ -168,6 +168,10 @@ effective or pretty fucking useless.
|
||||
Deactivate()
|
||||
return
|
||||
|
||||
/obj/item/device/shadowcloak/item_action_slot_check(slot, mob/user)
|
||||
if(slot == slot_belt)
|
||||
return 1
|
||||
|
||||
/obj/item/device/shadowcloak/proc/Activate(mob/living/carbon/human/user)
|
||||
if(!user)
|
||||
return
|
||||
@@ -186,6 +190,7 @@ effective or pretty fucking useless.
|
||||
user = null
|
||||
|
||||
/obj/item/device/shadowcloak/dropped(mob/user)
|
||||
..()
|
||||
if(user && user.get_item_by_slot(slot_belt) != src)
|
||||
Deactivate()
|
||||
|
||||
|
||||
@@ -236,7 +236,11 @@
|
||||
cyborg = R
|
||||
icon_state = "selfrepair_off"
|
||||
action_button_name = "Toggle Self-Repair"
|
||||
|
||||
if(!action)
|
||||
action = new
|
||||
action.name = action_button_name
|
||||
action.target = src
|
||||
action.Grant(R)
|
||||
return 1
|
||||
|
||||
/obj/item/borg/upgrade/selfrepair/ui_action_click()
|
||||
@@ -252,6 +256,8 @@
|
||||
/obj/item/borg/upgrade/selfrepair/update_icon()
|
||||
if(cyborg)
|
||||
icon_state = "selfrepair_[on ? "on" : "off"]"
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
else
|
||||
icon_state = "cyborg_upgrade5"
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
erased_minds += M
|
||||
|
||||
/obj/item/weapon/chrono_eraser/dropped()
|
||||
..()
|
||||
if(PA)
|
||||
qdel(PA)
|
||||
|
||||
@@ -33,7 +34,9 @@
|
||||
PA = new(src)
|
||||
user.put_in_hands(PA)
|
||||
|
||||
|
||||
/obj/item/weapon/chrono_eraser/item_action_slot_check(slot, mob/user)
|
||||
if(slot == slot_back)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun
|
||||
name = "T.E.D. Projection Apparatus"
|
||||
@@ -59,6 +62,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/dropped()
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/update_icon()
|
||||
|
||||
@@ -541,6 +541,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
return
|
||||
|
||||
/obj/item/weapon/lighter/pickup(mob/user)
|
||||
..()
|
||||
if(lit)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(1)
|
||||
@@ -548,6 +549,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
|
||||
|
||||
/obj/item/weapon/lighter/dropped(mob/user)
|
||||
..()
|
||||
if(lit)
|
||||
if(user)
|
||||
user.AddLuminosity(-1)
|
||||
|
||||
@@ -70,35 +70,40 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/ui_action_click()
|
||||
if(usr.get_item_by_slot(slot_back) == src)
|
||||
toggle_paddles()
|
||||
else
|
||||
usr << "<span class='warning'>Put the defibrillator on your back first!</span>"
|
||||
return
|
||||
toggle_paddles()
|
||||
|
||||
/obj/item/weapon/defibrillator/attack_hand(mob/user)
|
||||
if(src.loc == user)
|
||||
ui_action_click()
|
||||
if(loc == user)
|
||||
if(slot_flags == SLOT_BACK)
|
||||
if(user.get_item_by_slot(slot_back) == src)
|
||||
ui_action_click()
|
||||
else
|
||||
user << "<span class='warning'>Put the defibrillator on your back first!</span>"
|
||||
|
||||
else if(slot_flags == SLOT_BELT)
|
||||
if(user.get_item_by_slot(slot_belt) == src)
|
||||
ui_action_click()
|
||||
else
|
||||
user << "<span class='warning'>Strap the defibrillator's belt on first!</span>"
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/defibrillator/MouseDrop(obj/over_object)
|
||||
if(ishuman(src.loc))
|
||||
var/mob/living/carbon/human/H = src.loc
|
||||
if(ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
if(H.r_hand)
|
||||
if(M.r_hand)
|
||||
return
|
||||
if(!H.unEquip(src))
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
H.put_in_r_hand(src)
|
||||
M.put_in_r_hand(src)
|
||||
if("l_hand")
|
||||
if(H.l_hand)
|
||||
if(M.l_hand)
|
||||
return
|
||||
if(!H.unEquip(src))
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
H.put_in_l_hand(src)
|
||||
return
|
||||
M.put_in_l_hand(src)
|
||||
|
||||
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(W == paddles)
|
||||
@@ -172,16 +177,22 @@
|
||||
remove_paddles(user)
|
||||
|
||||
update_icon()
|
||||
return
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/make_paddles()
|
||||
return new /obj/item/weapon/twohanded/shockpaddles(src)
|
||||
|
||||
/obj/item/weapon/defibrillator/equipped(mob/user, slot)
|
||||
if(slot != slot_back)
|
||||
..()
|
||||
if((slot_flags == SLOT_BACK && slot != slot_back) || (slot_flags == SLOT_BELT && slot != slot_belt))
|
||||
remove_paddles(user)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/item_action_slot_check(slot, mob/user)
|
||||
if(slot == user.getBackSlot())
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user)
|
||||
var/mob/living/carbon/human/M = user
|
||||
if(paddles in get_both_hands(M))
|
||||
@@ -230,12 +241,9 @@
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "biotech=4"
|
||||
|
||||
/obj/item/weapon/defibrillator/compact/ui_action_click()
|
||||
if(usr.get_item_by_slot(slot_belt) == src)
|
||||
toggle_paddles()
|
||||
else
|
||||
usr << "<span class='warning'>Strap the defibrillator's belt on first!</span>"
|
||||
return
|
||||
/obj/item/weapon/defibrillator/compact/item_action_slot_check(slot, mob/user)
|
||||
if(slot == user.getBeltSlot())
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/defibrillator/compact/loaded/New()
|
||||
..()
|
||||
@@ -322,7 +330,7 @@
|
||||
if(!req_defib)
|
||||
return ..()
|
||||
if(user)
|
||||
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
|
||||
if(istype(O))
|
||||
O.unwield()
|
||||
user << "<span class='notice'>The paddles snap back into the main unit.</span>"
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "implant"
|
||||
icon = 'icons/obj/implants.dmi'
|
||||
icon_state = "generic" //Shows up as the action button icon
|
||||
action_button_is_hands_free = 1
|
||||
origin_tech = "materials=2;biotech=3;programming=2"
|
||||
|
||||
var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like loyalty implants
|
||||
@@ -40,12 +39,16 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
if(activated)
|
||||
action_button_name = "Activate [src.name]"
|
||||
src.loc = source
|
||||
imp_in = source
|
||||
implanted = 1
|
||||
if(activated)
|
||||
action_button_name = "Activate [src.name]"
|
||||
if(!action)
|
||||
action = new /datum/action/item_action/hands_free
|
||||
action.name = action_button_name
|
||||
action.target = src
|
||||
action.Grant(source)
|
||||
if(istype(source, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = source
|
||||
H.sec_hud_set_implants()
|
||||
@@ -59,7 +62,8 @@
|
||||
src.loc = null
|
||||
imp_in = null
|
||||
implanted = 0
|
||||
|
||||
if(action)
|
||||
action.Remove(source)
|
||||
if(istype(source, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = source
|
||||
H.sec_hud_set_implants()
|
||||
@@ -76,6 +80,7 @@
|
||||
return "No information available"
|
||||
|
||||
/obj/item/weapon/implant/dropped(mob/user)
|
||||
..()
|
||||
. = 1
|
||||
qdel(src)
|
||||
return .
|
||||
|
||||
|
||||
@@ -8,14 +8,13 @@
|
||||
|
||||
|
||||
/obj/item/weapon/implant/freedom/activate()
|
||||
if(uses == 0)
|
||||
return 0
|
||||
if(uses != -1)
|
||||
uses--
|
||||
uses--
|
||||
imp_in << "You feel a faint click."
|
||||
if(iscarbon(imp_in))
|
||||
var/mob/living/carbon/C_imp_in = imp_in
|
||||
C_imp_in.uncuff()
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/implant/freedom/get_data()
|
||||
|
||||
@@ -33,8 +33,6 @@
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/adrenalin/activate()
|
||||
if(uses < 1)
|
||||
return 0
|
||||
uses--
|
||||
imp_in << "<span class='notice'>You feel a sudden surge of energy!</span>"
|
||||
imp_in.SetStunned(0)
|
||||
@@ -47,6 +45,8 @@
|
||||
imp_in.reagents.add_reagent("synaptizine", 10)
|
||||
imp_in.reagents.add_reagent("omnizine", 10)
|
||||
imp_in.reagents.add_reagent("stimulants", 10)
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/implant/emp
|
||||
@@ -57,7 +57,7 @@
|
||||
uses = 2
|
||||
|
||||
/obj/item/weapon/implant/emp/activate()
|
||||
if (src.uses < 1)
|
||||
return 0
|
||||
src.uses--
|
||||
uses--
|
||||
empulse(imp_in, 3, 5)
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
@@ -220,6 +220,7 @@
|
||||
spark_system.attach(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/dropped()
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
|
||||
|
||||
@@ -374,10 +374,6 @@
|
||||
handle_item_insertion(W, 0 , user)
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/weapon/storage/dropped(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/attack_hand(mob/user)
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Jetpack Mode"
|
||||
|
||||
/datum/action/item_action/jetpack/cycle/Trigger()
|
||||
if(!Checks())
|
||||
if(!IsAvailable())
|
||||
return
|
||||
|
||||
var/obj/item/weapon/tank/jetpack/J = target
|
||||
@@ -12,19 +12,6 @@
|
||||
/datum/action/item_action/jetpack/cycle/suit
|
||||
name = "Internal Jetpack Mode"
|
||||
|
||||
/datum/action/item_action/jetpack/cycle/suit/New()
|
||||
..()
|
||||
check_flags &= ~AB_CHECK_INSIDE // The jetpack is inside the suit.
|
||||
|
||||
/datum/action/item_action/jetpack/cycle/suit/CheckRemoval(mob/living/user)
|
||||
return !(target.loc in user) // Check that the suit is on the user.
|
||||
|
||||
/datum/action/item_action/jetpack/cycle/suit/IsAvailable()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!H.wear_suit)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tank/jetpack
|
||||
name = "jetpack (empty)"
|
||||
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
|
||||
|
||||
@@ -1,50 +1,41 @@
|
||||
/datum/action/item_action/tank/internals
|
||||
name = "Set Internals"
|
||||
|
||||
/datum/action/item_action/tank/internals/Trigger()
|
||||
if(!Checks())
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/C = owner
|
||||
if(!istype(C))
|
||||
return
|
||||
|
||||
if(C.internal == target)
|
||||
C.internal = null
|
||||
C << "<span class='notice'>You close \the [target] valve.</span>"
|
||||
C.update_internals_hud_icon(0)
|
||||
else if(C.wear_mask && (C.wear_mask.flags & MASKINTERNALS))
|
||||
C.internal = target
|
||||
C << "<span class='notice'>You open \the [target] valve.</span>"
|
||||
C.update_internals_hud_icon(1)
|
||||
return 1
|
||||
|
||||
/datum/action/item_action/tank/internals/IsAvailable()
|
||||
var/mob/living/carbon/C = owner
|
||||
if(!C.wear_mask || !(C.wear_mask.flags & MASKINTERNALS))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tank
|
||||
name = "tank"
|
||||
icon = 'icons/obj/tank.dmi'
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
|
||||
pressure_resistance = ONE_ATMOSPHERE * 5
|
||||
|
||||
force = 5
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
|
||||
action_button_name = "Set Internals"
|
||||
var/datum/gas_mixture/air_contents = null
|
||||
var/distribute_pressure = ONE_ATMOSPHERE
|
||||
var/integrity = 3
|
||||
var/volume = 70
|
||||
|
||||
var/datum/action/item_action/tank/internals/internals_action
|
||||
/obj/item/weapon/tank/ui_action_click()
|
||||
var/mob/living/carbon/human/H = action.owner
|
||||
if(!istype(H))
|
||||
return
|
||||
|
||||
if(!H.wear_mask)
|
||||
H << "<span class='warning'>You need a mask!</span>"
|
||||
return
|
||||
if(H.wear_mask.mask_adjusted)
|
||||
H.wear_mask.adjustmask(H)
|
||||
if(!(H.wear_mask.flags & MASKINTERNALS))
|
||||
H << "<span class='warning'>[H.wear_mask] can't use [src]!</span>"
|
||||
return
|
||||
if(H.internal == src)
|
||||
H.internal = null
|
||||
H << "<span class='notice'>You close \the [src] valve.</span>"
|
||||
H.update_internals_hud_icon(0)
|
||||
else if(H.wear_mask && (H.wear_mask.flags & MASKINTERNALS))
|
||||
H.internal = src
|
||||
H << "<span class='notice'>You open \the [src] valve.</span>"
|
||||
H.update_internals_hud_icon(1)
|
||||
|
||||
/obj/item/weapon/tank/New()
|
||||
..()
|
||||
@@ -52,8 +43,6 @@
|
||||
air_contents = new(volume) //liters
|
||||
air_contents.temperature = T20C
|
||||
|
||||
internals_action = new(src)
|
||||
|
||||
SSobj.processing |= src
|
||||
|
||||
/obj/item/weapon/tank/Destroy()
|
||||
@@ -63,14 +52,6 @@
|
||||
SSobj.processing -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tank/pickup(mob/user)
|
||||
..()
|
||||
internals_action.Grant(user)
|
||||
|
||||
/obj/item/weapon/tank/dropped(mob/user)
|
||||
..()
|
||||
internals_action.Remove(user)
|
||||
|
||||
/obj/item/weapon/tank/examine(mob/user)
|
||||
var/obj/icon = src
|
||||
..()
|
||||
|
||||
@@ -22,10 +22,14 @@
|
||||
/obj/item/weapon/watertank/ui_action_click()
|
||||
toggle_mister()
|
||||
|
||||
/obj/item/weapon/watertank/item_action_slot_check(slot, mob/user)
|
||||
if(slot == user.getBackSlot())
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/watertank/verb/toggle_mister()
|
||||
set name = "Toggle Mister"
|
||||
set category = "Object"
|
||||
if (usr.get_item_by_slot(usr.getWatertankSlot()) != src)
|
||||
if (usr.get_item_by_slot(usr.getBackSlot()) != src)
|
||||
usr << "<span class='warning'>The watertank must be worn properly to use!</span>"
|
||||
return
|
||||
if(usr.incapacitated())
|
||||
@@ -52,7 +56,8 @@
|
||||
return new /obj/item/weapon/reagent_containers/spray/mister(src)
|
||||
|
||||
/obj/item/weapon/watertank/equipped(mob/user, slot)
|
||||
if (slot != slot_back)
|
||||
..()
|
||||
if(slot != slot_back)
|
||||
remove_noz()
|
||||
|
||||
/obj/item/weapon/watertank/proc/remove_noz()
|
||||
@@ -75,22 +80,21 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/watertank/MouseDrop(obj/over_object)
|
||||
var/mob/H = src.loc
|
||||
if(istype(H))
|
||||
var/mob/M = src.loc
|
||||
if(istype(M))
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
if(H.r_hand)
|
||||
if(M.r_hand)
|
||||
return
|
||||
if(!H.unEquip(src))
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
H.put_in_r_hand(src)
|
||||
M.put_in_r_hand(src)
|
||||
if("l_hand")
|
||||
if(H.l_hand)
|
||||
if(M.l_hand)
|
||||
return
|
||||
if(!H.unEquip(src))
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
H.put_in_l_hand(src)
|
||||
return
|
||||
M.put_in_l_hand(src)
|
||||
|
||||
/obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params)
|
||||
if(W == noz)
|
||||
@@ -98,12 +102,6 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/proc/getWatertankSlot()
|
||||
return slot_back
|
||||
|
||||
/mob/living/simple_animal/drone/getWatertankSlot()
|
||||
return slot_drone_storage
|
||||
|
||||
// This mister item is intended as an extension of the watertank and always attached to it.
|
||||
// Therefore, it's designed to be "locked" to the player's hands or extended back onto
|
||||
// the watertank backpack. Allowing it to be placed elsewhere or created without a parent
|
||||
@@ -131,6 +129,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/mister/dropped(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>The mister snaps back onto the watertank.</span>"
|
||||
tank.on = 0
|
||||
loc = tank
|
||||
@@ -204,6 +203,7 @@
|
||||
return new /obj/item/weapon/extinguisher/mini/nozzle(src)
|
||||
|
||||
/obj/item/weapon/watertank/atmos/dropped(mob/user)
|
||||
..()
|
||||
icon_state = "waterbackpackatmos"
|
||||
if(istype(noz, /obj/item/weapon/extinguisher/mini/nozzle))
|
||||
var/obj/item/weapon/extinguisher/mini/nozzle/N = noz
|
||||
@@ -261,6 +261,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/extinguisher/mini/nozzle/dropped(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>The nozzle snaps back onto the tank!</span>"
|
||||
tank.on = 0
|
||||
loc = tank
|
||||
@@ -354,6 +355,10 @@
|
||||
/obj/item/weapon/reagent_containers/chemtank/ui_action_click()
|
||||
toggle_injection()
|
||||
|
||||
/obj/item/weapon/reagent_containers/chemtank/item_action_slot_check(slot, mob/user)
|
||||
if(slot == slot_back)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/chemtank/proc/toggle_injection()
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if(!istype(user))
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/dropped(mob/user)
|
||||
..()
|
||||
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
|
||||
if(user)
|
||||
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
|
||||
@@ -411,6 +412,8 @@
|
||||
if(src == user.get_active_hand()) //update inhands
|
||||
user.update_inv_l_hand()
|
||||
user.update_inv_r_hand()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
|
||||
//GREY TIDE
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
hitsound = "sound/weapons/chainsawhit.ogg"
|
||||
|
||||
/obj/item/weapon/mounted_chainsaw/dropped()
|
||||
..()
|
||||
new /obj/item/weapon/twohanded/required/chainsaw(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
handle_move(get_turf(loc))
|
||||
|
||||
/obj/item/device/assembly/prox_sensor/dropped()
|
||||
..()
|
||||
if(scanning)
|
||||
spawn(0)
|
||||
sense()
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
SSobj.processing.Remove(src)
|
||||
|
||||
/obj/item/weapon/twohanded/required/ctf/dropped(mob/user)
|
||||
..()
|
||||
reset_cooldown = world.time + 200 //20 seconds
|
||||
SSobj.processing |= src
|
||||
for(var/mob/M in player_list)
|
||||
|
||||
@@ -516,6 +516,8 @@ BLIND // can't see anything
|
||||
if(istype(usr, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.head_update(src, forced = 1)
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/proc/can_use(mob/user)
|
||||
if(user && ismob(user))
|
||||
|
||||
@@ -10,10 +10,7 @@
|
||||
var/invis_objects = list()
|
||||
var/range = 1
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/attack_self()
|
||||
ui_action_click()
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/ui_action_click()
|
||||
/obj/item/clothing/glasses/meson/engine/attack_self(mob/user)
|
||||
mode = !mode
|
||||
|
||||
if(mode)
|
||||
@@ -21,7 +18,7 @@
|
||||
vision_flags = 0
|
||||
darkness_view = 2
|
||||
invis_view = SEE_INVISIBLE_LIVING
|
||||
loc << "<span class='notice'>You toggle the goggles' scanning mode to \[T-Ray].</span>"
|
||||
user << "<span class='notice'>You toggle the goggles' scanning mode to \[T-Ray].</span>"
|
||||
else
|
||||
SSobj.processing.Remove(src)
|
||||
vision_flags = SEE_TURFS
|
||||
@@ -30,11 +27,14 @@
|
||||
loc << "<span class='notice'>You toggle the goggles' scanning mode to \[Meson].</span>"
|
||||
invis_update()
|
||||
|
||||
if(istype(loc,/mob/living/carbon))
|
||||
var/mob/living/carbon/C = loc
|
||||
C.update_sight()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.glasses == src)
|
||||
H.update_sight()
|
||||
|
||||
update_icon()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/process()
|
||||
if(!mode)
|
||||
@@ -115,18 +115,20 @@
|
||||
if(user.glasses == src)
|
||||
user.update_inv_glasses()
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/tray/ui_action_click()
|
||||
/obj/item/clothing/glasses/meson/engine/tray/attack_self(mob/user)
|
||||
on = !on
|
||||
|
||||
if(on)
|
||||
SSobj.processing |= src
|
||||
loc << "<span class='notice'>You turn the goggles on.</span>"
|
||||
user << "<span class='notice'>You turn the goggles on.</span>"
|
||||
else
|
||||
SSobj.processing.Remove(src)
|
||||
loc << "<span class='notice'>You turn the goggles off.</span>"
|
||||
user << "<span class='notice'>You turn the goggles off.</span>"
|
||||
invis_update()
|
||||
|
||||
update_icon()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/tray/t_ray_on()
|
||||
return on && ..()
|
||||
@@ -11,6 +11,7 @@
|
||||
H.add_hud_to(user)
|
||||
|
||||
/obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user)
|
||||
..()
|
||||
if(hud_type && istype(user) && user.glasses == src)
|
||||
var/datum/atom_hud/H = huds[hud_type]
|
||||
H.remove_hud_from(user)
|
||||
|
||||
@@ -24,13 +24,17 @@
|
||||
turn_on(user)
|
||||
else
|
||||
turn_off(user)
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/head/hardhat/pickup(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
user.AddLuminosity(brightness_on)
|
||||
SetLuminosity(0)
|
||||
|
||||
/obj/item/clothing/head/hardhat/dropped(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
user.AddLuminosity(-brightness_on)
|
||||
SetLuminosity(brightness_on)
|
||||
|
||||
@@ -229,6 +229,13 @@
|
||||
update_icon()
|
||||
update_helmlight(user)
|
||||
verbs += /obj/item/clothing/head/helmet/proc/toggle_helmlight
|
||||
action_button_name = "Toggle Helmetlight"
|
||||
if(loc == user)
|
||||
if(!action)
|
||||
action = new
|
||||
action.name = action_button_name
|
||||
action.target = src
|
||||
action.Grant(user)
|
||||
return
|
||||
|
||||
if(istype(A, /obj/item/weapon/screwdriver))
|
||||
@@ -242,10 +249,12 @@
|
||||
update_icon()
|
||||
usr.update_inv_head()
|
||||
verbs -= /obj/item/clothing/head/helmet/proc/toggle_helmlight
|
||||
action_button_name = null
|
||||
if(action && loc == user)
|
||||
action.Remove(user)
|
||||
return
|
||||
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/clothing/head/helmet/proc/toggle_helmlight()
|
||||
set name = "Toggle Helmetlight"
|
||||
@@ -269,7 +278,6 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/proc/update_helmlight(mob/user = null)
|
||||
if(F)
|
||||
action_button_name = "Toggle Helmetlight"
|
||||
if(F.on)
|
||||
if(loc == user)
|
||||
user.AddLuminosity(F.brightness_on)
|
||||
@@ -281,15 +289,18 @@
|
||||
else if(isturf(loc))
|
||||
SetLuminosity(0)
|
||||
update_icon()
|
||||
|
||||
else
|
||||
action_button_name = null
|
||||
if(loc == user)
|
||||
user.AddLuminosity(-5)
|
||||
else if(isturf(loc))
|
||||
SetLuminosity(0)
|
||||
return
|
||||
action_button_name = null
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/head/helmet/pickup(mob/user)
|
||||
..()
|
||||
if(F)
|
||||
if(F.on)
|
||||
user.AddLuminosity(F.brightness_on)
|
||||
@@ -297,6 +308,7 @@
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/dropped(mob/user)
|
||||
..()
|
||||
if(F)
|
||||
if(F.on)
|
||||
user.AddLuminosity(-F.brightness_on)
|
||||
|
||||
@@ -111,12 +111,9 @@
|
||||
burn_state = FLAMMABLE
|
||||
action_button_name = "Adjust Mask"
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/ui_action_click()
|
||||
/obj/item/clothing/mask/gas/mime/attack_self(mob/user)
|
||||
cycle_mask(usr)
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/AltClick(mob/user)
|
||||
cycle_mask(user)
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/proc/cycle_mask(mob/user)
|
||||
switch(icon_state)
|
||||
if("mime")
|
||||
|
||||
@@ -72,3 +72,5 @@
|
||||
else
|
||||
icon_state = "clown_prototype_off"
|
||||
usr.update_inv_shoes()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
@@ -331,16 +331,13 @@
|
||||
/datum/action/innate/chrono_teleport
|
||||
name = "Teleport Now"
|
||||
button_icon_state = "chrono_phase"
|
||||
check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE
|
||||
check_flags = AB_CHECK_CONSCIOUS //|AB_CHECK_INSIDE
|
||||
var/obj/item/clothing/suit/space/chronos/chronosuit = null
|
||||
|
||||
/datum/action/innate/chrono_teleport/IsAvailable()
|
||||
return (!CheckRemoval(owner) && !chronosuit.teleporting)
|
||||
return (chronosuit && chronosuit.activated && chronosuit.camera && !chronosuit.teleporting)
|
||||
|
||||
/datum/action/innate/chrono_teleport/Activate()
|
||||
if(IsAvailable())
|
||||
if(chronosuit.camera)
|
||||
chronosuit.chronowalk(chronosuit.camera)
|
||||
|
||||
/datum/action/innate/chrono_teleport/CheckRemoval()
|
||||
return (..() && !(chronosuit && chronosuit.activated && chronosuit.camera))
|
||||
@@ -25,21 +25,30 @@
|
||||
user.AddLuminosity(brightness_on)
|
||||
else
|
||||
user.AddLuminosity(-brightness_on)
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/pickup(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
user.AddLuminosity(brightness_on)
|
||||
SetLuminosity(0)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/dropped(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
user.AddLuminosity(-brightness_on)
|
||||
SetLuminosity(brightness_on)
|
||||
if(suit)
|
||||
suit.RemoveHelmet()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot)
|
||||
if(slot == slot_head)
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot)
|
||||
..()
|
||||
if(slot != slot_head)
|
||||
if(suit)
|
||||
suit.RemoveHelmet()
|
||||
@@ -75,14 +84,19 @@
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
|
||||
..()
|
||||
if(slot == slot_wear_suit && jetpack)
|
||||
jetpack.cycle_action.Grant(user)
|
||||
if(jetpack)
|
||||
if(slot == slot_wear_suit)
|
||||
jetpack.cycle_action.Grant(user)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/dropped(mob/user)
|
||||
..()
|
||||
if(jetpack)
|
||||
jetpack.cycle_action.Remove(user)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot)
|
||||
if(slot == slot_wear_suit) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
|
||||
return 1
|
||||
|
||||
//Engineering
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/engine
|
||||
name = "engineering hardsuit helmet"
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
/obj/item/clothing/suit/hooded/ui_action_click()
|
||||
ToggleHood()
|
||||
|
||||
/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user)
|
||||
if(slot == slot_wear_suit)
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/suit/hooded/equipped(mob/user, slot)
|
||||
if(slot != slot_wear_suit)
|
||||
RemoveHood()
|
||||
@@ -33,8 +37,11 @@
|
||||
H.unEquip(hood, 1)
|
||||
H.update_inv_wear_suit()
|
||||
hood.loc = src
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/suit/hooded/dropped()
|
||||
..()
|
||||
RemoveHood()
|
||||
|
||||
/obj/item/clothing/suit/hooded/proc/ToggleHood()
|
||||
@@ -52,6 +59,8 @@
|
||||
suittoggled = 1
|
||||
src.icon_state = "[initial(icon_state)]_t"
|
||||
H.update_inv_wear_suit()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
else
|
||||
RemoveHood()
|
||||
|
||||
@@ -84,6 +93,8 @@
|
||||
src.icon_state = "[initial(icon_state)]_t"
|
||||
src.suittoggled = 1
|
||||
usr.update_inv_wear_suit()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/clothing/suit/toggle/examine(mob/user)
|
||||
..()
|
||||
@@ -140,6 +151,7 @@
|
||||
helmet.loc = src
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/dropped()
|
||||
..()
|
||||
RemoveHelmet()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet()
|
||||
|
||||
@@ -308,10 +308,12 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow/pickup(mob/user)
|
||||
..()
|
||||
src.SetLuminosity(0)
|
||||
user.AddLuminosity(round(potency / 5,1))
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow/dropped(mob/user)
|
||||
..()
|
||||
user.AddLuminosity(round(-potency / 5,1))
|
||||
src.SetLuminosity(round(potency / 5,1))
|
||||
|
||||
@@ -1222,10 +1224,12 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/pickup(mob/user)
|
||||
..()
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(round(potency / 10,1))
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/dropped(mob/user)
|
||||
..()
|
||||
user.AddLuminosity(round(-potency / 10,1))
|
||||
SetLuminosity(round(potency / 10,1))
|
||||
|
||||
|
||||
@@ -158,6 +158,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user)
|
||||
..()
|
||||
if(!user.gloves)
|
||||
user << "<span class='danger'>The [name] burns your bare hand!</span>"
|
||||
user.adjustFireLoss(rand(1, 5))
|
||||
@@ -184,6 +185,7 @@
|
||||
return (BRUTELOSS|TOXLOSS)
|
||||
|
||||
/obj/item/weapon/grown/nettle/pickup(mob/living/user)
|
||||
..()
|
||||
if(!iscarbon(user))
|
||||
return 0
|
||||
var/mob/living/carbon/C = user
|
||||
|
||||
@@ -264,3 +264,10 @@
|
||||
var/obj/item/I = get_active_hand()
|
||||
if (I)
|
||||
I.equip_to_best_slot(src)
|
||||
|
||||
//used in code for items usable by both carbon and drones, this gives the proper back slot for each mob.(defibrillator, backpack watertank, ...)
|
||||
/mob/proc/getBackSlot()
|
||||
return slot_back
|
||||
|
||||
/mob/proc/getBeltSlot()
|
||||
return slot_belt
|
||||
@@ -7,10 +7,6 @@ Doesn't work on other aliens/AI.*/
|
||||
|
||||
/datum/action/spell_action/alien
|
||||
|
||||
/datum/action/spell_action/alien/UpdateName()
|
||||
var/obj/effect/proc_holder/alien/ab = target
|
||||
return ab.name
|
||||
|
||||
/datum/action/spell_action/alien/IsAvailable()
|
||||
if(!target)
|
||||
return 0
|
||||
@@ -23,16 +19,6 @@ Doesn't work on other aliens/AI.*/
|
||||
return ab.cost_check(ab.check_turf,owner,1)
|
||||
return 1
|
||||
|
||||
/datum/action/spell_action/alien/CheckRemoval()
|
||||
if(!iscarbon(owner))
|
||||
return 1
|
||||
|
||||
var/mob/living/carbon/C = owner
|
||||
if(target.loc && !(target.loc in C.internal_organs))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
/obj/effect/proc_holder/alien
|
||||
name = "Alien Power"
|
||||
@@ -319,6 +305,11 @@ Doesn't work on other aliens/AI.*/
|
||||
if(!vessel) return 0
|
||||
vessel.storedPlasma = max(vessel.storedPlasma + amount,0)
|
||||
vessel.storedPlasma = min(vessel.storedPlasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0
|
||||
for(var/X in abilities)
|
||||
var/obj/effect/proc_holder/alien/APH = X
|
||||
if(APH.action && APH.action.button)
|
||||
var/obj/screen/movable/action_button/AB = APH.action.button
|
||||
AB.UpdateIcon()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/alien/adjustPlasma(amount)
|
||||
|
||||
@@ -789,6 +789,7 @@ var/const/GALOSHES_DONT_HELP = 4
|
||||
throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
|
||||
else
|
||||
clear_alert("handcuffed")
|
||||
update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed.
|
||||
update_inv_handcuffed()
|
||||
update_hud_handcuffed()
|
||||
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
wear_suit = I
|
||||
if(I.flags_inv & HIDEJUMPSUIT)
|
||||
update_inv_w_uniform()
|
||||
if(wear_suit.breakouttime) //when equipping a straightjacket
|
||||
update_action_buttons_icon() //certain action buttons will no longer be usable.
|
||||
update_inv_wear_suit()
|
||||
if(slot_w_uniform)
|
||||
w_uniform = I
|
||||
@@ -113,6 +115,8 @@
|
||||
if(I == wear_suit)
|
||||
if(s_store)
|
||||
unEquip(s_store, 1) //It makes no sense for your suit storage to stay on you if you drop your suit.
|
||||
if(wear_suit.breakouttime) //when unequipping a straightjacket
|
||||
update_action_buttons_icon() //certain action buttons may be usable again.
|
||||
wear_suit = null
|
||||
if(I.flags_inv & HIDEJUMPSUIT)
|
||||
update_inv_w_uniform()
|
||||
|
||||
@@ -119,6 +119,12 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/C)
|
||||
if(C.dna.species)
|
||||
if(C.dna.species.exotic_blood)
|
||||
var/datum/reagent/EB = C.dna.species.exotic_blood
|
||||
C.reagents.del_reagent(initial(EB.id))
|
||||
|
||||
/datum/species/proc/update_base_icon_state(mob/living/carbon/human/H)
|
||||
if(H.disabilities & HUSK)
|
||||
H.remove_overlay(SPECIES_LAYER) // races lose their color
|
||||
|
||||
@@ -240,11 +240,23 @@ var/regex/lizard_hiSS = new("S+", "g")
|
||||
burnmod = 0.5
|
||||
coldmod = 2
|
||||
heatmod = 0.5
|
||||
var/datum/action/innate/split_body/slime_split
|
||||
var/datum/action/innate/swap_body/callforward
|
||||
var/datum/action/innate/swap_body/callback
|
||||
|
||||
/datum/species/jelly/slime/on_species_loss(mob/living/carbon/C)
|
||||
if(slime_split)
|
||||
slime_split.Remove(C)
|
||||
if(callforward)
|
||||
callforward.Remove(C)
|
||||
if(callback)
|
||||
callback.Remove(C)
|
||||
..()
|
||||
|
||||
/datum/species/jelly/slime/spec_life(mob/living/carbon/human/H)
|
||||
if(recently_changed)
|
||||
var/datum/action/innate/split_body/S = new
|
||||
S.Grant(H)
|
||||
slime_split = new
|
||||
slime_split.Grant(H)
|
||||
|
||||
for(var/datum/reagent/toxin/slimejelly/S in H.reagents.reagent_list)
|
||||
if(S.volume >= 200)
|
||||
@@ -259,16 +271,10 @@ var/regex/lizard_hiSS = new("S+", "g")
|
||||
|
||||
/datum/action/innate/split_body
|
||||
name = "Split Body"
|
||||
check_flags = AB_CHECK_ALIVE
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
button_icon_state = "slimesplit"
|
||||
background_icon_state = "bg_alien"
|
||||
|
||||
/datum/action/innate/split_body/CheckRemoval()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!ishuman(H) || !H.dna || !H.dna.species || H.dna.species.id != "slime")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/action/innate/split_body/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H << "<span class='notice'>You focus intently on moving your body while standing perfectly still...</span>"
|
||||
@@ -286,12 +292,13 @@ var/regex/lizard_hiSS = new("S+", "g")
|
||||
spare.Move(get_step(H.loc, pick(NORTH,SOUTH,EAST,WEST)))
|
||||
S.volume = 80
|
||||
H.notransform = 0
|
||||
var/datum/action/innate/swap_body/callforward = new /datum/action/innate/swap_body()
|
||||
var/datum/action/innate/swap_body/callback = new /datum/action/innate/swap_body()
|
||||
callforward.body = spare
|
||||
callforward.Grant(H)
|
||||
callback.body = H
|
||||
callback.Grant(spare)
|
||||
var/datum/species/jelly/slime/SS = H.dna.species
|
||||
SS.callforward = new
|
||||
SS.callforward.body = spare
|
||||
SS.callforward.Grant(H)
|
||||
SS.callback = new
|
||||
SS.callback.body = H
|
||||
SS.callback.Grant(spare)
|
||||
H.mind.transfer_to(spare)
|
||||
spare << "<span class='notice'>...and after a moment of disorentation, you're besides yourself!</span>"
|
||||
return
|
||||
@@ -301,17 +308,11 @@ var/regex/lizard_hiSS = new("S+", "g")
|
||||
|
||||
/datum/action/innate/swap_body
|
||||
name = "Swap Body"
|
||||
check_flags = AB_CHECK_ALIVE
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
button_icon_state = "slimeswap"
|
||||
background_icon_state = "bg_alien"
|
||||
var/mob/living/carbon/human/body
|
||||
|
||||
/datum/action/innate/swap_body/CheckRemoval()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!ishuman(H) || !H.dna || !H.dna.species || H.dna.species.id != "slime")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/action/innate/swap_body/Activate()
|
||||
if(!body || !istype(body) || !body.dna || !body.dna.species || body.dna.species.id != "slime" || body.stat == DEAD || qdeleted(body))
|
||||
owner << "<span class='warning'>Something is wrong, you cannot sense your other body!</span>"
|
||||
|
||||
@@ -387,9 +387,3 @@
|
||||
if(360.15 to INFINITY) //360.15 is 310.15 + 50, the temperature where you start to feel effects.
|
||||
//We totally need a sweat system cause it totally makes sense...~
|
||||
bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers
|
||||
|
||||
|
||||
/mob/living/carbon/handle_actions()
|
||||
..()
|
||||
for(var/obj/item/I in internal_organs)
|
||||
give_action_button(I, 1)
|
||||
@@ -52,6 +52,7 @@
|
||||
blind_eyes(1)
|
||||
reset_perspective(null)
|
||||
hide_fullscreens()
|
||||
update_action_buttons_icon()
|
||||
update_damage_hud()
|
||||
update_health_hud()
|
||||
update_canmove()
|
||||
|
||||
@@ -49,10 +49,6 @@
|
||||
handle_disabilities() // eye, ear, brain damages
|
||||
handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc
|
||||
|
||||
handle_actions()
|
||||
|
||||
handle_regular_hud_updates()
|
||||
|
||||
|
||||
|
||||
/mob/living/proc/handle_breathing()
|
||||
@@ -117,92 +113,50 @@
|
||||
if(ear_damage < 100)
|
||||
adjustEarDamage(-0.05,-1)
|
||||
|
||||
/mob/living/proc/handle_actions()
|
||||
//Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent
|
||||
for(var/datum/action/A in actions)
|
||||
if(A.CheckRemoval(src))
|
||||
A.Remove(src)
|
||||
for(var/obj/item/I in src)
|
||||
give_action_button(I, 1)
|
||||
return
|
||||
|
||||
/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0)
|
||||
if(I.action_button_name)
|
||||
if(!I.action)
|
||||
if(istype(I, /obj/item/organ/internal))
|
||||
I.action = new/datum/action/item_action/organ_action
|
||||
else if(I.action_button_is_hands_free)
|
||||
I.action = new/datum/action/item_action/hands_free
|
||||
else
|
||||
I.action = new/datum/action/item_action
|
||||
I.action.name = I.action_button_name
|
||||
I.action.target = I
|
||||
I.action.Grant(src)
|
||||
|
||||
if(recursive)
|
||||
for(var/obj/item/T in I)
|
||||
give_action_button(T, recursive - 1)
|
||||
|
||||
|
||||
/mob/living/proc/update_damage_hud()
|
||||
return
|
||||
|
||||
//this handles hud updates.
|
||||
/mob/living/proc/handle_regular_hud_updates()
|
||||
if(!client)
|
||||
return 0
|
||||
update_action_buttons()
|
||||
return 1
|
||||
/mob/living/update_action_buttons_icon()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
if(A.button)
|
||||
A.button.UpdateIcon()
|
||||
|
||||
/mob/living/update_action_buttons()
|
||||
if(!hud_used) return
|
||||
if(!client) return
|
||||
|
||||
if(hud_used.hud_shown != 1) //Hud toggled to minimal
|
||||
/mob/living/update_action_buttons(reload_screen)
|
||||
if(!hud_used || !client)
|
||||
return
|
||||
|
||||
client.screen -= hud_used.hide_actions_toggle
|
||||
for(var/datum/action/A in actions)
|
||||
if(A.button)
|
||||
client.screen -= A.button
|
||||
|
||||
if(hud_used.action_buttons_hidden)
|
||||
if(!hud_used.hide_actions_toggle)
|
||||
hud_used.hide_actions_toggle = new(hud_used)
|
||||
hud_used.hide_actions_toggle.UpdateIcon()
|
||||
|
||||
if(!hud_used.hide_actions_toggle.moved)
|
||||
hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(1)
|
||||
//hud_used.SetButtonCoords(hud_used.hide_actions_toggle,1)
|
||||
|
||||
client.screen += hud_used.hide_actions_toggle
|
||||
if(hud_used.hud_shown != HUD_STYLE_STANDARD)
|
||||
return
|
||||
|
||||
var/button_number = 0
|
||||
for(var/datum/action/A in actions)
|
||||
button_number++
|
||||
if(A.button == null)
|
||||
var/obj/screen/movable/action_button/N = new(hud_used)
|
||||
N.owner = A
|
||||
A.button = N
|
||||
|
||||
var/obj/screen/movable/action_button/B = A.button
|
||||
if(hud_used.action_buttons_hidden)
|
||||
for(var/datum/action/A in actions)
|
||||
A.button.screen_loc = null
|
||||
if(reload_screen)
|
||||
client.screen += A.button
|
||||
else
|
||||
for(var/datum/action/A in actions)
|
||||
button_number++
|
||||
var/obj/screen/movable/action_button/B = A.button
|
||||
B.UpdateIcon()
|
||||
if(!B.moved)
|
||||
B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number)
|
||||
else
|
||||
B.screen_loc = B.moved
|
||||
if(reload_screen)
|
||||
client.screen += B
|
||||
|
||||
B.UpdateIcon()
|
||||
if(!button_number)
|
||||
hud_used.hide_actions_toggle.screen_loc = null
|
||||
return
|
||||
|
||||
B.name = A.UpdateName()
|
||||
|
||||
client.screen += B
|
||||
|
||||
if(!B.moved)
|
||||
B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number)
|
||||
//hud_used.SetButtonCoords(B,button_number)
|
||||
|
||||
if(button_number > 0)
|
||||
if(!hud_used.hide_actions_toggle)
|
||||
hud_used.hide_actions_toggle = new(hud_used)
|
||||
hud_used.hide_actions_toggle.InitialiseIcon(src)
|
||||
if(!hud_used.hide_actions_toggle.moved)
|
||||
hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1)
|
||||
//hud_used.SetButtonCoords(hud_used.hide_actions_toggle,button_number+1)
|
||||
if(!hud_used.hide_actions_toggle.moved)
|
||||
hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1)
|
||||
else
|
||||
hud_used.hide_actions_toggle.screen_loc = hud_used.hide_actions_toggle.moved
|
||||
if(reload_screen)
|
||||
client.screen += hud_used.hide_actions_toggle
|
||||
|
||||
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
|
||||
update_gravity(mob_has_gravity())
|
||||
|
||||
update_action_buttons()
|
||||
|
||||
if(malfhack)
|
||||
if(malfhack.aidisabled)
|
||||
src << "<span class='danger'>ERROR: APC access disabled, hack attempt canceled.</span>"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
handle_robot_hud_updates()
|
||||
handle_robot_cell()
|
||||
|
||||
/mob/living/silicon/robot/proc/handle_robot_cell()
|
||||
@@ -30,7 +30,7 @@
|
||||
update_headlamp()
|
||||
diag_hud_set_borgcell()
|
||||
|
||||
/mob/living/silicon/robot/handle_regular_hud_updates()
|
||||
/mob/living/silicon/robot/proc/handle_robot_hud_updates()
|
||||
if(!client)
|
||||
return
|
||||
|
||||
@@ -49,8 +49,7 @@
|
||||
if(!mind.special_role)
|
||||
mind.special_role = "traitor"
|
||||
ticker.mode.traitors += mind
|
||||
..()
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/silicon/robot/update_health_hud()
|
||||
if(!client || !hud_used)
|
||||
@@ -117,4 +116,5 @@
|
||||
else
|
||||
canmove = 1
|
||||
update_transform()
|
||||
update_action_buttons_icon()
|
||||
return canmove
|
||||
|
||||
@@ -115,3 +115,9 @@
|
||||
|
||||
/mob/living/simple_animal/drone/stripPanelEquip(obj/item/what, mob/who, where)
|
||||
..(what, who, where, 1)
|
||||
|
||||
/mob/living/simple_animal/drone/getBackSlot()
|
||||
return slot_drone_storage
|
||||
|
||||
/mob/living/simple_animal/drone/getBeltSlot()
|
||||
return slot_drone_storage
|
||||
|
||||
@@ -586,6 +586,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/guardian_bomb/pickup(mob/living/user)
|
||||
..()
|
||||
detonate(user)
|
||||
return
|
||||
|
||||
|
||||
@@ -535,6 +535,7 @@
|
||||
else
|
||||
canmove = 1
|
||||
update_transform()
|
||||
update_action_buttons_icon()
|
||||
return canmove
|
||||
|
||||
/mob/living/simple_animal/update_transform()
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
M.regenerate_icons()
|
||||
is_adult = 0
|
||||
maxHealth = 150
|
||||
var/datum/action/innate/slime/evolve/E = new
|
||||
E.Grant(src)
|
||||
revive(full_heal = 1)
|
||||
regenerate_icons()
|
||||
number = rand(1, 1000)
|
||||
|
||||
@@ -230,6 +230,7 @@
|
||||
else if (nutrition >= get_grow_nutrition() && amount_grown < SLIME_EVOLUTION_THRESHOLD)
|
||||
nutrition -= 20
|
||||
amount_grown++
|
||||
update_action_buttons_icon()
|
||||
|
||||
if(amount_grown >= SLIME_EVOLUTION_THRESHOLD && !buckled && !Target && !ckey)
|
||||
if(is_adult)
|
||||
|
||||
@@ -6,22 +6,10 @@
|
||||
#define GROWTH_NEEDED 1
|
||||
|
||||
/datum/action/innate/slime
|
||||
check_flags = AB_CHECK_ALIVE
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
background_icon_state = "bg_alien"
|
||||
var/adult_action = SIZE_DOESNT_MATTER
|
||||
var/needs_growth = NO_GROWTH_NEEDED
|
||||
|
||||
/datum/action/innate/slime/CheckRemoval()
|
||||
if(!isslime(owner))
|
||||
return 1
|
||||
var/mob/living/simple_animal/slime/S = owner
|
||||
if(adult_action != SIZE_DOESNT_MATTER)
|
||||
if(adult_action == ADULTS_ONLY && !S.is_adult)
|
||||
return 1
|
||||
else if(adult_action == BABIES_ONLY && S.is_adult)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/action/innate/slime/IsAvailable()
|
||||
if(..())
|
||||
var/mob/living/simple_animal/slime/S = owner
|
||||
@@ -120,6 +108,8 @@
|
||||
is_adult = 1
|
||||
maxHealth = 200
|
||||
amount_grown = 0
|
||||
for(var/datum/action/innate/slime/evolve/E in actions)
|
||||
E.Remove(src)
|
||||
regenerate_icons()
|
||||
name = text("[colour] [is_adult ? "adult" : "baby"] slime ([number])")
|
||||
else
|
||||
@@ -130,7 +120,6 @@
|
||||
/datum/action/innate/slime/evolve
|
||||
name = "Evolve"
|
||||
button_icon_state = "slimegrow"
|
||||
adult_action = BABIES_ONLY
|
||||
needs_growth = GROWTH_NEEDED
|
||||
|
||||
/datum/action/innate/slime/evolve/Activate()
|
||||
@@ -191,7 +180,6 @@
|
||||
/datum/action/innate/slime/reproduce
|
||||
name = "Reproduce"
|
||||
button_icon_state = "slimesplit"
|
||||
adult_action = ADULTS_ONLY
|
||||
needs_growth = GROWTH_NEEDED
|
||||
|
||||
/datum/action/innate/slime/reproduce/Activate()
|
||||
|
||||
@@ -708,6 +708,7 @@ var/next_mob_id = 0
|
||||
if(layer == MOB_LAYER - 0.2)
|
||||
layer = initial(layer)
|
||||
update_transform()
|
||||
update_action_buttons_icon()
|
||||
lying_prev = lying
|
||||
return canmove
|
||||
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
add_logs(user, affecting, "attempted to put", src, "into [M]")
|
||||
|
||||
/obj/item/weapon/grab/dropped()
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
#undef UPGRADE_COOLDOWN
|
||||
|
||||
@@ -272,6 +272,13 @@ obj/item/weapon/gun/proc/newshot()
|
||||
update_icon()
|
||||
update_gunlight(user)
|
||||
verbs += /obj/item/weapon/gun/proc/toggle_gunlight
|
||||
action_button_name = "Toggle Gunlight"
|
||||
if(loc == user)
|
||||
if(!action)
|
||||
action = new
|
||||
action.name = action_button_name
|
||||
action.target = src
|
||||
action.Grant(user)
|
||||
|
||||
if(istype(A, /obj/item/weapon/screwdriver))
|
||||
if(F)
|
||||
@@ -283,6 +290,9 @@ obj/item/weapon/gun/proc/newshot()
|
||||
S.update_brightness(user)
|
||||
update_icon()
|
||||
verbs -= /obj/item/weapon/gun/proc/toggle_gunlight
|
||||
action_button_name = null
|
||||
if(action && loc == user)
|
||||
action.Remove(user)
|
||||
|
||||
if(unique_rename)
|
||||
if(istype(A, /obj/item/weapon/pen))
|
||||
@@ -311,7 +321,6 @@ obj/item/weapon/gun/proc/newshot()
|
||||
|
||||
/obj/item/weapon/gun/proc/update_gunlight(mob/user = null)
|
||||
if(F)
|
||||
action_button_name = "Toggle Gunlight"
|
||||
if(F.on)
|
||||
if(loc == user)
|
||||
user.AddLuminosity(F.brightness_on)
|
||||
@@ -324,14 +333,16 @@ obj/item/weapon/gun/proc/newshot()
|
||||
SetLuminosity(0)
|
||||
update_icon()
|
||||
else
|
||||
action_button_name = null
|
||||
if(loc == user)
|
||||
user.AddLuminosity(-5)
|
||||
else if(isturf(loc))
|
||||
SetLuminosity(0)
|
||||
return
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/pickup(mob/user)
|
||||
..()
|
||||
if(F)
|
||||
if(F.on)
|
||||
user.AddLuminosity(F.brightness_on)
|
||||
@@ -340,6 +351,7 @@ obj/item/weapon/gun/proc/newshot()
|
||||
azoom.Grant(user)
|
||||
|
||||
/obj/item/weapon/gun/dropped(mob/user)
|
||||
..()
|
||||
if(F)
|
||||
if(F.on)
|
||||
user.AddLuminosity(-F.brightness_on)
|
||||
@@ -426,7 +438,7 @@ obj/item/weapon/gun/proc/newshot()
|
||||
|
||||
/datum/action/toggle_scope_zoom
|
||||
name = "Toggle Scope"
|
||||
check_flags = AB_CHECK_ALIVE|AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING
|
||||
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING
|
||||
button_icon_state = "sniper_zoom"
|
||||
var/obj/item/weapon/gun/gun = null
|
||||
|
||||
@@ -443,7 +455,6 @@ obj/item/weapon/gun/proc/newshot()
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/proc/zoom(mob/living/user, forced_zoom)
|
||||
if(!user || !user.client)
|
||||
return
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
can_flashlight = 0
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/advtaser/mounted/dropped()//if somebody manages to drop this somehow...
|
||||
..()
|
||||
src.loc = null//send it to nullspace to get retrieved by the implant later on. gotta cover those edge cases.
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/mounted
|
||||
@@ -25,4 +26,5 @@
|
||||
materials = null
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/mounted/dropped()
|
||||
..()
|
||||
src.loc = null
|
||||
|
||||
@@ -67,7 +67,8 @@
|
||||
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
update_icon()
|
||||
return
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/can_shoot()
|
||||
return get_ammo()
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
pump()
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/boltaction/enchanted/dropped()
|
||||
..()
|
||||
guns_left = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/boltaction/enchanted/shoot_live_shot(mob/living/user as mob|obj, pointblank = 0, mob/pbtarget = null, message = 1)
|
||||
|
||||
@@ -169,9 +169,13 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/start_recharge()
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
while(charge_counter < charge_max && isnull(gc_destroyed))
|
||||
sleep(1)
|
||||
charge_counter++
|
||||
if(action && action.button)
|
||||
action.button.UpdateIcon()
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = 1, mob/user = usr) //if recharge is started is important for the trigger spells
|
||||
before_cast(targets)
|
||||
|
||||
@@ -31,12 +31,13 @@
|
||||
name = "Activate Pill"
|
||||
|
||||
/datum/action/item_action/hands_free/activate_pill/Trigger()
|
||||
if(!..() || CheckRemoval(owner))
|
||||
if(!..())
|
||||
return 0
|
||||
owner << "<span class='caution'>You grit your teeth and burst the implanted [target]!</span>"
|
||||
add_logs(owner, null, "swallowed an implanted pill", target)
|
||||
if(target.reagents.total_volume)
|
||||
target.reagents.reaction(owner, INGEST)
|
||||
target.reagents.trans_to(owner, target.reagents.total_volume)
|
||||
Remove(owner)
|
||||
qdel(target)
|
||||
return 1
|
||||
@@ -20,8 +20,11 @@
|
||||
M.internal_organs |= src
|
||||
loc = null
|
||||
if(organ_action_name)
|
||||
action_button_name = organ_action_name
|
||||
|
||||
if(!action)
|
||||
action = new/datum/action/item_action/organ_action
|
||||
action.name = organ_action_name
|
||||
action.target = src
|
||||
action.Grant(src)
|
||||
|
||||
/obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0)
|
||||
owner = null
|
||||
@@ -29,9 +32,9 @@
|
||||
M.internal_organs -= src
|
||||
if(vital && !special)
|
||||
M.death()
|
||||
|
||||
if(organ_action_name)
|
||||
action_button_name = null
|
||||
if(action)
|
||||
action.Remove(M)
|
||||
|
||||
/obj/item/organ/internal/proc/on_find(mob/living/finder)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user