Merge branch 'master' into upstream-merge-37529
This commit is contained in:
@@ -234,6 +234,7 @@
|
||||
if(POLLTYPE_IRV)
|
||||
if (!href_list["IRVdata"])
|
||||
to_chat(src, "<span class='danger'>No ordering data found. Please try again or contact an administrator.</span>")
|
||||
return
|
||||
var/list/votelist = splittext(href_list["IRVdata"], ",")
|
||||
if (!vote_on_irv_poll(pollid, votelist))
|
||||
to_chat(src, "<span class='danger'>Vote failed, please try again or contact an administrator.</span>")
|
||||
@@ -400,7 +401,7 @@
|
||||
SSticker.mode.make_antag_chance(humanc)
|
||||
|
||||
if(humanc && CONFIG_GET(flag/roundstart_traits))
|
||||
SStraits.AssignTraits(humanc, humanc.client, TRUE)
|
||||
SSquirks.AssignQuirks(humanc, humanc.client, TRUE)
|
||||
|
||||
log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
src << browse(null ,"window=playerpolllist")
|
||||
src << browse(output,"window=playerpoll;size=500x250")
|
||||
if(POLLTYPE_IRV)
|
||||
var/datum/asset/irv_assets = get_asset_datum(/datum/asset/simple/IRV)
|
||||
var/datum/asset/irv_assets = get_asset_datum(/datum/asset/group/IRV)
|
||||
irv_assets.send(src)
|
||||
|
||||
var/datum/DBQuery/query_irv_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
@@ -267,7 +267,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<script src="jquery-1.10.2.min.js"></script>
|
||||
<script src="jquery.min.js"></script>
|
||||
<script src="jquery-ui.custom-core-widgit-mouse-sortable-min.js"></script>
|
||||
<style>
|
||||
#sortable { list-style-type: none; margin: 0; padding: 2em; }
|
||||
|
||||
@@ -91,6 +91,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
name = random_unique_name(gender)
|
||||
|
||||
mind = body.mind //we don't transfer the mind but we keep a reference to it.
|
||||
|
||||
suiciding = body.suiciding // Transfer whether they committed suicide.
|
||||
|
||||
if(ishuman(body))
|
||||
var/mob/living/carbon/human/body_human = body
|
||||
if(HAIR in body_human.dna.species.species_traits)
|
||||
@@ -589,6 +592,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
|
||||
var/list/possessible = list()
|
||||
for(var/mob/living/L in GLOB.alive_mob_list)
|
||||
if(istype(L,/mob/living/carbon/human/dummy) || !get_turf(L)) //Haha no.
|
||||
continue
|
||||
if(!(L in GLOB.player_list) && !L.mind)
|
||||
possessible += L
|
||||
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
held_items[hand_index] = I
|
||||
I.layer = ABOVE_HUD_LAYER
|
||||
I.plane = ABOVE_HUD_PLANE
|
||||
I.equipped(src, slot_hands)
|
||||
I.equipped(src, SLOT_HANDS)
|
||||
if(I.pulledby)
|
||||
I.pulledby.stop_pulling()
|
||||
update_inv_hands()
|
||||
@@ -326,7 +326,10 @@
|
||||
I.plane = initial(I.plane)
|
||||
I.appearance_flags &= ~NO_CLIENT_COLOR
|
||||
if(!no_move && !(I.flags_1 & DROPDEL_1)) //item may be moved/qdel'd immedietely, don't bother moving it
|
||||
I.forceMove(newloc)
|
||||
if (isnull(newloc))
|
||||
I.moveToNullspace()
|
||||
else
|
||||
I.forceMove(newloc)
|
||||
I.dropped(src)
|
||||
return TRUE
|
||||
|
||||
@@ -396,7 +399,7 @@
|
||||
if(M.active_storage && M.active_storage.parent && M.active_storage.parent.SendSignal(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_generic_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(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK))
|
||||
for(var/i in possible)
|
||||
if(!i)
|
||||
continue
|
||||
@@ -418,10 +421,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 SLOT_BACK
|
||||
|
||||
/mob/proc/getBeltSlot()
|
||||
return slot_belt
|
||||
return SLOT_BELT
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -193,10 +193,10 @@
|
||||
blood_data["real_name"] = real_name
|
||||
blood_data["features"] = dna.features
|
||||
blood_data["factions"] = faction
|
||||
blood_data["traits"] = list()
|
||||
for(var/V in roundstart_traits)
|
||||
var/datum/trait/T = V
|
||||
blood_data["traits"] += T.type
|
||||
blood_data["quirks"] = list()
|
||||
for(var/V in roundstart_quirks)
|
||||
var/datum/quirk/T = V
|
||||
blood_data["quirks"] += T.type
|
||||
return blood_data
|
||||
|
||||
//get the id of the substance this mob use as blood.
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/obj/item/device/mmi
|
||||
/obj/item/mmi
|
||||
name = "Man-Machine Interface"
|
||||
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity, that nevertheless has become standard-issue on Nanotrasen stations."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "mmi_off"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/braintype = "Cyborg"
|
||||
var/obj/item/device/radio/radio = null //Let's give it a radio.
|
||||
var/obj/item/radio/radio = null //Let's give it a radio.
|
||||
var/mob/living/brain/brainmob = null //The current occupant.
|
||||
var/mob/living/silicon/robot = null //Appears unused.
|
||||
var/obj/mecha = null //This does not appear to be used outside of reference in mecha.dm.
|
||||
@@ -14,7 +14,7 @@
|
||||
var/force_replace_ai_name = FALSE
|
||||
var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core.
|
||||
|
||||
/obj/item/device/mmi/update_icon()
|
||||
/obj/item/mmi/update_icon()
|
||||
if(!brain)
|
||||
icon_state = "mmi_off"
|
||||
return
|
||||
@@ -29,13 +29,13 @@
|
||||
else
|
||||
add_overlay("mmi_dead")
|
||||
|
||||
/obj/item/device/mmi/Initialize()
|
||||
/obj/item/mmi/Initialize()
|
||||
. = ..()
|
||||
radio = new(src) //Spawns a radio inside the MMI.
|
||||
radio.broadcasting = 0 //researching radio mmis turned the robofabs into radios because this didnt start as 0.
|
||||
laws.set_laws_config()
|
||||
|
||||
/obj/item/device/mmi/attackby(obj/item/O, mob/user, params)
|
||||
/obj/item/mmi/attackby(obj/item/O, mob/user, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(istype(O, /obj/item/organ/brain)) //Time to stick a brain in it --NEO
|
||||
var/obj/item/organ/brain/newbrain = O
|
||||
@@ -76,7 +76,7 @@
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/device/mmi/attack_self(mob/user)
|
||||
/obj/item/mmi/attack_self(mob/user)
|
||||
if(!brain)
|
||||
radio.on = !radio.on
|
||||
to_chat(user, "<span class='notice'>You toggle the MMI's radio system [radio.on==1 ? "on" : "off"].</span>")
|
||||
@@ -86,7 +86,7 @@
|
||||
update_icon()
|
||||
name = "Man-Machine Interface"
|
||||
|
||||
/obj/item/device/mmi/proc/eject_brain(mob/user)
|
||||
/obj/item/mmi/proc/eject_brain(mob/user)
|
||||
brainmob.container = null //Reset brainmob mmi var.
|
||||
brainmob.forceMove(brain) //Throw mob into brain.
|
||||
brainmob.stat = DEAD
|
||||
@@ -103,7 +103,7 @@
|
||||
brain = null //No more brain in here
|
||||
|
||||
|
||||
/obj/item/device/mmi/proc/transfer_identity(mob/living/L) //Same deal as the regular brain proc. Used for human-->robot people.
|
||||
/obj/item/mmi/proc/transfer_identity(mob/living/L) //Same deal as the regular brain proc. Used for human-->robot people.
|
||||
if(!brainmob)
|
||||
brainmob = new(src)
|
||||
brainmob.name = L.real_name
|
||||
@@ -128,10 +128,10 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/device/mmi/proc/replacement_ai_name()
|
||||
/obj/item/mmi/proc/replacement_ai_name()
|
||||
return brainmob.name
|
||||
|
||||
/obj/item/device/mmi/verb/Toggle_Listening()
|
||||
/obj/item/mmi/verb/Toggle_Listening()
|
||||
set name = "Toggle Listening"
|
||||
set desc = "Toggle listening channel on or off."
|
||||
set category = "MMI"
|
||||
@@ -147,7 +147,7 @@
|
||||
radio.listening = radio.listening==1 ? 0 : 1
|
||||
to_chat(brainmob, "<span class='notice'>Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast.</span>")
|
||||
|
||||
/obj/item/device/mmi/emp_act(severity)
|
||||
/obj/item/mmi/emp_act(severity)
|
||||
if(!brainmob || iscyborg(loc))
|
||||
return
|
||||
else
|
||||
@@ -161,7 +161,7 @@
|
||||
brainmob.emote("alarm")
|
||||
..()
|
||||
|
||||
/obj/item/device/mmi/Destroy()
|
||||
/obj/item/mmi/Destroy()
|
||||
if(iscyborg(loc))
|
||||
var/mob/living/silicon/robot/borg = loc
|
||||
borg.mmi = null
|
||||
@@ -178,12 +178,12 @@
|
||||
radio = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/mmi/deconstruct(disassembled = TRUE)
|
||||
/obj/item/mmi/deconstruct(disassembled = TRUE)
|
||||
if(brain)
|
||||
eject_brain()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/mmi/examine(mob/user)
|
||||
/obj/item/mmi/examine(mob/user)
|
||||
..()
|
||||
if(brainmob)
|
||||
var/mob/living/brain/B = brainmob
|
||||
@@ -196,15 +196,15 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The MMI indicates the brain is active.</span>")
|
||||
|
||||
/obj/item/device/mmi/relaymove(mob/user)
|
||||
/obj/item/mmi/relaymove(mob/user)
|
||||
return //so that the MMI won't get a warning about not being able to move if it tries to move
|
||||
|
||||
/obj/item/device/mmi/syndie
|
||||
/obj/item/mmi/syndie
|
||||
name = "Syndicate Man-Machine Interface"
|
||||
desc = "Syndicate's own brand of MMI. It enforces laws designed to help Syndicate agents achieve their goals upon cyborgs and AIs created with it."
|
||||
overrides_aicore_laws = TRUE
|
||||
|
||||
/obj/item/device/mmi/syndie/Initialize()
|
||||
/obj/item/mmi/syndie/Initialize()
|
||||
. = ..()
|
||||
laws = new /datum/ai_laws/syndicate_override()
|
||||
radio.on = 0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/brain
|
||||
var/obj/item/device/mmi/container = null
|
||||
var/obj/item/mmi/container = null
|
||||
var/timeofhostdeath = 0
|
||||
var/emp_damage = 0//Handles a type of MMI damage
|
||||
var/datum/dna/stored/stored_dna // dna var for brain. Used to store dna, brain dna is not considered like actual dna, brain.has_dna() returns FALSE.
|
||||
@@ -66,8 +66,8 @@
|
||||
|
||||
/mob/living/brain/ClickOn(atom/A, params)
|
||||
..()
|
||||
if(istype(loc, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/MMI = loc
|
||||
if(istype(loc, /obj/item/mmi))
|
||||
var/obj/item/mmi/MMI = loc
|
||||
var/obj/mecha/M = MMI.mecha
|
||||
if((src == MMI.brainmob) && istype(M))
|
||||
return M.click_action(A,src,params)
|
||||
@@ -80,7 +80,7 @@
|
||||
B.forceMove(destination)
|
||||
else if (istype(destination, /obj/item/organ/brain))
|
||||
doMove(destination)
|
||||
else if (istype(destination, /obj/item/device/mmi))
|
||||
else if (istype(destination, /obj/item/mmi))
|
||||
doMove(destination)
|
||||
else
|
||||
CRASH("Brainmob without a container [src] attempted to move to [destination].")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
stat = DEAD
|
||||
|
||||
if(!gibbed && container)//If not gibbed but in a container.
|
||||
var/obj/item/device/mmi = container
|
||||
var/obj/item/mmi = container
|
||||
mmi.visible_message("<span class='warning'>[src]'s MMI flatlines!</span>", \
|
||||
"<span class='italics'>You hear something flatline.</span>")
|
||||
mmi.update_icon()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/datum/emote/brain/can_run_emote(mob/user, status_check = TRUE)
|
||||
. = ..()
|
||||
var/mob/living/brain/B = user
|
||||
if(!istype(B) || (!(B.container && istype(B.container, /obj/item/device/mmi))))
|
||||
if(!istype(B) || (!(B.container && istype(B.container, /obj/item/mmi))))
|
||||
return FALSE
|
||||
|
||||
/datum/emote/brain/alarm
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
|
||||
/obj/item/device/mmi/posibrain
|
||||
/obj/item/mmi/posibrain
|
||||
name = "positronic brain"
|
||||
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
@@ -28,19 +28,19 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
var/list/possible_names //If you leave this blank, it will use the global posibrain names
|
||||
var/picked_name
|
||||
|
||||
/obj/item/device/mmi/posibrain/Topic(href, href_list)
|
||||
/obj/item/mmi/posibrain/Topic(href, href_list)
|
||||
if(href_list["activate"])
|
||||
var/mob/dead/observer/ghost = usr
|
||||
if(istype(ghost))
|
||||
activate(ghost)
|
||||
|
||||
/obj/item/device/mmi/posibrain/proc/ping_ghosts(msg, newlymade) // CITADEL EDIT sound change to 'sound/misc/server-ready.ogg'
|
||||
/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) // CITADEL EDIT sound change to 'sound/misc/server-ready.ogg'
|
||||
if(newlymade || GLOB.posibrain_notify_cooldown <= world.time)
|
||||
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
if(!newlymade)
|
||||
GLOB.posibrain_notify_cooldown = world.time + askDelay
|
||||
|
||||
/obj/item/device/mmi/posibrain/attack_self(mob/user)
|
||||
/obj/item/mmi/posibrain/attack_self(mob/user)
|
||||
if(!brainmob)
|
||||
brainmob = new(src)
|
||||
if(is_occupied())
|
||||
@@ -57,7 +57,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
update_icon()
|
||||
addtimer(CALLBACK(src, .proc/check_success), askDelay)
|
||||
|
||||
/obj/item/device/mmi/posibrain/proc/check_success()
|
||||
/obj/item/mmi/posibrain/proc/check_success()
|
||||
searching = FALSE
|
||||
update_icon()
|
||||
if(QDELETED(brainmob))
|
||||
@@ -68,10 +68,10 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
else
|
||||
visible_message(fail_message)
|
||||
|
||||
/obj/item/device/mmi/posibrain/attack_ghost(mob/user)
|
||||
/obj/item/mmi/posibrain/attack_ghost(mob/user)
|
||||
activate(user)
|
||||
|
||||
/obj/item/device/mmi/posibrain/proc/is_occupied()
|
||||
/obj/item/mmi/posibrain/proc/is_occupied()
|
||||
if(brainmob.key)
|
||||
return TRUE
|
||||
if(iscyborg(loc))
|
||||
@@ -81,7 +81,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
return FALSE
|
||||
|
||||
//Two ways to activate a positronic brain. A clickable link in the ghost notif, or simply clicking the object itself.
|
||||
/obj/item/device/mmi/posibrain/proc/activate(mob/user)
|
||||
/obj/item/mmi/posibrain/proc/activate(mob/user)
|
||||
if(QDELETED(brainmob))
|
||||
return
|
||||
if(is_occupied() || jobban_isbanned(user,"posibrain"))
|
||||
@@ -92,7 +92,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
return
|
||||
transfer_personality(user)
|
||||
|
||||
/obj/item/device/mmi/posibrain/transfer_identity(mob/living/carbon/C)
|
||||
/obj/item/mmi/posibrain/transfer_identity(mob/living/carbon/C)
|
||||
name = "[initial(name)] ([C])"
|
||||
brainmob.name = C.real_name
|
||||
brainmob.real_name = C.real_name
|
||||
@@ -111,7 +111,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
brainmob.mind.wipe_memory()
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/mmi/posibrain/proc/transfer_personality(mob/candidate)
|
||||
/obj/item/mmi/posibrain/proc/transfer_personality(mob/candidate)
|
||||
if(QDELETED(brainmob))
|
||||
return
|
||||
if(is_occupied()) //Prevents hostile takeover if two ghosts get the prompt or link for the same brain.
|
||||
@@ -133,7 +133,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/device/mmi/posibrain/examine(mob/user)
|
||||
/obj/item/mmi/posibrain/examine(mob/user)
|
||||
. = ..()
|
||||
var/msg
|
||||
if(brainmob && brainmob.key)
|
||||
@@ -148,7 +148,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
|
||||
to_chat(user, msg)
|
||||
|
||||
/obj/item/device/mmi/posibrain/Initialize()
|
||||
/obj/item/mmi/posibrain/Initialize()
|
||||
. = ..()
|
||||
brainmob = new(src)
|
||||
var/new_name
|
||||
@@ -163,11 +163,11 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
if(autoping)
|
||||
ping_ghosts("created", TRUE)
|
||||
|
||||
/obj/item/device/mmi/posibrain/attackby(obj/item/O, mob/user)
|
||||
/obj/item/mmi/posibrain/attackby(obj/item/O, mob/user)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/mmi/posibrain/update_icon()
|
||||
/obj/item/mmi/posibrain/update_icon()
|
||||
if(searching)
|
||||
icon_state = "[initial(icon_state)]-searching"
|
||||
return
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/brain/say(message, language)
|
||||
if(!(container && istype(container, /obj/item/device/mmi)))
|
||||
if(!(container && istype(container, /obj/item/mmi)))
|
||||
return //No MMI, can't speak, bucko./N
|
||||
else
|
||||
if(prob(emp_damage*4))
|
||||
@@ -14,8 +14,8 @@
|
||||
return ..() | SPAN_ROBOT
|
||||
|
||||
/mob/living/brain/radio(message, message_mode, list/spans, language)
|
||||
if(message_mode == MODE_HEADSET && istype(container, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/R = container
|
||||
if(message_mode == MODE_HEADSET && istype(container, /obj/item/mmi))
|
||||
var/obj/item/mmi/R = container
|
||||
if(R.radio)
|
||||
R.radio.talk_into(src, message, , get_spans(), language)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
@@ -30,7 +30,7 @@
|
||||
return message
|
||||
|
||||
/mob/living/brain/could_speak_in_language(datum/language/dt)
|
||||
if(istype(container, /obj/item/device/mmi/posibrain/soul_vessel))
|
||||
if(istype(container, /obj/item/mmi/posibrain/soul_vessel))
|
||||
// soul vessels can only speak ratvarian.
|
||||
. = ispath(dt, /datum/language/ratvar)
|
||||
else
|
||||
|
||||
@@ -45,13 +45,13 @@
|
||||
<HR>"}
|
||||
for(var/i in 1 to held_items.len)
|
||||
var/obj/item/I = get_item_for_held_index(i)
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B><A href='?src=[REF(src)];item=[slot_hands];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "<font color=grey>Empty</font>"]</a>"
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "<font color=grey>Empty</font>"]</a>"
|
||||
dat += "<BR><A href='?src=[REF(src)];pouches=1'>Empty Pouches</A>"
|
||||
|
||||
if(handcuffed)
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[slot_handcuffed]'>Handcuffed</A>"
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[SLOT_HANDCUFFED]'>Handcuffed</A>"
|
||||
if(legcuffed)
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[slot_legcuffed]'>Legcuffed</A>"
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[SLOT_LEGCUFFED]'>Legcuffed</A>"
|
||||
|
||||
dat += {"
|
||||
<BR>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
icon_state = "facehugger"
|
||||
item_state = "facehugger"
|
||||
w_class = WEIGHT_CLASS_TINY //note: can be picked up by aliens unlike most other items of w_class below 4
|
||||
flags_1 = MASKINTERNALS_1
|
||||
clothing_flags = MASKINTERNALS
|
||||
throw_range = 5
|
||||
tint = 3
|
||||
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
|
||||
@@ -169,7 +169,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, SLOT_WEAR_MASK, 0, 1, 1)
|
||||
return TRUE // time for a smoke
|
||||
|
||||
/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M)
|
||||
@@ -254,7 +254,7 @@
|
||||
return 1
|
||||
|
||||
var/mob/living/carbon/C = M
|
||||
if(ishuman(C) && !(slot_wear_mask in C.dna.species.no_equip))
|
||||
if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.is_mouth_covered(head_only = 1))
|
||||
return 0
|
||||
|
||||
@@ -202,23 +202,23 @@
|
||||
<HR>
|
||||
<B><FONT size=3>[name]</FONT></B>
|
||||
<HR>
|
||||
<BR><B>Head:</B> <A href='?src=[REF(src)];item=[slot_head]'> [(head && !(head.flags_1&ABSTRACT_1)) ? head : "Nothing"]</A>
|
||||
<BR><B>Mask:</B> <A href='?src=[REF(src)];item=[slot_wear_mask]'> [(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Nothing"]</A>
|
||||
<BR><B>Neck:</B> <A href='?src=[REF(src)];item=[slot_neck]'> [(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Nothing"]</A>"}
|
||||
<BR><B>Head:</B> <A href='?src=[REF(src)];item=[SLOT_HEAD]'> [(head && !(head.flags_1&ABSTRACT_1)) ? head : "Nothing"]</A>
|
||||
<BR><B>Mask:</B> <A href='?src=[REF(src)];item=[SLOT_WEAR_MASK]'> [(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Nothing"]</A>
|
||||
<BR><B>Neck:</B> <A href='?src=[REF(src)];item=[SLOT_NECK]'> [(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Nothing"]</A>"}
|
||||
|
||||
for(var/i in 1 to held_items.len)
|
||||
var/obj/item/I = get_item_for_held_index(i)
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[slot_hands];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Nothing"]</a>"
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Nothing"]</a>"
|
||||
|
||||
dat += "<BR><B>Back:</B> <A href='?src=[REF(src)];item=[slot_back]'>[back ? back : "Nothing"]</A>"
|
||||
dat += "<BR><B>Back:</B> <A href='?src=[REF(src)];item=[SLOT_BACK]'>[back ? back : "Nothing"]</A>"
|
||||
|
||||
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank))
|
||||
dat += "<BR><A href='?src=[REF(src)];internal=1'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
|
||||
if(handcuffed)
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[slot_handcuffed]'>Handcuffed</A>"
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[SLOT_HANDCUFFED]'>Handcuffed</A>"
|
||||
if(legcuffed)
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[slot_legcuffed]'>Legcuffed</A>"
|
||||
dat += "<BR><A href='?src=[REF(src)];item=[SLOT_LEGCUFFED]'>Legcuffed</A>"
|
||||
|
||||
dat += {"
|
||||
<BR>
|
||||
@@ -234,7 +234,7 @@
|
||||
if(href_list["internal"])
|
||||
var/slot = text2num(href_list["internal"])
|
||||
var/obj/item/ITEM = get_item_by_slot(slot)
|
||||
if(ITEM && istype(ITEM, /obj/item/tank) && wear_mask && (wear_mask.flags_1 & MASKINTERNALS_1))
|
||||
if(ITEM && istype(ITEM, /obj/item/tank) && wear_mask && (wear_mask.clothing_flags & MASKINTERNALS))
|
||||
visible_message("<span class='danger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].</span>", \
|
||||
"<span class='userdanger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].</span>")
|
||||
if(do_mob(usr, src, POCKET_STRIP_DELAY))
|
||||
@@ -242,7 +242,7 @@
|
||||
internal = null
|
||||
update_internals_hud_icon(0)
|
||||
else if(ITEM && istype(ITEM, /obj/item/tank))
|
||||
if((wear_mask && (wear_mask.flags_1 & MASKINTERNALS_1)) || getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
||||
if((wear_mask && (wear_mask.clothing_flags & MASKINTERNALS)) || getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
||||
internal = ITEM
|
||||
update_internals_hud_icon(1)
|
||||
|
||||
@@ -446,7 +446,7 @@
|
||||
var/obj/item/organ/alien/plasmavessel/vessel = getorgan(/obj/item/organ/alien/plasmavessel)
|
||||
if(vessel)
|
||||
stat(null, "Plasma Stored: [vessel.storedPlasma]/[vessel.max_plasma]")
|
||||
if(locate(/obj/item/device/assembly/health) in src)
|
||||
if(locate(/obj/item/assembly/health) in src)
|
||||
stat(null, "Health: [health]")
|
||||
|
||||
add_abilities_to_panel()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/carbon/movement_delay()
|
||||
var/FP = FALSE
|
||||
var/obj/item/device/flightpack/F = get_flightpack()
|
||||
var/obj/item/flightpack/F = get_flightpack()
|
||||
if(istype(F) && F.flight)
|
||||
FP = TRUE
|
||||
. = ..(FP)
|
||||
@@ -33,7 +33,7 @@
|
||||
if(!isturf(loc))
|
||||
return 0
|
||||
|
||||
var/obj/item/device/flightpack/F = get_flightpack()
|
||||
var/obj/item/flightpack/F = get_flightpack()
|
||||
if(istype(F) && (F.flight) && F.allow_thrust(0.01, src))
|
||||
return 1
|
||||
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
//Some sources of brain damage shouldn't be deadly
|
||||
/mob/living/carbon/adjustBrainLoss(amount, maximum = BRAIN_DAMAGE_DEATH)
|
||||
if(status_flags & GODMODE)
|
||||
return 0
|
||||
return FALSE
|
||||
var/prev_brainloss = getBrainLoss()
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(!B)
|
||||
@@ -230,20 +230,20 @@
|
||||
return
|
||||
var/brainloss = getBrainLoss()
|
||||
if(brainloss > BRAIN_DAMAGE_MILD)
|
||||
if(prob((amount * 2) + (brainloss - BRAIN_DAMAGE_MILD - (20 * LAZYLEN(get_traumas())) / 5))) //1 damage|50 brain damage = 4% chance
|
||||
if(prob(amount * ((2 * (100 + brainloss - BRAIN_DAMAGE_MILD)) / 100))) //Base chance is the hit damage; for every point of damage past the threshold the chance is increased by 2%
|
||||
gain_trauma_type(BRAIN_TRAUMA_MILD)
|
||||
if(brainloss > BRAIN_DAMAGE_SEVERE)
|
||||
if(prob(amount + (brainloss - BRAIN_DAMAGE_SEVERE - (20 * LAZYLEN(get_traumas())) / 15))) //1 damage|150 brain damage = 3% chance
|
||||
if(prob(amount * ((2 * (100 + brainloss - BRAIN_DAMAGE_SEVERE)) / 100))) //Base chance is the hit damage; for every point of damage past the threshold the chance is increased by 2%
|
||||
if(prob(20))
|
||||
gain_trauma_type(BRAIN_TRAUMA_SPECIAL)
|
||||
else
|
||||
gain_trauma_type(BRAIN_TRAUMA_SEVERE)
|
||||
|
||||
if(prev_brainloss < 40 && brainloss >= 40)
|
||||
if(prev_brainloss < BRAIN_DAMAGE_MILD && brainloss >= BRAIN_DAMAGE_MILD)
|
||||
to_chat(src, "<span class='warning'>You feel lightheaded.</span>")
|
||||
else if(prev_brainloss < 120 && brainloss >= 120)
|
||||
else if(prev_brainloss < BRAIN_DAMAGE_SEVERE && brainloss >= BRAIN_DAMAGE_SEVERE)
|
||||
to_chat(src, "<span class='warning'>You feel less in control of your thoughts.</span>")
|
||||
else if(prev_brainloss < 180 && brainloss >= 180)
|
||||
else if(prev_brainloss < (BRAIN_DAMAGE_DEATH - 20) && brainloss >= (BRAIN_DAMAGE_DEATH - 20))
|
||||
to_chat(src, "<span class='warning'>You can feel your mind flickering on and off...</span>")
|
||||
|
||||
/mob/living/carbon/setBrainLoss(amount)
|
||||
|
||||
@@ -1,99 +1,99 @@
|
||||
/datum/emote/living/carbon
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon)
|
||||
|
||||
/datum/emote/living/carbon/airguitar
|
||||
key = "airguitar"
|
||||
message = "is strumming the air and headbanging like a safari chimp."
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/blink
|
||||
key = "blink"
|
||||
key_third_person = "blinks"
|
||||
message = "blinks."
|
||||
|
||||
/datum/emote/living/carbon/blink_r
|
||||
key = "blink_r"
|
||||
message = "blinks rapidly."
|
||||
|
||||
/datum/emote/living/carbon/clap
|
||||
key = "clap"
|
||||
key_third_person = "claps"
|
||||
message = "claps."
|
||||
muzzle_ignore = TRUE
|
||||
restraint_check = TRUE
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/living/carbon/clap/run_emote(mob/living/user, params)
|
||||
. = ..()
|
||||
if (.)
|
||||
if (ishuman(user))
|
||||
// Need hands to clap
|
||||
if (!user.get_bodypart("l_arm") || !user.get_bodypart("r_arm"))
|
||||
return
|
||||
var/clap = pick('sound/misc/clap1.ogg',
|
||||
'sound/misc/clap2.ogg',
|
||||
'sound/misc/clap3.ogg',
|
||||
'sound/misc/clap4.ogg')
|
||||
playsound(user, clap, 50, 1, -1)
|
||||
|
||||
/datum/emote/living/carbon/gnarl
|
||||
key = "gnarl"
|
||||
key_third_person = "gnarls"
|
||||
message = "gnarls and shows its teeth..."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
|
||||
/datum/emote/living/carbon/moan
|
||||
key = "moan"
|
||||
key_third_person = "moans"
|
||||
message = "moans!"
|
||||
message_mime = "appears to moan!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/living/carbon/roll
|
||||
key = "roll"
|
||||
key_third_person = "rolls"
|
||||
message = "rolls."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/scratch
|
||||
key = "scratch"
|
||||
key_third_person = "scratches"
|
||||
message = "scratches."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/screech
|
||||
key = "screech"
|
||||
key_third_person = "screeches"
|
||||
message = "screeches."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
|
||||
/datum/emote/living/carbon/sign
|
||||
key = "sign"
|
||||
key_third_person = "signs"
|
||||
message_param = "signs the number %t."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/sign/select_param(mob/user, params)
|
||||
. = ..()
|
||||
if(!isnum(text2num(params)))
|
||||
return message
|
||||
|
||||
/datum/emote/living/carbon/sign/signal
|
||||
key = "signal"
|
||||
key_third_person = "signals"
|
||||
message_param = "raises %t fingers."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/human)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/tail
|
||||
key = "tail"
|
||||
message = "waves their tail."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
|
||||
/datum/emote/living/carbon/wink
|
||||
key = "wink"
|
||||
key_third_person = "winks"
|
||||
message = "winks."
|
||||
/datum/emote/living/carbon
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon)
|
||||
|
||||
/datum/emote/living/carbon/airguitar
|
||||
key = "airguitar"
|
||||
message = "is strumming the air and headbanging like a safari chimp."
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/blink
|
||||
key = "blink"
|
||||
key_third_person = "blinks"
|
||||
message = "blinks."
|
||||
|
||||
/datum/emote/living/carbon/blink_r
|
||||
key = "blink_r"
|
||||
message = "blinks rapidly."
|
||||
|
||||
/datum/emote/living/carbon/clap
|
||||
key = "clap"
|
||||
key_third_person = "claps"
|
||||
message = "claps."
|
||||
muzzle_ignore = TRUE
|
||||
restraint_check = TRUE
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/living/carbon/clap/run_emote(mob/living/user, params)
|
||||
. = ..()
|
||||
if (.)
|
||||
if (ishuman(user))
|
||||
// Need hands to clap
|
||||
if (!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM))
|
||||
return
|
||||
var/clap = pick('sound/misc/clap1.ogg',
|
||||
'sound/misc/clap2.ogg',
|
||||
'sound/misc/clap3.ogg',
|
||||
'sound/misc/clap4.ogg')
|
||||
playsound(user, clap, 50, 1, -1)
|
||||
|
||||
/datum/emote/living/carbon/gnarl
|
||||
key = "gnarl"
|
||||
key_third_person = "gnarls"
|
||||
message = "gnarls and shows its teeth..."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
|
||||
/datum/emote/living/carbon/moan
|
||||
key = "moan"
|
||||
key_third_person = "moans"
|
||||
message = "moans!"
|
||||
message_mime = "appears to moan!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/living/carbon/roll
|
||||
key = "roll"
|
||||
key_third_person = "rolls"
|
||||
message = "rolls."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/scratch
|
||||
key = "scratch"
|
||||
key_third_person = "scratches"
|
||||
message = "scratches."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/screech
|
||||
key = "screech"
|
||||
key_third_person = "screeches"
|
||||
message = "screeches."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
|
||||
/datum/emote/living/carbon/sign
|
||||
key = "sign"
|
||||
key_third_person = "signs"
|
||||
message_param = "signs the number %t."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/sign/select_param(mob/user, params)
|
||||
. = ..()
|
||||
if(!isnum(text2num(params)))
|
||||
return message
|
||||
|
||||
/datum/emote/living/carbon/sign/signal
|
||||
key = "signal"
|
||||
key_third_person = "signals"
|
||||
message_param = "raises %t fingers."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/human)
|
||||
restraint_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/tail
|
||||
key = "tail"
|
||||
message = "waves their tail."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
|
||||
/datum/emote/living/carbon/wink
|
||||
key = "wink"
|
||||
key_third_person = "winks"
|
||||
message = "winks."
|
||||
|
||||
@@ -19,6 +19,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
|
||||
|
||||
//Inefficient pooling/caching way.
|
||||
GLOBAL_LIST_EMPTY(human_dummy_list)
|
||||
GLOBAL_LIST_EMPTY(dummy_mob_list)
|
||||
|
||||
/proc/generate_or_wait_for_human_dummy(slotkey)
|
||||
if(!slotkey)
|
||||
@@ -31,6 +32,7 @@ GLOBAL_LIST_EMPTY(human_dummy_list)
|
||||
if(QDELETED(D))
|
||||
D = new
|
||||
GLOB.human_dummy_list[slotkey] = D
|
||||
GLOB.dummy_mob_list += D
|
||||
D.in_use = TRUE
|
||||
return D
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !(slot_w_uniform in obscured))
|
||||
if(w_uniform && !(SLOT_W_UNIFORM in obscured))
|
||||
//accessory
|
||||
var/accessory_msg
|
||||
if(istype(w_uniform, /obj/item/clothing/under))
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
GET_COMPONENT(FR, /datum/component/forensics)
|
||||
//gloves
|
||||
if(gloves && !(slot_gloves in obscured))
|
||||
if(gloves && !(SLOT_GLOVES in obscured))
|
||||
msg += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands.\n"
|
||||
else if(FR && length(FR.blood_DNA))
|
||||
var/hand_number = get_num_arms()
|
||||
@@ -69,22 +69,22 @@
|
||||
msg += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist.\n"
|
||||
|
||||
//shoes
|
||||
if(shoes && !(slot_shoes in obscured))
|
||||
if(shoes && !(SLOT_SHOES in obscured))
|
||||
msg += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet.\n"
|
||||
|
||||
//mask
|
||||
if(wear_mask && !(slot_wear_mask in obscured))
|
||||
if(wear_mask && !(SLOT_WEAR_MASK in obscured))
|
||||
msg += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face.\n"
|
||||
|
||||
if (wear_neck && !(slot_neck in obscured))
|
||||
if (wear_neck && !(SLOT_NECK in obscured))
|
||||
msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n"
|
||||
|
||||
//eyes
|
||||
if(glasses && !(slot_glasses in obscured))
|
||||
if(glasses && !(SLOT_GLASSES in obscured))
|
||||
msg += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes.\n"
|
||||
|
||||
//ears
|
||||
if(ears && !(slot_ears in obscured))
|
||||
if(ears && !(SLOT_EARS in obscured))
|
||||
msg += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears.\n"
|
||||
|
||||
//ID
|
||||
|
||||
@@ -115,80 +115,80 @@
|
||||
dat += "<table>"
|
||||
for(var/i in 1 to held_items.len)
|
||||
var/obj/item/I = get_item_for_held_index(i)
|
||||
dat += "<tr><td><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[slot_hands];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "<font color=grey>Empty</font>"]</a></td></tr>"
|
||||
dat += "<tr><td><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "<font color=grey>Empty</font>"]</a></td></tr>"
|
||||
dat += "<tr><td> </td></tr>"
|
||||
|
||||
dat += "<tr><td><B>Back:</B></td><td><A href='?src=[REF(src)];item=[slot_back]'>[(back && !(back.flags_1&ABSTRACT_1)) ? back : "<font color=grey>Empty</font>"]</A>"
|
||||
dat += "<tr><td><B>Back:</B></td><td><A href='?src=[REF(src)];item=[SLOT_BACK]'>[(back && !(back.flags_1&ABSTRACT_1)) ? back : "<font color=grey>Empty</font>"]</A>"
|
||||
if(has_breathable_mask && istype(back, /obj/item/tank))
|
||||
dat += " <A href='?src=[REF(src)];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += " <A href='?src=[REF(src)];internal=[SLOT_BACK]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
|
||||
dat += "</td></tr><tr><td> </td></tr>"
|
||||
|
||||
dat += "<tr><td><B>Head:</B></td><td><A href='?src=[REF(src)];item=[slot_head]'>[(head && !(head.flags_1&ABSTRACT_1)) ? head : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Head:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HEAD]'>[(head && !(head.flags_1&ABSTRACT_1)) ? head : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(slot_wear_mask in obscured)
|
||||
if(SLOT_WEAR_MASK in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Mask:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Mask:</B></td><td><A href='?src=[REF(src)];item=[slot_wear_mask]'>[(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Mask:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_MASK]'>[(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(slot_neck in obscured)
|
||||
if(SLOT_NECK in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Neck:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Neck:</B></td><td><A href='?src=[REF(src)];item=[slot_neck]'>[(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Neck:</B></td><td><A href='?src=[REF(src)];item=[SLOT_NECK]'>[(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(slot_glasses in obscured)
|
||||
if(SLOT_GLASSES in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Eyes:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Eyes:</B></td><td><A href='?src=[REF(src)];item=[slot_glasses]'>[(glasses && !(glasses.flags_1&ABSTRACT_1)) ? glasses : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Eyes:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLASSES]'>[(glasses && !(glasses.flags_1&ABSTRACT_1)) ? glasses : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(slot_ears in obscured)
|
||||
if(SLOT_EARS in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Ears:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Ears:</B></td><td><A href='?src=[REF(src)];item=[slot_ears]'>[(ears && !(ears.flags_1&ABSTRACT_1)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Ears:</B></td><td><A href='?src=[REF(src)];item=[SLOT_EARS]'>[(ears && !(ears.flags_1&ABSTRACT_1)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
dat += "<tr><td> </td></tr>"
|
||||
|
||||
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=[REF(src)];item=[slot_wear_suit]'>[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_SUIT]'>[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
if(wear_suit)
|
||||
dat += "<tr><td> ↳<B>Suit Storage:</B></td><td><A href='?src=[REF(src)];item=[slot_s_store]'>[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "<font color=grey>Empty</font>"]</A>"
|
||||
dat += "<tr><td> ↳<B>Suit Storage:</B></td><td><A href='?src=[REF(src)];item=[SLOT_S_STORE]'>[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "<font color=grey>Empty</font>"]</A>"
|
||||
if(has_breathable_mask && istype(s_store, /obj/item/tank))
|
||||
dat += " <A href='?src=[REF(src)];internal=[slot_s_store]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += " <A href='?src=[REF(src)];internal=[SLOT_S_STORE]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += "</td></tr>"
|
||||
else
|
||||
dat += "<tr><td><font color=grey> ↳<B>Suit Storage:</B></font></td></tr>"
|
||||
|
||||
if(slot_shoes in obscured)
|
||||
if(SLOT_SHOES in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Shoes:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Shoes:</B></td><td><A href='?src=[REF(src)];item=[slot_shoes]'>[(shoes && !(shoes.flags_1&ABSTRACT_1)) ? shoes : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Shoes:</B></td><td><A href='?src=[REF(src)];item=[SLOT_SHOES]'>[(shoes && !(shoes.flags_1&ABSTRACT_1)) ? shoes : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(slot_gloves in obscured)
|
||||
if(SLOT_GLOVES in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Gloves:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Gloves:</B></td><td><A href='?src=[REF(src)];item=[slot_gloves]'>[(gloves && !(gloves.flags_1&ABSTRACT_1)) ? gloves : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Gloves:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLOVES]'>[(gloves && !(gloves.flags_1&ABSTRACT_1)) ? gloves : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(slot_w_uniform in obscured)
|
||||
if(SLOT_W_UNIFORM in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Uniform:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Uniform:</B></td><td><A href='?src=[REF(src)];item=[slot_w_uniform]'>[(w_uniform && !(w_uniform.flags_1&ABSTRACT_1)) ? w_uniform : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Uniform:</B></td><td><A href='?src=[REF(src)];item=[SLOT_W_UNIFORM]'>[(w_uniform && !(w_uniform.flags_1&ABSTRACT_1)) ? w_uniform : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (slot_w_uniform in obscured))
|
||||
if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (SLOT_W_UNIFORM in obscured))
|
||||
dat += "<tr><td><font color=grey> ↳<B>Pockets:</B></font></td></tr>"
|
||||
dat += "<tr><td><font color=grey> ↳<B>ID:</B></font></td></tr>"
|
||||
dat += "<tr><td><font color=grey> ↳<B>Belt:</B></font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td> ↳<B>Belt:</B></td><td><A href='?src=[REF(src)];item=[slot_belt]'>[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "<font color=grey>Empty</font>"]</A>"
|
||||
dat += "<tr><td> ↳<B>Belt:</B></td><td><A href='?src=[REF(src)];item=[SLOT_BELT]'>[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "<font color=grey>Empty</font>"]</A>"
|
||||
if(has_breathable_mask && istype(belt, /obj/item/tank))
|
||||
dat += " <A href='?src=[REF(src)];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += " <A href='?src=[REF(src)];internal=[SLOT_BELT]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += "</td></tr>"
|
||||
dat += "<tr><td> ↳<B>Pockets:</B></td><td><A href='?src=[REF(src)];pockets=left'>[(l_store && !(l_store.flags_1&ABSTRACT_1)) ? "Left (Full)" : "<font color=grey>Left (Empty)</font>"]</A>"
|
||||
dat += " <A href='?src=[REF(src)];pockets=right'>[(r_store && !(r_store.flags_1&ABSTRACT_1)) ? "Right (Full)" : "<font color=grey>Right (Empty)</font>"]</A></td></tr>"
|
||||
dat += "<tr><td> ↳<B>ID:</B></td><td><A href='?src=[REF(src)];item=[slot_wear_id]'>[(wear_id && !(wear_id.flags_1&ABSTRACT_1)) ? wear_id : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td> ↳<B>ID:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_ID]'>[(wear_id && !(wear_id.flags_1&ABSTRACT_1)) ? wear_id : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(handcuffed)
|
||||
dat += "<tr><td><B>Handcuffed:</B> <A href='?src=[REF(src)];item=[slot_handcuffed]'>Remove</A></td></tr>"
|
||||
dat += "<tr><td><B>Handcuffed:</B> <A href='?src=[REF(src)];item=[SLOT_HANDCUFFED]'>Remove</A></td></tr>"
|
||||
if(legcuffed)
|
||||
dat += "<tr><td><A href='?src=[REF(src)];item=[slot_legcuffed]'>Legcuffed</A></td></tr>"
|
||||
dat += "<tr><td><A href='?src=[REF(src)];item=[SLOT_LEGCUFFED]'>Legcuffed</A></td></tr>"
|
||||
|
||||
dat += {"</table>
|
||||
<A href='?src=[REF(user)];mach_close=mob[REF(src)]'>Close</A>
|
||||
@@ -241,8 +241,8 @@
|
||||
|
||||
if(href_list["pockets"])
|
||||
var/pocket_side = href_list["pockets"]
|
||||
var/pocket_id = (pocket_side == "right" ? slot_r_store : slot_l_store)
|
||||
var/obj/item/pocket_item = (pocket_id == slot_r_store ? r_store : l_store)
|
||||
var/pocket_id = (pocket_side == "right" ? SLOT_R_STORE : SLOT_L_STORE)
|
||||
var/obj/item/pocket_item = (pocket_id == SLOT_R_STORE ? r_store : l_store)
|
||||
var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty
|
||||
|
||||
var/delay_denominator = 1
|
||||
@@ -258,7 +258,7 @@
|
||||
|
||||
if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator)) //placing an item into the pocket is 4 times faster
|
||||
if(pocket_item)
|
||||
if(pocket_item == (pocket_id == slot_r_store ? r_store : l_store)) //item still in the pocket we search
|
||||
if(pocket_item == (pocket_id == SLOT_R_STORE ? r_store : l_store)) //item still in the pocket we search
|
||||
dropItemToGround(pocket_item)
|
||||
else
|
||||
if(place_item)
|
||||
@@ -495,12 +495,17 @@
|
||||
. = 0
|
||||
// If targeting the head, see if the head item is thin enough.
|
||||
// If targeting anything else, see if the wear suit is thin enough.
|
||||
if(above_neck(target_zone))
|
||||
if(head && head.flags_1 & THICKMATERIAL_1 && !penetrate_thick)
|
||||
. = 0
|
||||
else
|
||||
if(wear_suit && wear_suit.flags_1 & THICKMATERIAL_1 && !penetrate_thick)
|
||||
. = 0
|
||||
if (!penetrate_thick)
|
||||
if(above_neck(target_zone))
|
||||
if(head && is_type_in_typecache(head, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/CH = head
|
||||
if (CH.clothing_flags & THICKMATERIAL)
|
||||
. = 0
|
||||
else
|
||||
if(wear_suit && is_type_in_typecache(wear_suit, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/CS = wear_suit
|
||||
if (CS.clothing_flags & THICKMATERIAL)
|
||||
. = 0
|
||||
if(!. && error_msg && user)
|
||||
// Might need re-wording.
|
||||
to_chat(user, "<span class='alert'>There is no exposed flesh or thin material [above_neck(target_zone) ? "on [p_their()] head" : "on [p_their()] body"].</span>")
|
||||
@@ -510,23 +515,23 @@
|
||||
|
||||
if(wear_suit)
|
||||
if(wear_suit.flags_inv & HIDEGLOVES)
|
||||
obscured |= slot_gloves
|
||||
obscured |= SLOT_GLOVES
|
||||
if(wear_suit.flags_inv & HIDEJUMPSUIT)
|
||||
obscured |= slot_w_uniform
|
||||
obscured |= SLOT_W_UNIFORM
|
||||
if(wear_suit.flags_inv & HIDESHOES)
|
||||
obscured |= slot_shoes
|
||||
obscured |= SLOT_SHOES
|
||||
|
||||
if(head)
|
||||
if(head.flags_inv & HIDEMASK)
|
||||
obscured |= slot_wear_mask
|
||||
obscured |= SLOT_WEAR_MASK
|
||||
if(head.flags_inv & HIDEEYES)
|
||||
obscured |= slot_glasses
|
||||
obscured |= SLOT_GLASSES
|
||||
if(head.flags_inv & HIDEEARS)
|
||||
obscured |= slot_ears
|
||||
obscured |= SLOT_EARS
|
||||
|
||||
if(wear_mask)
|
||||
if(wear_mask.flags_inv & HIDEEYES)
|
||||
obscured |= slot_glasses
|
||||
obscured |= SLOT_GLASSES
|
||||
|
||||
if(obscured.len)
|
||||
return obscured
|
||||
@@ -852,7 +857,7 @@
|
||||
/mob/living/carbon/human/Collide(atom/A)
|
||||
..()
|
||||
var/crashdir = get_dir(src, A)
|
||||
var/obj/item/device/flightpack/FP = get_flightpack()
|
||||
var/obj/item/flightpack/FP = get_flightpack()
|
||||
if(FP)
|
||||
FP.flight_impact(A, crashdir)
|
||||
|
||||
|
||||
@@ -708,7 +708,7 @@
|
||||
if(toxloss > 10)
|
||||
to_chat(src, "<span class='danger'>You feel sick.</span>")
|
||||
else if(toxloss > 20)
|
||||
to_chat(src, "<span class='danger'>You feel nauseous.</span>")
|
||||
to_chat(src, "<span class='danger'>You feel nauseated.</span>")
|
||||
else if(toxloss > 40)
|
||||
to_chat(src, "<span class='danger'>You feel very unwell!</span>")
|
||||
if(oxyloss)
|
||||
@@ -718,8 +718,23 @@
|
||||
to_chat(src, "<span class='danger'>Your thinking is clouded and distant.</span>")
|
||||
else if(oxyloss > 30)
|
||||
to_chat(src, "<span class='danger'>You're choking!</span>")
|
||||
if(roundstart_traits.len)
|
||||
to_chat(src, "<span class='notice'>You have these traits: [get_trait_string()].</span>")
|
||||
|
||||
switch(nutrition)
|
||||
if(NUTRITION_LEVEL_FULL to INFINITY)
|
||||
to_chat(src, "<span class='info'>You're completely stuffed!</span>")
|
||||
if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL)
|
||||
to_chat(src, "<span class='info'>You're well fed!</span>")
|
||||
if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(src, "<span class='info'>You're not hungry.</span>")
|
||||
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
|
||||
to_chat(src, "<span class='info'>You could use a bite to eat.</span>")
|
||||
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
|
||||
to_chat(src, "<span class='info'>You feel quite hungry.</span>")
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
to_chat(src, "<span class='danger'>You're starving!</span>")
|
||||
|
||||
if(roundstart_quirks.len)
|
||||
to_chat(src, "<span class='notice'>You have these quirks: [get_trait_string()].</span>")
|
||||
else
|
||||
if(wear_suit)
|
||||
wear_suit.add_fingerprint(M)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(id)
|
||||
. = id.assignment
|
||||
else
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/pda/pda = wear_id
|
||||
if(istype(pda))
|
||||
. = pda.ownjob
|
||||
else
|
||||
@@ -30,7 +30,7 @@
|
||||
var/obj/item/card/id/id = get_idcard()
|
||||
if(id)
|
||||
return id.registered_name
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/pda/pda = wear_id
|
||||
if(istype(pda))
|
||||
return pda.owner
|
||||
return if_no_id
|
||||
@@ -64,9 +64,9 @@
|
||||
//Useful when player is being seen by other mobs
|
||||
/mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown")
|
||||
var/obj/item/storage/wallet/wallet = wear_id
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/pda/pda = wear_id
|
||||
var/obj/item/card/id/id = wear_id
|
||||
var/obj/item/device/modular_computer/tablet/tablet = wear_id
|
||||
var/obj/item/modular_computer/tablet/tablet = wear_id
|
||||
if(istype(wallet))
|
||||
id = wallet.front_id
|
||||
if(istype(id))
|
||||
|
||||
@@ -8,14 +8,21 @@
|
||||
/mob/living/carbon/human/slip(knockdown_amount, obj/O, lube)
|
||||
if(has_trait(TRAIT_NOSLIPALL))
|
||||
return 0
|
||||
if((isobj(shoes) && (shoes.flags_1&NOSLIP_1)) || has_trait(TRAIT_NOSLIPWATER) && !(lube&GALOSHES_DONT_HELP))
|
||||
return 0
|
||||
if (!(lube&GALOSHES_DONT_HELP))
|
||||
if(has_trait(TRAIT_NOSLIPWATER))
|
||||
return 0
|
||||
if(shoes && is_type_in_typecache(shoes, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/CS = shoes
|
||||
if (CS.clothing_flags & NOSLIP)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/experience_pressure_difference()
|
||||
playsound(src, 'sound/effects/space_wind.ogg', 50, 1)
|
||||
if(shoes && shoes.flags_1&NOSLIP_1)
|
||||
return 0
|
||||
if(shoes && is_type_in_typecache(shoes, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/S = shoes
|
||||
if (S.clothing_flags & NOSLIP)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/mob_has_gravity()
|
||||
|
||||
@@ -4,39 +4,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(SLOT_BACK)
|
||||
return back
|
||||
if(slot_wear_mask)
|
||||
if(SLOT_WEAR_MASK)
|
||||
return wear_mask
|
||||
if(slot_neck)
|
||||
if(SLOT_NECK)
|
||||
return wear_neck
|
||||
if(slot_handcuffed)
|
||||
if(SLOT_HANDCUFFED)
|
||||
return handcuffed
|
||||
if(slot_legcuffed)
|
||||
if(SLOT_LEGCUFFED)
|
||||
return legcuffed
|
||||
if(slot_belt)
|
||||
if(SLOT_BELT)
|
||||
return belt
|
||||
if(slot_wear_id)
|
||||
if(SLOT_WEAR_ID)
|
||||
return wear_id
|
||||
if(slot_ears)
|
||||
if(SLOT_EARS)
|
||||
return ears
|
||||
if(slot_glasses)
|
||||
if(SLOT_GLASSES)
|
||||
return glasses
|
||||
if(slot_gloves)
|
||||
if(SLOT_GLOVES)
|
||||
return gloves
|
||||
if(slot_head)
|
||||
if(SLOT_HEAD)
|
||||
return head
|
||||
if(slot_shoes)
|
||||
if(SLOT_SHOES)
|
||||
return shoes
|
||||
if(slot_wear_suit)
|
||||
if(SLOT_WEAR_SUIT)
|
||||
return wear_suit
|
||||
if(slot_w_uniform)
|
||||
if(SLOT_W_UNIFORM)
|
||||
return w_uniform
|
||||
if(slot_l_store)
|
||||
if(SLOT_L_STORE)
|
||||
return l_store
|
||||
if(slot_r_store)
|
||||
if(SLOT_R_STORE)
|
||||
return r_store
|
||||
if(slot_s_store)
|
||||
if(SLOT_S_STORE)
|
||||
return s_store
|
||||
return null
|
||||
|
||||
@@ -84,17 +84,17 @@
|
||||
|
||||
var/not_handled = FALSE //Added in case we make this type path deeper one day
|
||||
switch(slot)
|
||||
if(slot_belt)
|
||||
if(SLOT_BELT)
|
||||
belt = I
|
||||
update_inv_belt()
|
||||
if(slot_wear_id)
|
||||
if(SLOT_WEAR_ID)
|
||||
wear_id = I
|
||||
sec_hud_set_ID()
|
||||
update_inv_wear_id()
|
||||
if(slot_ears)
|
||||
if(SLOT_EARS)
|
||||
ears = I
|
||||
update_inv_ears()
|
||||
if(slot_glasses)
|
||||
if(SLOT_GLASSES)
|
||||
glasses = I
|
||||
var/obj/item/clothing/glasses/G = I
|
||||
if(G.glass_colour_type)
|
||||
@@ -107,13 +107,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(SLOT_GLOVES)
|
||||
gloves = I
|
||||
update_inv_gloves()
|
||||
if(slot_shoes)
|
||||
if(SLOT_SHOES)
|
||||
shoes = I
|
||||
update_inv_shoes()
|
||||
if(slot_wear_suit)
|
||||
if(SLOT_WEAR_SUIT)
|
||||
wear_suit = I
|
||||
if(I.flags_inv & HIDEJUMPSUIT)
|
||||
update_inv_w_uniform()
|
||||
@@ -121,17 +121,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(SLOT_W_UNIFORM)
|
||||
w_uniform = I
|
||||
update_suit_sensors()
|
||||
update_inv_w_uniform()
|
||||
if(slot_l_store)
|
||||
if(SLOT_L_STORE)
|
||||
l_store = I
|
||||
update_inv_pockets()
|
||||
if(slot_r_store)
|
||||
if(SLOT_R_STORE)
|
||||
r_store = I
|
||||
update_inv_pockets()
|
||||
if(slot_s_store)
|
||||
if(SLOT_S_STORE)
|
||||
s_store = I
|
||||
update_inv_s_store()
|
||||
else
|
||||
|
||||
@@ -44,14 +44,16 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/calculate_affecting_pressure(pressure)
|
||||
if((wear_suit && (wear_suit.flags_1 & STOPSPRESSUREDMAGE_1)) && (head && (head.flags_1 & STOPSPRESSUREDMAGE_1)))
|
||||
if(istype(loc, /obj/belly)) //START OF CIT CHANGES - Makes it so you don't suffocate while inside vore organs. Remind me to modularize this some time - Bhijn
|
||||
return ONE_ATMOSPHERE
|
||||
if(istype(loc, /obj/belly))
|
||||
return ONE_ATMOSPHERE
|
||||
if(istype(loc, /obj/item/device/dogborg/sleeper))
|
||||
return ONE_ATMOSPHERE
|
||||
else
|
||||
return pressure
|
||||
if(istype(loc, /obj/item/dogborg/sleeper))
|
||||
return ONE_ATMOSPHERE //END OF CIT CHANGES
|
||||
if (wear_suit && head && is_type_in_typecache(wear_suit, GLOB.typecache_clothing) && is_type_in_typecache(head, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/CS = wear_suit
|
||||
var/obj/item/clothing/CH = head
|
||||
if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE)
|
||||
return ONE_ATMOSPHERE
|
||||
return pressure
|
||||
|
||||
|
||||
/mob/living/carbon/human/handle_traits()
|
||||
@@ -63,10 +65,6 @@
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
adjust_blurriness(-1)
|
||||
|
||||
if(has_trait(TRAIT_PACIFISM) && a_intent == INTENT_HARM)
|
||||
to_chat(src, "<span class='notice'>You don't feel like harming anybody.</span>")
|
||||
a_intent_change(INTENT_HELP)
|
||||
|
||||
if (getBrainLoss() >= 60 && !incapacitated(TRUE))
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage)
|
||||
if(prob(3))
|
||||
@@ -126,7 +124,7 @@
|
||||
/mob/living/carbon/human/proc/get_thermal_protection()
|
||||
var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures
|
||||
//CITADEL EDIT Vore code required overrides
|
||||
if(istype(loc, /obj/item/device/dogborg/sleeper))
|
||||
if(istype(loc, /obj/item/dogborg/sleeper))
|
||||
return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
if(ismob(loc))
|
||||
return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
@@ -241,7 +239,7 @@
|
||||
if(has_trait(TRAIT_RESISTCOLD))
|
||||
return TRUE
|
||||
//CITADEL EDIT Mandatory for vore code.
|
||||
if(istype(loc, /obj/item/device/dogborg/sleeper))
|
||||
if(istype(loc, /obj/item/dogborg/sleeper))
|
||||
return TRUE //freezing to death in sleepers ruins fun.
|
||||
if(isbelly(loc))
|
||||
return TRUE
|
||||
@@ -290,13 +288,14 @@
|
||||
|
||||
/mob/living/carbon/human/has_smoke_protection()
|
||||
if(wear_mask)
|
||||
if(wear_mask.flags_1 & BLOCK_GAS_SMOKE_EFFECT_1)
|
||||
if(wear_mask.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
|
||||
return TRUE
|
||||
if(glasses)
|
||||
if(glasses.flags_1 & BLOCK_GAS_SMOKE_EFFECT_1)
|
||||
if(glasses.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
|
||||
return TRUE
|
||||
if(head)
|
||||
if(head.flags_1 & BLOCK_GAS_SMOKE_EFFECT_1)
|
||||
if(head && is_type_in_typecache(head, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/CH = head
|
||||
if(CH.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
/mob/living/carbon/human/binarycheck()
|
||||
if(ears)
|
||||
var/obj/item/device/radio/headset/dongle = ears
|
||||
var/obj/item/radio/headset/dongle = ears
|
||||
if(!istype(dongle))
|
||||
return 0
|
||||
if(dongle.translate_binary)
|
||||
|
||||
@@ -864,48 +864,48 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/num_legs = H.get_num_legs()
|
||||
|
||||
switch(slot)
|
||||
if(slot_hands)
|
||||
if(SLOT_HANDS)
|
||||
if(H.get_empty_held_indexes())
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(slot_wear_mask)
|
||||
if(SLOT_WEAR_MASK)
|
||||
if(H.wear_mask)
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_MASK))
|
||||
if(!(I.slot_flags & ITEM_SLOT_MASK))
|
||||
return FALSE
|
||||
if(!H.get_bodypart(BODY_ZONE_HEAD))
|
||||
return FALSE
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(slot_neck)
|
||||
if(SLOT_NECK)
|
||||
if(H.wear_neck)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_NECK) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_NECK) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_back)
|
||||
if(SLOT_BACK)
|
||||
if(H.back)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_BACK) )
|
||||
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(SLOT_WEAR_SUIT)
|
||||
if(H.wear_suit)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_OCLOTHING) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_OCLOTHING) )
|
||||
return FALSE
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(slot_gloves)
|
||||
if(SLOT_GLOVES)
|
||||
if(H.gloves)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_GLOVES) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_GLOVES) )
|
||||
return FALSE
|
||||
if(num_arms < 2)
|
||||
return FALSE
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(slot_shoes)
|
||||
if(SLOT_SHOES)
|
||||
if(H.shoes)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_FEET) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_FEET) )
|
||||
return FALSE
|
||||
if(num_legs < 2)
|
||||
return FALSE
|
||||
@@ -914,7 +914,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
to_chat(H, "<span class='warning'>The footwear around here isn't compatible with your feet!</span>")
|
||||
return FALSE
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(slot_belt)
|
||||
if(SLOT_BELT)
|
||||
if(H.belt)
|
||||
return FALSE
|
||||
|
||||
@@ -924,40 +924,40 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>")
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_BELT))
|
||||
if(!(I.slot_flags & ITEM_SLOT_BELT))
|
||||
return
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(slot_glasses)
|
||||
if(SLOT_GLASSES)
|
||||
if(H.glasses)
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_EYES))
|
||||
if(!(I.slot_flags & ITEM_SLOT_EYES))
|
||||
return FALSE
|
||||
if(!H.get_bodypart(BODY_ZONE_HEAD))
|
||||
return FALSE
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(slot_head)
|
||||
if(SLOT_HEAD)
|
||||
if(H.head)
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_HEAD))
|
||||
if(!(I.slot_flags & ITEM_SLOT_HEAD))
|
||||
return FALSE
|
||||
if(!H.get_bodypart(BODY_ZONE_HEAD))
|
||||
return FALSE
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(slot_ears)
|
||||
if(SLOT_EARS)
|
||||
if(H.ears)
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_EARS))
|
||||
if(!(I.slot_flags & ITEM_SLOT_EARS))
|
||||
return FALSE
|
||||
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(SLOT_W_UNIFORM)
|
||||
if(H.w_uniform)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_ICLOTHING) )
|
||||
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(SLOT_WEAR_ID)
|
||||
if(H.wear_id)
|
||||
return FALSE
|
||||
|
||||
@@ -966,10 +966,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>")
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_ID) )
|
||||
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(SLOT_L_STORE)
|
||||
if(I.flags_1 & NODROP_1) //Pockets aren't visible, so you can't move NODROP_1 items into them.
|
||||
return FALSE
|
||||
if(H.l_store)
|
||||
@@ -981,11 +981,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>")
|
||||
return FALSE
|
||||
if(I.slot_flags & SLOT_DENYPOCKET)
|
||||
if(I.slot_flags & ITEM_SLOT_DENYPOCKET)
|
||||
return FALSE
|
||||
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_POCKET) )
|
||||
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
|
||||
return TRUE
|
||||
if(slot_r_store)
|
||||
if(SLOT_R_STORE)
|
||||
if(I.flags_1 & NODROP_1)
|
||||
return FALSE
|
||||
if(H.r_store)
|
||||
@@ -997,12 +997,12 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>")
|
||||
return FALSE
|
||||
if(I.slot_flags & SLOT_DENYPOCKET)
|
||||
if(I.slot_flags & ITEM_SLOT_DENYPOCKET)
|
||||
return FALSE
|
||||
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_POCKET) )
|
||||
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(slot_s_store)
|
||||
if(SLOT_S_STORE)
|
||||
if(I.flags_1 & NODROP_1)
|
||||
return FALSE
|
||||
if(H.s_store)
|
||||
@@ -1019,10 +1019,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "The [I.name] is too big to attach.") //should be src?
|
||||
return FALSE
|
||||
if( istype(I, /obj/item/device/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) )
|
||||
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(SLOT_HANDCUFFED)
|
||||
if(H.handcuffed)
|
||||
return FALSE
|
||||
if(!istype(I, /obj/item/restraints/handcuffs))
|
||||
@@ -1030,7 +1030,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(num_arms < 2)
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_legcuffed)
|
||||
if(SLOT_LEGCUFFED)
|
||||
if(H.legcuffed)
|
||||
return FALSE
|
||||
if(!istype(I, /obj/item/restraints/legcuffs))
|
||||
@@ -1038,7 +1038,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(num_legs < 2)
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_in_backpack)
|
||||
if(SLOT_IN_BACKPACK)
|
||||
if(H.back)
|
||||
if(H.back.SendSignal(COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
|
||||
return TRUE
|
||||
@@ -1205,7 +1205,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/flightpack = 0
|
||||
var/ignoreslow = 0
|
||||
var/gravity = 0
|
||||
var/obj/item/device/flightpack/F = H.get_flightpack()
|
||||
var/obj/item/flightpack/F = H.get_flightpack()
|
||||
if(istype(F) && F.flight)
|
||||
flightpack = 1
|
||||
if(H.movement_type & FLYING)
|
||||
@@ -1559,9 +1559,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.gain_trauma(/datum/brain_trauma/mild/concussion)
|
||||
else
|
||||
if(!I.is_sharp())
|
||||
H.adjustBrainLoss(I.force / 5)
|
||||
H.adjustBrainLoss(I.force * 0.2)
|
||||
|
||||
if(prob(I.force + ((100 - H.health)/2)) && H != user)
|
||||
if(!I.is_sharp() && prob(I.force + ((100 - H.health) * 0.5)) && H != user) // rev deconversion through blunt trauma.
|
||||
var/datum/antagonist/rev/rev = H.mind.has_antag_datum(/datum/antagonist/rev)
|
||||
if(rev)
|
||||
rev.remove_revolutionary(FALSE, user)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
mutant_bodyparts = list("wings")
|
||||
default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "Angel")
|
||||
use_skintones = 1
|
||||
no_equip = list(slot_back)
|
||||
no_equip = list(SLOT_BACK)
|
||||
blacklisted = 1
|
||||
limbs_id = "human"
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
punchdamagelow = 5
|
||||
punchdamagehigh = 14
|
||||
punchstunthreshold = 11 //about 40% chance to stun
|
||||
no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform, slot_s_store)
|
||||
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
|
||||
nojumpsuit = 1
|
||||
sexes = 1
|
||||
damage_overlay_type = ""
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
. = ..()
|
||||
|
||||
/datum/species/human/space_move(mob/living/carbon/human/H)
|
||||
var/obj/item/device/flightpack/F = H.get_flightpack()
|
||||
var/obj/item/flightpack/F = H.get_flightpack()
|
||||
if(istype(F) && (F.flight) && F.allow_thrust(0.01, src))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
punchdamagehigh = 14
|
||||
punchstunthreshold = 14 //about 44% chance to stun
|
||||
|
||||
no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform)
|
||||
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM)
|
||||
|
||||
burnmod = 1.25
|
||||
heatmod = 1.5
|
||||
|
||||
@@ -24,7 +24,12 @@
|
||||
|
||||
/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/atmos_sealed = (H.wear_suit && (H.wear_suit.flags_1 & STOPSPRESSUREDMAGE_1)) && (H.head && (H.head.flags_1 & STOPSPRESSUREDMAGE_1))
|
||||
var/atmos_sealed = FALSE
|
||||
if (H.wear_suit && H.head && is_type_in_typecache(H.wear_suit, GLOB.typecache_clothing) && is_type_in_typecache(H.head, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/CS = H.wear_suit
|
||||
var/obj/item/clothing/CH = H.head
|
||||
if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE)
|
||||
atmos_sealed = TRUE
|
||||
if((!istype(H.w_uniform, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman)) && !atmos_sealed)
|
||||
if(environment)
|
||||
if(environment.total_moles())
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
limbs_id = "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(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
|
||||
@@ -203,8 +203,8 @@
|
||||
disintegrate(I)
|
||||
|
||||
/obj/item/light_eater/proc/disintegrate(obj/item/O)
|
||||
if(istype(O, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/PDA = O
|
||||
if(istype(O, /obj/item/pda))
|
||||
var/obj/item/pda/PDA = O
|
||||
PDA.set_light(0)
|
||||
PDA.fon = FALSE
|
||||
PDA.f_lum = 0
|
||||
|
||||
@@ -101,7 +101,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(UNIFORM_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_w_uniform]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM]
|
||||
inv.update_icon()
|
||||
|
||||
if(istype(w_uniform, /obj/item/clothing/under))
|
||||
@@ -148,7 +148,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(ID_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_id]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID]
|
||||
inv.update_icon()
|
||||
|
||||
var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER]
|
||||
@@ -171,8 +171,8 @@ There are several things that need to be remembered:
|
||||
/mob/living/carbon/human/update_inv_gloves()
|
||||
remove_overlay(GLOVES_LAYER)
|
||||
|
||||
if(client && hud_used && hud_used.inv_slots[slot_gloves])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_gloves]
|
||||
if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES]
|
||||
inv.update_icon()
|
||||
|
||||
if(!gloves && bloody_hands)
|
||||
@@ -211,7 +211,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_glasses]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES]
|
||||
inv.update_icon()
|
||||
|
||||
if(glasses)
|
||||
@@ -238,7 +238,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_ears]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS]
|
||||
inv.update_icon()
|
||||
|
||||
if(ears)
|
||||
@@ -264,7 +264,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_shoes]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES]
|
||||
inv.update_icon()
|
||||
|
||||
if(shoes)
|
||||
@@ -286,7 +286,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(SUIT_STORE_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_s_store]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE]
|
||||
inv.update_icon()
|
||||
|
||||
if(s_store)
|
||||
@@ -322,7 +322,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(BELT_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_belt]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT]
|
||||
inv.update_icon()
|
||||
|
||||
if(belt)
|
||||
@@ -349,7 +349,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(SUIT_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_suit]
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT]
|
||||
inv.update_icon()
|
||||
|
||||
if(istype(wear_suit, /obj/item/clothing/suit))
|
||||
@@ -375,10 +375,10 @@ There are several things that need to be remembered:
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv
|
||||
|
||||
inv = hud_used.inv_slots[slot_l_store]
|
||||
inv = hud_used.inv_slots[SLOT_L_STORE]
|
||||
inv.update_icon()
|
||||
|
||||
inv = hud_used.inv_slots[slot_r_store]
|
||||
inv = hud_used.inv_slots[SLOT_R_STORE]
|
||||
inv.update_icon()
|
||||
|
||||
if(l_store)
|
||||
|
||||
@@ -76,14 +76,14 @@
|
||||
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] [whispers], <span class='message'>\"[attach_spans(message, spans)]\"</span></span>"
|
||||
|
||||
for(var/atom/movable/AM in listening)
|
||||
if(istype(AM,/obj/item/device/radio))
|
||||
if(istype(AM,/obj/item/radio))
|
||||
continue
|
||||
AM.Hear(rendered, src, language, message, , spans)
|
||||
|
||||
message = stars(message)
|
||||
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] [whispers], <span class='message'>\"[attach_spans(message, spans)]\"</span></span>"
|
||||
for(var/atom/movable/AM in eavesdropping)
|
||||
if(istype(AM,/obj/item/device/radio))
|
||||
if(istype(AM,/obj/item/radio))
|
||||
continue
|
||||
AM.Hear(rendered, src, language, message, , spans)
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
/mob/living/carbon/get_item_by_slot(slot_id)
|
||||
switch(slot_id)
|
||||
if(slot_back)
|
||||
if(SLOT_BACK)
|
||||
return back
|
||||
if(slot_wear_mask)
|
||||
if(SLOT_WEAR_MASK)
|
||||
return wear_mask
|
||||
if(slot_neck)
|
||||
if(SLOT_NECK)
|
||||
return wear_neck
|
||||
if(slot_head)
|
||||
if(SLOT_HEAD)
|
||||
return head
|
||||
if(slot_handcuffed)
|
||||
if(SLOT_HANDCUFFED)
|
||||
return handcuffed
|
||||
if(slot_legcuffed)
|
||||
if(SLOT_LEGCUFFED)
|
||||
return legcuffed
|
||||
return null
|
||||
|
||||
@@ -50,28 +50,28 @@
|
||||
I.appearance_flags |= NO_CLIENT_COLOR
|
||||
var/not_handled = FALSE
|
||||
switch(slot)
|
||||
if(slot_back)
|
||||
if(SLOT_BACK)
|
||||
back = I
|
||||
update_inv_back()
|
||||
if(slot_wear_mask)
|
||||
if(SLOT_WEAR_MASK)
|
||||
wear_mask = I
|
||||
wear_mask_update(I, toggle_off = 0)
|
||||
if(slot_head)
|
||||
if(SLOT_HEAD)
|
||||
head = I
|
||||
head_update(I)
|
||||
if(slot_neck)
|
||||
if(SLOT_NECK)
|
||||
wear_neck = I
|
||||
update_inv_neck(I)
|
||||
if(slot_handcuffed)
|
||||
if(SLOT_HANDCUFFED)
|
||||
handcuffed = I
|
||||
update_handcuffed()
|
||||
if(slot_legcuffed)
|
||||
if(SLOT_LEGCUFFED)
|
||||
legcuffed = I
|
||||
update_inv_legcuffed()
|
||||
if(slot_hands)
|
||||
if(SLOT_HANDS)
|
||||
put_in_hands(I)
|
||||
update_inv_hands()
|
||||
if(slot_in_backpack)
|
||||
if(SLOT_IN_BACKPACK)
|
||||
if(!back.SendSignal(COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
|
||||
not_handled = TRUE
|
||||
else
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
return
|
||||
if(istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
||||
return
|
||||
if(istype(loc, /obj/item/device/dogborg/sleeper))
|
||||
if(istype(loc, /obj/item/dogborg/sleeper))
|
||||
return
|
||||
if(ismob(loc))
|
||||
return
|
||||
@@ -207,9 +207,9 @@
|
||||
if(breath_gases[/datum/gas/bz])
|
||||
var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.total_moles())*breath_pressure
|
||||
if(bz_partialpressure > 1)
|
||||
hallucination += 20
|
||||
hallucination += 10
|
||||
else if(bz_partialpressure > 0.01)
|
||||
hallucination += 5//Removed at 2 per tick so this will slowly build up
|
||||
hallucination += 5
|
||||
//TRITIUM
|
||||
if(breath_gases[/datum/gas/tritium])
|
||||
var/tritium_partialpressure = (breath_gases[/datum/gas/tritium][MOLES]/breath.total_moles())*breath_pressure
|
||||
@@ -237,7 +237,7 @@
|
||||
if(internal.loc != src)
|
||||
internal = null
|
||||
update_internals_hud_icon(0)
|
||||
else if ((!wear_mask || !(wear_mask.flags_1 & MASKINTERNALS_1)) && !getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
||||
else if ((!wear_mask || !(wear_mask.clothing_flags & MASKINTERNALS)) && !getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
||||
internal = null
|
||||
update_internals_hud_icon(0)
|
||||
else
|
||||
@@ -349,22 +349,22 @@
|
||||
var/saved_dizz = dizziness
|
||||
if(C)
|
||||
var/oldsrc = src
|
||||
var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength
|
||||
var/amplitude = dizziness*(sin(dizziness * world.time) + 1) // This shit is annoying at high strength
|
||||
src = null
|
||||
spawn(0)
|
||||
if(C)
|
||||
temp = amplitude * sin(0.008 * saved_dizz * world.time)
|
||||
temp = amplitude * sin(saved_dizz * world.time)
|
||||
pixel_x_diff += temp
|
||||
C.pixel_x += temp
|
||||
temp = amplitude * cos(0.008 * saved_dizz * world.time)
|
||||
temp = amplitude * cos(saved_dizz * world.time)
|
||||
pixel_y_diff += temp
|
||||
C.pixel_y += temp
|
||||
sleep(3)
|
||||
if(C)
|
||||
temp = amplitude * sin(0.008 * saved_dizz * world.time)
|
||||
temp = amplitude * sin(saved_dizz * world.time)
|
||||
pixel_x_diff += temp
|
||||
C.pixel_x += temp
|
||||
temp = amplitude * cos(0.008 * saved_dizz * world.time)
|
||||
temp = amplitude * cos(saved_dizz * world.time)
|
||||
pixel_y_diff += temp
|
||||
C.pixel_y += temp
|
||||
sleep(3)
|
||||
@@ -452,7 +452,7 @@
|
||||
return
|
||||
adjustToxLoss(8, TRUE, TRUE)
|
||||
if(prob(30))
|
||||
to_chat(src, "<span class='notice'>You feel confused and nauseous...</span>")//actual symptoms of liver failure
|
||||
to_chat(src, "<span class='notice'>You feel confused and nauseated...</span>")//actual symptoms of liver failure
|
||||
|
||||
|
||||
////////////////
|
||||
|
||||
@@ -1,34 +1,31 @@
|
||||
/mob/living/carbon/monkey/can_equip(obj/item/I, slot, disable_warning = 0)
|
||||
switch(slot)
|
||||
if(slot_hands)
|
||||
if(SLOT_HANDS)
|
||||
if(get_empty_held_indexes())
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(slot_wear_mask)
|
||||
if(SLOT_WEAR_MASK)
|
||||
if(wear_mask)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_MASK) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_MASK) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_neck)
|
||||
if(SLOT_NECK)
|
||||
if(wear_neck)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_NECK) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_NECK) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_head)
|
||||
if(SLOT_HEAD)
|
||||
if(head)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_HEAD) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_HEAD) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_back)
|
||||
if(SLOT_BACK)
|
||||
if(back)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & SLOT_BACK) )
|
||||
if( !(I.slot_flags & ITEM_SLOT_BACK) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
return FALSE //Unsupported slot
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
if(!client)
|
||||
if(stat == CONSCIOUS)
|
||||
if(on_fire || buckled || restrained() || (resting && canmove))
|
||||
if(on_fire || buckled || restrained() || (resting && canmove)) //CIT CHANGE - makes it so monkeys attempt to resist if they're resting
|
||||
if(!resisting && prob(MONKEY_RESIST_PROB))
|
||||
resisting = TRUE
|
||||
walk_to(src,0)
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
/mob/living/carbon/monkey/has_smoke_protection()
|
||||
if(wear_mask)
|
||||
if(wear_mask.flags_1 & BLOCK_GAS_SMOKE_EFFECT_1)
|
||||
if(wear_mask.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/monkey/handle_fire()
|
||||
@@ -183,4 +183,4 @@
|
||||
|
||||
#undef COLD_DAMAGE_LEVEL_1
|
||||
#undef COLD_DAMAGE_LEVEL_2
|
||||
#undef COLD_DAMAGE_LEVEL_3
|
||||
#undef COLD_DAMAGE_LEVEL_3
|
||||
|
||||
@@ -168,5 +168,5 @@
|
||||
. = ..()
|
||||
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,SLOT_HEAD)
|
||||
helmet.attack_self(src) // todo encapsulate toggle
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
//bodyparts are actually created before we try to equip things to
|
||||
//those slots
|
||||
if(relic_hat)
|
||||
equip_to_slot_or_del(new relic_hat, slot_head)
|
||||
equip_to_slot_or_del(new relic_hat, SLOT_HEAD)
|
||||
if(relic_mask)
|
||||
equip_to_slot_or_del(new relic_mask, slot_wear_mask)
|
||||
equip_to_slot_or_del(new relic_mask, SLOT_WEAR_MASK)
|
||||
|
||||
/mob/living/carbon/monkey/punpun/Life()
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
message = T.TongueSpeech(message)
|
||||
if(wear_mask)
|
||||
message = wear_mask.speechModification(message)
|
||||
|
||||
if(head)
|
||||
message = head.speechModification(message)
|
||||
return message
|
||||
|
||||
/mob/living/carbon/can_speak_vocal(message)
|
||||
|
||||
@@ -118,8 +118,8 @@
|
||||
if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated
|
||||
return
|
||||
|
||||
if(client && hud_used && hud_used.inv_slots[slot_wear_mask])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_mask]
|
||||
if(client && hud_used && hud_used.inv_slots[SLOT_WEAR_MASK])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
|
||||
inv.update_icon()
|
||||
|
||||
if(wear_mask)
|
||||
@@ -132,8 +132,8 @@
|
||||
/mob/living/carbon/update_inv_neck()
|
||||
remove_overlay(NECK_LAYER)
|
||||
|
||||
if(client && hud_used && hud_used.inv_slots[slot_neck])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_neck]
|
||||
if(client && hud_used && hud_used.inv_slots[SLOT_NECK])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK]
|
||||
inv.update_icon()
|
||||
|
||||
if(wear_neck)
|
||||
@@ -146,8 +146,8 @@
|
||||
/mob/living/carbon/update_inv_back()
|
||||
remove_overlay(BACK_LAYER)
|
||||
|
||||
if(client && hud_used && hud_used.inv_slots[slot_back])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_back]
|
||||
if(client && hud_used && hud_used.inv_slots[SLOT_BACK])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK]
|
||||
inv.update_icon()
|
||||
|
||||
if(back)
|
||||
@@ -162,8 +162,8 @@
|
||||
if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated
|
||||
return
|
||||
|
||||
if(client && hud_used && hud_used.inv_slots[slot_back])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_head]
|
||||
if(client && hud_used && hud_used.inv_slots[SLOT_BACK])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
|
||||
inv.update_icon()
|
||||
|
||||
if(head)
|
||||
|
||||
@@ -133,9 +133,6 @@
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
if(client && !eye_blurry)
|
||||
clear_fullscreen("blurry")
|
||||
if(has_trait(TRAIT_PACIFISM) && a_intent == INTENT_HARM)
|
||||
to_chat(src, "<span class='notice'>You don't feel like harming anybody.</span>")
|
||||
a_intent_change(INTENT_HELP)
|
||||
|
||||
/mob/living/proc/update_damage_hud()
|
||||
return
|
||||
|
||||
@@ -407,16 +407,14 @@
|
||||
*/
|
||||
//Recursive function to find everything a mob is holding. Really shitty proc tbh.
|
||||
/mob/living/get_contents()
|
||||
. = list()
|
||||
. |= list(src)
|
||||
for(var/obj/o in .)
|
||||
var/list/newlist = list()
|
||||
o.SendSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, newlist)
|
||||
. |= newlist
|
||||
for(var/obj/item/clothing/under/U in .)
|
||||
. |= U.contents
|
||||
for(var/obj/item/folder/F in .)
|
||||
. |= F.contents
|
||||
var/list/ret = list()
|
||||
ret |= contents //add our contents
|
||||
for(var/i in ret.Copy()) //iterate storage objects
|
||||
var/atom/A = i
|
||||
A.SendSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
|
||||
for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders
|
||||
ret |= F.contents
|
||||
return ret
|
||||
|
||||
// Living mobs use can_inject() to make sure that the mob is not syringe-proof in general.
|
||||
/mob/living/proc/can_inject()
|
||||
@@ -494,6 +492,11 @@
|
||||
ExtinguishMob()
|
||||
fire_stacks = 0
|
||||
update_canmove()
|
||||
GET_COMPONENT(mood, /datum/component/mood)
|
||||
if (mood)
|
||||
QDEL_LIST_ASSOC_VAL(mood.mood_events)
|
||||
mood.sanity = SANITY_GREAT
|
||||
mood.update_mood()
|
||||
|
||||
|
||||
//proc called by revive(), to check if we can actually ressuscitate the mob (we don't want to revive him and have him instantly die again)
|
||||
@@ -938,7 +941,7 @@
|
||||
/mob/living/rad_act(amount)
|
||||
. = ..()
|
||||
|
||||
if(!amount || amount < RAD_MOB_SKIN_PROTECTION)
|
||||
if(!amount || (amount < RAD_MOB_SKIN_PROTECTION) || has_trait(TRAIT_RADIMMUNE))
|
||||
return
|
||||
|
||||
amount -= RAD_BACKGROUND_RADIATION // This will always be at least 1 because of how skin protection is calculated
|
||||
|
||||
@@ -317,8 +317,7 @@
|
||||
return shock_damage
|
||||
|
||||
/mob/living/emp_act(severity)
|
||||
var/list/L = src.get_contents()
|
||||
for(var/obj/O in L)
|
||||
for(var/obj/O in contents)
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
var/list/status_traits = list()
|
||||
|
||||
var/list/roundstart_traits = list()
|
||||
var/list/roundstart_quirks = list()
|
||||
|
||||
var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them.
|
||||
|
||||
|
||||
@@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
if(MODE_INTERCOM)
|
||||
for (var/obj/item/device/radio/intercom/I in view(1, null))
|
||||
for (var/obj/item/radio/intercom/I in view(1, null))
|
||||
I.talk_into(src, message, , spans, language)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
var/obj/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye.
|
||||
var/radio_enabled = TRUE //Determins if a carded AI can speak with its built in radio or not.
|
||||
radiomod = ";" //AIs will, by default, state their laws on the internal radio.
|
||||
var/obj/item/device/pda/ai/aiPDA
|
||||
var/obj/item/device/multitool/aiMulti
|
||||
var/obj/item/pda/ai/aiPDA
|
||||
var/obj/item/multitool/aiMulti
|
||||
var/mob/living/simple_animal/bot/Bot
|
||||
var/tracking = FALSE //this is 1 if the AI is currently tracking somebody, but the track has not yet been completed.
|
||||
var/datum/effect_system/spark_spread/spark_system//So they can initialize sparks whenever/N
|
||||
@@ -128,14 +128,14 @@
|
||||
|
||||
verbs += /mob/living/silicon/ai/proc/show_laws_verb
|
||||
|
||||
aiPDA = new/obj/item/device/pda/ai(src)
|
||||
aiPDA = new/obj/item/pda/ai(src)
|
||||
aiPDA.owner = name
|
||||
aiPDA.ownjob = "AI"
|
||||
aiPDA.name = name + " (" + aiPDA.ownjob + ")"
|
||||
|
||||
aiMulti = new(src)
|
||||
radio = new /obj/item/device/radio/headset/ai(src)
|
||||
aicamera = new/obj/item/device/camera/siliconcam/ai_camera(src)
|
||||
radio = new /obj/item/radio/headset/ai(src)
|
||||
aicamera = new/obj/item/camera/siliconcam/ai_camera(src)
|
||||
|
||||
deploy_action.Grant(src)
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
|
||||
/mob/living/silicon/ai/can_interact_with(atom/A)
|
||||
. = ..()
|
||||
return . || (istype(loc, /obj/item/device/aicard))? (ISINRANGE(A.x, x - interaction_range, x + interaction_range) && ISINRANGE(A.y, y - interaction_range, y + interaction_range)): GLOB.cameranet.checkTurfVis(get_turf(A))
|
||||
return . || (istype(loc, /obj/item/aicard))? (ISINRANGE(A.x, x - interaction_range, x + interaction_range) && ISINRANGE(A.y, y - interaction_range, y + interaction_range)): GLOB.cameranet.checkTurfVis(get_turf(A))
|
||||
|
||||
/mob/living/silicon/ai/cancel_camera()
|
||||
view_core()
|
||||
@@ -774,7 +774,7 @@
|
||||
return
|
||||
set_autosay()
|
||||
|
||||
/mob/living/silicon/ai/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/device/aicard/card)
|
||||
/mob/living/silicon/ai/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card)
|
||||
if(!..())
|
||||
return
|
||||
if(interaction == AI_TRANS_TO_CARD)//The only possible interaction. Upload AI mob to a card.
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
for(var/obj/machinery/ai_status_display/O in GLOB.ai_status_displays) //change status
|
||||
if(src.key)
|
||||
O.mode = 2
|
||||
if(istype(loc, /obj/item/device/aicard))
|
||||
if(istype(loc, /obj/item/aicard))
|
||||
loc.icon_state = "aicard-404"
|
||||
|
||||
/mob/living/silicon/ai/proc/ShutOffDoomsdayDevice()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/ram = 100 // Used as currency to purchase different abilities
|
||||
var/list/software = list()
|
||||
var/userDNA // The DNA string of our assigned user
|
||||
var/obj/item/device/paicard/card // The card we inhabit
|
||||
var/obj/item/paicard/card // The card we inhabit
|
||||
var/hacking = FALSE //Are we hacking a door?
|
||||
|
||||
var/speakStatement = "states"
|
||||
@@ -38,7 +38,7 @@
|
||||
var/screen // Which screen our main window displays
|
||||
var/subscreen // Which specific function of the main screen is being displayed
|
||||
|
||||
var/obj/item/device/pda/ai/pai/pda = null
|
||||
var/obj/item/pda/ai/pai/pda = null
|
||||
|
||||
var/secHUD = 0 // Toggles whether the Security HUD is active or not
|
||||
var/medHUD = 0 // Toggles whether the Medical HUD is active or not
|
||||
@@ -94,20 +94,20 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/pai/Initialize()
|
||||
var/obj/item/device/paicard/P = loc
|
||||
var/obj/item/paicard/P = loc
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
GLOB.pai_list += src
|
||||
make_laws()
|
||||
canmove = 0
|
||||
if(!istype(P)) //when manually spawning a pai, we create a card to put it into.
|
||||
var/newcardloc = P
|
||||
P = new /obj/item/device/paicard(newcardloc)
|
||||
P = new /obj/item/paicard(newcardloc)
|
||||
P.setPersonality(src)
|
||||
forceMove(P)
|
||||
card = P
|
||||
signaler = new(src)
|
||||
if(!radio)
|
||||
radio = new /obj/item/device/radio(src)
|
||||
radio = new /obj/item/radio(src)
|
||||
|
||||
//PDA
|
||||
pda = new(src)
|
||||
@@ -191,7 +191,7 @@
|
||||
return TRUE
|
||||
|
||||
/mob/proc/makePAI(delold)
|
||||
var/obj/item/device/paicard/card = new /obj/item/device/paicard(get_turf(src))
|
||||
var/obj/item/paicard/card = new /obj/item/paicard(get_turf(src))
|
||||
var/mob/living/silicon/pai/pai = new /mob/living/silicon/pai(card)
|
||||
pai.key = key
|
||||
pai.name = name
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
addtimer(CALLBACK(src, .proc/emittercool), emittercd)
|
||||
canmove = TRUE
|
||||
density = TRUE
|
||||
if(istype(card.loc, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = card.loc
|
||||
if(istype(card.loc, /obj/item/pda))
|
||||
var/obj/item/pda/P = card.loc
|
||||
P.pai = null
|
||||
P.visible_message("<span class='notice'>[src] ejects itself from [P]!</span>")
|
||||
if(isliving(card.loc))
|
||||
|
||||
@@ -170,7 +170,8 @@
|
||||
|
||||
if(href_list["send"])
|
||||
signaler.send_activation()
|
||||
audible_message("[icon2html(src, world)] *beep* *beep*")
|
||||
audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*")
|
||||
playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
|
||||
|
||||
if(href_list["freq"])
|
||||
var/new_frequency = (signaler.frequency + text2num(href_list["freq"]))
|
||||
@@ -612,7 +613,7 @@
|
||||
[(pda.silent) ? "<font color='red'>\[Off\]</font>" : "<font color='green'>\[On\]</font>"]</a><br><br>"}
|
||||
dat += "<ul>"
|
||||
if(!pda.toff)
|
||||
for (var/obj/item/device/pda/P in sortNames(get_viewable_pdas()))
|
||||
for (var/obj/item/pda/P in sortNames(get_viewable_pdas()))
|
||||
if (P == pda)
|
||||
continue
|
||||
dat += "<li><a href='byond://?src=[REF(src)];software=pdamessage;target=[REF(P)]'>[P]</a>"
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
else if(istype(O,/obj/item/gun/energy/disabler/cyborg))
|
||||
disabler = FALSE
|
||||
update_icons() //PUT THE GUN AWAY
|
||||
else if(istype(O,/obj/item/device/dogborg/sleeper))
|
||||
else if(istype(O,/obj/item/dogborg/sleeper))
|
||||
sleeper_g = FALSE
|
||||
sleeper_r = FALSE
|
||||
update_icons()
|
||||
var/obj/item/device/dogborg/sleeper/S = O
|
||||
var/obj/item/dogborg/sleeper/S = O
|
||||
S.go_out() //this should stop edgecase deletions
|
||||
//END CITADEL EDIT
|
||||
if(client)
|
||||
@@ -85,7 +85,7 @@
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You need to disable a module first!</span>")
|
||||
if(.)
|
||||
O.equipped(src, slot_hands)
|
||||
O.equipped(src, SLOT_HANDS)
|
||||
O.mouse_opacity = initial(O.mouse_opacity)
|
||||
O.layer = ABOVE_HUD_LAYER
|
||||
O.plane = ABOVE_HUD_PLANE
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/custom_name = ""
|
||||
var/braintype = "Cyborg"
|
||||
var/obj/item/robot_suit/robot_suit = null //Used for deconstruction to remember what the borg was constructed out of..
|
||||
var/obj/item/device/mmi/mmi = null
|
||||
var/obj/item/mmi/mmi = null
|
||||
|
||||
var/shell = FALSE
|
||||
var/deployed = FALSE
|
||||
@@ -121,7 +121,7 @@
|
||||
if(!TryConnectToAI())
|
||||
lawupdate = FALSE
|
||||
|
||||
radio = new /obj/item/device/radio/borg(src)
|
||||
radio = new /obj/item/radio/borg(src)
|
||||
if(!scrambledcodes && !builtInCamera)
|
||||
builtInCamera = new (src)
|
||||
builtInCamera.c_tag = real_name
|
||||
@@ -155,7 +155,7 @@
|
||||
equippable_hats = typecacheof(equippable_hats)
|
||||
|
||||
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
|
||||
aicamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
|
||||
aicamera = new/obj/item/camera/siliconcam/robot_camera(src)
|
||||
toner = tonermax
|
||||
diag_hud_set_borgcell()
|
||||
|
||||
@@ -487,13 +487,13 @@
|
||||
MOD.install(laws, user) //Proc includes a success mesage so we don't need another one
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/device/encryptionkey/) && opened)
|
||||
else if(istype(W, /obj/item/encryptionkey/) && opened)
|
||||
if(radio)//sanityyyyyy
|
||||
radio.attackby(W,user)//GTFO, you have your own procs
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Unable to locate a radio!</span>")
|
||||
|
||||
else if (istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
|
||||
else if (istype(W, /obj/item/card/id)||istype(W, /obj/item/pda)) // trying to unlock the interface with an ID card
|
||||
if(emagged)//still allow them to open the cover
|
||||
to_chat(user, "<span class='notice'>The interface seems slightly damaged.</span>")
|
||||
if(opened)
|
||||
@@ -528,7 +528,7 @@
|
||||
to_chat(user, "<span class='danger'>Upgrade error.</span>")
|
||||
U.forceMove(drop_location())
|
||||
|
||||
else if(istype(W, /obj/item/device/toner))
|
||||
else if(istype(W, /obj/item/toner))
|
||||
if(toner >= tonermax)
|
||||
to_chat(user, "<span class='warning'>The toner level of [src] is at its highest level possible!</span>")
|
||||
else
|
||||
@@ -538,7 +538,7 @@
|
||||
qdel(W)
|
||||
to_chat(user, "<span class='notice'>You fill the toner level of [src] to its max capacity.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/device/flashlight))
|
||||
else if(istype(W, /obj/item/flashlight))
|
||||
if(!opened)
|
||||
to_chat(user, "<span class='warning'>You need to open the panel to repair the headlamp!</span>")
|
||||
if(lamp_cooldown <= world.time)
|
||||
@@ -792,7 +792,7 @@
|
||||
new /obj/item/bodypart/head/robot(T)
|
||||
var/b
|
||||
for(b=0, b!=2, b++)
|
||||
var/obj/item/device/assembly/flash/handheld/F = new /obj/item/device/assembly/flash/handheld(T)
|
||||
var/obj/item/assembly/flash/handheld/F = new /obj/item/assembly/flash/handheld(T)
|
||||
F.burn_out()
|
||||
if (cell) //Sanity check.
|
||||
cell.forceMove(T)
|
||||
@@ -831,7 +831,7 @@
|
||||
set_module = /obj/item/robot_module/janitor
|
||||
|
||||
/mob/living/silicon/robot/modules/syndicate
|
||||
icon_state = "syndie_bloodhound"
|
||||
icon_state = "synd_sec"
|
||||
faction = list(ROLE_SYNDICATE)
|
||||
bubble_icon = "syndibot"
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
@@ -847,7 +847,7 @@
|
||||
/mob/living/silicon/robot/modules/syndicate/Initialize()
|
||||
. = ..()
|
||||
cell = new /obj/item/stock_parts/cell/hyper(src, 25000)
|
||||
radio = new /obj/item/device/radio/borg/syndicate(src)
|
||||
radio = new /obj/item/radio/borg/syndicate(src)
|
||||
laws = new /datum/ai_laws/syndicate_override()
|
||||
addtimer(CALLBACK(src, .proc/show_playstyle), 5)
|
||||
|
||||
@@ -859,7 +859,7 @@
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/modules/syndicate/medical
|
||||
icon_state = "syndi-medi"
|
||||
icon_state = "synd_medical"
|
||||
playstyle_string = "<span class='big bold'>You are a Syndicate medical cyborg!</span><br>\
|
||||
<b>You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
|
||||
Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/robot_module
|
||||
name = "Default"
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "std_module"
|
||||
icon_state = "std_mod"
|
||||
w_class = WEIGHT_CLASS_GIGANTIC
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
@@ -139,8 +139,8 @@
|
||||
st.energy = min(st.max_energy, st.energy + coeff * st.recharge_rate)
|
||||
|
||||
for(var/obj/item/I in get_usable_modules())
|
||||
if(istype(I, /obj/item/device/assembly/flash))
|
||||
var/obj/item/device/assembly/flash/F = I
|
||||
if(istype(I, /obj/item/assembly/flash))
|
||||
var/obj/item/assembly/flash/F = I
|
||||
F.times_used = 0
|
||||
F.crit_fail = 0
|
||||
F.update_icon()
|
||||
@@ -231,9 +231,9 @@
|
||||
/obj/item/robot_module/standard
|
||||
name = "Standard"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/reagent_containers/borghypo/epi,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/healthanalyzer,
|
||||
/obj/item/weldingtool/largetank/cyborg,
|
||||
/obj/item/wrench/cyborg,
|
||||
/obj/item/crowbar/cyborg,
|
||||
@@ -242,7 +242,7 @@
|
||||
/obj/item/stack/tile/plasteel/cyborg,
|
||||
/obj/item/extinguisher,
|
||||
/obj/item/pickaxe,
|
||||
/obj/item/device/t_scanner/adv_mining_scanner,
|
||||
/obj/item/t_scanner/adv_mining_scanner,
|
||||
/obj/item/restraints/handcuffs/cable/zipties,
|
||||
/obj/item/soap/nanotrasen,
|
||||
/obj/item/borg/cyborghug)
|
||||
@@ -257,8 +257,8 @@
|
||||
/obj/item/robot_module/medical
|
||||
name = "Medical"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/healthanalyzer,
|
||||
/obj/item/reagent_containers/borghypo,
|
||||
/obj/item/reagent_containers/glass/beaker/large,
|
||||
/obj/item/reagent_containers/dropper,
|
||||
@@ -288,7 +288,7 @@
|
||||
/obj/item/robot_module/engineering
|
||||
name = "Engineering"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/borg/sight/meson,
|
||||
/obj/item/construction/rcd/borg,
|
||||
/obj/item/pipe_dispenser,
|
||||
@@ -298,13 +298,13 @@
|
||||
/obj/item/wrench/cyborg,
|
||||
/obj/item/crowbar/cyborg,
|
||||
/obj/item/wirecutters/cyborg,
|
||||
/obj/item/device/multitool/cyborg,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/device/geiger_counter/cyborg,
|
||||
/obj/item/device/assembly/signaler/cyborg,
|
||||
/obj/item/multitool/cyborg,
|
||||
/obj/item/t_scanner,
|
||||
/obj/item/analyzer,
|
||||
/obj/item/geiger_counter/cyborg,
|
||||
/obj/item/assembly/signaler/cyborg,
|
||||
/obj/item/areaeditor/blueprints/cyborg,
|
||||
/obj/item/device/electroadaptive_pseudocircuit,
|
||||
/obj/item/electroadaptive_pseudocircuit,
|
||||
/obj/item/stack/sheet/metal/cyborg,
|
||||
/obj/item/stack/sheet/glass/cyborg,
|
||||
/obj/item/stack/sheet/rglass/cyborg,
|
||||
@@ -323,7 +323,7 @@
|
||||
/obj/item/robot_module/security
|
||||
name = "Security"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/restraints/handcuffs/cable/zipties,
|
||||
/obj/item/melee/baton/loaded,
|
||||
/obj/item/gun/energy/disabler/cyborg,
|
||||
@@ -355,9 +355,9 @@
|
||||
/obj/item/robot_module/peacekeeper
|
||||
name = "Peacekeeper"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/cookiesynth,
|
||||
/obj/item/device/harmalarm,
|
||||
/obj/item/harmalarm,
|
||||
/obj/item/reagent_containers/borghypo/peace,
|
||||
/obj/item/holosign_creator/cyborg,
|
||||
/obj/item/borg/cyborghug/peacekeeper,
|
||||
@@ -380,7 +380,7 @@
|
||||
/obj/item/robot_module/janitor
|
||||
name = "Janitor"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/screwdriver/cyborg,
|
||||
/obj/item/crowbar/cyborg,
|
||||
/obj/item/stack/tile/plasteel/cyborg,
|
||||
@@ -388,7 +388,7 @@
|
||||
/obj/item/storage/bag/trash/cyborg,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/mop/cyborg,
|
||||
/obj/item/device/lightreplacer/cyborg,
|
||||
/obj/item/lightreplacer/cyborg,
|
||||
/obj/item/holosign_creator,
|
||||
/obj/item/reagent_containers/spray/cyborg_drying)
|
||||
emag_modules = list(/obj/item/reagent_containers/spray/cyborg_lube)
|
||||
@@ -411,7 +411,7 @@
|
||||
|
||||
/obj/item/robot_module/janitor/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
|
||||
..()
|
||||
var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules
|
||||
var/obj/item/lightreplacer/LR = locate(/obj/item/lightreplacer) in basic_modules
|
||||
if(LR)
|
||||
for(var/i in 1 to coeff)
|
||||
LR.Charge(R)
|
||||
@@ -427,9 +427,9 @@
|
||||
/obj/item/robot_module/clown
|
||||
name = "Clown"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/toy/crayon/rainbow,
|
||||
/obj/item/device/instrument/bikehorn,
|
||||
/obj/item/instrument/bikehorn,
|
||||
/obj/item/stamp/clown,
|
||||
/obj/item/bikehorn,
|
||||
/obj/item/bikehorn/airhorn,
|
||||
@@ -458,7 +458,7 @@
|
||||
/obj/item/robot_module/butler
|
||||
name = "Service"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/condiment/enzyme,
|
||||
/obj/item/pen,
|
||||
@@ -466,8 +466,8 @@
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/hand_labeler/borg,
|
||||
/obj/item/razor,
|
||||
/obj/item/device/instrument/violin,
|
||||
/obj/item/device/instrument/guitar,
|
||||
/obj/item/instrument/violin,
|
||||
/obj/item/instrument/guitar,
|
||||
/obj/item/rsf/cyborg,
|
||||
/obj/item/reagent_containers/dropper,
|
||||
/obj/item/lighter,
|
||||
@@ -512,7 +512,7 @@
|
||||
/obj/item/robot_module/miner
|
||||
name = "Miner"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/borg/sight/meson,
|
||||
/obj/item/storage/bag/ore/cyborg,
|
||||
/obj/item/pickaxe/drill/cyborg,
|
||||
@@ -521,9 +521,9 @@
|
||||
/obj/item/weldingtool/mini,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/storage/bag/sheetsnatcher/borg,
|
||||
/obj/item/device/t_scanner/adv_mining_scanner,
|
||||
/obj/item/t_scanner/adv_mining_scanner,
|
||||
/obj/item/gun/energy/kinetic_accelerator/cyborg,
|
||||
/obj/item/device/gps/cyborg,
|
||||
/obj/item/gps/cyborg,
|
||||
/obj/item/stack/marker_beacon)
|
||||
emag_modules = list(/obj/item/borg/stun)
|
||||
ratvar_modules = list(
|
||||
@@ -537,7 +537,7 @@
|
||||
/obj/item/robot_module/syndicate
|
||||
name = "Syndicate Assault"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/melee/transforming/energy/sword/cyborg,
|
||||
/obj/item/gun/energy/printer,
|
||||
/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg,
|
||||
@@ -566,10 +566,10 @@
|
||||
/obj/item/robot_module/syndicate_medical
|
||||
name = "Syndicate Medical"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/reagent_containers/borghypo/syndicate,
|
||||
/obj/item/twohanded/shockpaddles/syndicate,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/healthanalyzer,
|
||||
/obj/item/surgical_drapes,
|
||||
/obj/item/retractor,
|
||||
/obj/item/hemostat,
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
var/list/alarms_to_clear = list()
|
||||
var/designation = ""
|
||||
var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all.
|
||||
var/obj/item/device/camera/siliconcam/aicamera = null //photography
|
||||
var/obj/item/camera/siliconcam/aicamera = null //photography
|
||||
hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_TRACK_HUD)
|
||||
|
||||
var/obj/item/device/radio/borg/radio = null //AIs dont use this but this is at the silicon level to advoid copypasta in say()
|
||||
var/obj/item/radio/borg/radio = null //AIs dont use this but this is at the silicon level to advoid copypasta in say()
|
||||
|
||||
var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
|
||||
var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/window_name = "Protobot 1.0" //Popup title
|
||||
var/window_width = 0 //0 for default size
|
||||
var/window_height = 0
|
||||
var/obj/item/device/paicard/paicard // Inserted pai card.
|
||||
var/obj/item/paicard/paicard // Inserted pai card.
|
||||
var/allow_pai = 1 // Are we even allowed to insert a pai card.
|
||||
var/bot_name
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
var/tries = 0 //Number of times the bot tried and failed to move.
|
||||
var/remote_disabled = 0 //If enabled, the AI cannot *Remotely* control a bot. It can still control it through cameras.
|
||||
var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it.
|
||||
var/obj/item/device/radio/Radio //The bot's radio, for speaking to people.
|
||||
var/obj/item/radio/Radio //The bot's radio, for speaking to people.
|
||||
var/radio_key = null //which channels can the bot listen to
|
||||
var/radio_channel = "Common" //The bot's default radio channel
|
||||
var/auto_patrol = 0// set to make bot automatically patrol
|
||||
@@ -130,7 +130,7 @@
|
||||
//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first.
|
||||
access_card.access += ACCESS_ROBOTICS
|
||||
set_custom_texts()
|
||||
Radio = new/obj/item/device/radio(src)
|
||||
Radio = new/obj/item/radio(src)
|
||||
if(radio_key)
|
||||
Radio.keyslot = new radio_key
|
||||
Radio.subspace_transmission = TRUE
|
||||
@@ -273,7 +273,7 @@
|
||||
to_chat(user, "<span class='notice'>The maintenance panel is now [open ? "opened" : "closed"].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The maintenance panel is locked.</span>")
|
||||
else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda))
|
||||
else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))
|
||||
if(bot_core.allowed(user) && !open && !emagged)
|
||||
locked = !locked
|
||||
to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]")
|
||||
@@ -284,7 +284,7 @@
|
||||
to_chat(user, "<span class='warning'>Please close the access panel before locking it.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
else if(istype(W, /obj/item/device/paicard))
|
||||
else if(istype(W, /obj/item/paicard))
|
||||
insertpai(user, W)
|
||||
else if(istype(W, /obj/item/hemostat) && paicard)
|
||||
if(open)
|
||||
@@ -880,7 +880,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
eject += "<BR>"
|
||||
return eject
|
||||
|
||||
/mob/living/simple_animal/bot/proc/insertpai(mob/user, obj/item/device/paicard/card)
|
||||
/mob/living/simple_animal/bot/proc/insertpai(mob/user, obj/item/paicard/card)
|
||||
if(paicard)
|
||||
to_chat(user, "<span class='warning'>A [paicard] is already inserted!</span>")
|
||||
else if(allow_pai && !key)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
anchored = FALSE
|
||||
health = 25
|
||||
maxHealth = 25
|
||||
radio_key = /obj/item/device/encryptionkey/headset_service
|
||||
radio_key = /obj/item/encryptionkey/headset_service
|
||||
radio_channel = "Service" //Service
|
||||
bot_type = CLEAN_BOT
|
||||
model = "Cleanbot"
|
||||
@@ -63,7 +63,7 @@
|
||||
text_dehack_fail = "[name] does not seem to respond to your repair code!"
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(istype(W, /obj/item/card/id)||istype(W, /obj/item/pda))
|
||||
if(bot_core.allowed(user) && !open && !emagged)
|
||||
locked = !locked
|
||||
to_chat(user, "<span class='notice'>You [ locked ? "lock" : "unlock"] \the [src] behaviour controls.</span>")
|
||||
@@ -148,9 +148,14 @@
|
||||
if(loc == get_turf(target))
|
||||
if(!(check_bot(target) && prob(50))) //Target is not defined at the parent. 50% chance to still try and clean so we dont get stuck on the last blood drop.
|
||||
UnarmedAttack(target) //Rather than check at every step of the way, let's check before we do an action, so we can rescan before the other bot.
|
||||
if(QDELETED(target)) //We done here.
|
||||
target = null
|
||||
mode = BOT_IDLE
|
||||
return
|
||||
else
|
||||
shuffle = TRUE //Shuffle the list the next time we scan so we dont both go the same way.
|
||||
path = list()
|
||||
|
||||
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)
|
||||
@@ -181,7 +186,7 @@
|
||||
/obj/effect/decal/cleanable/ash,
|
||||
/obj/effect/decal/cleanable/greenglow,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/deadcockroach,
|
||||
/obj/effect/decal/cleanable/insectguts,
|
||||
/obj/effect/decal/remains
|
||||
)
|
||||
|
||||
@@ -261,7 +266,7 @@
|
||||
|
||||
new /obj/item/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
icon_state = "firstaid_arm"
|
||||
created_name = "Medibot" //To preserve the name if it's a unique medbot I guess
|
||||
var/skin = null //Same as medbot, set to tox or ointment for the respective kits.
|
||||
var/healthanalyzer = /obj/item/device/healthanalyzer
|
||||
var/healthanalyzer = /obj/item/healthanalyzer
|
||||
var/firstaid = /obj/item/storage/firstaid
|
||||
|
||||
/obj/item/bot_assembly/medbot/Initialize()
|
||||
@@ -314,7 +314,7 @@
|
||||
..()
|
||||
switch(build_step)
|
||||
if(ASSEMBLY_FIRST_STEP)
|
||||
if(istype(W, /obj/item/device/healthanalyzer))
|
||||
if(istype(W, /obj/item/healthanalyzer))
|
||||
if(!user.temporarilyRemoveItemFromInventory(W))
|
||||
return
|
||||
healthanalyzer = W.type
|
||||
@@ -392,7 +392,7 @@
|
||||
build_step++
|
||||
|
||||
else if(istype(I, /obj/item/screwdriver)) //deconstruct
|
||||
new /obj/item/device/assembly/signaler(Tsec)
|
||||
new /obj/item/assembly/signaler(Tsec)
|
||||
new /obj/item/clothing/head/helmet/sec(Tsec)
|
||||
to_chat(user, "<span class='notice'>You disconnect the signaler from the helmet.</span>")
|
||||
qdel(src)
|
||||
@@ -426,7 +426,7 @@
|
||||
|
||||
else if(istype(I, /obj/item/screwdriver)) //deconstruct
|
||||
cut_overlay("hs_eye")
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
to_chat(user, "<span class='notice'>You detach the proximity sensor from [src].</span>")
|
||||
build_step--
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS //Walls can't stop THE LAW
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
radio_key = /obj/item/device/encryptionkey/headset_sec
|
||||
radio_key = /obj/item/encryptionkey/headset_sec
|
||||
radio_channel = "Security"
|
||||
bot_type = SEC_BOT
|
||||
model = "ED-209"
|
||||
@@ -380,7 +380,7 @@ Auto Patrol[]"},
|
||||
Sa.build_step = 1
|
||||
Sa.add_overlay("hs_hole")
|
||||
Sa.created_name = name
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
drop_part(cell_type, Tsec)
|
||||
|
||||
if(!lasercolor)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
maxHealth = 25
|
||||
spacewalk = TRUE
|
||||
|
||||
radio_key = /obj/item/device/encryptionkey/headset_eng
|
||||
radio_key = /obj/item/encryptionkey/headset_eng
|
||||
radio_channel = "Engineering"
|
||||
bot_type = FLOOR_BOT
|
||||
model = "Floorbot"
|
||||
@@ -164,12 +164,7 @@
|
||||
update_controls()
|
||||
|
||||
/mob/living/simple_animal/bot/floorbot/proc/empty_tiles()
|
||||
var/atom/Tsec = drop_location()
|
||||
|
||||
while(specialtiles > initial(tiletype.max_amount))
|
||||
new tiletype(Tsec,initial(tiletype.max_amount))
|
||||
specialtiles -= initial(tiletype.max_amount)
|
||||
new tiletype(Tsec,specialtiles)
|
||||
new tiletype(drop_location(), specialtiles)
|
||||
specialtiles = 0
|
||||
tiletype = null
|
||||
|
||||
@@ -370,7 +365,7 @@
|
||||
|
||||
drop_part(toolbox, Tsec)
|
||||
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
if(specialtiles && tiletype != null)
|
||||
empty_tiles()
|
||||
@@ -378,8 +373,7 @@
|
||||
if(prob(50))
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
var/obj/item/stack/tile/plasteel/T = new (Tsec)
|
||||
T.amount = 1
|
||||
new /obj/item/stack/tile/plasteel(Tsec, 1)
|
||||
|
||||
do_sparks(3, TRUE, src)
|
||||
..()
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "\improper honkbot"
|
||||
desc = "A little robot. It looks happy with its bike horn."
|
||||
icon = 'icons/mob/aibots.dmi'
|
||||
icon_state = "honkbot"
|
||||
icon_state = "honkbot1"
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
health = 25
|
||||
@@ -10,7 +10,7 @@
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
pass_flags = PASSMOB
|
||||
|
||||
radio_key = /obj/item/device/encryptionkey/headset_service //doesn't have security key
|
||||
radio_key = /obj/item/encryptionkey/headset_service //doesn't have security key
|
||||
radio_channel = "Service" //Doesn't even use the radio anyway.
|
||||
bot_type = HONK_BOT
|
||||
model = "Honkbot"
|
||||
@@ -334,7 +334,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
if(prob(50))
|
||||
drop_part(robot_arm, Tsec)
|
||||
new bikehorn(Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
var/datum/effect_system/spark_spread/s = new
|
||||
s.set_up(3, 1, src)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
status_flags = (CANPUSH | CANSTUN)
|
||||
|
||||
radio_key = /obj/item/device/encryptionkey/headset_med
|
||||
radio_key = /obj/item/encryptionkey/headset_med
|
||||
radio_channel = "Medical"
|
||||
|
||||
bot_type = MED_BOT
|
||||
@@ -28,7 +28,7 @@
|
||||
path_image_color = "#DDDDFF"
|
||||
|
||||
var/obj/item/reagent_containers/glass/reagent_glass = null //Can be set to draw from this for reagents.
|
||||
var/healthanalyzer = /obj/item/device/healthanalyzer
|
||||
var/healthanalyzer = /obj/item/healthanalyzer
|
||||
var/firstaid = /obj/item/storage/firstaid
|
||||
var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits.
|
||||
var/mob/living/carbon/patient = null
|
||||
@@ -357,8 +357,11 @@
|
||||
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if((H.head && (H.head.flags_1 & THICKMATERIAL_1)) && (H.wear_suit && (H.wear_suit.flags_1 & THICKMATERIAL_1)))
|
||||
return FALSE // Skip over them if they have no exposed flesh.
|
||||
if (H.wear_suit && H.head && is_type_in_typecache(H.wear_suit, GLOB.typecache_clothing) && is_type_in_typecache(H.wear_suit, GLOB.typecache_clothing))
|
||||
var/obj/item/clothing/CS = H.wear_suit
|
||||
var/obj/item/clothing/CH = H.head
|
||||
if (CS.clothing_flags & CH.clothing_flags & THICKMATERIAL)
|
||||
return FALSE // Skip over them if they have no exposed flesh.
|
||||
|
||||
if(declare_crit && C.health <= 0) //Critical condition! Call for help!
|
||||
declare(C)
|
||||
@@ -527,7 +530,7 @@
|
||||
var/atom/Tsec = drop_location()
|
||||
|
||||
drop_part(firstaid, Tsec)
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
drop_part(healthanalyzer, Tsec)
|
||||
|
||||
if(reagent_glass)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
buckle_lying = 0
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
radio_key = /obj/item/device/encryptionkey/headset_cargo
|
||||
radio_key = /obj/item/encryptionkey/headset_cargo
|
||||
radio_channel = "Supply"
|
||||
|
||||
bot_type = MULE_BOT
|
||||
@@ -61,6 +61,10 @@
|
||||
set_id(suffix || id || "#[mulebot_count]")
|
||||
suffix = null
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/ntnet_interface)
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/Destroy()
|
||||
unload(0)
|
||||
qdel(wires)
|
||||
@@ -694,7 +698,7 @@
|
||||
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
|
||||
var/atom/Tsec = drop_location()
|
||||
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/stack/rods(Tsec)
|
||||
new /obj/item/stack/rods(Tsec)
|
||||
new /obj/item/stack/cable_coil/cut(Tsec)
|
||||
@@ -725,7 +729,7 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/insertpai(mob/user, obj/item/device/paicard/card)
|
||||
/mob/living/simple_animal/bot/mulebot/insertpai(mob/user, obj/item/paicard/card)
|
||||
if(..())
|
||||
visible_message("[src] safeties are locked on.")
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
pass_flags = PASSMOB
|
||||
|
||||
radio_key = /obj/item/device/encryptionkey/secbot //AI Priv + Security
|
||||
radio_key = /obj/item/encryptionkey/secbot //AI Priv + Security
|
||||
radio_channel = "Security" //Security channel
|
||||
bot_type = SEC_BOT
|
||||
model = "Securitron"
|
||||
@@ -406,7 +406,7 @@ Auto Patrol: []"},
|
||||
Sa.build_step = 1
|
||||
Sa.add_overlay("hs_hole")
|
||||
Sa.created_name = name
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
drop_part(baton_type, Tsec)
|
||||
|
||||
if(prob(50))
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
mask = /obj/item/clothing/mask/gas
|
||||
head = /obj/item/clothing/head/helmet/swat
|
||||
back = /obj/item/storage/backpack
|
||||
@@ -41,7 +41,7 @@
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/syndi
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
mask = /obj/item/clothing/mask/gas/syndicate
|
||||
back = /obj/item/tank/jetpack/oxygen
|
||||
r_pocket = /obj/item/tank/internals/emergency_oxygen
|
||||
@@ -61,7 +61,7 @@
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
mask = /obj/item/clothing/mask/gas/syndicate
|
||||
back = /obj/item/tank/jetpack/oxygen/harness
|
||||
id = /obj/item/card/id/syndicate
|
||||
@@ -132,7 +132,7 @@
|
||||
suit = /obj/item/clothing/suit/armor/bulletproof
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
head = /obj/item/clothing/head/helmet/alt
|
||||
mask = /obj/item/clothing/mask/balaclava
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
uniform = /obj/item/clothing/under/rank/security/navyblue/russian
|
||||
suit = /obj/item/clothing/suit/security/officer/russian
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
head = /obj/item/clothing/head/ushanka
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
mask = /obj/item/clothing/mask/gas/sechailer/swat
|
||||
head = /obj/item/clothing/head/helmet/swat/nanotrasen
|
||||
back = /obj/item/storage/backpack/security
|
||||
@@ -200,7 +200,7 @@
|
||||
suit = /obj/item/clothing/suit/apron/surgical
|
||||
shoes = /obj/item/clothing/shoes/sneakers/white
|
||||
gloves = /obj/item/clothing/gloves/color/latex/nitrile
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
back = /obj/item/storage/backpack/satchel/med
|
||||
id = /obj/item/card/id
|
||||
glasses = /obj/item/clothing/glasses/hud/health
|
||||
@@ -6,7 +6,7 @@
|
||||
health = 1
|
||||
maxHealth = 1
|
||||
turns_per_move = 5
|
||||
loot = list(/obj/effect/decal/cleanable/deadcockroach)
|
||||
loot = list(/obj/effect/decal/cleanable/insectguts)
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 270
|
||||
maxbodytemp = INFINITY
|
||||
@@ -52,11 +52,3 @@
|
||||
|
||||
/mob/living/simple_animal/cockroach/ex_act() //Explosions are a terrible way to handle a cockroach.
|
||||
return
|
||||
|
||||
/obj/effect/decal/cleanable/deadcockroach
|
||||
name = "cockroach guts"
|
||||
desc = "One bug squashed. Four more will rise in its place."
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xfloor1"
|
||||
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
|
||||
beauty = -300
|
||||
|
||||
@@ -89,10 +89,10 @@
|
||||
|
||||
if(default_storage)
|
||||
var/obj/item/I = new default_storage(src)
|
||||
equip_to_slot_or_del(I, slot_generic_dextrous_storage)
|
||||
equip_to_slot_or_del(I, SLOT_GENERC_DEXTROUS_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, SLOT_HEAD)
|
||||
|
||||
access_card.flags_1 |= NODROP_1
|
||||
|
||||
|
||||
@@ -59,7 +59,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, SLOT_HEAD)
|
||||
D.admin_spawned = admin_spawned
|
||||
D.key = user.key
|
||||
qdel(src)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"1. Interfere.\n"+\
|
||||
"2. Kill.\n"+\
|
||||
"3. Destroy."
|
||||
default_storage = /obj/item/device/radio/uplink
|
||||
default_storage = /obj/item/radio/uplink
|
||||
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi
|
||||
seeStatic = 0 //Our programming is superior.
|
||||
hacked = TRUE
|
||||
@@ -44,7 +44,7 @@
|
||||
/mob/living/simple_animal/drone/syndrone/badass
|
||||
name = "Badass Syndrone"
|
||||
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
|
||||
default_storage = /obj/item/device/radio/uplink/nuclear
|
||||
default_storage = /obj/item/radio/uplink/nuclear
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone/badass/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
|
||||
/mob/living/simple_animal/drone/can_equip(obj/item/I, slot)
|
||||
switch(slot)
|
||||
if(slot_head)
|
||||
if(SLOT_HEAD)
|
||||
if(head)
|
||||
return 0
|
||||
if(!((I.slot_flags & SLOT_HEAD) || (I.slot_flags & SLOT_MASK)))
|
||||
if(!((I.slot_flags & ITEM_SLOT_HEAD) || (I.slot_flags & ITEM_SLOT_MASK)))
|
||||
return 0
|
||||
return 1
|
||||
if(slot_generic_dextrous_storage)
|
||||
if(SLOT_GENERC_DEXTROUS_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(SLOT_HEAD)
|
||||
return head
|
||||
if(slot_generic_dextrous_storage)
|
||||
if(SLOT_GENERC_DEXTROUS_STORAGE)
|
||||
return internal_storage
|
||||
return ..()
|
||||
|
||||
@@ -63,10 +63,10 @@
|
||||
I.plane = ABOVE_HUD_PLANE
|
||||
|
||||
switch(slot)
|
||||
if(slot_head)
|
||||
if(SLOT_HEAD)
|
||||
head = I
|
||||
update_inv_head()
|
||||
if(slot_generic_dextrous_storage)
|
||||
if(SLOT_GENERC_DEXTROUS_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_generic_dextrous_storage
|
||||
return SLOT_GENERC_DEXTROUS_STORAGE
|
||||
|
||||
/mob/living/simple_animal/drone/getBeltSlot()
|
||||
return slot_generic_dextrous_storage
|
||||
return SLOT_GENERC_DEXTROUS_STORAGE
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/dextrous/can_equip(obj/item/I, slot)
|
||||
switch(slot)
|
||||
if(slot_generic_dextrous_storage)
|
||||
if(SLOT_GENERC_DEXTROUS_STORAGE)
|
||||
if(internal_storage)
|
||||
return 0
|
||||
return 1
|
||||
@@ -65,17 +65,17 @@
|
||||
return
|
||||
|
||||
switch(slot)
|
||||
if(slot_generic_dextrous_storage)
|
||||
if(SLOT_GENERC_DEXTROUS_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_generic_dextrous_storage
|
||||
return SLOT_GENERC_DEXTROUS_STORAGE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/dextrous/getBeltSlot()
|
||||
return slot_generic_dextrous_storage
|
||||
return SLOT_GENERC_DEXTROUS_STORAGE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/dextrous/proc/update_inv_internal_storage()
|
||||
if(internal_storage && client && hud_used && hud_used.hud_shown)
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
attacktext = "pummels"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
dextrous = TRUE
|
||||
held_items = list(null, null)
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_GRAB, INTENT_DISARM, INTENT_HARM)
|
||||
faction = list("jungle")
|
||||
robust_searching = TRUE
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
if(!search_objects)
|
||||
. = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide
|
||||
|
||||
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden,/obj/item/device/electronic_assembly))
|
||||
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden,/obj/item/electronic_assembly))
|
||||
|
||||
for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines))
|
||||
if(can_see(targets_from, HM, vision_range))
|
||||
@@ -196,8 +196,8 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
if(istype(the_target, /obj/item/device/electronic_assembly))
|
||||
var/obj/item/device/electronic_assembly/O = the_target
|
||||
if(istype(the_target, /obj/item/electronic_assembly))
|
||||
var/obj/item/electronic_assembly/O = the_target
|
||||
if(O.combat_circuits)
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ Difficulty: Medium
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Initialize()
|
||||
. = ..()
|
||||
internal = new/obj/item/device/gps/internal/miner(src)
|
||||
internal = new/obj/item/gps/internal/miner(src)
|
||||
miner_saw = new(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
@@ -256,7 +256,7 @@ Difficulty: Medium
|
||||
sleep(4)
|
||||
animate(src, alpha = 0, time = 6, easing = EASE_OUT, flags = ANIMATION_PARALLEL)
|
||||
|
||||
/obj/item/device/gps/internal/miner
|
||||
/obj/item/gps/internal/miner
|
||||
icon_state = null
|
||||
gpstag = "Resonant Signal"
|
||||
desc = "The sweet blood, oh, it sings to me."
|
||||
|
||||
@@ -51,7 +51,7 @@ Difficulty: Hard
|
||||
deathmessage = "sinks into a pool of blood, fleeing the battle. You've won, for now... "
|
||||
death_sound = 'sound/magic/enter_blood.ogg'
|
||||
|
||||
/obj/item/device/gps/internal/bubblegum
|
||||
/obj/item/gps/internal/bubblegum
|
||||
icon_state = null
|
||||
gpstag = "Bloody Signal"
|
||||
desc = "You're not quite sure how a signal can be bloody."
|
||||
@@ -111,7 +111,7 @@ Difficulty: Hard
|
||||
AddSpell(bloodspell)
|
||||
if(istype(loc, /obj/effect/dummy/slaughter))
|
||||
bloodspell.phased = 1
|
||||
internal = new/obj/item/device/gps/internal/bubblegum(src)
|
||||
internal = new/obj/item/gps/internal/bubblegum(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/grant_achievement(medaltype,scoretype)
|
||||
. = ..()
|
||||
|
||||
@@ -92,7 +92,7 @@ Difficulty: Very Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/Initialize()
|
||||
. = ..()
|
||||
internal = new/obj/item/device/gps/internal/colossus(src)
|
||||
internal = new/obj/item/gps/internal/colossus(src)
|
||||
|
||||
/obj/effect/temp_visual/at_shield
|
||||
name = "anti-toolbox field"
|
||||
@@ -220,7 +220,7 @@ Difficulty: Very Hard
|
||||
target.ex_act(EXPLODE_HEAVY)
|
||||
|
||||
|
||||
/obj/item/device/gps/internal/colossus
|
||||
/obj/item/gps/internal/colossus
|
||||
icon_state = null
|
||||
gpstag = "Angelic Signal"
|
||||
desc = "Get in the fucking robot."
|
||||
|
||||
@@ -66,7 +66,7 @@ Difficulty: Medium
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
|
||||
smallsprite.Grant(src)
|
||||
. = ..()
|
||||
internal = new/obj/item/device/gps/internal/dragon(src)
|
||||
internal = new/obj/item/gps/internal/dragon(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/ex_act(severity, target)
|
||||
if(severity == 3)
|
||||
@@ -271,7 +271,7 @@ Difficulty: Medium
|
||||
return
|
||||
swoop_attack(TRUE, A, 25)
|
||||
|
||||
/obj/item/device/gps/internal/dragon
|
||||
/obj/item/gps/internal/dragon
|
||||
icon_state = null
|
||||
gpstag = "Fiery Signal"
|
||||
desc = "Here there be dragons."
|
||||
|
||||
@@ -78,7 +78,7 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/Initialize()
|
||||
. = ..()
|
||||
internal = new/obj/item/device/gps/internal/hierophant(src)
|
||||
internal = new/obj/item/gps/internal/hierophant(src)
|
||||
spawned_beacon = new(loc)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/spawn_crusher_loot()
|
||||
@@ -687,7 +687,7 @@ Difficulty: Hard
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/gps/internal/hierophant
|
||||
/obj/item/gps/internal/hierophant
|
||||
icon_state = null
|
||||
gpstag = "Zealous Signal"
|
||||
desc = "Heed its words."
|
||||
|
||||
@@ -52,7 +52,7 @@ Difficulty: Medium
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/Initialize()
|
||||
. = ..()
|
||||
internal = new/obj/item/device/gps/internal/legion(src)
|
||||
internal = new/obj/item/gps/internal/legion(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/GiveTarget(new_target)
|
||||
. = ..()
|
||||
@@ -138,7 +138,7 @@ Difficulty: Medium
|
||||
loot = list(/obj/structure/closet/crate/necropolis/tendril)
|
||||
..()
|
||||
|
||||
/obj/item/device/gps/internal/legion
|
||||
/obj/item/gps/internal/legion
|
||||
icon_state = null
|
||||
gpstag = "Echoing Signal"
|
||||
desc = "The message repeats."
|
||||
@@ -153,7 +153,7 @@ Difficulty: Medium
|
||||
icon_state = "staffofstorms"
|
||||
item_state = "staffofstorms"
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
slot_flags = SLOT_BACK
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 25
|
||||
damtype = BURN
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/score_type = BOSS_SCORE
|
||||
var/elimination = 0
|
||||
var/anger_modifier = 0
|
||||
var/obj/item/device/gps/internal
|
||||
var/obj/item/gps/internal
|
||||
var/recovery_time = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/Initialize(mapload)
|
||||
|
||||
@@ -67,7 +67,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
|
||||
/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize()
|
||||
. = ..()
|
||||
swarmer_caps = GLOB.AISwarmerCapsByType //for admin-edits
|
||||
internal = new/obj/item/device/gps/internal/swarmer_beacon(src)
|
||||
internal = new/obj/item/gps/internal/swarmer_beacon(src)
|
||||
for(var/ddir in GLOB.cardinals)
|
||||
new /obj/structure/swarmer/blockade (get_step(src, ddir))
|
||||
var/mob/living/simple_animal/hostile/swarmer/ai/resource/R = new(loc)
|
||||
@@ -90,7 +90,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
|
||||
summon_backup(25) //long range, only called max once per 15 seconds, so it's not deathlag
|
||||
|
||||
|
||||
/obj/item/device/gps/internal/swarmer_beacon
|
||||
/obj/item/gps/internal/swarmer_beacon
|
||||
icon_state = null
|
||||
gpstag = "Hungry Signal"
|
||||
desc = "Transmited over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom"
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
belt = null
|
||||
backpack_contents = list()
|
||||
if(prob(70))
|
||||
backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, /obj/item/device/megaphone/clown = 1, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter = 1, /obj/item/pneumatic_cannon/pie = 1))
|
||||
backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, /obj/item/megaphone/clown = 1, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter = 1, /obj/item/pneumatic_cannon/pie = 1))
|
||||
if(prob(30))
|
||||
backpack_contents += list(/obj/item/stack/sheet/mineral/bananium = pickweight(list( 1 = 3, 2 = 2, 3 = 1)))
|
||||
if(prob(10))
|
||||
@@ -365,7 +365,7 @@
|
||||
r_pocket = /obj/item/restraints/legcuffs/bola/cult
|
||||
l_pocket = /obj/item/melee/cultblade/dagger
|
||||
glasses = /obj/item/clothing/glasses/night/cultblind
|
||||
backpack_contents = list(/obj/item/reagent_containers/glass/beaker/unholywater = 1, /obj/item/device/cult_shift = 1, /obj/item/device/flashlight/flare/culttorch = 1, /obj/item/stack/sheet/runed_metal = 15)
|
||||
backpack_contents = list(/obj/item/reagent_containers/glass/beaker/unholywater = 1, /obj/item/cult_shift = 1, /obj/item/flashlight/flare/culttorch = 1, /obj/item/stack/sheet/runed_metal = 15)
|
||||
if("Lavaknight") //START OF CIT CHANGE
|
||||
uniform = /obj/item/clothing/under/assistantformal
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
if(ismineralturf(F))
|
||||
var/turf/closed/mineral/M = F
|
||||
M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
|
||||
gps = new /obj/item/device/gps/internal(src)
|
||||
gps = new /obj/item/gps/internal(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/Destroy()
|
||||
QDEL_NULL(emitted_light)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon_dead = "Fugu_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
move_to_delay = 5
|
||||
friendly = "floats near"
|
||||
speak_emote = list("puffs")
|
||||
@@ -33,7 +33,7 @@
|
||||
var/wumbo = 0
|
||||
var/inflate_cooldown = 0
|
||||
var/datum/action/innate/fugu/expand/E
|
||||
loot = list(/obj/item/asteroid/fugu_gland{layer = ABOVE_MOB_LAYER})
|
||||
loot = list(/obj/item/fugu_gland{layer = ABOVE_MOB_LAYER})
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/Initialize()
|
||||
. = ..()
|
||||
@@ -116,7 +116,7 @@
|
||||
Deflate()
|
||||
..(gibbed)
|
||||
|
||||
/obj/item/asteroid/fugu_gland
|
||||
/obj/item/fugu_gland
|
||||
name = "wumborian fugu gland"
|
||||
desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
@@ -126,7 +126,7 @@
|
||||
layer = MOB_LAYER
|
||||
var/list/banned_mobs
|
||||
|
||||
/obj/item/asteroid/fugu_gland/afterattack(atom/target, mob/user, proximity_flag)
|
||||
/obj/item/fugu_gland/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag && isanimal(target))
|
||||
var/mob/living/simple_animal/A = target
|
||||
if(A.buffed || (A.type in banned_mobs) || A.stat)
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
var/list/available_channels = list()
|
||||
|
||||
//Headset for Poly to yell at engineers :)
|
||||
var/obj/item/device/radio/headset/ears = null
|
||||
var/obj/item/radio/headset/ears = null
|
||||
|
||||
//The thing the parrot is currently interested in. This gets used for items the parrot wants to pick up, mobs it wants to steal from,
|
||||
//mobs it wants to attack or mobs that have attacked it
|
||||
@@ -101,11 +101,11 @@
|
||||
/mob/living/simple_animal/parrot/Initialize()
|
||||
. = ..()
|
||||
if(!ears)
|
||||
var/headset = pick(/obj/item/device/radio/headset/headset_sec, \
|
||||
/obj/item/device/radio/headset/headset_eng, \
|
||||
/obj/item/device/radio/headset/headset_med, \
|
||||
/obj/item/device/radio/headset/headset_sci, \
|
||||
/obj/item/device/radio/headset/headset_cargo)
|
||||
var/headset = pick(/obj/item/radio/headset/headset_sec, \
|
||||
/obj/item/radio/headset/headset_eng, \
|
||||
/obj/item/radio/headset/headset_med, \
|
||||
/obj/item/radio/headset/headset_sci, \
|
||||
/obj/item/radio/headset/headset_cargo)
|
||||
ears = new headset(src)
|
||||
|
||||
parrot_sleep_dur = parrot_sleep_max //In case someone decides to change the max without changing the duration var
|
||||
@@ -236,11 +236,11 @@
|
||||
if(!item_to_add)
|
||||
return
|
||||
|
||||
if( !istype(item_to_add, /obj/item/device/radio/headset) )
|
||||
if( !istype(item_to_add, /obj/item/radio/headset) )
|
||||
to_chat(usr, "<span class='warning'>This object won't fit!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/device/radio/headset/headset_to_add = item_to_add
|
||||
var/obj/item/radio/headset/headset_to_add = item_to_add
|
||||
|
||||
if(!usr.transferItemToLoc(headset_to_add, src))
|
||||
return
|
||||
@@ -889,7 +889,7 @@
|
||||
var/longest_deathstreak = 0
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/Initialize()
|
||||
ears = new /obj/item/device/radio/headset/headset_eng(src)
|
||||
ears = new /obj/item/radio/headset/headset_eng(src)
|
||||
available_channels = list(":e")
|
||||
Read_Memory()
|
||||
if(rounds_survived == longest_survival)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/shade/canSuicide()
|
||||
if(istype(loc, /obj/item/device/soulstone)) //do not suicide inside the soulstone
|
||||
if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri
|
||||
if(istype(O, /obj/item/device/soulstone))
|
||||
var/obj/item/device/soulstone/SS = O
|
||||
if(istype(O, /obj/item/soulstone))
|
||||
var/obj/item/soulstone/SS = O
|
||||
SS.transfer_soul("SHADE", src, user)
|
||||
else
|
||||
. = ..()
|
||||
|
||||
@@ -146,12 +146,12 @@
|
||||
else
|
||||
status_traits[trait] |= list(source)
|
||||
|
||||
/mob/living/proc/add_trait_datum(trait, spawn_effects) //separate proc due to the way these ones are handled
|
||||
if(has_trait(trait))
|
||||
/mob/living/proc/add_quirk(quirk, spawn_effects) //separate proc due to the way these ones are handled
|
||||
if(has_trait(quirk))
|
||||
return
|
||||
if(!SStraits || !SStraits.traits[trait])
|
||||
if(!SSquirks || !SSquirks.quirks[quirk])
|
||||
return
|
||||
var/datum/trait/T = SStraits.traits[trait]
|
||||
var/datum/quirk/T = SSquirks.quirks[quirk]
|
||||
new T (src, spawn_effects)
|
||||
return TRUE
|
||||
|
||||
@@ -180,8 +180,8 @@
|
||||
if(!LAZYLEN(status_traits[trait]))
|
||||
status_traits -= trait
|
||||
|
||||
/mob/living/proc/remove_trait_datum(trait)
|
||||
var/datum/trait/T = roundstart_traits[trait]
|
||||
/mob/living/proc/remove_quirk(quirk)
|
||||
var/datum/quirk/T = roundstart_quirks[quirk]
|
||||
if(T)
|
||||
qdel(T)
|
||||
return TRUE
|
||||
@@ -201,11 +201,28 @@
|
||||
else if(LAZYLEN(status_traits[trait]))
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/has_trait_datum(trait)
|
||||
return roundstart_traits[trait]
|
||||
/mob/living/proc/has_quirk(quirk)
|
||||
return roundstart_quirks[quirk]
|
||||
|
||||
/mob/living/proc/remove_all_traits()
|
||||
status_traits = list()
|
||||
/mob/living/proc/remove_all_traits(remove_species_traits = FALSE, remove_organ_traits = FALSE, remove_quirks = FALSE)
|
||||
|
||||
var/list/blacklisted_sources = list()
|
||||
if(!remove_species_traits)
|
||||
blacklisted_sources += SPECIES_TRAIT
|
||||
if(!remove_organ_traits)
|
||||
blacklisted_sources += ORGAN_TRAIT
|
||||
if(!remove_quirks)
|
||||
blacklisted_sources += ROUNDSTART_TRAIT
|
||||
|
||||
for(var/kebab in status_traits)
|
||||
var/skip
|
||||
for(var/S in blacklisted_sources)
|
||||
if(S in status_traits[kebab])
|
||||
skip = TRUE
|
||||
break
|
||||
if(!skip)
|
||||
remove_trait(kebab, null, TRUE)
|
||||
CHECK_TICK
|
||||
|
||||
/////////////////////////////////// TRAIT PROCS ////////////////////////////////////
|
||||
|
||||
|
||||
+11
-11
@@ -237,14 +237,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_generic_dextrous_storage\
|
||||
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\
|
||||
)
|
||||
|
||||
for(var/slot in slot_priority)
|
||||
@@ -289,7 +289,7 @@
|
||||
/mob/proc/show_inv(mob/user)
|
||||
return
|
||||
|
||||
//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
|
||||
//mob verbs are faster than object verbs. See https://secure.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
|
||||
/mob/verb/examinate(atom/A as mob|obj|turf in view()) //It used to be oview(12), but I can't really say why
|
||||
set name = "Examine"
|
||||
set category = "IC"
|
||||
@@ -825,8 +825,8 @@
|
||||
break
|
||||
search_id = 0
|
||||
|
||||
else if( search_pda && istype(A, /obj/item/device/pda) )
|
||||
var/obj/item/device/pda/PDA = A
|
||||
else if( search_pda && istype(A, /obj/item/pda) )
|
||||
var/obj/item/pda/PDA = A
|
||||
if(PDA.owner == oldname)
|
||||
PDA.owner = newname
|
||||
PDA.update_label()
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
message = src.say_quote(message, get_spans())
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[name]</span>[alt_name] <span class='message'>[message]</span></span>"
|
||||
|
||||
log_message("DEAD: [message]", INDIVIDUAL_SAY_LOG)
|
||||
deadchat_broadcast(rendered, follow_target = src, speaker_key = K)
|
||||
|
||||
/mob/proc/check_emote(message)
|
||||
|
||||
Reference in New Issue
Block a user