Merge branch 'master' into Projectile_Rework

This commit is contained in:
Solaris-Shade
2022-03-11 23:07:31 -05:00
committed by GitHub
285 changed files with 5722 additions and 10058 deletions
@@ -28,10 +28,9 @@
for(var/path in typesof(prototype))
if(path == prototype && skip_prototype)
continue
if(roundstart)
var/datum/sprite_accessory/P = path
if(initial(P.locked))
continue
var/datum/sprite_accessory/P = path
if((roundstart && initial(P.locked)))
continue
var/datum/sprite_accessory/D = new path()
if(D.icon_state)
@@ -64,6 +63,7 @@
var/mutant_part_string //Also used in species.handle_mutant_bodyparts() to generate the overlay icon state.
var/alpha_mask_state
var/matrixed_sections = MATRIX_NONE //if color_src is MATRIXED, how many sections does it have? 1-3
var/ignore = FALSE //NEVER include in customization if set to TRUE
//Special / holdover traits for Citadel specific sprites.
var/extra = FALSE
@@ -126,6 +126,11 @@
hide_legs = USE_SNEK_CLIP_MASK
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/taur/naga/coiled
name = "Naga (coiled)"
icon_state = "naga_coiled"
ignore = TRUE
/datum/sprite_accessory/taur/otie
name = "Otie"
icon_state = "otie"
+12 -12
View File
@@ -182,7 +182,7 @@
held_items[hand_index] = I
I.layer = ABOVE_HUD_LAYER
I.plane = ABOVE_HUD_PLANE
I.equipped(src, SLOT_HANDS)
I.equipped(src, ITEM_SLOT_HANDS)
if(I.pulledby)
I.pulledby.stop_pulling()
update_inv_hands()
@@ -375,14 +375,14 @@
if(!slot_priority)
slot_priority = list( \
SLOT_BACK, SLOT_WEAR_ID,\
SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\
SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\
SLOT_SHOES, SLOT_GLOVES,\
SLOT_EARS, SLOT_GLASSES,\
SLOT_BELT, SLOT_S_STORE,\
SLOT_L_STORE, SLOT_R_STORE,\
SLOT_GENERC_DEXTROUS_STORAGE\
ITEM_SLOT_BACK, ITEM_SLOT_ID,\
ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\
ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\
ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\
ITEM_SLOT_EARS, ITEM_SLOT_EYES,\
ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\
ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\
ITEM_SLOT_DEX_STORAGE\
)
for(var/slot in slot_priority)
@@ -424,7 +424,7 @@
if(M.active_storage && M.active_storage.parent && SEND_SIGNAL(M.active_storage.parent, COMSIG_TRY_STORAGE_INSERT, src,M))
return TRUE
var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK))
var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(ITEM_SLOT_BELT), M.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), M.get_item_by_slot(ITEM_SLOT_BACK))
for(var/i in possible)
if(!i)
continue
@@ -446,10 +446,10 @@
//used in code for items usable by both carbon and drones, this gives the proper back slot for each mob.(defibrillator, backpack watertank, ...)
/mob/proc/getBackSlot()
return SLOT_BACK
return ITEM_SLOT_BACK
/mob/proc/getBeltSlot()
return SLOT_BELT
return ITEM_SLOT_BELT
@@ -172,7 +172,7 @@
if(target.dropItemToGround(W))
target.visible_message("<span class='danger'>[src] tears [W] off of [target]'s face!</span>", \
"<span class='userdanger'>[src] tears [W] off of [target]'s face!</span>")
target.equip_to_slot_if_possible(src, SLOT_WEAR_MASK, 0, 1, 1)
target.equip_to_slot_if_possible(src, ITEM_SLOT_MASK, 0, 1, 1)
return TRUE // time for a smoke
/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M)
@@ -259,7 +259,7 @@
return 1
var/mob/living/carbon/C = M
if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip))
if(ishuman(C) && !(ITEM_SLOT_MASK in C.dna.species.no_equip))
var/mob/living/carbon/human/H = C
if(H.is_mouth_covered(head_only = 1))
return FALSE
+5 -5
View File
@@ -261,7 +261,7 @@
// too soon.
var/buckle_cd = 600
if(handcuffed)
var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED)
var/obj/item/restraints/O = src.get_item_by_slot(ITEM_SLOT_HANDCUFFED)
buckle_cd = O.breakouttime
MarkResistTime()
visible_message("<span class='warning'>[src] attempts to unbuckle [p_them()]self!</span>", \
@@ -1137,15 +1137,15 @@
/mob/living/carbon/check_obscured_slots()
if(head)
if(head.flags_inv & HIDEMASK)
LAZYOR(., SLOT_WEAR_MASK)
LAZYOR(., ITEM_SLOT_MASK)
if(head.flags_inv & HIDEEYES)
LAZYOR(., SLOT_GLASSES)
LAZYOR(., ITEM_SLOT_EYES)
if(head.flags_inv & HIDEEARS)
LAZYOR(., SLOT_EARS)
LAZYOR(., ITEM_SLOT_EARS)
if(wear_mask)
if(wear_mask.flags_inv & HIDEEYES)
LAZYOR(., SLOT_GLASSES)
LAZYOR(., ITEM_SLOT_EYES)
// if any of our bodyparts are bleeding
/mob/living/carbon/proc/is_bleeding()
@@ -1,10 +1,10 @@
/datum/strippable_item/mob_item_slot/head
key = STRIPPABLE_ITEM_HEAD
item_slot = SLOT_HEAD
item_slot = ITEM_SLOT_HEAD
/datum/strippable_item/mob_item_slot/back
key = STRIPPABLE_ITEM_BACK
item_slot = SLOT_BACK
item_slot = ITEM_SLOT_BACK
/datum/strippable_item/mob_item_slot/back/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -18,15 +18,15 @@
/datum/strippable_item/mob_item_slot/mask
key = STRIPPABLE_ITEM_MASK
item_slot = SLOT_WEAR_MASK
item_slot = ITEM_SLOT_MASK
/datum/strippable_item/mob_item_slot/neck
key = STRIPPABLE_ITEM_NECK
item_slot = SLOT_NECK
item_slot = ITEM_SLOT_NECK
/datum/strippable_item/mob_item_slot/handcuffs
key = STRIPPABLE_ITEM_HANDCUFFS
item_slot = SLOT_HANDCUFFED
item_slot = ITEM_SLOT_HANDCUFFED
/datum/strippable_item/mob_item_slot/handcuffs/should_show(atom/source, mob/user)
if (!iscarbon(source))
@@ -41,7 +41,7 @@
/datum/strippable_item/mob_item_slot/legcuffs
key = STRIPPABLE_ITEM_LEGCUFFS
item_slot = SLOT_LEGCUFFED
item_slot = ITEM_SLOT_LEGCUFFED
/datum/strippable_item/mob_item_slot/legcuffs/should_show(atom/source, mob/user)
if (!iscarbon(source))
@@ -31,7 +31,7 @@
. += "[t_He] [t_is] a [spec_trait_examine_font()][dna.custom_species ? dna.custom_species : dna.species.name]</font>!"
//uniform
if(w_uniform && !(SLOT_W_UNIFORM in obscured))
if(w_uniform && !(ITEM_SLOT_ICLOTHING in obscured))
//accessory
var/accessory_msg
if(istype(w_uniform, /obj/item/clothing/under))
@@ -47,7 +47,7 @@
if(wear_suit && !(wear_suit.obj_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]."
//suit/armor storage
if(s_store && !(SLOT_S_STORE in obscured))
if(s_store && !(ITEM_SLOT_SUITSTORE in obscured))
. += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]."
//back
if(back)
@@ -59,7 +59,7 @@
. += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]."
//gloves
if(gloves && !(SLOT_GLOVES in obscured))
if(gloves && !(ITEM_SLOT_GLOVES in obscured))
. += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands."
else if(length(blood_DNA))
var/hand_number = get_num_arms(FALSE)
@@ -78,18 +78,18 @@
. += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist."
//shoes
if(shoes && !(SLOT_SHOES in obscured))
if(shoes && !(ITEM_SLOT_FEET in obscured))
. += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet."
//mask
if(wear_mask && !(SLOT_WEAR_MASK in obscured))
if(wear_mask && !(ITEM_SLOT_MASK in obscured))
. += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face."
if(wear_neck && !(SLOT_NECK in obscured))
if(wear_neck && !(ITEM_SLOT_NECK in obscured))
. += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck."
//eyes
if(!(SLOT_GLASSES in obscured))
if(!(ITEM_SLOT_EYES in obscured))
if(glasses)
. += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes."
else if((left_eye_color == BLOODCULT_EYE || right_eye_color == BLOODCULT_EYE) && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES))
@@ -100,7 +100,7 @@
. += "<b><font color=orange>[t_His] eyes are flickering a bright yellow!</font></b>"
//ears
if(ears && !(SLOT_EARS in obscured))
if(ears && !(ITEM_SLOT_EARS in obscured))
. += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears."
//ID
@@ -372,11 +372,11 @@
. = ..()
if(wear_suit)
if(wear_suit.flags_inv & HIDEGLOVES)
LAZYOR(., SLOT_GLOVES)
LAZYOR(., ITEM_SLOT_GLOVES)
if(wear_suit.flags_inv & HIDEJUMPSUIT)
LAZYOR(., SLOT_W_UNIFORM)
LAZYOR(., ITEM_SLOT_ICLOTHING)
if(wear_suit.flags_inv & HIDESHOES)
LAZYOR(., SLOT_SHOES)
LAZYOR(., ITEM_SLOT_FEET)
/mob/living/carbon/human/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null)
if(judgement_criteria & JUDGE_EMAGGED)
@@ -942,6 +942,9 @@
. += "[t_He] [t_is] a [spec_trait_examine_font()][dna.custom_species ? dna.custom_species : dna.species.name]</font>"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
/mob/living/carbon/human/chestonly
bodyparts = list(/obj/item/bodypart/chest)
/mob/living/carbon/human/species/abductor
race = /datum/species/abductor
@@ -35,15 +35,15 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/eyes
key = STRIPPABLE_ITEM_EYES
item_slot = SLOT_GLASSES
item_slot = ITEM_SLOT_EYES
/datum/strippable_item/mob_item_slot/ears
key = STRIPPABLE_ITEM_EARS
item_slot = SLOT_EARS
item_slot = ITEM_SLOT_EARS
/datum/strippable_item/mob_item_slot/jumpsuit
key = STRIPPABLE_ITEM_JUMPSUIT
item_slot = SLOT_W_UNIFORM
item_slot = ITEM_SLOT_ICLOTHING
/datum/strippable_item/mob_item_slot/jumpsuit/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -75,7 +75,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/suit
key = STRIPPABLE_ITEM_SUIT
item_slot = SLOT_WEAR_SUIT
item_slot = ITEM_SLOT_OCLOTHING
/datum/strippable_item/mob_item_slot/suit/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -108,11 +108,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/gloves
key = STRIPPABLE_ITEM_GLOVES
item_slot = SLOT_GLOVES
item_slot = ITEM_SLOT_GLOVES
/datum/strippable_item/mob_item_slot/feet
key = STRIPPABLE_ITEM_FEET
item_slot = SLOT_SHOES
item_slot = ITEM_SLOT_FEET
/datum/strippable_item/mob_item_slot/feet/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -141,7 +141,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/suit_storage
key = STRIPPABLE_ITEM_SUIT_STORAGE
item_slot = SLOT_S_STORE
item_slot = ITEM_SLOT_SUITSTORE
/datum/strippable_item/mob_item_slot/suit_storage/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -155,11 +155,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/id
key = STRIPPABLE_ITEM_ID
item_slot = SLOT_WEAR_ID
item_slot = ITEM_SLOT_ID
/datum/strippable_item/mob_item_slot/belt
key = STRIPPABLE_ITEM_BELT
item_slot = SLOT_BELT
item_slot = ITEM_SLOT_BELT
/datum/strippable_item/mob_item_slot/belt/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -212,12 +212,12 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/pocket/left
key = STRIPPABLE_ITEM_LPOCKET
item_slot = SLOT_L_STORE
item_slot = ITEM_SLOT_LPOCKET
pocket_side = "left"
/datum/strippable_item/mob_item_slot/pocket/right
key = STRIPPABLE_ITEM_RPOCKET
item_slot = SLOT_R_STORE
item_slot = ITEM_SLOT_RPOCKET
pocket_side = "right"
/proc/get_strippable_alternate_action_internals(obj/item/item, atom/source)
@@ -0,0 +1,89 @@
/datum/action/innate/ability/coiling
name = "Coil Grabbed Mob"
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "coil_icon"
icon_icon = 'icons/mob/actions/actions_snake.dmi'
background_icon_state = "bg_alien"
required_mobility_flags = MOBILITY_STAND
var/currently_coiling = FALSE
var/mob/living/carbon/human/currently_coiled
var/mutable_appearance/tracked_overlay
/datum/action/innate/ability/coiling/Activate()
// make sure they meet the mobility/check flags
if(IsAvailable())
// check that the user has grabbed someone and they are not currently coiling someone
if(ishuman(owner.pulling) && !currently_coiling)
coil_mob(owner.pulling)
/datum/action/innate/ability/coiling/proc/update_coil_offset(atom/source, old_dir, new_dir)
// update the coiling offset on the coiled user depending on the way the owner is facing
switch(new_dir)
if(NORTH)
currently_coiled.pixel_x = -12
if(EAST)
currently_coiled.pixel_x = -12
if(SOUTH)
currently_coiled.pixel_x = 12
if(WEST)
currently_coiled.pixel_x = 12
/datum/action/innate/ability/coiling/proc/coil_mob(var/mob/living/carbon/human/H)
// begin the coiling action
H.visible_message("<span class='warning'>[owner] coils [H] with their tail!</span>", \
"<span class='userdanger'>[owner] coils you with their tail!</span>")
currently_coiling = TRUE
currently_coiled = H
H.layer -= 0.1 // LISTEN I HATE TOUCHING MOB LAYERS TOO BUT THIS IS JUST SO THEY RENDER UNDER THE OTHER PLAYER SDFHSDFHDSFHDSH
// move user to same tile
H.forceMove(get_turf(owner))
// cancel the coiling action if certain things are done
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/cancel_coil)
RegisterSignal(owner, COMSIG_LIVING_RESTING, .proc/cancel_coil)
RegisterSignal(owner, COMSIG_LIVING_STOPPED_PULLING, .proc/cancel_coil)
// update the coil offset, update again if owner changes direction
RegisterSignal(owner, COMSIG_ATOM_DIR_CHANGE, .proc/update_coil_offset)
update_coil_offset(null, null, owner.dir)
// set our overlay to new image
var/mob/living/carbon/human/user = owner
user.dna.species.mutant_bodyparts["taur"] = "Naga (coiled)"
user.dna.features["taur"] = "Naga (coiled)"
user.update_mutant_bodyparts()
/datum/action/innate/ability/coiling/proc/cancel_coil()
var/mob/living/carbon/human/H = owner
// cancel the coiling action by removing the overlay
currently_coiled.pixel_x = 0
currently_coiling = FALSE
currently_coiled = null
// unregister signals
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
UnregisterSignal(owner, COMSIG_LIVING_RESTING)
UnregisterSignal(owner, COMSIG_LIVING_STOPPED_PULLING)
UnregisterSignal(owner, COMSIG_ATOM_DIR_CHANGE)
// change overlay back to original image
H.dna.species.mutant_bodyparts["taur"] = "Naga"
H.dna.features["taur"] = "Naga"
H.update_mutant_bodyparts()
H.update_body()
H.layer += 0.1
// remove the added overlay
owner.cut_overlay(tracked_overlay)
tracked_overlay = null
/datum/action/innate/ability/coiling/Remove(mob/M)
cancel_coil()
..(M)
@@ -135,6 +135,8 @@
var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(S.ignore)
continue
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
snowflake_taur_list[S.name] = path
var/new_taur
@@ -17,39 +17,39 @@
// Return the item currently in the slot ID
/mob/living/carbon/human/get_item_by_slot(slot_id)
switch(slot_id)
if(SLOT_BACK)
if(ITEM_SLOT_BACK)
return back
if(SLOT_WEAR_MASK)
if(ITEM_SLOT_MASK)
return wear_mask
if(SLOT_NECK)
if(ITEM_SLOT_NECK)
return wear_neck
if(SLOT_HANDCUFFED)
if(ITEM_SLOT_HANDCUFFED)
return handcuffed
if(SLOT_LEGCUFFED)
if(ITEM_SLOT_LEGCUFFED)
return legcuffed
if(SLOT_BELT)
if(ITEM_SLOT_BELT)
return belt
if(SLOT_WEAR_ID)
if(ITEM_SLOT_ID)
return wear_id
if(SLOT_EARS)
if(ITEM_SLOT_EARS)
return ears
if(SLOT_GLASSES)
if(ITEM_SLOT_EYES)
return glasses
if(SLOT_GLOVES)
if(ITEM_SLOT_GLOVES)
return gloves
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
return head
if(SLOT_SHOES)
if(ITEM_SLOT_FEET)
return shoes
if(SLOT_WEAR_SUIT)
if(ITEM_SLOT_OCLOTHING)
return wear_suit
if(SLOT_W_UNIFORM)
if(ITEM_SLOT_ICLOTHING)
return w_uniform
if(SLOT_L_STORE)
if(ITEM_SLOT_LPOCKET)
return l_store
if(SLOT_R_STORE)
if(ITEM_SLOT_RPOCKET)
return r_store
if(SLOT_S_STORE)
if(ITEM_SLOT_SUITSTORE)
return s_store
return null
@@ -98,17 +98,17 @@
var/not_handled = FALSE //Added in case we make this type path deeper one day
switch(slot)
if(SLOT_BELT)
if(ITEM_SLOT_BELT)
belt = I
update_inv_belt()
if(SLOT_WEAR_ID)
if(ITEM_SLOT_ID)
wear_id = I
sec_hud_set_ID()
update_inv_wear_id()
if(SLOT_EARS)
if(ITEM_SLOT_EARS)
ears = I
update_inv_ears()
if(SLOT_GLASSES)
if(ITEM_SLOT_EYES)
glasses = I
var/obj/item/clothing/glasses/G = I
if(G.glass_colour_type)
@@ -121,13 +121,13 @@
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
update_sight()
update_inv_glasses()
if(SLOT_GLOVES)
if(ITEM_SLOT_GLOVES)
gloves = I
update_inv_gloves()
if(SLOT_SHOES)
if(ITEM_SLOT_FEET)
shoes = I
update_inv_shoes()
if(SLOT_WEAR_SUIT)
if(ITEM_SLOT_OCLOTHING)
wear_suit = I
if(I.flags_inv & HIDEJUMPSUIT)
update_inv_w_uniform()
@@ -135,17 +135,17 @@
stop_pulling() //can't pull if restrained
update_action_buttons_icon() //certain action buttons will no longer be usable.
update_inv_wear_suit()
if(SLOT_W_UNIFORM)
if(ITEM_SLOT_ICLOTHING)
w_uniform = I
update_suit_sensors()
update_inv_w_uniform()
if(SLOT_L_STORE)
if(ITEM_SLOT_LPOCKET)
l_store = I
update_inv_pockets()
if(SLOT_R_STORE)
if(ITEM_SLOT_RPOCKET)
r_store = I
update_inv_pockets()
if(SLOT_S_STORE)
if(ITEM_SLOT_SUITSTORE)
s_store = I
update_inv_s_store()
else
@@ -296,7 +296,7 @@
if(incapacitated())
return
var/obj/item/thing = get_active_held_item()
var/obj/item/equipped_back = get_item_by_slot(SLOT_BACK)
var/obj/item/equipped_back = get_item_by_slot(ITEM_SLOT_BACK)
if(!equipped_back) // We also let you equip a backpack like this
if(!thing)
to_chat(src, "<span class='warning'>You have no backpack to take something out of!</span>")
@@ -327,7 +327,7 @@
if(incapacitated())
return
var/obj/item/thing = get_active_held_item()
var/obj/item/equipped_belt = get_item_by_slot(SLOT_BELT)
var/obj/item/equipped_belt = get_item_by_slot(ITEM_SLOT_BELT)
if(!equipped_belt) // We also let you equip a belt like this
if(!thing)
to_chat(src, "<span class='warning'>You have no belt to take something out of!</span>")
+39 -27
View File
@@ -612,7 +612,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(Q.type in blacklisted_quirks)
removed_quirks += Q.type
. += 1
qdel(Q)
qdel(Q)
else
var/point_overhead = 0
for(var/datum/quirk/Q as anything in C.roundstart_quirks)
@@ -906,6 +906,22 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/tauric = mutant_bodyparts["taur"] && H.dna.features["taur"] && H.dna.features["taur"] != "None"
// stuff for adding/removing the coiling ability if you have a taur part
// if another action is ever based on mutant parts we should probably make a system for it so it's all done in one proc with less overhead
var/datum/action/found_action
for(var/datum/action/A in H.actions)
if(A.type == /datum/action/innate/ability/coiling)
found_action = A
if(found_action && (!tauric || (H.dna.features["taur"] != "Naga" && H.dna.features["taur"] != "Naga (coiled)")))
found_action.Remove(H)
if(!found_action && tauric && H.dna.features["taur"] == "Naga")
found_action = new /datum/action/innate/ability/coiling()
found_action.Grant(H)
for(var/mutant_part in mutant_bodyparts)
var/reference_list = GLOB.mutant_reference_list[mutant_part]
if(reference_list)
@@ -1220,7 +1236,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!HAS_TRAIT(H, TRAIT_ROBOTIC_ORGANISM))
H.adjustBruteLoss(1)
else
H.adjustFireLoss(1) //Robots melt instead of taking brute.
H.adjustFireLoss(1) //Robots melt instead of taking brute.
/datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
@@ -1244,11 +1260,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/num_legs = H.get_num_legs(FALSE)
switch(slot)
if(SLOT_HANDS)
if(ITEM_SLOT_HANDS)
if(H.get_empty_held_indexes())
return TRUE
return FALSE
if(SLOT_WEAR_MASK)
if(ITEM_SLOT_MASK)
if(H.wear_mask)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_MASK))
@@ -1256,25 +1272,25 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_NECK)
if(ITEM_SLOT_NECK)
if(H.wear_neck)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_NECK) )
return FALSE
return TRUE
if(SLOT_BACK)
if(ITEM_SLOT_BACK)
if(H.back)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_BACK) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_WEAR_SUIT)
if(ITEM_SLOT_OCLOTHING)
if(H.wear_suit)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_OCLOTHING) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_GLOVES)
if(ITEM_SLOT_GLOVES)
if(H.gloves)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_GLOVES) )
@@ -1282,7 +1298,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(num_arms < 2)
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_SHOES)
if(ITEM_SLOT_FEET)
if(H.shoes)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_FEET) )
@@ -1295,7 +1311,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
else
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_BELT)
if(ITEM_SLOT_BELT)
if(H.belt)
return FALSE
if(!(I.item_flags & NO_UNIFORM_REQUIRED))
@@ -1307,7 +1323,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!(I.slot_flags & ITEM_SLOT_BELT))
return
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_GLASSES)
if(ITEM_SLOT_EYES)
if(H.glasses)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_EYES))
@@ -1315,7 +1331,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
if(H.head)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_HEAD))
@@ -1323,7 +1339,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_EARS)
if(ITEM_SLOT_EARS)
if(H.ears)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_EARS))
@@ -1331,13 +1347,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_W_UNIFORM)
if(ITEM_SLOT_ICLOTHING)
if(H.w_uniform)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_ICLOTHING) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_WEAR_ID)
if(ITEM_SLOT_ID)
if(H.wear_id)
return FALSE
if(!(I.item_flags & NO_UNIFORM_REQUIRED))
@@ -1349,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if( !(I.slot_flags & ITEM_SLOT_ID) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_L_STORE)
if(ITEM_SLOT_LPOCKET)
if(HAS_TRAIT(I, TRAIT_NODROP)) //Pockets aren't visible, so you can't move TRAIT_NODROP items into them.
return FALSE
if(H.l_store)
@@ -1361,11 +1377,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(return_warning)
return_warning[1] = "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return FALSE
if(I.slot_flags & ITEM_SLOT_DENYPOCKET)
return FALSE
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) )
return TRUE
if(SLOT_R_STORE)
if(ITEM_SLOT_RPOCKET)
if(HAS_TRAIT(I, TRAIT_NODROP))
return FALSE
if(H.r_store)
@@ -1377,12 +1391,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(return_warning)
return_warning[1] = "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return FALSE
if(I.slot_flags & ITEM_SLOT_DENYPOCKET)
return FALSE
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) )
return TRUE
return FALSE
if(SLOT_S_STORE)
if(ITEM_SLOT_SUITSTORE)
if(HAS_TRAIT(I, TRAIT_NODROP))
return FALSE
if(H.s_store)
@@ -1402,7 +1414,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if( istype(I, /obj/item/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) )
return TRUE
return FALSE
if(SLOT_HANDCUFFED)
if(ITEM_SLOT_HANDCUFFED)
if(H.handcuffed)
return FALSE
if(!istype(I, /obj/item/restraints/handcuffs))
@@ -1410,7 +1422,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(num_arms < 2)
return FALSE
return TRUE
if(SLOT_LEGCUFFED)
if(ITEM_SLOT_LEGCUFFED)
if(H.legcuffed)
return FALSE
if(!istype(I, /obj/item/restraints/legcuffs))
@@ -1418,7 +1430,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(num_legs < 2)
return FALSE
return TRUE
if(SLOT_IN_BACKPACK)
if(ITEM_SLOT_BACKPACK)
if(H.back)
if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
return TRUE
@@ -12,7 +12,7 @@
punchdamagelow = 5
punchdamagehigh = 14
punchstunthreshold = 10
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE)
nojumpsuit = 1
sexes = 1
damage_overlay_type = ""
@@ -16,7 +16,7 @@
punchdamagehigh = 12 //still better than humans
punchstunthreshold = 10
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM)
no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING)
burnmod = 1.25
heatmod = 1.5
@@ -37,7 +37,7 @@
limbs_id = SPECIES_SHADOW
burnmod = 1.5
blacklisted = TRUE
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE)
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
@@ -128,7 +128,7 @@ There are several things that need to be remembered:
remove_overlay(UNIFORM_LAYER)
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ICLOTHING) + 1]
inv.update_icon()
if(istype(w_uniform, /obj/item/clothing/under))
@@ -180,7 +180,7 @@ There are several things that need to be remembered:
remove_overlay(ID_LAYER)
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ID) + 1]
inv.update_icon()
var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER]
@@ -204,8 +204,8 @@ There are several things that need to be remembered:
if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER))
remove_overlay(GLOVES_LAYER)
if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES])
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES]
if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1])
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]
inv.update_icon()
if(!gloves && bloody_hands)
@@ -242,7 +242,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EYES) + 1]
inv.update_icon()
if(glasses)
@@ -269,7 +269,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS) + 1]
inv.update_icon()
if(ears)
@@ -295,7 +295,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_FEET) + 1]
inv.update_icon()
if(dna.species.mutant_bodyparts["taur"])
@@ -330,7 +330,7 @@ There are several things that need to be remembered:
remove_overlay(SUIT_STORE_LAYER)
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SUITSTORE) + 1]
inv.update_icon()
if(s_store)
@@ -357,7 +357,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1]
inv.update_icon()
if(head)
@@ -394,7 +394,7 @@ There are several things that need to be remembered:
remove_overlay(BELT_LAYER)
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BELT) + 1]
inv.update_icon()
if(belt)
@@ -416,7 +416,7 @@ There are several things that need to be remembered:
remove_overlay(SUIT_LAYER)
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_OCLOTHING) + 1]
inv.update_icon()
if(wear_suit)
@@ -479,10 +479,10 @@ There are several things that need to be remembered:
if(client && hud_used)
var/atom/movable/screen/inventory/inv
inv = hud_used.inv_slots[SLOT_L_STORE]
inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_LPOCKET) + 1]
inv.update_icon()
inv = hud_used.inv_slots[SLOT_R_STORE]
inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_RPOCKET) + 1]
inv.update_icon()
if(l_store)
@@ -506,7 +506,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1]
inv.update_icon()
if(wear_mask)
+20 -20
View File
@@ -1,16 +1,16 @@
/mob/living/carbon/get_item_by_slot(slot_id)
switch(slot_id)
if(SLOT_BACK)
if(ITEM_SLOT_BACK)
return back
if(SLOT_WEAR_MASK)
if(ITEM_SLOT_MASK)
return wear_mask
if(SLOT_NECK)
if(ITEM_SLOT_NECK)
return wear_neck
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
return head
if(SLOT_HANDCUFFED)
if(ITEM_SLOT_HANDCUFFED)
return handcuffed
if(SLOT_LEGCUFFED)
if(ITEM_SLOT_LEGCUFFED)
return legcuffed
return null
@@ -20,17 +20,17 @@
return slot
if(critical) //it is CRITICAL they get this item, no matter what
//do they have a backpack?
var/obj/item/backpack = get_item_by_slot(SLOT_BACK)
var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK)
if(!backpack)
//nothing on their back
backpack = new /obj/item/storage/backpack(get_turf(src))
if(equip_to_slot(backpack, SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one
if(equip_to_slot(backpack, ITEM_SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one
I.forceMove(backpack)
return SLOT_BACK
return ITEM_SLOT_BACK
else if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE))
//place it in here, regardless of storage capacity
I.forceMove(backpack)
return SLOT_BACK
return ITEM_SLOT_BACK
else
//this should NEVER happen, but if it does, report it with the appropriate information
var/conclusion = qdel_on_fail ? "deleted" : "not moved, staying at current position [I.x], [I.y], [I.z]"
@@ -69,28 +69,28 @@
I.appearance_flags |= NO_CLIENT_COLOR
var/not_handled = FALSE
switch(slot)
if(SLOT_BACK)
if(ITEM_SLOT_BACK)
back = I
update_inv_back()
if(SLOT_WEAR_MASK)
if(ITEM_SLOT_MASK)
wear_mask = I
wear_mask_update(I, toggle_off = 0)
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
head = I
head_update(I)
if(SLOT_NECK)
if(ITEM_SLOT_NECK)
wear_neck = I
update_inv_neck(I)
if(SLOT_HANDCUFFED)
if(ITEM_SLOT_HANDCUFFED)
handcuffed = I
update_handcuffed()
if(SLOT_LEGCUFFED)
if(ITEM_SLOT_LEGCUFFED)
legcuffed = I
update_inv_legcuffed()
if(SLOT_HANDS)
if(ITEM_SLOT_HANDS)
put_in_hands(I)
update_inv_hands()
if(SLOT_IN_BACKPACK)
if(ITEM_SLOT_BACKPACK)
if(!back || !SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
not_handled = TRUE
else
@@ -170,7 +170,7 @@
if(!offered_item)
to_chat(src, "<span class='warning'>You're not holding anything to give!</span>")
return
if(IS_DEAD_OR_INCAP(src))
to_chat(src, span_warning("You're unable to offer anything in your current state!"))
return
@@ -184,7 +184,7 @@
visible_message(span_notice("[src] is offering [offered_item]."), \
span_notice("You offer [offered_item]."), null, 2)
apply_status_effect(STATUS_EFFECT_OFFERING, offered_item)
/**
+5 -5
View File
@@ -676,7 +676,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
/mob/living/carbon/proc/get_cooling_efficiency()
if(!HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM))
return 1
var/integration_bonus = min(blood_volume * SYNTH_INTEGRATION_COOLANT_CAP, integrating_blood * SYNTH_INTEGRATION_COOLANT_PENALTY) //Integration blood somewhat helps, though only at 40% impact and to a cap of 25% of current blood level.
var/blood_effective_volume = blood_volume + integration_bonus
var/coolant_efficiency = min(blood_effective_volume / BLOOD_VOLUME_SAFE, 1) //Low coolant is only a negative, adding more than needed will not help you.
@@ -706,13 +706,13 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
return total_environment_efficiency
/mob/living/carbon/proc/check_suitlinking()
var/suit_item = get_item_by_slot(SLOT_WEAR_SUIT)
var/head_item = get_item_by_slot(SLOT_HEAD)
var/suit_item = get_item_by_slot(ITEM_SLOT_OCLOTHING)
var/head_item = get_item_by_slot(ITEM_SLOT_HEAD)
var/turf/T = get_turf(src)
if(istype(head_item, /obj/item/clothing/head/helmet/space) && istype(suit_item, /obj/item/clothing/suit/space))
return 1
if(T && is_mining_level(T.z) && istype(head_item, /obj/item/clothing/head/hooded/explorer) && istype(suit_item, /obj/item/clothing/suit/hooded/explorer))
return 1
@@ -30,7 +30,7 @@
return 0
if(myPath.len <= 0)
myPath = get_path_to(src, get_turf(target), /turf/proc/Distance, MAX_RANGE_FIND + 1, 250,1)
myPath = get_path_to(src, target, 250, 1)
if(myPath)
if(myPath.len > 0)
@@ -5,29 +5,29 @@
return FALSE
switch(slot)
if(SLOT_HANDS)
if(ITEM_SLOT_HANDS)
if(get_empty_held_indexes())
return TRUE
return FALSE
if(SLOT_WEAR_MASK)
if(ITEM_SLOT_MASK)
if(wear_mask)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_MASK) )
return FALSE
return TRUE
if(SLOT_NECK)
if(ITEM_SLOT_NECK)
if(wear_neck)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_NECK) )
return FALSE
return TRUE
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
if(head)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_HEAD) )
return FALSE
return TRUE
if(SLOT_BACK)
if(ITEM_SLOT_BACK)
if(back)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_BACK) )
@@ -184,5 +184,5 @@ GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list(
. = ..()
if(prob(10))
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
equip_to_slot_or_del(helmet,SLOT_HEAD)
equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD)
INVOKE_ASYNC(helmet, /obj/item.proc/attack_self, src) // todo encapsulate toggle
@@ -29,9 +29,9 @@
if(ancestor_chain > 1)
generate_fake_scars(rand(ancestor_chain, ancestor_chain * 4))
if(relic_hat)
equip_to_slot_or_del(new relic_hat, SLOT_HEAD)
equip_to_slot_or_del(new relic_hat, ITEM_SLOT_HEAD)
if(relic_mask)
equip_to_slot_or_del(new relic_mask, SLOT_WEAR_MASK)
equip_to_slot_or_del(new relic_mask, ITEM_SLOT_MASK)
/mob/living/carbon/monkey/punpun/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
@@ -91,7 +91,7 @@
return
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1]
inv?.update_icon()
if(wear_mask)
@@ -104,8 +104,8 @@
/mob/living/carbon/update_inv_neck()
remove_overlay(NECK_LAYER)
if(client && hud_used && hud_used.inv_slots[SLOT_NECK])
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK]
if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1])
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]
inv.update_icon()
if(wear_neck)
@@ -119,7 +119,7 @@
remove_overlay(BACK_LAYER)
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]
inv?.update_icon()
if(back)
@@ -135,7 +135,7 @@
return
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1]
inv?.update_icon()
if(head)
+1
View File
@@ -395,6 +395,7 @@
..()
update_pull_movespeed()
update_pull_hud_icon()
SEND_SIGNAL(src, COMSIG_LIVING_STOPPED_PULLING)
/mob/living/verb/stop_pulling1()
set name = "Stop Pulling"
@@ -9,6 +9,8 @@
resting = new_resting
if(!silent)
to_chat(src, "<span class='notice'>You are now [resting? "resting" : "getting up"].</span>")
if(resting == 1)
SEND_SIGNAL(src, COMSIG_LIVING_RESTING)
update_resting(updating)
/mob/living/proc/update_resting(update_mobility = TRUE)
+4 -1
View File
@@ -2,7 +2,10 @@
..()
//Mind updates
sync_mind()
mind.show_memory(src, 0)
//ambition start
if(mind.memory || mind.antag_datums)
to_chat(src, "<i>[mind.show_memory()]</i>")
//ambition end
//Round specific stuff
if(SSticker.mode)
@@ -551,7 +551,7 @@ Pass a positive integer as an argument to override a bot's default speed.
var/datum/job/captain/All = new/datum/job/captain
all_access.access = All.get_access()
set_path(get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id=all_access))
set_path(get_path_to(src, waypoint, 200, id=all_access))
calling_ai = caller //Link the AI to the bot!
ai_waypoint = waypoint
@@ -730,6 +730,7 @@ Pass a positive integer as an argument to override a bot's default speed.
access_card.access = user_access + prev_access //Adds the user's access, if any.
mode = BOT_SUMMON
speak("Responding.", radio_channel)
calc_summon_path()
if("ejectpai")
@@ -765,12 +766,12 @@ Pass a positive integer as an argument to override a bot's default speed.
// given an optional turf to avoid
/mob/living/simple_animal/bot/proc/calc_path(turf/avoid)
check_bot_access()
set_path(get_path_to(src, patrol_target, /turf/proc/Distance_cardinal, 0, 120, id=access_card, exclude=avoid))
set_path(get_path_to(src, patrol_target, 120, id=access_card, exclude=avoid))
/mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid)
check_bot_access()
spawn()
set_path(get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid))
set_path(get_path_to(src, summon_target, 150, id=access_card, exclude=avoid))
if(!path.len) //Cannot reach target. Give up and announce the issue.
speak("Summon command failed, destination unreachable.",radio_channel)
bot_reset()
@@ -302,7 +302,7 @@
if(!path || path.len == 0) //No path, need a new one
//Try to produce a path to the target, and ignore airlocks to which it has access.
path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card)
path = get_path_to(src, target, 30, id=access_card)
if(!bot_move(target))
add_to_ignore(target)
target = null
@@ -223,7 +223,7 @@
if(target_fire && (get_dist(src, target_fire) > 2))
path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card)
path = get_path_to(src, target_fire, 30, 1, id=access_card)
mode = BOT_MOVING
if(!path.len)
soft_reset()
@@ -263,9 +263,9 @@
if(path.len == 0)
if(!isturf(target))
var/turf/TL = get_turf(target)
path = get_path_to(src, TL, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0)
path = get_path_to(src, TL, 30, id=access_card,simulated_only = 0)
else
path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0)
path = get_path_to(src, target, 30, id=access_card,simulated_only = 0)
if(!bot_move(target))
add_to_ignore(target)
@@ -492,10 +492,10 @@
return
if(patient && path.len == 0 && (get_dist(src,patient) > 1))
path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,id=access_card)
path = get_path_to(src, patient, 30, id=access_card)
mode = BOT_MOVING
if(!path.len) //try to get closer if you can't reach the patient directly
path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,1,id=access_card)
path = get_path_to(src, patient, 30, 1, id=access_card)
if(!path.len) //Do not chase a patient we cannot reach.
soft_reset()
@@ -530,7 +530,7 @@
// calculates a path to the current destination
// given an optional turf to avoid
/mob/living/simple_animal/bot/mulebot/calc_path(turf/avoid = null)
path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 250, id=access_card, exclude=avoid)
path = get_path_to(src, target, 250, id=access_card, exclude=avoid)
// sets the current destination
// signals all beacons matching the delivery code
@@ -88,10 +88,10 @@
if(default_storage)
var/obj/item/I = new default_storage(src)
equip_to_slot_or_del(I, SLOT_GENERC_DEXTROUS_STORAGE)
equip_to_slot_or_del(I, ITEM_SLOT_DEX_STORAGE)
if(default_hatmask)
var/obj/item/I = new default_hatmask(src)
equip_to_slot_or_del(I, SLOT_HEAD)
equip_to_slot_or_del(I, ITEM_SLOT_HEAD)
ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
@@ -61,7 +61,7 @@
if(!D.default_hatmask && seasonal_hats && possible_seasonal_hats.len)
var/hat_type = pick(possible_seasonal_hats)
var/obj/item/new_hat = new hat_type(D)
D.equip_to_slot_or_del(new_hat, SLOT_HEAD)
D.equip_to_slot_or_del(new_hat, ITEM_SLOT_HEAD)
D.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
user.transfer_ckey(D, FALSE)
qdel(src)
@@ -21,13 +21,13 @@
/mob/living/simple_animal/drone/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning)
switch(slot)
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
if(head)
return 0
if(!((I.slot_flags & ITEM_SLOT_HEAD) || (I.slot_flags & ITEM_SLOT_MASK)))
return 0
return 1
if(SLOT_GENERC_DEXTROUS_STORAGE)
if(ITEM_SLOT_DEX_STORAGE)
if(internal_storage)
return 0
return 1
@@ -36,9 +36,9 @@
/mob/living/simple_animal/drone/get_item_by_slot(slot_id)
switch(slot_id)
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
return head
if(SLOT_GENERC_DEXTROUS_STORAGE)
if(ITEM_SLOT_DEX_STORAGE)
return internal_storage
return ..()
@@ -63,10 +63,10 @@
I.plane = ABOVE_HUD_PLANE
switch(slot)
if(SLOT_HEAD)
if(ITEM_SLOT_HEAD)
head = I
update_inv_head()
if(SLOT_GENERC_DEXTROUS_STORAGE)
if(ITEM_SLOT_DEX_STORAGE)
internal_storage = I
update_inv_internal_storage()
else
@@ -77,7 +77,7 @@
I.equipped(src, slot)
/mob/living/simple_animal/drone/getBackSlot()
return SLOT_GENERC_DEXTROUS_STORAGE
return ITEM_SLOT_DEX_STORAGE
/mob/living/simple_animal/drone/getBeltSlot()
return SLOT_GENERC_DEXTROUS_STORAGE
return ITEM_SLOT_DEX_STORAGE
@@ -52,7 +52,7 @@
/mob/living/simple_animal/hostile/guardian/dextrous/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning)
switch(slot)
if(SLOT_GENERC_DEXTROUS_STORAGE)
if(ITEM_SLOT_DEX_STORAGE)
if(internal_storage)
return 0
return 1
@@ -63,17 +63,17 @@
return
switch(slot)
if(SLOT_GENERC_DEXTROUS_STORAGE)
if(ITEM_SLOT_DEX_STORAGE)
internal_storage = I
update_inv_internal_storage()
else
to_chat(src, "<span class='danger'>You are trying to equip this item to an unsupported inventory slot. Report this to a coder!</span>")
/mob/living/simple_animal/hostile/guardian/dextrous/getBackSlot()
return SLOT_GENERC_DEXTROUS_STORAGE
return ITEM_SLOT_DEX_STORAGE
/mob/living/simple_animal/hostile/guardian/dextrous/getBeltSlot()
return SLOT_GENERC_DEXTROUS_STORAGE
return ITEM_SLOT_DEX_STORAGE
/mob/living/simple_animal/hostile/guardian/dextrous/proc/update_inv_internal_storage()
if(internal_storage && client && hud_used && hud_used.hud_shown)
@@ -191,7 +191,7 @@
continue
visible_message("<span class='danger'>[src] grabs hold of [L]!</span>")
var/mob/living/carbon/C = L
var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT)
var/obj/item/clothing/S = C.get_item_by_slot(ITEM_SLOT_OCLOTHING)
if(S && S.resistance_flags & GOLIATH_RESISTANCE)
L.Stun(25)
else if(S && S.resistance_flags & GOLIATH_WEAKNESS)
@@ -655,7 +655,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
item = I
break
if(item)
if(!AStar(src, get_turf(item), /turf/proc/Distance_cardinal))
if(!get_path_to(src, item))
item = null
continue
return item
+5 -1
View File
@@ -439,7 +439,11 @@
set category = "IC"
set desc = "View your character's notes memory."
if(mind)
mind.show_memory(src)
//ambition start
var/datum/browser/popup = new(src, "memory", "Memory and Notes")
popup.set_content(mind.show_memory())
popup.open()
//ambition end
else
to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.")