Merge branch 'master' into upstream-merge-37529

This commit is contained in:
LetterJay
2018-05-22 08:02:46 -05:00
committed by GitHub
1106 changed files with 20660 additions and 18727 deletions
@@ -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)
+2 -2
View File
@@ -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
+8 -5
View File
@@ -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
+4 -4
View File
@@ -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.
+17 -17
View File
@@ -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
+4 -4
View File
@@ -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].")
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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
+14 -14
View File
@@ -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
+4 -4
View File
@@ -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
+10 -10
View File
@@ -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)
+99 -99
View File
@@ -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
+49 -44
View File
@@ -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>&nbsp;</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 += "&nbsp;<A href='?src=[REF(src)];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "&nbsp;<A href='?src=[REF(src)];internal=[SLOT_BACK]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr><tr><td>&nbsp;</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>&nbsp;</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>&nbsp;&#8627;<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>&nbsp;&#8627;<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 += "&nbsp;<A href='?src=[REF(src)];internal=[slot_s_store]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "&nbsp;<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>&nbsp;&#8627;<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>&nbsp;&#8627;<B>Pockets:</B></font></td></tr>"
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>ID:</B></font></td></tr>"
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Belt:</B></font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<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>&nbsp;&#8627;<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 += "&nbsp;<A href='?src=[REF(src)];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "&nbsp;<A href='?src=[REF(src)];internal=[SLOT_BELT]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
dat += "<tr><td>&nbsp;&#8627;<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 += "&nbsp;<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>&nbsp;&#8627;<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>&nbsp;&#8627;<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
+16 -17
View File
@@ -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 ..()
+1 -1
View File
@@ -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)
+39 -39
View File
@@ -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)
+14 -14
View File
@@ -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
+10 -10
View File
@@ -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)
+2 -1
View File
@@ -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)
-3
View File
@@ -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
+14 -11
View File
@@ -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
+1 -2
View File
@@ -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)
..()
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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
+7 -7
View File
@@ -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.
+1 -1
View File
@@ -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()
+6 -6
View File
@@ -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
+11 -11
View File
@@ -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,
+2 -2
View File
@@ -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
. = ..()
+27 -10
View File
@@ -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
View File
@@ -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()
+1 -1
View File
@@ -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)