Merge pull request #5095 from tigercat2000/ACTION_BUTTONS

Action Button Update
This commit is contained in:
Fox McCloud
2016-07-19 23:40:51 -04:00
committed by GitHub
97 changed files with 1237 additions and 1022 deletions

View File

@@ -655,7 +655,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M)
M.equip_to_slot_or_del(J, slot_back)
J.toggle()
J.turn_on()
M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
J.Topic(null, list("stat" = 1))
equip_special_id(M,get_all_accesses(), "Space Explorer", /obj/item/weapon/card/id)
@@ -684,7 +684,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/atmos(M), slot_head)
var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M)
M.equip_to_slot_or_del(J, slot_back)
J.toggle()
J.turn_on()
M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
equip_special_id(M,get_all_accesses(), "RIG Tester", /obj/item/weapon/card/id)
J.Topic(null, list("stat" = 1))

View File

@@ -59,7 +59,7 @@ var/global/sent_honksquad = 0
new_honksquad.key = pick(commandos)
commandos -= new_honksquad.key
new_honksquad.internal = new_honksquad.s_store
new_honksquad.internals.icon_state = "internal1"
new_honksquad.update_internals_hud_icon(1)
//So they don't forget their code or mission.
new_honksquad.mind.store_memory("<B>Mission:</B> \red [input].")

View File

@@ -375,7 +375,7 @@ client/proc/one_click_antag()
new_syndicate_commando.key = theghost.key
new_syndicate_commando.internal = new_syndicate_commando.s_store
new_syndicate_commando.internals.icon_state = "internal1"
new_syndicate_commando.update_internals_hud_icon(1)
//So they don't forget their code or mission.

View File

@@ -407,7 +407,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("Death Commando")//Leaves them at late-join spawn.
new_character.equip_death_commando()
new_character.internal = new_character.s_store
new_character.internals.icon_state = "internal1"
new_character.update_internals_hud_icon(1)
else//They may also be a cyborg or AI.
switch(new_character.mind.assigned_role)
if("Cyborg")//More rigging to make em' work and check if they're traitor.

View File

@@ -64,7 +64,7 @@ var/global/sent_strike_team = 0
new_commando.key = pick(commandos)
commandos -= new_commando.key
new_commando.internal = new_commando.s_store
new_commando.internals.icon_state = "internal1"
new_commando.update_internals_hud_icon(1)
//So they don't forget their code or mission.
if(nuke_code)

View File

@@ -71,7 +71,7 @@ var/global/sent_syndicate_strike_team = 0
new_syndicate_commando.key = pick(commandos)
commandos -= new_syndicate_commando.key
new_syndicate_commando.internal = new_syndicate_commando.s_store
new_syndicate_commando.internals.icon_state = "internal1"
new_syndicate_commando.update_internals_hud_icon(1)
//So they don't forget their code or mission.
if(nuke_code)

View File

@@ -68,6 +68,7 @@
dropped()
..()
spawn(0)
sense()
return

View File

