Verb cleanup (#22224)

* Verb cleanup

* rest of the object verbs

* little more object cleanup

* more changes

* last of it

* this too

* tgui

* code review

* time to go
This commit is contained in:
GDN
2023-11-12 20:19:17 +00:00
committed by GitHub
parent f65d120711
commit 35754c77ea
90 changed files with 754 additions and 1609 deletions
+8 -8
View File
@@ -28,6 +28,7 @@
/obj/item/assembly/infra/examine(mob/user)
. = ..()
. += "The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"]."
. += "<span class='info'><b>Alt-Click</b> to rotate it.</span>"
/obj/item/assembly/infra/activate()
if(!..())
@@ -159,25 +160,24 @@
if(first)
first.vis_spread(visible)
if(href_list["rotate"])
rotate()
rotate(usr)
if(href_list["close"])
usr << browse(null, "window=infra")
return
if(usr)
attack_self(usr)
/obj/item/assembly/infra/verb/rotate()//This could likely be better
set name = "Rotate Infrared Laser"
set category = "Object"
set src in usr
/obj/item/assembly/infra/AltClick(mob/user)
rotate(user)
if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
/obj/item/assembly/infra/proc/rotate(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
dir = turn(dir, 90)
if(usr.machine == src)
interact(usr)
if(user.machine == src)
interact(user)
if(first)
qdel(first)
+4 -7
View File
@@ -12,6 +12,7 @@
. = ..()
if(armed)
. += "It looks like it's armed."
. += "<span class='notice'><b>Alt-Click</b> to hide it.</span>"
/obj/item/assembly/mousetrap/activate()
if(!..())
@@ -143,13 +144,9 @@
armed = TRUE
/obj/item/assembly/mousetrap/verb/hide_under()
set src in oview(1)
set name = "Hide"
set category = "Object"
if(usr.stat)
/obj/item/assembly/mousetrap/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
layer = TURF_LAYER + 0.2
to_chat(usr, "<span class='notice'>You hide [src].</span>")
to_chat(user, "<span class='notice'>You hide [src].</span>")
@@ -26,6 +26,8 @@
var/last_injection
var/injection_cooldown = 34 SECONDS
var/efficiency
/// Timer that we use to remove people that are in us for too long
var/removal_timer
light_color = LIGHT_COLOR_WHITE
@@ -38,9 +40,7 @@
. += "<span class='notice'>You see [occupant.name] inside.</span>"
. += "<span class='notice'>The Cryogenic cell chamber is effective at treating those with genetic damage, but all other damage types at a moderate rate.</span>"
. += "<span class='notice'>Mostly using cryogenic chemicals, such as cryoxadone for it's medical purposes, requires that the inside of the cell be kept cool at all times. Hooking up a freezer and cooling the pipeline will do this nicely.</span>"
. += "<span class='notice'><b>Click-drag</b> someone to a cell to place them in it, use the 'Eject occupant' verb to remove them.</span>"
if(user.loc == src)
. += "<span class='notice'>You can use the 'Eject occupant' verb to eject yourself. This will take roughly 2 minutes.</span>"
. += "<span class='info'><b>Click-drag</b> someone to a cell to place them in it, <b>Alt-Click</b> it to remove it.</span>"
/obj/machinery/atmospherics/unary/cryo_cell/power_change()
..()
@@ -414,6 +414,7 @@
occupant = null
update_icon(UPDATE_OVERLAYS)
deltimer(removal_timer)
/obj/machinery/atmospherics/unary/cryo_cell/force_eject_occupant(mob/target)
go_out()
@@ -451,30 +452,15 @@
add_fingerprint(usr)
update_icon(UPDATE_OVERLAYS)
M.ExtinguishMob()
removal_timer = addtimer(CALLBACK(src, PROC_REF(auto_eject)), 1 MINUTES, TIMER_STOPPABLE)
return TRUE
/obj/machinery/atmospherics/unary/cryo_cell/verb/move_eject()
set name = "Eject occupant"
set category = "Object"
set src in oview(1)
/obj/machinery/atmospherics/unary/cryo_cell/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(usr == occupant)//If the user is inside the tube...
if(usr.stat == DEAD)
return
to_chat(usr, "<span class='notice'>Release sequence activated. This will take one minute.</span>")
sleep(600)
if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already
return
go_out()//and release him from the eternal prison.
else
if(usr.default_can_use_topic(src) != STATUS_INTERACTIVE)
return
if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other
return
add_attack_logs(usr, occupant, "Ejected from cryo cell at [COORD(src)]")
go_out()
add_fingerprint(usr)
return
go_out()
add_fingerprint(user)
/obj/machinery/atmospherics/unary/cryo_cell/narsie_act()
go_out()
@@ -482,26 +468,6 @@
color = "red"//force the icon to red
light_color = LIGHT_COLOR_RED
/obj/machinery/atmospherics/unary/cryo_cell/verb/move_inside()
set name = "Move Inside"
set category = "Object"
set src in oview(1)
if(usr.has_buckled_mobs()) //mob attached to us
to_chat(usr, "<span class='warning'>[usr] will not fit into [src] because [usr.p_they()] [usr.p_have()] a slime latched onto [usr.p_their()] head.</span>")
return
if(stat & (NOPOWER | BROKEN))
return
if(usr.incapacitated() || usr.buckled) //are you cuffed, dying, lying, stunned or other
return
put_mob(usr)
return
/datum/data/function/proc/reset()
return
+38 -68
View File
@@ -228,22 +228,18 @@
* BLIND // can't see anything
*/
/obj/item/clothing/glasses/verb/adjust_eyewear() //Adjust eyewear to be worn above or below the mask.
set name = "Adjust Eyewear"
set category = "Object"
set desc = "Adjust your eyewear to be worn over or under a mask."
set src in usr
/obj/item/clothing/glasses/examine(mob/user)
. = ..()
. += "<span class='info'>You can <b>Alt-Click</b> [src] to adjust if it fits over or under your mask.</span>"
var/mob/living/carbon/human/user = usr
if(!istype(user))
return
if(user.incapacitated()) //Dead spessmen adjust no glasses. Resting/buckled ones do, though
/obj/item/clothing/glasses/AltClick(mob/living/carbon/human/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !istype(user))
return
var/action_fluff = "You adjust \the [src]"
if(user.glasses == src)
if(!user.canUnEquip(src))
to_chat(usr, "[src] is stuck to you!")
to_chat(user, "<span class='warning'>[src] is stuck to you!</span>")
return
if(attack_hand(user)) //Remove the glasses for this action. Prevents logic-defying instances where glasses phase through your mask as it ascends/descends to another plane of existence.
action_fluff = "You remove \the [src] and adjust it"
@@ -304,7 +300,7 @@
sensor_mode = SUIT_SENSOR_OFF
return TRUE
/obj/item/clothing/under/proc/set_sensors(mob/user as mob)
/obj/item/clothing/under/proc/set_sensors(mob/user)
if(!user.Adjacent(src) || !ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
return
if(has_sensor >= 2)
@@ -326,7 +322,7 @@
sensor_mode = modes.Find(switchMode) - 1
if(src.loc == user)
if(loc == user)
switch(sensor_mode)
if(SUIT_SENSOR_OFF)
to_chat(user, "You disable your suit's remote sensing equipment.")
@@ -341,32 +337,25 @@
if(H.w_uniform == src)
H.update_suit_sensors()
else if(ismob(src.loc))
else if(ismob(loc))
switch(sensor_mode)
if(SUIT_SENSOR_OFF)
for(var/mob/V in viewers(user, 1))
V.show_message("<span class='warning'>[user] disables [src.loc]'s remote sensing equipment.</span>", 1)
V.show_message("<span class='warning'>[user] disables [loc]'s remote sensing equipment.</span>", 1)
if(SUIT_SENSOR_BINARY)
for(var/mob/V in viewers(user, 1))
V.show_message("[user] turns [src.loc]'s remote sensors to binary.", 1)
V.show_message("[user] turns [loc]'s remote sensors to binary.", 1)
if(SUIT_SENSOR_VITAL)
for(var/mob/V in viewers(user, 1))
V.show_message("[user] sets [src.loc]'s sensors to track vitals.", 1)
V.show_message("[user] sets [loc]'s sensors to track vitals.", 1)
if(SUIT_SENSOR_TRACKING)
for(var/mob/V in viewers(user, 1))
V.show_message("[user] sets [src.loc]'s sensors to maximum.", 1)
V.show_message("[user] sets [loc]'s sensors to maximum.", 1)
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(H.w_uniform == src)
H.update_suit_sensors()
/obj/item/clothing/under/verb/toggle()
set name = "Toggle Suit Sensors"
set category = "Object"
set src in usr
set_sensors(usr)
/obj/item/clothing/under/AltShiftClick(mob/user)
set_sensors(user)
@@ -825,46 +814,40 @@
if(SUIT_SENSOR_TRACKING)
. += "Its vital tracker and tracking beacon appear to be enabled."
if(has_sensor == 1)
. += "Alt-shift-click to toggle the sensors mode."
. += "<span class='info'>Alt-shift-click to toggle the sensors mode.</span>"
else
. += "This suit does not have any sensors."
if(length(accessories))
for(var/obj/item/clothing/accessory/A in accessories)
. += "\A [A] is attached to it."
. += "Alt-click to remove an accessory."
. += "<span class='info'>Alt-click to remove an accessory.</span>"
. += "<span class='info'>Ctrl-Shift-Click to roll down this jumpsuit.</span>"
/obj/item/clothing/under/verb/rollsuit()
set name = "Roll Down Jumpsuit"
set category = "Object"
set src in usr
if(!isliving(usr)) return
if(usr.stat) return
/obj/item/clothing/under/CtrlShiftClick(mob/living/carbon/human/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !istype(user))
to_chat(user, "<span class='notice'>You cannot roll down the uniform!</span>")
return
var/mob/living/carbon/human/H = usr
if(copytext(item_color,-2) != "_d")
basecolor = item_color
if(!usr.incapacitated())
if(copytext(item_color,-2) != "_d")
basecolor = item_color
if(usr.get_item_by_slot(SLOT_HUD_JUMPSUIT) != src)
to_chat(usr, "<span class='notice'>You must wear the uniform to adjust it!</span>")
else
if((basecolor + "_d_s") in icon_states(H.w_uniform.sprite_sheets[H.dna.species.sprite_sheet_name]))
if(H.w_uniform.sprite_sheets[H.dna.species.sprite_sheet_name] && icon_exists(H.w_uniform.sprite_sheets[H.dna.species.sprite_sheet_name], "[basecolor]_d_s"))
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
usr.update_inv_w_uniform()
else
if(H.w_uniform.sprite_sheets["Human"] && icon_exists(H.w_uniform.sprite_sheets["Human"], "[basecolor]_d_s"))
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
usr.update_inv_w_uniform()
else
to_chat(usr, "<span class='notice'>You cannot roll down this uniform!</span>")
if(user.get_item_by_slot(SLOT_HUD_JUMPSUIT) != src)
to_chat(user, "<span class='notice'>You must wear the uniform to adjust it!</span>")
else
to_chat(usr, "<span class='notice'>You cannot roll down the uniform!</span>")
if((basecolor + "_d_s") in icon_states(user.w_uniform.sprite_sheets[user.dna.species.sprite_sheet_name]))
if(user.w_uniform.sprite_sheets[user.dna.species.sprite_sheet_name] && icon_exists(user.w_uniform.sprite_sheets[user.dna.species.sprite_sheet_name], "[basecolor]_d_s"))
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
user.update_inv_w_uniform()
else
if(user.w_uniform.sprite_sheets["Human"] && icon_exists(user.w_uniform.sprite_sheets["Human"], "[basecolor]_d_s"))
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
user.update_inv_w_uniform()
else
to_chat(user, "<span class='notice'>You cannot roll down this uniform!</span>")
if(item_color == "[basecolor]")
body_parts_covered = initial(body_parts_covered)
else
@@ -872,18 +855,8 @@
body_parts_covered &= ~LOWER_TORSO
body_parts_covered &= ~ARMS
/obj/item/clothing/under/verb/removetie()
set name = "Remove Accessory"
set category = "Object"
set src in usr
handle_accessories_removal()
/obj/item/clothing/under/proc/handle_accessories_removal()
if(!isliving(usr))
return
if(usr.incapacitated())
return
if(!Adjacent(usr))
/obj/item/clothing/under/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(!length(accessories))
return
@@ -895,7 +868,7 @@
A = pick
else
A = accessories[1]
remove_accessory(usr,A)
remove_accessory(user, A)
/obj/item/clothing/under/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
if(!(A in accessories))
@@ -915,9 +888,6 @@
A.emp_act(severity)
..()
/obj/item/clothing/under/AltClick()
handle_accessories_removal()
/obj/item/clothing/obj_destruction(damage_flag)
if(damage_flag == BOMB || damage_flag == MELEE)
var/turf/T = get_turf(src)
@@ -95,41 +95,19 @@
else
. += "It is empty."
/obj/item/clothing/accessory/holster/on_attached(obj/item/clothing/under/S, mob/user as mob)
..()
has_suit.verbs += /obj/item/clothing/accessory/holster/verb/holster_verb
/obj/item/clothing/accessory/holster/on_removed(mob/user as mob)
has_suit.verbs -= /obj/item/clothing/accessory/holster/verb/holster_verb
..()
//For the holster hotkey
/obj/item/clothing/accessory/holster/verb/holster_verb()
set name = "Holster"
set category = "Object"
set src in usr
if(!isliving(usr)) return
if(usr.stat) return
/obj/item/clothing/accessory/holster/proc/handle_holster_usage(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
var/obj/item/clothing/accessory/holster/H = null
if(istype(src, /obj/item/clothing/accessory/holster))
H = src
else if(istype(src, /obj/item/clothing/under))
var/obj/item/clothing/under/S = src
if(S.accessories.len)
H = locate() in S.accessories
if(!H)
to_chat(usr, "<span class='warning'>Something is very wrong.</span>")
if(!H.holstered)
if(!istype(usr.get_active_hand(), /obj/item/gun))
to_chat(usr, "<span class='warning'>You need your gun equiped to holster it.</span>")
if(!holstered)
var/obj/item/gun/gun = user.get_active_hand()
if(!istype(gun))
to_chat(user, "<span class='warning'>You need your gun equiped to holster it.</span>")
return
var/obj/item/gun/W = usr.get_active_hand()
H.holster(W, usr)
holster(gun, user)
else
H.unholster(usr)
unholster(user)
/obj/item/clothing/accessory/holster/armpit
name = "shoulder holster"
+16 -8
View File
@@ -190,6 +190,22 @@
move_resist = MOVE_FORCE_OVERPOWERING
a_intent = INTENT_HARM
/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize(mapload)
. = ..()
var/datum/action/innate/communicate_overmind_blob/overmind_chat = new
overmind_chat.Grant(src)
/datum/action/innate/communicate_overmind_blob
name = "Speak with the overmind"
icon_icon = 'icons/mob/guardian.dmi'
button_icon_state = "communicate"
/datum/action/innate/communicate_overmind_blob/Activate()
var/mob/living/simple_animal/hostile/blob/blobbernaut/user = owner
if(user.stat)
return
user.blob_talk()
/mob/living/simple_animal/hostile/blob/blobbernaut/Life(seconds, times_fired)
if(stat != DEAD && (getBruteLoss() || getFireLoss())) // Heal on blob structures
if(locate(/obj/structure/blob) in get_turf(src))
@@ -214,14 +230,6 @@
return FALSE
flick("blobbernaut_death", src)
/mob/living/simple_animal/hostile/blob/blobbernaut/verb/communicate_overmind()
set category = "Blobbernaut"
set name = "Blob Telepathy"
set desc = "Send a message to the Overmind"
if(stat != DEAD)
blob_talk()
/mob/living/simple_animal/hostile/blob/blobbernaut/proc/blob_talk()
var/message = input(src, "Announce to the overmind", "Blob Telepathy")
var/rendered
+8 -20
View File
@@ -84,25 +84,17 @@
// VERBS & PROCS //
//////////////////////////////
/obj/machinery/fishtank/verb/toggle_lid_verb()
set name = "Toggle Tank Lid"
set category = "Object"
set src in view(1)
/obj/machinery/fishtank/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
toggle_lid()
/obj/machinery/fishtank/proc/toggle_lid()
lid_switch = !lid_switch
update_icon(UPDATE_OVERLAYS)
/obj/machinery/fishtank/verb/toggle_light_verb()
set name = "Toggle Tank Light"
set category = "Object"
set src in view(1)
/obj/machinery/fishtank/AltShiftClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
toggle_light()
/obj/machinery/fishtank/proc/toggle_light()
light_switch = !light_switch
if(light_switch)
set_light(2, 2, "#a0a080")
@@ -113,12 +105,6 @@
// NEW() PROCS //
//////////////////////////////
/obj/machinery/fishtank/Initialize(mapload)
. = ..()
if(!has_lid) //Tank doesn't have a lid/light, remove the verbs for then
verbs -= /obj/machinery/fishtank/verb/toggle_lid_verb
verbs -= /obj/machinery/fishtank/verb/toggle_light_verb
/obj/machinery/fishtank/tank/Initialize(mapload)
. = ..()
if(prob(5)) //5% chance to get the castle decoration
@@ -533,6 +519,8 @@
//Finally, report the full examine_message constructed from the above reports
. += "<span class='notice'>[examine_message]</span>"
. += "<span class='info'>You can <b>Alt-Click</b> [src] to open/close its lid.</span>"
. += "<span class='info'>You can <b>Alt-Shift-Click</b> [src] to enable/disable its light.</span>"
//////////////////////////////
// ATTACK PROCS //
@@ -15,10 +15,6 @@
drop_sound = 'sound/items/handling/drinkglass_drop.ogg'
pickup_sound = 'sound/items/handling/drinkglass_pickup.ogg'
/obj/item/reagent_containers/food/drinks/set_APTFT()
set hidden = FALSE
..()
/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) //breaking eggs
var/obj/item/reagent_containers/food/snacks/egg/E = I
@@ -41,10 +41,6 @@
/obj/item/reagent_containers/food/condiment/attack_self(mob/user)
return
/obj/item/reagent_containers/food/condiment/set_APTFT()
set hidden = FALSE
..()
/obj/item/reagent_containers/food/condiment/attack(mob/M, mob/user, def_zone)
if(!reagents || !reagents.total_volume)
@@ -44,10 +44,6 @@
if(world.time > last_ant_time + 5 MINUTES)
check_for_ants()
/obj/item/reagent_containers/food/set_APTFT()
set hidden = TRUE
..()
/obj/item/reagent_containers/food/proc/check_for_ants()
last_ant_time = world.time
var/turf/T = get_turf(src)
@@ -38,6 +38,10 @@
occupant = null
return ..()
/obj/machinery/gibber/examine(mob/user)
. = ..()
. += "<span class='info'>You can <b>Alt-Click</b> [src] to empty it.</span>"
/obj/machinery/gibber/suicide_act(mob/living/user)
if(occupant || locked)
return FALSE
@@ -160,16 +164,12 @@
INVOKE_ASYNC(src, PROC_REF(feedinTopanim))
/obj/machinery/gibber/verb/eject()
set category = "Object"
set name = "Empty Gibber"
set src in oview(1)
if(usr.incapacitated())
/obj/machinery/gibber/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
go_out()
add_fingerprint(usr)
add_fingerprint(user)
/obj/machinery/gibber/proc/go_out()
if(operating || !occupant) //no going out if operating, just in case they manage to trigger go_out before being dead
@@ -179,15 +179,13 @@
return
for(var/obj/O in src)
O.loc = loc
O.forceMove(get_turf(src))
occupant.forceMove(get_turf(src))
occupant = null
update_icon(UPDATE_OVERLAYS | UPDATE_ICON_STATE)
return
/obj/machinery/gibber/proc/feedinTopanim()
if(!occupant)
return
+5 -42
View File
@@ -131,13 +131,7 @@
// Datum actions
/obj/item/deck/verb/draw_card(mob/user)
set category = "Object"
set name = "Draw"
set desc = "Draw a card from a deck."
set src in view(1)
/obj/item/deck/proc/draw_card(mob/user)
var/mob/living/carbon/human/M = user
if(user.incapacitated() || !Adjacent(user))
@@ -166,13 +160,7 @@
user.visible_message("<span class='notice'>[user] draws a card.</span>","<span class='notice'>You draw a card.</span>")
to_chat(user,"<span class='notice'>It's the [P].</span>")
/obj/item/deck/verb/deal_card()
set category = "Object"
set name = "Deal"
set desc = "Deal a card from a deck."
set src in view(1)
/obj/item/deck/proc/deal_card()
if(usr.incapacitated() || !Adjacent(usr))
return
@@ -191,13 +179,7 @@
deal_at(usr, M, 1)
/obj/item/deck/verb/deal_card_multi()
set category = "Object"
set name = "Deal Multiple Cards"
set desc = "Deal multiple cards from a deck."
set src in view(1)
/obj/item/deck/proc/deal_card_multi()
if(usr.incapacitated() || !Adjacent(usr))
return
@@ -242,14 +224,6 @@
/obj/item/deck/AltClick()
deckshuffle()
/obj/item/deck/verb/verb_shuffle()
if(!isobserver(usr))
set category = "Object"
set name = "Shuffle"
set desc = "Shuffle the cards in the deck."
set src in view(1)
deckshuffle()
/obj/item/deck/proc/deckshuffle()
var/mob/living/user = usr
if(cooldown < world.time - 1 SECONDS)
@@ -440,13 +414,7 @@
// No more datum action here
/obj/item/cardhand/verb/Removecard()
set category = "Object"
set name = "Remove card"
set desc = "Remove a card from the hand."
set src in view(1)
/obj/item/cardhand/proc/Removecard()
var/mob/living/carbon/user = usr
if(user.incapacitated() || !Adjacent(user))
@@ -482,12 +450,7 @@
return
update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
/obj/item/cardhand/verb/discard()
set category = "Object"
set name = "Discard"
set desc = "Place (a) card(s) from your hand in front of you."
/obj/item/cardhand/proc/discard()
var/mob/living/carbon/user = usr
var/maxcards = min(length(cards), 5)
@@ -18,9 +18,6 @@
pixel_y = rand(8,-8)
update_icon(UPDATE_OVERLAYS)
/obj/item/reagent_containers/food/snacks/honeycomb/set_APTFT()
set hidden = TRUE
/obj/item/reagent_containers/food/snacks/honeycomb/update_overlays()
. = ..()
var/image/honey
@@ -98,10 +98,13 @@
item_state = "flare"
var/destination
/obj/item/wormhole_jaunter/contractor/verb/set_destination()
set category = "Object"
set name = "Change Portal Destination"
set src in usr
/obj/item/wormhole_jaunter/contractor/examine(mob/user)
. = ..()
. += "<span class='info'>You can <b>Alt-Click</b> [src] to change its destination!</span>"
/obj/item/wormhole_jaunter/contractor/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
var/list/L = list()
var/list/areaindex = list()
@@ -121,7 +124,6 @@
var/desc = input("Please select a location to target.", "Flare Target Interface") in L
destination = L[desc]
return
/obj/item/wormhole_jaunter/contractor/attack_self(mob/user) // message is later down
activate(user, TRUE)
+1 -2
View File
@@ -241,8 +241,7 @@
//for more info on why this is not atom/pull, see examinate() in mob.dm
/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1))
set name = "Pull"
set category = "Object"
set category = null
if(istype(AM) && Adjacent(AM))
start_pulling(AM, show_message = TRUE)
else
+24 -89
View File
@@ -75,12 +75,17 @@
var/current_pda_messaging = null
var/custom_sprite = FALSE
var/slowdown = 0
var/speech_state = "Robotic" // Needed for TGUI shit
/mob/living/silicon/pai/Initialize(mapload)
. = ..()
if(istype(loc, /obj/item/paicard))
card = loc
else
card = new(get_turf(src))
forceMove(card)
card.setPersonality(src)
if(card)
faction = card.faction.Copy()
@@ -98,9 +103,8 @@
add_language("Gutter")
add_language("Trinary")
//Verbs for pAI mobile form, chassis and Say flavor text
verbs += /mob/living/silicon/pai/proc/choose_chassis
verbs += /mob/living/silicon/pai/proc/choose_verbs
AddSpell(new /obj/effect/proc_holder/spell/access_software_pai)
AddSpell(new /obj/effect/proc_holder/spell/unfold_chassis_pai)
//PDA
pda = new(src)
@@ -233,27 +237,27 @@
// mobile pai mob. This also includes handling some of the general shit that can occur
// to it. Really this deserves its own file, but for the moment it can sit here. ~ Z
/mob/living/silicon/pai/verb/fold_out()
set category = "pAI Commands"
set name = "Unfold Chassis"
/obj/effect/proc_holder/spell/unfold_chassis_pai
name = "Unfold/Fold Chassis"
desc = "Allows you to fold in/out of your mobile form."
clothes_req = FALSE
base_cooldown = 20 SECONDS
action_icon_state = "repairbot"
action_background_icon_state = "bg_tech_blue"
if(stat || IsSleeping() || IsParalyzed() || IsWeakened())
return
/obj/effect/proc_holder/spell/unfold_chassis_pai/create_new_targeting()
return new /datum/spell_targeting/self
if(loc != card)
to_chat(src, "<span class='warning'>You are already in your mobile form!</span>")
return
/obj/effect/proc_holder/spell/unfold_chassis_pai/cast(list/targets, mob/living/user = usr)
var/mob/living/silicon/pai/pai_user = user
if(world.time <= last_special)
to_chat(src, "<span class='warning'>You must wait before folding your chassis out again!</span>")
return
if(pai_user.loc != pai_user.card)
pai_user.close_up()
return TRUE
pai_user.force_fold_out()
last_special = world.time + 200
//I'm not sure how much of this is necessary, but I would rather avoid issues.
force_fold_out()
visible_message("<span class='notice'>[src] folds outwards, expanding into a mobile form.</span>", "<span class='notice'>You fold outwards, expanding into a mobile form.</span>")
pai_user.visible_message("<span class='notice'>[pai_user] folds outwards, expanding into a mobile form.</span>", "<span class='notice'>You fold outwards, expanding into a mobile form.</span>")
return TRUE
/mob/living/silicon/pai/proc/force_fold_out()
if(ismob(card.loc))
@@ -268,73 +272,6 @@
card.forceMove(src)
card.screen_loc = null
/mob/living/silicon/pai/verb/fold_up()
set category = "pAI Commands"
set name = "Collapse Chassis"
if(stat || IsSleeping() || IsParalyzed() || IsWeakened())
return
if(loc == card)
to_chat(src, "<span class='warning'>You are already in your card form!</span>")
return
if(world.time <= last_special)
to_chat(src, "<span class='warning'>You must wait before returning to your card form!</span>")
return
close_up()
/mob/living/silicon/pai/proc/choose_chassis()
set category = "pAI Commands"
set name = "Choose Chassis"
var/list/my_choices = list()
var/choice
var/finalized = "No"
//check for custom_sprite
if(!custom_sprite)
if(ckey in GLOB.configuration.custom_sprites.pai_holoform_ckeys)
custom_sprite = TRUE
my_choices["Custom"] = "[ckey]-pai"
my_choices = possible_chassis.Copy()
if(custom_sprite)
my_choices["Custom"] = "[ckey]-pai"
if(loc == card) //don't let them continue in card form, since they won't be able to actually see their new mobile form sprite.
to_chat(src, "<span class='warning'>You must be in your mobile form to reconfigure your chassis.</span>")
return
while(finalized == "No" && client)
choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in my_choices
if(!choice) return
if(choice == "Custom")
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
else
icon = 'icons/mob/pai.dmi'
icon_state = my_choices[choice]
finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")
chassis = my_choices[choice]
verbs -= /mob/living/silicon/pai/proc/choose_chassis
/mob/living/silicon/pai/proc/choose_verbs()
set category = "pAI Commands"
set name = "Choose Speech Verbs"
var/choice = input(usr,"What theme would you like to use for your speech verbs? This decision can only be made once.") as null|anything in possible_say_verbs
if(!choice) return
var/list/sayverbs = possible_say_verbs[choice]
speak_statement = sayverbs[1]
speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)]
speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)]
verbs -= /mob/living/silicon/pai/proc/choose_verbs
/mob/living/silicon/pai/rest()
set name = "Rest"
set category = "IC"
@@ -390,8 +327,6 @@
//I'm not sure how much of this is necessary, but I would rather avoid issues.
/mob/living/silicon/pai/proc/close_up()
last_special = world.time + 200
stand_up()
if(loc == card)
return
@@ -0,0 +1,5 @@
/mob/living/silicon/pai/Login()
..()
if(!custom_sprite)
if(ckey in GLOB.configuration.custom_sprites.pai_holoform_ckeys)
custom_sprite = TRUE
@@ -12,11 +12,21 @@ GLOBAL_LIST_INIT(pai_emotions, list(
GLOBAL_LIST_EMPTY(pai_software_by_key)
/mob/living/silicon/pai/verb/paiInterface()
set category = "pAI Commands"
set name = "Software Interface"
/obj/effect/proc_holder/spell/access_software_pai
name = "Software interface"
desc = "Allows you to access your downloaded software."
clothes_req = FALSE
base_cooldown = 1 SECONDS
action_icon_state = "choose_module"
action_background_icon_state = "bg_tech_blue"
ui_interact(src)
/obj/effect/proc_holder/spell/access_software_pai/create_new_targeting()
return new /datum/spell_targeting/self
/obj/effect/proc_holder/spell/access_software_pai/cast(list/targets, mob/living/user = usr)
var/mob/living/silicon/pai/pai_user = user
pai_user.ui_interact(pai_user)
/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.self_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -21,6 +21,32 @@
data["emotions"] = emotions
data["current_emotion"] = user.card.current_emotion
var/list/speech_types = list()
for(var/name in user.possible_say_verbs)
var/list/speech = list()
speech["name"] = name
speech["id"] = length(speech_types)
speech_types[++speech_types.len] = speech
data["current_speech_verb"] = user.speech_state
data["speech_verbs"] = speech_types
var/list/chassis_choices = list()
var/list/chassises_to_add = list()
chassis_choices = user.possible_chassis.Copy()
if(user.custom_sprite)
chassis_choices["Custom"] = "[user.ckey]-pai"
for(var/name in chassis_choices)
var/list/chassis_to_update_with = list()
chassis_to_update_with["name"] = name
chassis_to_update_with["icon"] = chassis_choices[name]
chassis_to_update_with["id"] = length(chassis_to_update_with)
chassises_to_add[++chassises_to_add.len] = chassis_to_update_with
data["available_chassises"] = chassises_to_add
data["current_chassis"] = user.chassis
var/list/available_s = list()
for(var/s in GLOB.pai_software_by_key)
var/datum/pai_software/PS = GLOB.pai_software_by_key[s]
@@ -64,6 +90,20 @@
var/toggle_key = params["toggle_key"]
if(pai_holder.installed_software[toggle_key])
pai_holder.installed_software[toggle_key].toggle(pai_holder)
if("setSpeechStyle")
pai_holder.speech_state = params["speech_state"]
var/list/sayverbs = pai_holder.possible_say_verbs[pai_holder.speech_state]
pai_holder.speak_statement = sayverbs[1]
pai_holder.speak_exclamation = sayverbs[length(sayverbs) > 1 ? 2 : length(sayverbs)]
pai_holder.speak_query = sayverbs[length(sayverbs) > 2 ? 3 : length(sayverbs)]
if("setChassis")
pai_holder.chassis = params["chassis_to_change"]
pai_holder.icon_state = pai_holder.chassis
if(pai_holder.icon_state == "[pai_holder.ckey]-pai")
pai_holder.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
else
pai_holder.icon = 'icons/mob/pai.dmi'
// Directives //
/datum/pai_software/directives
@@ -1294,8 +1294,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
if(W)
W.attack_self(src)
return
/mob/living/silicon/robot/proc/SetLockdown(state = 1)
// They stay locked down if their wire is cut.
if(wires.is_cut(WIRE_BORG_LOCKED))
@@ -20,10 +20,7 @@
return 0
return 1
/mob/living/simple_animal/slime/verb/Feed()
set category = "Slime"
set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process."
/mob/living/simple_animal/slime/proc/Feed()
if(stat)
return 0
@@ -123,10 +120,7 @@
layer = initial(layer)
buckled.unbuckle_mob(src,force=TRUE)
/mob/living/simple_animal/slime/verb/Evolve()
set category = "Slime"
set desc = "This will let you evolve from baby to adult slime."
/mob/living/simple_animal/slime/proc/Evolve()
if(stat)
to_chat(src, "<i>I must be conscious to do this...</i>")
return
@@ -156,10 +150,7 @@
var/datum/action/innate/slime/reproduce/A = new
A.Grant(S)
/mob/living/simple_animal/slime/verb/Reproduce()
set category = "Slime"
set desc = "This will make you split into four Slimes."
/mob/living/simple_animal/slime/proc/Reproduce()
if(stat)
to_chat(src, "<i>I must be conscious to do this...</i>")
return
+3
View File
@@ -781,6 +781,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
/mob/proc/is_dead()
return stat == DEAD
// Nobody in their right mind will have this enabled on the production server, uncomment if you want this for some reason
/*
/mob/verb/abandon_mob()
set name = "Respawn"
set category = "OOC"
@@ -816,6 +818,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
M.key = key
return
*/
/mob/verb/observe()
set name = "Observe"
set category = "OOC"
+7 -8
View File
@@ -85,6 +85,10 @@
/datum/job/syndicateofficer
)
/obj/machinery/newscaster/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> to remove the photo currently inside it.</span>"
/obj/machinery/newscaster/Destroy()
GLOB.allNewscasters -= src
viewing_channel = null
@@ -723,15 +727,10 @@
/**
* Ejects the currently loaded photo if there is one.
*/
/obj/machinery/newscaster/verb/eject_photo_verb()
set name = "Eject Photo"
set category = "Object"
set src in oview(1)
if(usr.incapacitated())
/obj/machinery/newscaster/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
eject_photo(usr)
eject_photo(user)
#undef CHANNEL_NAME_MAX_LENGTH
#undef CHANNEL_DESC_MAX_LENGTH
+2 -3
View File
@@ -27,9 +27,7 @@
return
. = ..()
/obj/item/clipboard/verb/removePen(mob/user)
set category = "Object"
set name = "Remove clipboard pen"
/obj/item/clipboard/proc/removePen(mob/user)
if(!ishuman(user) || user.incapacitated())
return
penPlacement(user, containedpen, FALSE)
@@ -42,6 +40,7 @@
/obj/item/clipboard/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> to remove its pen.</span>"
if(in_range(user, src) && toppaper)
. += toppaper.examine(user)
+12 -11
View File
@@ -48,6 +48,10 @@ GLOBAL_LIST_EMPTY(fax_blacklist)
GLOB.allfaxes -= src
return ..()
/obj/machinery/photocopier/faxmachine/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> [src] to remove its currently stored ID.</span>"
/obj/machinery/photocopier/faxmachine/proc/update_network()
if(department != "Unknown")
if(!(("[department]" in GLOB.alldepartments) || ("[department]" in GLOB.hidden_departments) || ("[department]" in GLOB.admin_departments) || ("[department]" in GLOB.hidden_admin_departments)))
@@ -267,22 +271,19 @@ GLOBAL_LIST_EMPTY(fax_blacklist)
scan = card
SStgui.update_uis(src)
/obj/machinery/photocopier/faxmachine/verb/eject_id()
set category = null
set name = "Eject ID Card"
set src in oview(1)
if(usr.incapacitated())
/obj/machinery/photocopier/faxmachine/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(scan)
to_chat(usr, "You remove [scan] from [src].")
scan.forceMove(get_turf(src))
if(!usr.get_active_hand() && Adjacent(usr))
usr.put_in_hands(scan)
to_chat(user, "<span class='notice'>You remove [scan] from [src].</span>")
if(!user.get_active_hand())
user.put_in_hands(scan)
else if(!user.put_in_inactive_hand(scan))
scan.forceMove(get_turf(src))
scan = null
else
to_chat(usr, "There is nothing to remove from [src].")
to_chat(user, "<span class='notice'>There is nothing to remove from [src].</span>")
/obj/machinery/photocopier/faxmachine/proc/sendfax(destination, mob/sender)
use_power(active_power_consumption)
+17 -11
View File
@@ -62,6 +62,7 @@
/obj/item/paper/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> [src] with a pen in hand to rename it.</span>"
if(user.is_literate())
if(in_range(user, src) || isobserver(user))
show_content(user)
@@ -91,16 +92,22 @@
popup.open()
return data
/obj/item/paper/verb/rename()
set name = "Rename paper"
set category = "Object"
set src in usr
if(HAS_TRAIT(usr, TRAIT_CLUMSY) && prob(50))
to_chat(usr, "<span class='warning'>You cut yourself on the paper.</span>")
/obj/item/paper/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(!usr.is_literate())
to_chat(usr, "<span class='notice'>You don't know how to read.</span>")
if(is_pen(user.get_active_hand()))
rename(user)
else
return ..()
/obj/item/paper/proc/rename(mob/user)
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>You cut yourself on the paper.</span>")
return
if(!user.is_literate())
to_chat(user, "<span class='notice'>You don't know how to read.</span>")
return
var/n_name = rename_interactive(usr)
if(isnull(n_name))
@@ -109,8 +116,7 @@
desc = "This is a paper titled '" + name + "'."
else
desc = initial(desc)
add_fingerprint(usr)
return
add_fingerprint(user)
/obj/item/paper/attack_self(mob/living/user as mob)
user.examinate(src)
+14 -19
View File
@@ -103,6 +103,8 @@
/obj/item/paper_bundle/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> [src] with a pen in hand to rename it.</span>"
. += "<span class='info'><b>Alt-Shift-Click</b> [src] to undo the paper bundle.</span>"
if(in_range(user, src))
show_content(user)
else
@@ -199,38 +201,31 @@
/obj/item/paper_bundle/AltClick(mob/user)
if(in_range(user, src) && !user.incapacitated())
if(is_pen(user.get_active_hand()))
rename()
rename(user)
return
. = ..()
/obj/item/paper_bundle/verb/rename()
set name = "Rename bundle"
set category = "Object"
set src in usr
var/n_name = sanitize(copytext(input(usr, "What would you like to label the bundle?", "Bundle Labelling", name) as text, 1, MAX_MESSAGE_LEN))
if((loc == usr && usr.stat == 0))
/obj/item/paper_bundle/proc/rename(mob/user)
var/n_name = sanitize(copytext(input(user, "What would you like to label the bundle?", "Bundle Labelling", name) as text, 1, MAX_MESSAGE_LEN))
if((loc == user && !user.stat))
name = "[(n_name ? "[n_name]" : "paper bundle")]"
add_fingerprint(usr)
add_fingerprint(user)
/obj/item/paper_bundle/AltShiftClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
/obj/item/paper_bundle/verb/remove_all()
set name = "Loose bundle"
set category = "Object"
set src in usr
to_chat(usr, "<span class='notice'>You loosen the bundle.</span>")
to_chat(user, "<span class='notice'>You loosen the bundle.</span>")
for(var/obj/O in src)
O.loc = usr.loc
O.forceMove(get_turf(user))
O.layer = initial(O.layer)
O.plane = initial(O.plane)
O.add_fingerprint(usr)
O.add_fingerprint(user)
usr.unEquip(src)
user.unEquip(src)
qdel(src)
/obj/item/paper_bundle/update_desc()
+45 -41
View File
@@ -76,6 +76,16 @@
show(user)
else
. += "<span class='notice'>It is too far away.</span>"
. += "<span class='info'><b>Alt-Click</b> [src] with a pen in hand to rename it.</span>"
/obj/item/photo/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(is_pen(user.get_active_hand()))
rename(user)
else
return ..()
/obj/item/photo/proc/show(mob/user as mob)
var/icon/img_shown = new/icon(img)
@@ -94,20 +104,13 @@
+ "[scribble ? "<br>Written on the back:<br><i>[scribble]</i>" : ""]"\
+ "</body></html>", "window=Photo[UID()];size=[64*photo_size]x[scribble ? 400 : 64*photo_size]")
onclose(usr, "Photo[UID()]")
return
/obj/item/photo/verb/rename()
set name = "Rename photo"
set category = "Object"
set src in usr
var/n_name = sanitize(copytext(input(usr, "What would you like to label the photo?", "Photo Labelling", name) as text, 1, MAX_MESSAGE_LEN))
/obj/item/photo/proc/rename(mob/user)
var/n_name = sanitize(copytext(input(user, "What would you like to label the photo?", "Photo Labelling", name) as text, 1, MAX_MESSAGE_LEN))
//loc.loc check is for making possible renaming photos in clipboards
if(( (loc == usr || (loc.loc && loc.loc == usr)) && usr.stat == 0))
if(( (loc == user || (loc.loc && loc.loc == user)) && !user.stat))
name = "[(n_name ? "[n_name]" : "photo")]"
add_fingerprint(usr)
return
add_fingerprint(user)
/**************
* photo album *
@@ -186,6 +189,7 @@
. = ..()
if(!digital)
. += "<span class='notice'>There is [pictures_left] photos left.</span>"
. += "<span class='info'><b>Alt-Click</b> [src] to change the photo size.</span>"
/obj/item/camera/spooky/CheckParts(list/parts_list)
..()
@@ -205,18 +209,16 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor
see_ghosts = TRUE
/obj/item/camera/AltClick(mob/user)
if(in_range(user, src) && !user.incapacitated())
change_size()
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
. = ..()
/obj/item/camera/verb/change_size()
set name = "Set Photo Focus"
set category = "Object"
change_size(user)
/obj/item/camera/proc/change_size(mob/user)
var/nsize = input("Photo Size","Pick a size of resulting photo.") as null|anything in list(1,3,5,7)
if(nsize)
size = nsize
to_chat(usr, "<span class='notice'>Camera will now take [size]x[size] photos.</span>")
to_chat(user, "<span class='notice'>Camera will now take [size]x[size] photos.</span>")
/obj/item/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob)
return
@@ -518,36 +520,38 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor
var/datum/picture/P = createpicture(target, user, turfs, mobs, flag)
saved_pictures += P
/obj/item/camera/digital/verb/print_picture()
set name = "Print picture"
set category = "Object"
set src in usr
/obj/item/camera/digital/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Shift-Click</b> [src] to print a specific photo.</span>"
. += "<span class='info'><b>Ctrl-Shift-Click</b> [src] to delete a specific photo.</span>"
if(saved_pictures.len == 0)
to_chat(usr, "<span class='userdanger'>No images saved.</span>")
/obj/item/camera/digital/AltShiftClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(pictures_left == 0)
to_chat(usr, "<span class='userdanger'>There is no film left to print.</span>")
if(!length(saved_pictures))
to_chat(user, "<span class='userdanger'>No images saved.</span>")
return
if(!pictures_left)
to_chat(user, "<span class='userdanger'>There is no film left to print.</span>")
return
var/datum/picture/P = null
P = input("Select image to print:",P) as null|anything in saved_pictures
if(P)
printpicture(usr,P)
var/datum/picture/picture
picture = input("Select image to print:", picture) as null|anything in saved_pictures
if(picture)
printpicture(user, picture)
pictures_left --
/obj/item/camera/digital/verb/delete_picture()
set name = "Delete picture"
set category = "Object"
set src in usr
if(saved_pictures.len == 0)
to_chat(usr, "<span class='userdanger'>No images saved</span>")
/obj/item/camera/digital/CtrlShiftClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
var/datum/picture/P = null
P = input("Select image to delete:",P) as null|anything in saved_pictures
if(P)
saved_pictures -= P
if(!length(saved_pictures))
to_chat(user, "<span class='userdanger'>No images saved</span>")
return
var/datum/picture/picture
picture = input("Select image to delete:", picture) as null|anything in saved_pictures
if(picture)
saved_pictures -= picture
/**************
*video camera *
+13 -37
View File
@@ -94,6 +94,12 @@ GLOBAL_LIST_EMPTY(PDAs)
start_program(find_program(/datum/data/pda/app/main_menu))
silent = initial(silent)
/obj/item/pda/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> [src] to remove its ID card.</span>"
. += "<span class='info'><b>Ctrl-Click</b> [src] to remove its pen.</span>"
. += "<span class='info'>Use a screwdriver on [src] to reset it.</span>"
/obj/item/pda/proc/can_use()
if(!ismob(loc))
return 0
@@ -159,22 +165,15 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/proc/close(mob/user)
SStgui.close_uis(src)
/obj/item/pda/verb/verb_reset_pda()
set category = "Object"
set name = "Reset PDA"
set src in usr
if(issilicon(usr))
/obj/item/pda/screwdriver_act(mob/living/user, obj/item/I)
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
if(can_use(usr))
start_program(find_program(/datum/data/pda/app/main_menu))
notifying_programs.Cut()
update_icon(UPDATE_OVERLAYS)
to_chat(usr, "<span class='notice'>You press the reset button on \the [src].</span>")
SStgui.update_uis(src)
else
to_chat(usr, "<span class='notice'>You cannot do this while restrained.</span>")
start_program(find_program(/datum/data/pda/app/main_menu))
notifying_programs.Cut()
update_icon(UPDATE_OVERLAYS)
to_chat(user, "<span class='notice'>You press the reset button on \the [src].</span>")
SStgui.update_uis(src)
/obj/item/pda/AltClick(mob/user)
if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
@@ -217,30 +216,7 @@ GLOBAL_LIST_EMPTY(PDAs)
if(wearing_human.wear_id == src)
wearing_human.sec_hud_set_ID()
/obj/item/pda/verb/verb_remove_id()
set category = "Object"
set name = "Remove id"
set src in usr
if(issilicon(usr))
return
if( can_use(usr) )
if(id)
remove_id(usr)
else
to_chat(usr, "<span class='notice'>This PDA does not have an ID in it.</span>")
else
to_chat(usr, "<span class='notice'>You cannot do this while restrained.</span>")
/obj/item/pda/verb/verb_remove_pen()
set category = "Object"
set name = "Remove pen"
set src in usr
remove_pen(usr)
/obj/item/pda/proc/remove_pen(mob/user)
if(issilicon(user))
return
+1 -2
View File
@@ -129,8 +129,7 @@
*/
/mob/verb/pointed(atom/A as mob|obj|turf in view())
set name = "Point To"
set category = "Object"
set category = null
if(next_move >= world.time)
return
@@ -55,6 +55,7 @@
. = ..()
if(panel_open)
. += "<span class='notice'>The maintenance panel is open.</span>"
. += "<span class='info'><b>Alt-Click</b> to rotate [src].</span>"
/obj/machinery/power/emitter/RefreshParts()
var/max_firedelay = 120
@@ -72,24 +73,15 @@
power_usage -= 50 * M.rating
active_power_consumption = power_usage
/obj/machinery/power/emitter/verb/rotate()
set name = "Rotate"
set category = "Object"
set src in oview(1)
/obj/machinery/power/emitter/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(anchored)
to_chat(usr, "It is fastened to the floor!")
to_chat(user, "<span class='notice'>It is fastened to the floor!</span>")
return
dir = turn(dir, 90)
/obj/machinery/power/emitter/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!Adjacent(user))
return
rotate()
/obj/machinery/power/emitter/Destroy()
msg_admin_attack("Emitter deleted at ([x],[y],[z] - [ADMIN_JMP(src)]) [usr ? "Broken by [key_name_admin(usr)]" : ""]", ATKLOG_FEW)
log_game("Emitter deleted at ([x],[y],[z])")
@@ -87,39 +87,13 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
icon_state = "end_cap"
reference = "end_cap"
/obj/structure/particle_accelerator/verb/rotate()
set name = "Rotate Clockwise"
set category = "Object"
set src in oview(1)
if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
return
if(anchored)
to_chat(usr, "It is fastened to the floor!")
return 0
dir = turn(dir, 270)
return 1
/obj/structure/particle_accelerator/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!Adjacent(user))
return
rotate()
/obj/structure/particle_accelerator/verb/rotateccw()
set name = "Rotate Counter Clockwise"
set category = "Object"
set src in oview(1)
if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(anchored)
to_chat(usr, "It is fastened to the floor!")
return 0
dir = turn(dir, 90)
return 1
to_chat(user, "<span class='notice'>It is fastened to the floor!</span>")
return
dir = turn(dir, 270)
/obj/structure/particle_accelerator/examine(mob/user)
. = ..()
@@ -135,7 +109,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
if(powered)
desc = desc_holder
if(!anchored)
. += "<span class='notice'>Alt-click to rotate it.</span>"
. += "<span class='notice'><b>Alt-Click</b> to rotate it.</span>"
/obj/structure/particle_accelerator/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
@@ -260,32 +234,17 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
var/strength = 0
var/desc_holder = null
/obj/structure/particle_accelerator/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> to rotate it.</span>"
/obj/machinery/particle_accelerator/verb/rotate()
set name = "Rotate Clockwise"
set category = "Object"
set src in oview(1)
if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
/obj/machinery/particle_accelerator/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(anchored)
to_chat(usr, "It is fastened to the floor!")
return 0
to_chat(user, "<span class='notice'>It is fastened to the floor!</span>")
return
dir = turn(dir, 270)
return 1
/obj/machinery/particle_accelerator/verb/rotateccw()
set name = "Rotate Counter-Clockwise"
set category = "Object"
set src in oview(1)
if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
return
if(anchored)
to_chat(usr, "It is fastened to the floor!")
return 0
dir = turn(dir, 90)
return 1
/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user, params)
if(!iscoil(W))
-4
View File
@@ -366,10 +366,6 @@
clear_bayonet()
/obj/item/gun/proc/toggle_gunlight()
set name = "Toggle Gun Light"
set category = "Object"
set desc = "Click to toggle your weapon's attached flashlight."
if(!gun_light)
return
gun_light.on = !gun_light.on
@@ -9,10 +9,9 @@
can_holster = TRUE
execution_speed = 5 SECONDS
/obj/item/gun/projectile/revolver/Initialize(mapload)
/obj/item/gun/projectile/revolver/examine(mob/user)
. = ..()
if(!istype(magazine, /obj/item/ammo_box/magazine/internal/cylinder))
verbs -= /obj/item/gun/projectile/revolver/verb/spin
. += "<span class='notice'>You can <b>Alt-Click</b> [src] to spin it's barrel.</span>"
/obj/item/gun/projectile/revolver/chamber_round(spin = 1)
if(spin)
@@ -58,24 +57,16 @@
else
to_chat(user, "<span class='warning'>[src] is empty!</span>")
/obj/item/gun/projectile/revolver/verb/spin()
set name = "Spin Chamber"
set category = "Object"
set desc = "Click to spin your revolver's chamber."
var/mob/M = usr
if(M.stat || !in_range(M,src))
/obj/item/gun/projectile/revolver/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(istype(magazine, /obj/item/ammo_box/magazine/internal/cylinder))
var/obj/item/ammo_box/magazine/internal/cylinder/C = magazine
C.spin()
chamber_round(0)
playsound(loc, 'sound/weapons/revolver_spin.ogg', 50, 1)
usr.visible_message("[usr] spins [src]'s chamber.", "<span class='notice'>You spin [src]'s chamber.</span>")
else
verbs -= /obj/item/gun/projectile/revolver/verb/spin
playsound(get_turf(user), 'sound/weapons/revolver_spin.ogg', 50, 1)
user.visible_message("<span class='warning'>[usr] spins [src]'s chamber.</span>", "<span class='notice'>You spin [src]'s chamber.</span>")
/obj/item/gun/projectile/revolver/can_shoot()
return get_ammo(0,0)
@@ -153,7 +144,9 @@
/obj/item/gun/projectile/revolver/fingergun/Initialize(mapload, new_parent_spell)
. = ..()
parent_spell = new_parent_spell
verbs -= /obj/item/gun/projectile/revolver/verb/spin
/obj/item/gun/projectile/revolver/fingergun/AltClick(mob/user) // can't spin a barrel that doesn't exist!
return
/obj/item/gun/projectile/revolver/fingergun/shoot_with_empty_chamber(/*mob/living/user as mob|obj*/)
to_chat(usr, "<span class='warning'>You are out of ammo! You holster your fingers.</span>")
@@ -46,6 +46,7 @@
. += "<span class='notice'>\A [cell] is mounted onto [src]. Battery cell charge: [cell.charge]/[cell.maxcharge]"
else
. += "<span class='notice'>It has an empty mount for a battery cell.</span>"
. += "<span class='info'><b>Alt-Click</b> [src] to adjust it's tension.</span>"
/obj/item/gun/throw/crossbow/modify_projectile(obj/item/I, on_chamber = 0)
if(cell && on_chamber && istype(I, /obj/item/arrow/rod))
@@ -129,13 +130,8 @@
. = ..()
QDEL_NULL(cell)
/obj/item/gun/throw/crossbow/verb/set_tension()
set name = "Adjust Tension"
set category = "Object"
set src in range(0)
var/mob/user = usr
if(user.incapacitated())
/obj/item/gun/throw/crossbow/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
var/choice = input("Select tension to draw to:", "[src]", XBOW_TENSION_FULL) as null|anything in possible_tensions
if(!choice)
+8 -17
View File
@@ -15,12 +15,8 @@
var/temperature_min = 0 // To limit the temperature of a reagent container can atain when exposed to heat/cold
var/temperature_max = 10000
/obj/item/reagent_containers/verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
set category = "Object"
set src in usr
if(!usr.Adjacent(src) || !ishuman(usr) || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED))
/obj/item/reagent_containers/AltClick(mob/user)
if(!Adjacent(user) || !length(possible_transfer_amounts) || !ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
return
var/default = null
@@ -30,25 +26,20 @@
if(!new_transfer_rate)
return
if(!usr.Adjacent(src))
to_chat(usr, "<span class='warning'>You have moved too far away!</span>")
if(!Adjacent(user))
to_chat(user, "<span class='warning'>You have moved too far away!</span>")
return
if(!ishuman(usr) || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED))
to_chat(usr, "<span class='warning'>You can't use your hands!</span>")
if(!ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
to_chat(user, "<span class='warning'>You can't use your hands!</span>")
return
amount_per_transfer_from_this = new_transfer_rate
to_chat(usr, "<span class='notice'>[src] will now transfer [amount_per_transfer_from_this] units at a time.</span>")
/obj/item/reagent_containers/AltClick()
set_APTFT()
to_chat(user, "<span class='notice'>[src] will now transfer [amount_per_transfer_from_this] units at a time.</span>")
/obj/item/reagent_containers/Initialize(mapload)
. = ..()
if(!reagents) // Some subtypes create their own reagents
create_reagents(volume, temperature_min, temperature_max)
if(!possible_transfer_amounts)
verbs -= /obj/item/reagent_containers/verb/set_APTFT
if(spawned_disease)
var/datum/disease/F = new spawned_disease(0)
var/list/data = list("viruses" = list(F), "blood_color" = "#A10808")
@@ -109,4 +100,4 @@
// Items that have no valid possible_transfer_amounts shouldn't say their transfer rate is variable
if(possible_transfer_amounts)
. += "<span class='notice'>Alt-click to change the transfer amount.</span>"
. += "<span class='info'><b>Alt-Click</b> to change the transfer amount.</span>"
@@ -17,15 +17,16 @@
var/measured_health = 0 // Used for measuring health; we don't want this to stop applying once the person's health isn't changing.
var/static/list/safe_chem_applicator_list = list("silver_sulfadiazine", "styptic_powder", "synthflesh")
/obj/item/reagent_containers/applicator/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> to empty it.</span>"
/obj/item/reagent_containers/applicator/emag_act(mob/user)
if(!emagged)
emagged = TRUE
ignore_flags = TRUE
to_chat(user, "<span class='warning'>You short out the safeties on [src].</span>")
/obj/item/reagent_containers/applicator/set_APTFT()
set hidden = TRUE
/obj/item/reagent_containers/applicator/on_reagent_change()
if(!emagged)
var/found_forbidden_reagent = FALSE
@@ -120,18 +121,14 @@
playsound(get_turf(src), pick('sound/goonstation/items/mender.ogg', 'sound/goonstation/items/mender2.ogg'), 50, 1)
/obj/item/reagent_containers/applicator/verb/empty()
set name = "Empty Applicator"
set category = "Object"
set src in usr
if(usr.incapacitated())
/obj/item/reagent_containers/applicator/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(alert(usr, "Are you sure you want to empty [src]?", "Empty Applicator:", "Yes", "No") != "Yes")
if(alert(user, "Are you sure you want to empty [src]?", "Empty Applicator:", "Yes", "No") != "Yes")
return
if(!usr.incapacitated() && isturf(usr.loc) && loc == usr)
to_chat(usr, "<span class='notice'>You empty [src] onto the floor.</span>")
reagents.reaction(usr.loc)
if(!user.incapacitated() && isturf(user.loc) && loc == user)
to_chat(user, "<span class='notice'>You empty [src] onto the floor.</span>")
reagents.reaction(user.loc)
reagents.clear_reagents()
/obj/item/reagent_containers/applicator/brute
@@ -130,6 +130,11 @@
var/obj/item/assembly_holder/assembly = null
var/can_assembly = 1
/obj/item/reagent_containers/glass/beaker/examine(mob/user)
. = ..()
if(assembly)
. += "<span class='notice'>There is an [assembly] attached to it, use a screwdriver to remove it.</span>"
/obj/item/reagent_containers/glass/beaker/on_reagent_change()
update_icon(UPDATE_OVERLAYS)
@@ -165,20 +170,6 @@
if(assembly)
. += "assembly"
/obj/item/reagent_containers/glass/beaker/verb/remove_assembly()
set name = "Remove Assembly"
set category = "Object"
set src in usr
if(usr.incapacitated())
return
if(assembly)
to_chat(usr, "<span class='notice'>You detach [assembly] from [src]</span>")
usr.put_in_hands(assembly)
assembly = null
update_icon(UPDATE_OVERLAYS)
else
to_chat(usr, "<span class='notice'>There is no assembly to remove.</span>")
/obj/item/reagent_containers/glass/beaker/proc/heat_beaker()
if(reagents)
reagents.temperature_reagents(4000)
@@ -215,6 +206,17 @@
if(assembly)
assembly.hear_message(M, msg)
/obj/item/reagent_containers/glass/beaker/screwdriver_act(mob/living/user, obj/item/I)
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
if(assembly)
to_chat(user, "<span class='notice'>You detach [assembly] from [src]</span>")
user.put_in_hands(assembly)
assembly = null
update_icon(UPDATE_OVERLAYS)
else
to_chat(user, "<span class='notice'>There is no assembly to remove.</span>")
/obj/item/reagent_containers/glass/beaker/large
name = "large beaker"
desc = "A large glass beaker with twice the capacity of a normal beaker."
@@ -95,19 +95,16 @@
. = ..()
if(get_dist(user, src) && user == loc)
. += "[round(reagents.total_volume)] units left."
. += "<span class='info'><b>Alt-Click</b> to empty it.</span>"
/obj/item/reagent_containers/spray/verb/empty()
set name = "Empty Spray Bottle"
set category = "Object"
set src in usr
if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
/obj/item/reagent_containers/spray/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes")
if(alert(user, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes")
return
if(isturf(usr.loc) && loc == usr)
to_chat(usr, "<span class='notice'>You empty [src] onto the floor.</span>")
reagents.reaction(usr.loc)
if(isturf(user.loc) && loc == user)
to_chat(user, "<span class='notice'>You empty [src] onto the floor.</span>")
reagents.reaction(user.loc)
reagents.clear_reagents()
//space cleaner
@@ -23,9 +23,6 @@
mode = SYRINGE_INJECT
update_icon()
/obj/item/reagent_containers/syringe/set_APTFT()
set hidden = TRUE
/obj/item/reagent_containers/syringe/on_reagent_change()
update_icon()
+16 -25
View File
@@ -24,6 +24,10 @@
dir = direction
update()
/obj/structure/disposalconstruct/examine(mob/user)
. = ..()
. += "<span class='info'><b>Alt-Click</b> to rotate it, <b>Alt-Shift-Click to flip it.</b></span>"
// update iconstate and dpdir due to dir and type
/obj/structure/disposalconstruct/proc/update()
base_state = get_pipe_icon(ptype)
@@ -72,40 +76,27 @@
invisibility = (intact && level == 1) ? INVISIBILITY_MAXIMUM : 0 // hide if floor is intact
update()
// flip and rotate verbs
/obj/structure/disposalconstruct/verb/rotate()
set name = "Rotate Pipe"
set category = "Object"
set src in view(1)
if(usr.stat)
/obj/structure/disposalconstruct/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
rotate(user)
/obj/structure/disposalconstruct/proc/rotate(mob/user)
if(anchored)
to_chat(usr, "You must unfasten the pipe before rotating it.")
to_chat(user, "<span class='notice'>You must unfasten the pipe before rotating it.</span>")
return
dir = turn(dir, -90)
update()
/obj/structure/disposalconstruct/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!Adjacent(user))
return
rotate()
/obj/structure/disposalconstruct/verb/flip()
set name = "Flip Pipe"
set category = "Object"
set src in view(1)
if(usr.stat)
/obj/structure/disposalconstruct/AltShiftClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
flip(user)
/obj/structure/disposalconstruct/proc/flip(mob/user)
if(anchored)
to_chat(usr, "You must unfasten the pipe before flipping it.")
to_chat(user, "<span class='notice'>You must unfasten the pipe before flipping it.</span>")
return
dir = turn(dir, 180)
@@ -258,9 +249,9 @@
/obj/structure/disposalconstruct/rpd_act(mob/user, obj/item/rpd/our_rpd)
. = TRUE
if(our_rpd.mode == RPD_ROTATE_MODE)
rotate()
rotate(user)
else if(our_rpd.mode == RPD_FLIP_MODE)
flip()
flip(user)
else if(our_rpd.mode == RPD_DELETE_MODE)
our_rpd.delete_single_pipe(user, src)
else