@@ -289,7 +289,6 @@ BLIND // can't see anything
body_parts_covered = HEAD
slot_flags = SLOT_MASK
var/mask_adjusted = 0
var/ignore_maskadjust = 1
var/adjusted_flags = null
strip_delay = 40
put_on_delay = 40
@@ -297,60 +296,61 @@ BLIND // can't see anything
//Proc that moves gas/breath masks out of the way
/obj/item/clothing/mask/proc/adjustmask(var/mob/user)
var/mob/living/carbon/human/H = usr //Used to check if the mask is on the head, to check if the hands are full, and to turn off internals if they were on when the mask was pushed out of the way.
if(!ignore_maskadjust)
if(user.incapacitated()) //This check allows you to adjust your masks while you're buckled into chairs or beds.
return
if(mask_adjusted)
icon_state = copytext(icon_state, 1, findtext(icon_state, "_up")) /*Trims the '_up' off the end of the icon state, thus reverting to the most recent previous state.
Had to use this instead of initial() because initial reverted to the wrong state.*/
gas_transfer_coefficient = initial(gas_transfer_coefficient)
permeability_coefficient = initial(permeability_coefficient)
to_chat(user, "You push \the [src] back into place.")
mask_adjusted = 0
slot_flags = initial(slot_flags)
if(flags_inv != initial(flags_inv))
if(initial(flags_inv) & HIDEFACE) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again.
flags_inv |= HIDEFACE
if(flags != initial(flags))
if(initial(flags) & MASKCOVERSMOUTH) //If the mask covers the mouth when it's down and can be adjusted yet lost that trait when it was adjusted, make it cover the mouth again.
flags |= MASKCOVERSMOUTH
if(initial(flags) & AIRTIGHT) //If the mask is airtight and thus, one that you'd be able to run internals from yet can't because it was adjusted, make it airtight again.
flags |= AIRTIGHT
if(H.head == src && flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
H.head = null
user.put_in_hands(src)
else
icon_state += "_up"
to_chat(user, "You push \the [src] out of the way.")
gas_transfer_coefficient = null
permeability_coefficient = null
mask_adjusted = 1
if(adjusted_flags)
slot_flags = adjusted_flags
if(ishuman(user) && H.internal && user.wear_mask == src && H.internals) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals.
Otherwise, they adjusted it while it was in their hands or some such so we won't be needing to turn off internals.*/
H.internals.icon_state = "internal0"
H.internal = null
if(flags_inv & HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
flags_inv &= ~HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE).
This reveals the user's face since the bandana will now be going on their head.*/
if(flags & MASKCOVERSMOUTH) //Mask won't cover the mouth any more since it's been pushed out of the way. Allows for CPRing with adjusted masks.
flags &= ~MASKCOVERSMOUTH
if(flags & AIRTIGHT) //If the mask was airtight, it won't be anymore since you just pushed it off your face.
flags &= ~AIRTIGHT
if(user.wear_mask == src && initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
user.wear_mask = null
user.put_in_hands(src)
usr.update_inv_wear_mask()
usr.update_inv_head()
if(user.incapacitated()) //This check allows you to adjust your masks while you're buckled into chairs or beds.
return
if(mask_adjusted)
icon_state = initial(icon_state)
gas_transfer_coefficient = initial(gas_transfer_coefficient)
permeability_coefficient = initial(permeability_coefficient)
to_chat(user, "<span class='notice'>You push \the [src] back into place.</span>")
mask_adjusted = 0
slot_flags = initial(slot_flags)
if(flags_inv != initial(flags_inv))
if(initial(flags_inv) & HIDEFACE) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again.
flags_inv |= HIDEFACE
if(flags != initial(flags))
if(initial(flags) & MASKCOVERSMOUTH) //If the mask covers the mouth when it's down and can be adjusted yet lost that trait when it was adjusted, make it cover the mouth again.
flags |= MASKCOVERSMOUTH
if(initial(flags) & AIRTIGHT) //If the mask is airtight and thus, one that you'd be able to run internals from yet can't because it was adjusted, make it airtight again.
flags |= AIRTIGHT
if(H.head == src && flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
H.head = null
user.put_in_hands(src)
else
icon_state += "_up"
to_chat(user, "<span class='notice'>You push \the [src] out of the way.</span>")
gas_transfer_coefficient = null
permeability_coefficient = null
mask_adjusted = 1
if(adjusted_flags)
slot_flags = adjusted_flags
if(ishuman(user) && H.internal && user.wear_mask == src) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals.
Otherwise, they adjusted it while it was in their hands or some such so we won't be needing to turn off internals.*/
H.update_internals_hud_icon(0)
H.internal = null
if(flags_inv & HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
flags_inv &= ~HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE).
This reveals the user's face since the bandana will now be going on their head.*/
if(flags & MASKCOVERSMOUTH) //Mask won't cover the mouth any more since it's been pushed out of the way. Allows for CPRing with adjusted masks.
flags &= ~MASKCOVERSMOUTH
if(flags & AIRTIGHT) //If the mask was airtight, it won't be anymore since you just pushed it off your face.
flags &= ~AIRTIGHT
if(user.wear_mask == src && initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
user.wear_mask = null
user.put_in_hands(src)
usr.update_inv_wear_mask()
usr.update_inv_head()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
//Shoes
/obj/item/clothing/shoes
@@ -493,6 +493,7 @@ BLIND // can't see anything
to_chat(user, "<span class='notice'>You attempt to button up the velcro on \the [src], before promptly realising how retarded you are.</span>")
/obj/item/clothing/suit/equipped(var/mob/living/carbon/human/user, var/slot) //Handle tail-hiding on a by-species basis.
..()
if(ishuman(user) && hide_tail_by_species && slot == slot_wear_suit)
if(user.species.name in hide_tail_by_species)
if(!(flags_inv & HIDETAIL)) //Hide the tail if the user's species is in the hide_tail_by_species list and the tail isn't already hidden.
@@ -511,10 +512,11 @@ BLIND // can't see anything
return
adjustsuit(user)
/obj/item/clothing/suit/ui_action_click() //This is what happens when you click the HUD action button to adjust your suit.
/obj/item/clothing/suit/ui_action_click(mob/user) //This is what happens when you click the HUD action button to adjust your suit.
if(!ignore_suitadjust)
adjustsuit(usr)
else ..() //This is required in order to ensure that the UI buttons for items that have alternate functions tied to UI buttons still work.
adjustsuit(user)
else
..() //This is required in order to ensure that the UI buttons for items that have alternate functions tied to UI buttons still work.
//Spacesuit
//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together.

View File

@@ -101,15 +101,11 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
actions_types = list(/datum/action/item_action/toggle_research_scanner)
/obj/item/clothing/glasses/science/equipped(mob/user, slot)
/obj/item/clothing/glasses/science/item_action_slot_check(slot)
if(slot == slot_glasses)
user.scanner.Grant(user)
..(user, slot)
/obj/item/clothing/glasses/science/dropped(mob/user)
user.scanner.devices -= 1
..(user)
return 1
/obj/item/clothing/glasses/science/night
name = "Night Vision Science Goggle"
@@ -242,13 +238,16 @@
/obj/item/clothing/glasses/sunglasses/noir
name = "noir sunglasses"
desc = "Somehow these seem even more out-of-date than normal sunglasses."
action_button_name = "Noir Mode"
actions_types = list(/datum/action/item_action/noir)
var/noir_mode = 0
color_view = MATRIX_GREYSCALE
/obj/item/clothing/glasses/sunglasses/noir/attack_self()
if(is_equipped())
toggle_noir()
toggle_noir()
/obj/item/clothing/glasses/sunglasses/noir/item_action_slot_check(slot)
if(slot == slot_glasses)
return 1
/obj/item/clothing/glasses/sunglasses/noir/proc/toggle_noir()
if(!noir_mode)
@@ -277,12 +276,11 @@
name = "agreeable glasses"
desc = "H.C Limited edition."
var/punused = null
action_button_name = "YEAH!"
actions_types = list(/datum/action/item_action/YEEEAAAAAHHHHHHHHHHHHH)
/obj/item/clothing/glasses/sunglasses/yeah/attack_self()
pun()
/obj/item/clothing/glasses/sunglasses/yeah/verb/pun()
set category = "Object"
set name = "YEAH!"
@@ -330,7 +328,7 @@
desc = "Protects the eyes from welders, approved by the mad scientist association."
icon_state = "welding-g"
item_state = "welding-g"
action_button_name = "Flip welding goggles"
actions_types = list(/datum/action/item_action/toggle)
flash_protect = 2
tint = 2
species_fit = list("Vox")
@@ -375,7 +373,6 @@
item_state = "rwelding-g"
flash_protect = 2
tint = 0
action_button_name = "Flip welding goggles"
/obj/item/clothing/glasses/sunglasses/blindfold
name = "blindfold"

View File

@@ -14,6 +14,7 @@
H.add_hud_to(user)
/obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user)
..()
if(HUDType && istype(user) && user.glasses == src)
var/datum/atom_hud/H = huds[HUDType]
H.remove_hud_from(user)

View File

@@ -9,19 +9,21 @@
item_color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
armor = list(melee = 15, bullet = 5, laser = 20, energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
action_button_name = "Toggle Helmet Light"
actions_types = list(/datum/action/item_action/toggle_helmet_light)
attack_self(mob/user)
if(!isturf(user.loc))
to_chat(user, "You cannot turn the light on while in this [user.loc]")//To prevent some lighting anomalities.
/obj/item/clothing/head/hardhat/attack_self(mob/user)
on = !on
icon_state = "hardhat[on]_[item_color]"
item_state = "hardhat[on]_[item_color]"
return
on = !on
icon_state = "hardhat[on]_[item_color]"
item_state = "hardhat[on]_[item_color]"
if(on)
set_light(brightness_on)
else
set_light(0)
if(on) set_light(brightness_on)
else set_light(0)
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/clothing/head/hardhat/orange

View File

@@ -100,7 +100,7 @@
icon_state = "justice"
toggle_message = "You turn off the lights on"
alt_toggle_message = "You turn on the lights on"
action_button_name = "Toggle JUSTICE"
actions_types = list(/datum/action/item_action/toggle_helmet_light)
can_toggle = 1
toggle_cooldown = 20
active_sound = 'sound/items/WEEOO1.ogg'

View File

@@ -350,7 +350,7 @@
item_state = "griffinhat"
flags = BLOCKHAIR|NODROP
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
action_button_name = "Caw"
actions_types = list(/datum/action/item_action/caw)
/obj/item/clothing/head/griffin/attack_self()
caw()

View File

@@ -22,7 +22,7 @@
tint = 2
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
action_button_name = "flip welding helmet"
actions_types = list(/datum/action/item_action/toggle)
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi',
@@ -148,7 +148,6 @@
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
action_button_name = "Toggle Pumpkin Light"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
brightness_on = 2 //luminosity when on
@@ -160,7 +159,6 @@
item_state = "hardhat0_reindeer"
item_color = "reindeer"
flags_inv = 0
action_button_name = "Toggle Nose Light"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
brightness_on = 1 //luminosity when on

View File

@@ -6,8 +6,7 @@
flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
action_button_name = "Adjust Balaclava"
ignore_maskadjust = 0
actions_types = list(/datum/action/item_action/adjust)
adjusted_flags = SLOT_HEAD
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(

View File

@@ -7,8 +7,7 @@
w_class = 2
gas_transfer_coefficient = 0.10
permeability_coefficient = 0.50
action_button_name = "Adjust Breath Mask"
ignore_maskadjust = 0
actions_types = list(/datum/action/item_action/adjust)
species_fit = list("Vox", "Vox Armalis", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi',
@@ -38,5 +37,4 @@
item_state = "voxmask"
permeability_coefficient = 0.01
species_restricted = list("Vox")
action_button_name = null
ignore_maskadjust = 1
actions_types = list()

View File

@@ -29,7 +29,7 @@
tint = 2
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
origin_tech = "materials=2;engineering=2"
action_button_name = "Toggle Welding Helmet"
actions_types = list(/datum/action/item_action/toggle)
/obj/item/clothing/mask/gas/welding/attack_self()
toggle()
@@ -166,7 +166,7 @@
desc = "Twoooo!"
icon_state = "owl"
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | NODROP
action_button_name = "Hoot"
actions_types = list(/datum/action/item_action/hoot)
/obj/item/clothing/mask/gas/owl_mask/attack_self()
hoot()
@@ -190,26 +190,24 @@
/obj/item/clothing/mask/gas/sechailer
name = "security gas mask"
desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device, plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you taze them. Do not tamper with the device."
action_button_name = "HALT!"
icon_state = "sechailer"
var/aggressiveness = 2
var/safety = 1
ignore_maskadjust = 0
action_button_name = "HALT!"
actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust)
/obj/item/clothing/mask/gas/sechailer/hos
name = "\improper HOS SWAT mask"
desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a tan stripe."
icon_state = "hosmask"
aggressiveness = 3
ignore_maskadjust = 1
actions_types = list(/datum/action/item_action/halt)
/obj/item/clothing/mask/gas/sechailer/warden
name = "\improper Warden SWAT mask"
desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a blue stripe."
icon_state = "wardenmask"
aggressiveness = 3
ignore_maskadjust = 1
actions_types = list(/datum/action/item_action/halt)
/obj/item/clothing/mask/gas/sechailer/swat
@@ -217,7 +215,7 @@
desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000."
icon_state = "officermask"
aggressiveness = 3
ignore_maskadjust = 1
actions_types = list(/datum/action/item_action/halt)
/obj/item/clothing/mask/gas/sechailer/blue
name = "\improper blue SWAT mask"
@@ -225,7 +223,7 @@
icon_state = "blue_sechailer"
item_state = "blue_sechailer"
aggressiveness = 3
ignore_maskadjust = 1
actions_types = list(/datum/action/item_action/halt)
/obj/item/clothing/mask/gas/sechailer/cyborg
name = "security hailer"
@@ -233,16 +231,13 @@
icon = 'icons/obj/device.dmi'
icon_state = "taperecorder_idle"
aggressiveness = 1 //Borgs are nicecurity!
ignore_maskadjust = 1
actions_types = list(/datum/action/item_action/halt)
/obj/item/clothing/mask/gas/sechailer/cyborg/New()
..()
verbs -= /obj/item/clothing/mask/gas/sechailer/verb/adjust
/obj/item/clothing/mask/gas/sechailer/verb/adjust()
set category = "Object"
set name = "Adjust Mask"
adjustmask(usr)
/obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, actiontype)
if(actiontype == /datum/action/item_action/halt)
halt()
else
adjustmask(user)
/obj/item/clothing/mask/gas/sechailer/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/screwdriver))

View File

@@ -64,8 +64,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 25, rad = 0)
action_button_name = "Adjust Sterile Mask"
ignore_maskadjust = 0
actions_types = list(/datum/action/item_action/adjust)
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi',
@@ -209,7 +208,6 @@
flags_inv = HIDEFACE
w_class = 1
slot_flags = SLOT_MASK
ignore_maskadjust = 0
adjusted_flags = SLOT_HEAD
icon_state = "bandbotany"
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
@@ -219,7 +217,7 @@
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi'
)
action_button_name = "Adjust Bandana"
actions_types = list(/datum/action/item_action/adjust)
/obj/item/clothing/mask/bandana/attack_self(var/mob/user)
adjustmask(user)

View File

@@ -5,18 +5,18 @@
var/magboot_state = "magboots"
var/magpulse = 0
var/slowdown_active = 2
action_button_name = "Toggle Magboots"
actions_types = list(/datum/action/item_action/toggle)
strip_delay = 70
put_on_delay = 70
species_restricted = null
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
if(src.magpulse)
src.flags &= ~NOSLIP
src.slowdown = SHOES_SLOWDOWN
if(magpulse)
flags &= ~NOSLIP
slowdown = SHOES_SLOWDOWN
else
src.flags |= NOSLIP
src.slowdown = slowdown_active
flags |= NOSLIP
slowdown = slowdown_active
magpulse = !magpulse
icon_state = "[magboot_state][magpulse]"
to_chat(user, "You [magpulse ? "enable" : "disable"] the mag-pulse traction system.")

View File

@@ -182,10 +182,8 @@
"Vox Armalis" = 'icons/mob/species/armalis/feet.dmi'
)
action_button_name = "Toggle the magclaws"
/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user)
if(src.magpulse)
if(magpulse)
flags &= ~NOSLIP
magpulse = 0
flags |= NODROP

View File

@@ -22,7 +22,7 @@
desc = "An advanced spacesuit equipped with teleportation and anti-compression technology"
icon_state = "chronosuit"
item_state = "chronosuit"
action_button_name = "Toggle Chronosuit"
actions_types = list(/datum/action/item_action/toggle)
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90)
var/obj/item/clothing/head/helmet/space/chronos/helmet = null
var/obj/effect/chronos_cam/camera = null

View File

@@ -46,13 +46,9 @@
var/base_state = "plasmaman_helmet"
var/brightness_on = 4 //luminosity when on
var/on = 0
action_button_name = "Toggle Helmet Light"
actions_types = list(/datum/action/item_action/toggle_helmet_light)
/obj/item/clothing/head/helmet/space/eva/plasmaman/attack_self(mob/user)
if(!isturf(user.loc))
to_chat(user, "<span class='warning'>You cannot turn the light on while in this [user.loc].</span>")//To prevent some lighting anomalities.
return
toggle_light(user)
/obj/item/clothing/head/helmet/space/eva/plasmaman/proc/toggle_light(mob/user)
@@ -68,6 +64,10 @@
var/mob/living/carbon/human/H = user
H.update_inv_head()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
// ENGINEERING
/obj/item/clothing/suit/space/eva/plasmaman/assistant
name = "plasmaman assistant suit"

View File

@@ -10,7 +10,7 @@
var/brightness_on = 4 //luminosity when on
var/on = 0
item_color = "engineering" //Determines used sprites: rig[on]-[color] and rig[on]-[color]2 (lying down sprite)
action_button_name = "Toggle Helmet Light"
actions_types = list(/datum/action/item_action/toggle_helmet_light)
//Species-specific stuff.
species_restricted = list("exclude","Diona","Wryn")
@@ -31,10 +31,6 @@
)
/obj/item/clothing/head/helmet/space/rig/attack_self(mob/user)
if(!isturf(user.loc))
to_chat(user, "<span class='warning'>You cannot turn the light on while in this [user.loc].</span>")//To prevent some lighting anomalities.
return
toggle_light(user)
/obj/item/clothing/head/helmet/space/rig/proc/toggle_light(mob/user)
@@ -50,6 +46,14 @@
var/mob/living/carbon/human/H = user
H.update_inv_head()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/clothing/head/helmet/space/rig/item_action_slot_check(slot)
if(slot == slot_head)
return 1
/obj/item/clothing/suit/space/rig
name = "hardsuit"
desc = "A special space suit for environments that might pose hazards beyond just the vacuum of space. Provides more protection than a standard space suit."
@@ -298,17 +302,12 @@
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
on = 1
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
action_button_name = "Toggle Helmet Mode"
actions_types = list(/datum/action/item_action/toggle_helmet_mode)
/obj/item/clothing/head/helmet/space/rig/syndi/update_icon()
icon_state = "rig[on]-[item_color]"
/obj/item/clothing/head/helmet/space/rig/syndi/attack_self(mob/user)
if(!isturf(user.loc))
to_chat(user, "You cannot toggle your helmet while in this [user.loc].")//To prevent some lighting anomalities.
return
on = !on
if(on)
to_chat(user, "<span class='notice'>You switch your helmet to travel mode. It will allow you to stand in zero pressure environments, at the cost of speed and armor.</span>")
@@ -331,6 +330,10 @@
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
user.update_inv_head()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/clothing/suit/space/rig/syndi
name = "blood-red hardsuit"
desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders."
@@ -339,7 +342,7 @@
item_color = "syndi"
w_class = 3
var/on = 1
action_button_name = "Toggle Hardsuit Mode"
actions_types = list(/datum/action/item_action/toggle_hardsuit_mode)
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
@@ -370,6 +373,10 @@
user.update_inv_wear_suit()
user.update_inv_w_uniform()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
//Elite Syndie suit
/obj/item/clothing/head/helmet/space/rig/syndi/elite
name = "elite syndicate hardsuit helmet"

View File

@@ -337,7 +337,7 @@
/obj/item/rig_module/maneuvering_jets/engage()
if(!..())
return 0
jets.toggle_rockets()
jets.toggle_stabilization(usr)
return 1
/obj/item/rig_module/maneuvering_jets/activate()
@@ -354,15 +354,13 @@
suit_overlay = null
holder.update_icon()
if(!jets.on)
jets.toggle()
jets.turn_on()
return 1
/obj/item/rig_module/maneuvering_jets/deactivate()
if(!..())
return 0
if(jets.on)
jets.toggle()
jets.turn_off()
return 1
/obj/item/rig_module/maneuvering_jets/New()

View File

@@ -50,7 +50,8 @@
W.forceMove(src)
attached_badge = W
action_button_name = "Remove Holobadge"
var/datum/action/A = new /datum/action/item_action/remove_badge(src)
A.Grant(user)
icon_state = "armorsec"
user.update_inv_wear_suit()
desc = "An armored vest that protects against some damage. This one has [attached_badge] attached to it."
@@ -63,8 +64,10 @@
add_fingerprint(user)
user.put_in_hands(attached_badge)
action_button_name = null
action.Remove(user)
for(var/X in actions)
var/datum/action/A = X
A.Remove(user)
icon_state = "armor"
user.update_inv_wear_suit()
desc = "An armored vest that protects against some damage. This one has a clip for a holobadge."
@@ -101,7 +104,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS
ignore_suitadjust = 0
suit_adjusted = 1
action_button_name = "Open/Close Jacket"
actions_types = list(/datum/action/item_action/openclose)
adjust_flavour = "unzip"
/obj/item/clothing/suit/armor/hos
@@ -124,7 +127,7 @@
flags_inv = 0
ignore_suitadjust = 0
suit_adjusted = 1
action_button_name = "Open/Close Trenchcoat"
actions_types = list(/datum/action/item_action/openclose)
adjust_flavour = "unbutton"
/obj/item/clothing/suit/armor/hos/jensen
@@ -243,7 +246,7 @@
item_state = "reactiveoff"
blood_overlay_type = "armor"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
action_button_name = "Toggle Reactive Armor"
actions_types = list(/datum/action/item_action/toggle)
unacidable = 1
hit_reaction_chance = 50

View File

@@ -1,7 +1,7 @@
//Hoods for winter coats and chaplain hoodie etc
/obj/item/clothing/suit/hooded
action_button_name = "Adjust hood"
actions_types = list(/datum/action/item_action/toggle)
var/obj/item/clothing/head/hood
var/hoodtype = /obj/item/clothing/head/winterhood //so the chaplain hoodie or other hoodies can override this
@@ -22,6 +22,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()
@@ -35,6 +39,9 @@
H.unEquip(hood, 1)
H.update_inv_wear_suit()
hood.loc = src
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/clothing/suit/hooded/dropped()
..()
@@ -64,5 +71,8 @@
suit_adjusted = 1
icon_state = "[initial(icon_state)]_hood"
H.update_inv_wear_suit()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
else
RemoveHood()

View File

@@ -210,7 +210,7 @@
body_parts_covered = UPPER_TORSO|ARMS
ignore_suitadjust = 0
suit_adjusted = 1
action_button_name = "Button/Unbutton Jacket"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
/obj/item/clothing/suit/storage/lawyer/bluejacket
@@ -222,7 +222,7 @@
body_parts_covered = UPPER_TORSO|ARMS
ignore_suitadjust = 0
suit_adjusted = 1
action_button_name = "Button/Unbutton Jacket"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
/obj/item/clothing/suit/storage/lawyer/purpjacket
@@ -243,7 +243,7 @@
body_parts_covered = UPPER_TORSO|ARMS
ignore_suitadjust = 0
suit_adjusted = 1
action_button_name = "Button/Unbutton Jacket"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
species_fit = list("Vox")
sprite_sheets = list(
@@ -258,7 +258,7 @@
blood_overlay_type = "coat"
body_parts_covered = UPPER_TORSO|ARMS
ignore_suitadjust = 0
action_button_name = "Button/Unbutton Jacket"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
species_fit = list("Vox")
sprite_sheets = list(
@@ -276,7 +276,7 @@
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen,/obj/item/device/rad_laser)
ignore_suitadjust = 0
suit_adjusted = 1
action_button_name = "Button/Unbutton Jacket"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
species_fit = list("Vox")
sprite_sheets = list(

View File

@@ -13,7 +13,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
)
action_button_name = "Button/Unbutton Labcoat"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
/obj/item/clothing/suit/storage/labcoat/cmo

View File

@@ -558,7 +558,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
ignore_suitadjust = 0
suit_adjusted = 1
action_button_name = "Open/Close Jacket"
actions_types = list(/datum/action/item_action/openclose)
adjust_flavour = "unzip"
species_fit = list("Vox")
sprite_sheets = list(
@@ -623,7 +623,7 @@
icon_state = "militaryjacket"
item_state = "militaryjacket"
ignore_suitadjust = 1
action_button_name = null
actions_types = list()
adjust_flavour = null
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/revolver,/obj/item/weapon/gun/projectile/revolver/detective)
@@ -717,7 +717,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
action_button_name = "Zip/Unzip Jacket"
actions_types = list(/datum/action/item_action/zipper)
adjust_flavour = "unzip"
species_fit = list("Vox")
sprite_sheets = list(
@@ -746,7 +746,7 @@
desc = "Pompadour not included."
icon_state = "leatherjacket"
ignore_suitadjust = 1
action_button_name = null
actions_types = list()
adjust_flavour = null
/obj/item/clothing/suit/officercoat
@@ -755,7 +755,7 @@
icon_state = "officersuit"
item_state = "officersuit"
ignore_suitadjust = 0
action_button_name = "Button/Unbutton Jacket"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
species_fit = list("Vox")
sprite_sheets = list(
@@ -768,7 +768,7 @@
icon_state = "soldiersuit"
item_state = "soldiersuit"
ignore_suitadjust = 0
action_button_name = "Button/Unbutton Jacket"
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
species_fit = list("Vox")
sprite_sheets = list(
@@ -783,7 +783,7 @@
body_parts_covered = ARMS
armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite)
action_button_name = "Toggle Owl Wings"
actions_types = list(/datum/action/item_action/toggle_wings)
flags = NODROP
/obj/item/clothing/suit/toggle/owlwings/griffinwings
@@ -823,7 +823,7 @@
desc = "An incredibly advanced and complex suit; it has so many buttons and dials as to be incomprehensible."
icon_state = "bomb"
item_state = "bomb"
action_button_name = "Toggle Advanced Protective Suit"
actions_types = list(/datum/action/item_action/toggle)
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP

View File

@@ -10,7 +10,6 @@
var/slot = "decor"
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
var/image/inv_overlay = null //overlay used when attached to clothing.
action_button_custom_type = /datum/action/item_action/accessory
/obj/item/clothing/accessory/New()
..()
@@ -23,6 +22,13 @@
has_suit = S
loc = has_suit
has_suit.overlays += inv_overlay
has_suit.actions += actions
for(var/X in actions)
var/datum/action/A = X
if(has_suit.is_equipped())
var/mob/M = has_suit.loc
A.Grant(M)
if(user)
to_chat(user, "<span class='notice'>You attach [src] to [has_suit].</span>")
@@ -32,6 +38,14 @@
if(!has_suit)
return
has_suit.overlays -= inv_overlay
has_suit.actions -= actions
for(var/X in actions)
var/datum/action/A = X
if(ismob(has_suit.loc))
var/mob/M = has_suit.loc
A.Remove(M)
has_suit = null
usr.put_in_hands(src)
src.add_fingerprint(user)

View File

@@ -6,7 +6,7 @@
slot = "utility"
var/holster_allow = /obj/item/weapon/gun
var/obj/item/weapon/gun/holstered = null
action_button_name = "Holster"
actions_types = list(/datum/action/item_action/accessory/holster)
w_class = 3 // so it doesn't fit in pockets
//subtypes can override this to specify what can be holstered

View File

@@ -6,7 +6,7 @@
slot = "utility"
var/slots = 3
var/obj/item/weapon/storage/internal/hold
action_button_name = "View Storage"
actions_types = list(/datum/action/item_action/accessory/storage)
w_class = 3 // so it doesn't fit in pockets
/obj/item/clothing/accessory/storage/New()

View File

@@ -322,7 +322,7 @@
icon_state = "kidosvest"
item_state = "kidosvest"
ignore_suitadjust = 1
action_button_name = null
actions_types = list()
adjust_flavour = null
species_fit = null
sprite_sheets = null
@@ -437,7 +437,7 @@
icon_state = "fox_jacket"
item_state = "fox_jacket"
ignore_suitadjust = 1
action_button_name = null
actions_types = list()
adjust_flavour = null
species_fit = null
sprite_sheets = null
@@ -489,7 +489,7 @@
icon_state = "chronx_hood"
item_state = "chronx_hood"
flags = HEADCOVERSEYES | BLOCKHAIR
action_button_name = "Transform Hood"
actions_types = list(/datum/action/item_action/toggle)
var/adjusted = 0
/obj/item/clothing/head/fluff/chronx/ui_action_click()
@@ -519,7 +519,7 @@
icon_state = "chronx_robe"
item_state = "chronx_robe"
flags_size = ONESIZEFITSALL
action_button_name = "Transform Robes"
actions_types = list(/datum/action/item_action/toggle)
adjust_flavour = "untransform"
ignore_suitadjust = 0

View File

@@ -20,6 +20,7 @@ var/global/list/boo_phrases=list(
school = "transmutation"
charge_max = 600
clothes_req = 0
stat_allowed = 1
invocation = ""
invocation_type = "none"
range = 1 // Or maybe 3?

View File

@@ -54,8 +54,12 @@
if(in_contents_of(/obj/mecha))
canmove = 1
use_me = 1 //If it can move, let it emote
else if(istype(loc, /obj/item/device/mmi)) canmove = 1 //mmi won't move anyways so whatever
else canmove = 0
else if(istype(loc, /obj/item/device/mmi))
canmove = 1 //mmi won't move anyways so whatever
else
canmove = 0
update_action_buttons_icon()
return canmove
/mob/living/carbon/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.

View File

@@ -644,8 +644,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
if(do_mob(usr, src, POCKET_STRIP_DELAY))
if(internal)
internal = null
if(internals)
internals.icon_state = "internal0"
update_internals_hud_icon(0)
else
var/no_mask2
if(!(wear_mask && wear_mask.flags & AIRTIGHT))
@@ -655,8 +654,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
to_chat(usr, "<span class='warning'>[src] is not wearing a suitable mask or helmet!</span>")
return
internal = ITEM
if(internals)
internals.icon_state = "internal1"
update_internals_hud_icon(1)
visible_message("<span class='danger'>[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM].</span>", \
"<span class='userdanger'>[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM].</span>")
@@ -858,7 +856,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
else
clear_alert("handcuffed")
update_action_buttons() //some of our action buttons might be unusable when we're handcuffed.
update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed.
update_inv_handcuffed()
update_hud_handcuffed()
@@ -1031,3 +1029,16 @@ so that different stomachs can handle things in different ways VB*/
var/obj/item/LH = get_inactive_hand()
if(LH)
. |= LH.GetAccess()
/mob/living/carbon/proc/can_breathe_gas()
if(!wear_mask)
return TRUE
if(!(wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) && internal == null)
return TRUE
return FALSE
/mob/living/carbon/proc/update_internals_hud_icon(internal_state = 0)
if(hud_used && hud_used.internals)
hud_used.internals.icon_state = "internal[internal_state]"

View File

@@ -79,7 +79,7 @@
break
if(thrust)
if((movement_dir || thrust.stabilization_on) && thrust.allow_thrust(0.01, src))
if((movement_dir || thrust.stabilizers) && thrust.allow_thrust(0.01, src))
return 1
return 0

View File

@@ -164,9 +164,8 @@
update_fhair()
update_head_accessory()
if(internal)
if(internals)
internals.icon_state = "internal0"
internal = null
update_internals_hud_icon(0)
sec_hud_set_ID()
update_inv_wear_mask()
else if(I == wear_id)

View File

@@ -328,7 +328,6 @@
/mob/living/carbon/human/get_breath_from_internal(volume_needed) //making this call the parent would be far too complicated
if(internal)
var/null_internals = 0 //internals are invalid, therefore turn them off
var/skip_contents_check = 0 //rigsuit snowflake, oxygen tanks aren't stored inside the mob, so the 'contents.Find' check has to be skipped.
@@ -353,12 +352,10 @@
if(internal) //check for hud updates every time this is called
if(internals)
internals.icon_state = "internal1"
update_internals_hud_icon(1)
return internal.remove_air_volume(volume_needed) //returns the valid air
else
if(internals)
internals.icon_state = "internal0"
update_internals_hud_icon(0)
return null

View File

@@ -125,8 +125,7 @@
H.equip_or_collect(new/obj/item/weapon/tank/plasma/plasmaman(H), tank_slot) // Bigger plasma tank from Raggy.
to_chat(H, "<span class='notice'>You are now running on plasma internals from the [H.s_store] in your [tank_slot_name]. You must breathe plasma in order to survive, and are extremely flammable.</span>")
H.internal = H.get_item_by_slot(tank_slot)
if(H.internals)
H.internals.icon_state = "internal1"
H.update_internals_hud_icon(1)
// Plasmamen are so fucking different that they need their own proc.
/datum/species/plasmaman/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H)

View File

@@ -364,8 +364,7 @@
H.equip_or_collect(new /obj/item/weapon/tank/emergency_oxygen/vox(H), slot_l_hand)
to_chat(H, "<span class='notice'>You are now running on nitrogen internals from the [H.l_hand] in your hand. Your species finds oxygen toxic, so you must breathe nitrogen only.</span>")
H.internal = H.l_hand
if(H.internals)
H.internals.icon_state = "internal1"
H.update_internals_hud_icon(1)
/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
updatespeciescolor(H)

View File

@@ -181,19 +181,17 @@
/mob/living/carbon/proc/get_breath_from_internal(volume_needed)
if(internal)
if(!contents.Find(internal))
if(internal.loc != src)
internal = null
if(!wear_mask || !(wear_mask.flags & AIRTIGHT)) //not wearing mask or non-breath mask
if(!head || !(head.flags & AIRTIGHT)) //not wearing helmet or non-breath helmet
internal = null //turn off internals
if(internal)
if(internals)
internals.icon_state = "internal1"
update_internals_hud_icon(1)
return internal.remove_air_volume(volume_needed)
else
if(internals)
internals.icon_state = "internal0"
update_internals_hud_icon(0)
return
@@ -437,12 +435,6 @@
see_invisible = see_override
/mob/living/carbon/handle_actions()
..()
for(var/obj/item/I in internal_organs)
give_action_button(I, 1)
/mob/living/carbon/handle_hud_icons()
return

View File

@@ -243,6 +243,7 @@
else if(nutrition >= get_grow_nutrition() && amount_grown < 10)
nutrition -= 20
amount_grown++
update_action_buttons_icon()
if(amount_grown >= 10 && !Victim && !Target && !ckey)
if(is_adult)

View File

@@ -2,4 +2,5 @@
blinded = max(blinded, 1)
clear_fullscreens()
update_action_buttons_icon()
..(gibbed)

View File

@@ -49,8 +49,6 @@
handle_disabilities() // eye, ear, brain damages
handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc
handle_actions()
update_canmove()
if(client)
@@ -197,7 +195,6 @@
handle_vision()
handle_hud_icons()
update_action_buttons()
return 1
@@ -247,84 +244,6 @@
/mob/living/proc/handle_hud_icons_health()
return
/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(I.action_button_custom_type)
I.action = new I.action_button_custom_type
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/update_action_buttons()
if(!hud_used) return
if(!client) return
if(!hud_used.hud_shown)
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
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
B.UpdateIcon()
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)
client.screen += hud_used.hide_actions_toggle
/mob/living/proc/process_nations()
if(client)
var/client/C = client

View File

@@ -49,7 +49,6 @@
var/list/icon/pipes_shown = list()
var/last_played_vent
var/list/datum/action/actions = list()
var/step_count = 0
var/list/butcher_results = null

View File

@@ -234,6 +234,7 @@
else
canmove = 1
update_transform()
update_action_buttons_icon()
return canmove
//Robots on fire

View File

@@ -88,6 +88,8 @@ var/list/robot_verbs_default = list(
var/obj/item/borg/sight/hud/sec/sechud = null
var/obj/item/borg/sight/hud/med/healthhud = null
var/datum/action/item_action/toggle_research_scanner/scanner = null
/mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0, var/alien = 0)
spark_system = new /datum/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
@@ -144,6 +146,7 @@ var/list/robot_verbs_default = list(
cell_component.installed = 1
diag_hud_set_borgcell()
scanner = new(src)
scanner.Grant(src)
/mob/living/silicon/robot/proc/init(var/alien=0)

View File

@@ -627,6 +627,7 @@
else
canmove = 1
update_transform()
update_action_buttons_icon()
return canmove
/mob/living/simple_animal/update_transform()

View File

@@ -1052,6 +1052,7 @@ var/list/slot_equipment_priority = list( \
layer = initial(layer)
update_transform()
update_action_buttons_icon()
return canmove
/mob/proc/fall(var/forced)
@@ -1367,16 +1368,7 @@ mob/proc/yank_out_object()
/mob/proc/AddSpell(var/obj/effect/proc_holder/spell/spell)
spell_list += spell
if(!spell.action)
spell.action = new/datum/action/spell_action
spell.action.target = spell
spell.action.name = spell.name
spell.action.button_icon = spell.action_icon
spell.action.button_icon_state = spell.action_icon_state
spell.action.background_icon_state = spell.action_background_icon_state
if(isliving(src))
spell.action.Grant(src)
return
spell.action.Grant(src)
//override to avoid rotating pixel_xy on mobs
/mob/shuttleRotate(rotation)

View File

@@ -13,7 +13,6 @@
var/obj/screen/hands = null
var/obj/screen/pullin = null
var/obj/screen/internals = null
var/obj/screen/i_select = null
var/obj/screen/m_select = null
var/obj/screen/healths = null
@@ -123,7 +122,6 @@
hud_possible = list(SPECIALROLE_HUD)
var/research_scanner = 0 //For research scanner equipped mobs. Enable to show research data when examining.
var/datum/action/scan_mode/scanner = new
var/list/grabbed_by = list( )
var/list/requests = list( )
@@ -233,4 +231,6 @@
var/datum/vision_override/vision_type = null //Vision override datum.
var/list/permanent_huds = list()
var/list/permanent_huds = list()
var/list/actions = list()

View File

@@ -251,7 +251,9 @@ obj/item/weapon/gun/proc/newshot(params)
I.loc = src
update_icon()
update_gunlight(user)
verbs += /obj/item/weapon/gun/proc/toggle_gunlight
var/datum/action/A = new /datum/action/item_action/toggle_gunlight(src)
if(loc == user)
A.Grant(user)
if(istype(I, /obj/item/weapon/screwdriver))
if(F && can_flashlight)
@@ -262,7 +264,8 @@ obj/item/weapon/gun/proc/newshot(params)
update_gunlight(user)
S.update_brightness(user)
update_icon()
verbs -= /obj/item/weapon/gun/proc/toggle_gunlight
for(var/datum/action/item_action/toggle_gunlight/TGL in actions)
qdel(TGL)
if(unique_rename)
if(istype(I, /obj/item/weapon/pen))
@@ -296,6 +299,10 @@ obj/item/weapon/gun/proc/newshot(params)
else
set_light(0)
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/weapon/gun/pickup(mob/user)
..()
if(azoom)
@@ -376,7 +383,7 @@ obj/item/weapon/gun/proc/newshot(params)
/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

View File

@@ -5,7 +5,7 @@
can_suppress = 1
burst_size = 3
fire_delay = 2
action_button_name = "Toggle Firemode"
actions_types = list(/datum/action/item_action/toggle_firemode)
/obj/item/weapon/gun/projectile/automatic/isHandgun()
return 0
@@ -58,6 +58,9 @@
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
update_icon()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/weapon/gun/projectile/automatic/can_shoot()
return get_ammo()
@@ -107,7 +110,7 @@
fire_delay = 2
can_suppress = 0
burst_size = 1
action_button_name = null
actions_types = list()
/obj/item/weapon/gun/projectile/automatic/wt550/update_icon()
..()
@@ -129,7 +132,6 @@
origin_tech = "combat=5;materials=2;syndicate=8"
mag_type = /obj/item/ammo_box/magazine/m556
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
action_button_name = "Toggle Grenade Launcher"
can_suppress = 0
var/obj/item/weapon/gun/projectile/revolver/grenadelauncher/underbarrel
burst_size = 3
@@ -227,7 +229,7 @@
can_suppress = 0
burst_size = 1
fire_delay = 0
action_button_name = null
actions_types = list()
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New()
..()

View File

@@ -39,7 +39,7 @@
mag_type = /obj/item/ammo_box/magazine/m75
burst_size = 1
fire_delay = 0
action_button_name = null
actions_types = list()
/obj/item/weapon/gun/projectile/automatic/gyropistol/isHandgun()
return 1
@@ -65,7 +65,7 @@
burst_size = 1
fire_delay = 0
select = 0
action_button_name = null
actions_types = list()
/obj/item/weapon/gun/projectile/automatic/speargun/update_icon()
return

View File

@@ -8,7 +8,7 @@
can_suppress = 1
burst_size = 1
fire_delay = 0
action_button_name = null
actions_types = list()
/obj/item/weapon/gun/projectile/automatic/pistol/isHandgun()
return 1
@@ -64,4 +64,4 @@
can_suppress = 0
burst_size = 3
fire_delay = 2
action_button_name = "Toggle Firemode"
actions_types = list(/datum/action/item_action/toggle_firemode)

View File

@@ -15,7 +15,7 @@
zoomable = TRUE
zoom_amt = 7 //Long range, enough to see in front of you, but no tiles behind you.
slot_flags = SLOT_BACK
action_button_name = null
actions_types = list()
/obj/item/weapon/gun/projectile/automatic/sniper_rifle/update_icon()
if(magazine)

View File

@@ -26,7 +26,7 @@
can_suppress = 0
burst_size = 1
fire_delay = 0
action_button_name = null
actions_types = list()
/obj/item/weapon/gun/projectile/automatic/toy/pistol/update_icon()
..()

View File

@@ -292,11 +292,11 @@
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 1))
if(!(C.wear_mask && (C.internals != null || C.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)))
if(C.can_breathe_gas())
C.emote("gasp")
C.losebreath++
C.reagents.add_reagent("toxin",10)
C.reagents.add_reagent("neurotoxin2",20)
C.reagents.add_reagent("toxin", 10)
C.reagents.add_reagent("neurotoxin2", 20)
/datum/chemical_reaction/saltpetre
name = "saltpetre"
@@ -432,7 +432,7 @@
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 1))
if(!(C.wear_mask && (C.internals != null || C.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)))
if(C.can_breathe_gas())
C.reagents.add_reagent("jenkem", 25)
/datum/reagent/jenkem

View File

@@ -229,8 +229,8 @@
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 1))
if(!(C.wear_mask && (C.internals != null || C.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)))
C.reagents.add_reagent("cyanide",7)
if(C.can_breathe_gas())
C.reagents.add_reagent("cyanide", 7)
/datum/reagent/itching_powder
name = "Itching Powder"
@@ -633,8 +633,8 @@
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 2))
if(!(C.wear_mask && (C.internals != null || C.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)))
C.reagents.add_reagent("sarin",4)
if(C.can_breathe_gas())
C.reagents.add_reagent("sarin", 4)
/datum/reagent/sarin/on_mob_life(mob/living/M)
switch(current_cycle)

View File

@@ -16,11 +16,11 @@
name = "Slime management console"
desc = "A computer used for remotely handling slimes."
networks = list("SS13")
off_action = new/datum/action/camera_off/xenobio
var/datum/action/slime_place/slime_place_action = new
var/datum/action/slime_pick_up/slime_up_action = new
var/datum/action/feed_slime/feed_slime_action = new
var/datum/action/monkey_recycle/monkey_recycle_action = new
off_action = new /datum/action/innate/camera_off/xenobio
var/datum/action/innate/slime_place/slime_place_action = new
var/datum/action/innate/slime_pick_up/slime_up_action = new
var/datum/action/innate/feed_slime/feed_slime_action = new
var/datum/action/innate/monkey_recycle/monkey_recycle_action = new
var/list/stored_slimes = list()
var/max_slimes = 5
@@ -62,7 +62,7 @@
return
return ..()
/datum/action/camera_off/xenobio/Activate()
/datum/action/innate/camera_off/xenobio/Activate()
if(!target || !ishuman(target))
return
var/mob/living/carbon/C = target
@@ -88,12 +88,11 @@
src.Remove(C)
/datum/action/slime_place
/datum/action/innate/slime_place
name = "Place Slimes"
action_type = AB_INNATE
button_icon_state = "slime_down"
/datum/action/slime_place/Activate()
/datum/action/innate/slime_place/Activate()
if(!target || !ishuman(owner))
return
var/mob/living/carbon/human/C = owner
@@ -106,12 +105,11 @@
S.visible_message("[S] warps in!")
X.stored_slimes -= S
/datum/action/slime_pick_up
/datum/action/innate/slime_pick_up
name = "Pick up Slime"
action_type = AB_INNATE
button_icon_state = "slime_up"
/datum/action/slime_pick_up/Activate()
/datum/action/innate/slime_pick_up/Activate()
if(!target || !ishuman(owner))
return
var/mob/living/carbon/human/C = owner
@@ -131,12 +129,11 @@
X.stored_slimes += S
/datum/action/feed_slime
/datum/action/innate/feed_slime
name = "Feed Slimes"
action_type = AB_INNATE
button_icon_state = "monkey_down"
/datum/action/feed_slime/Activate()
/datum/action/innate/feed_slime/Activate()
if(!target || !ishuman(owner))
return
var/mob/living/carbon/human/C = owner
@@ -151,12 +148,11 @@
to_chat(owner, "[X] now has [X.monkeys] monkeys left.")
/datum/action/monkey_recycle
/datum/action/innate/monkey_recycle
name = "Recycle Monkeys"
action_type = AB_INNATE
button_icon_state = "monkey_up"
/datum/action/monkey_recycle/Activate()
/datum/action/innate/monkey_recycle/Activate()
if(!target || !ishuman(owner))
return
var/mob/living/carbon/human/C = owner

View File

@@ -47,7 +47,7 @@
name = "Activate Pill"
/datum/action/item_action/hands_free/activate_pill/Trigger()
if(!Checks())
if(!..())
return
to_chat(owner, "<span class='caution'>You grit your teeth and burst the implanted [target]!</span>")
add_logs(owner, null, "swallowed an implanted pill", target)

View File

@@ -49,7 +49,7 @@
implant_color = "#DE7E00"
slot = "brain_antidrop"
origin_tech = "materials=5;programming=4;biotech=4"
organ_action_name = "Toggle Anti-Drop"
actions_types = list(/datum/action/item_action/organ_action/toggle)
/obj/item/organ/internal/cyberimp/brain/anti_drop/ui_action_click()
active = !active
@@ -263,7 +263,7 @@
implant_color = "#007ACC"
slot = "shoulders"
origin_tech = "materials=5;biotech=4;powerstorage=4"
organ_action_name = "Toggle Arm Mod"
actions_types = list(/datum/action/item_action/organ_action/toggle)
var/obj/holder//is defined as the retractable item itself. ensure this is defined somewhere!
var/out = 0//determines if the item is in the owner's hand or not
var/overloaded = 0//is set to 1 when owner gets EMPed. if set to 1, implant doesn't work.
@@ -319,7 +319,7 @@
desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arms and remains in the shoulders when not in use."
icon_state = "armcannon_tase_implant"
origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4"
organ_action_name = "Toggle Arm Cannon Taser"
actions_types = list(/datum/action/item_action/organ_action/toggle)
/obj/item/organ/internal/cyberimp/chest/arm_mod/tase/New()//when the implant is created...
holder = new /obj/item/weapon/gun/energy/gun/advtaser/mounted(src)//assign a brand new item to it. (in this case, a gun)
@@ -329,7 +329,7 @@
desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arms and remains in the shoulders when not in use."
icon_state = "armcannon_lase_implant"
origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4;syndicate=5"//this is kinda nutty and i might lower it
organ_action_name = "Toggle Arm Cannon Laser"
actions_types = list(/datum/action/item_action/organ_action/toggle)
/obj/item/organ/internal/cyberimp/chest/arm_mod/lase/New()
holder = new /obj/item/weapon/gun/energy/laser/mounted(src)

View File

@@ -8,9 +8,7 @@
var/zone = "chest"
var/slot
vital = 0
var/organ_action_name = null
var/non_primary = 0
action_button_custom_type = /datum/action/item_action/organ_action
/obj/item/organ/internal/New(var/mob/living/carbon/holder)
if(istype(holder))
@@ -41,8 +39,9 @@
parent.internal_organs |= src
//M.internal_organs_by_name[src] |= src(H,1)
loc = null
if(organ_action_name)
action_button_name = organ_action_name
for(var/X in actions)
var/datum/action/A = X
A.Grant(M)
/obj/item/organ/internal/remove(mob/living/carbon/M, special = 0)
@@ -61,14 +60,18 @@
else
parent.internal_organs -= src
if(organ_action_name)
action_button_name = null
for(var/X in actions)
var/datum/action/A = X
A.Remove(M)
/obj/item/organ/internal/replaced(var/mob/living/carbon/human/target,var/obj/item/organ/external/affected)
insert(target)
..()
/obj/item/organ/internal/item_action_slot_check(slot, mob/user)
return
/obj/item/organ/internal/proc/on_find(mob/living/finder)
return
@@ -197,7 +200,7 @@
icon_state = "cursedheart-off"
icon_base = "cursedheart"
origin_tech = "biotech=5"
organ_action_name = "pump your blood"
actions_types = list(/datum/action/item_action/organ_action/cursed_heart)
var/last_pump = 0
var/pump_delay = 30 //you can pump 1 second early, for lag, but no more (otherwise you could spam heal)
var/blood_loss = 100 //600 blood is human default, so 5 failures (below 122 blood is where humans die because reasons?)
@@ -235,25 +238,33 @@
if(owner)
to_chat(owner, "<span class='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
/datum/action/item_action/organ_action/cursed_heart
name = "pump your blood"
//You are now brea- pumping blood manually
/obj/item/organ/internal/heart/cursed/ui_action_click()
if(world.time < (last_pump + (pump_delay-10))) //no spam
to_chat(owner, "<span class='userdanger'>Too soon!</span>")
return
/datum/action/item_action/organ_action/cursed_heart/Trigger()
. = ..()
if(. && istype(target,/obj/item/organ/internal/heart/cursed))
var/obj/item/organ/internal/heart/cursed/cursed_heart = target
last_pump = world.time
playsound(owner, 'sound/effects/singlebeat.ogg', 40, 1)
to_chat(owner, "<span class='notice'>Your heart beats.</span>")
if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay-10))) //no spam
to_chat(owner, "<span class='userdanger'>Too soon!</span>")
return
var/mob/living/carbon/human/H = owner
if(istype(H))
H.vessel.add_reagent("blood", (blood_loss*0.5))//gain half the blood back from a failure
if(owner.client)
owner.client.color = ""
cursed_heart.last_pump = world.time
playsound(owner,'sound/effects/singlebeat.ogg',40,1)
to_chat(owner, "<span class = 'notice'>Your heart beats.</span>")
H.adjustBruteLoss(-heal_brute)
H.adjustFireLoss(-heal_burn)
H.adjustOxyLoss(-heal_oxy)
var/mob/living/carbon/human/H = owner
if(istype(H))
H.vessel.add_reagent("blood", (cursed_heart.blood_loss*0.5))//gain half the blood back from a failure
if(owner.client)
owner.client.color = ""
H.adjustBruteLoss(-cursed_heart.heal_brute)
H.adjustFireLoss(-cursed_heart.heal_burn)
H.adjustOxyLoss(-cursed_heart.heal_oxy)
/obj/item/organ/internal/lungs
name = "lungs"