Merge branch 'master' into upstream-merge-37486

This commit is contained in:
deathride58
2018-05-06 07:15:48 +00:00
committed by GitHub
727 changed files with 10369 additions and 18653 deletions
+3 -3
View File
@@ -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)
@@ -320,9 +323,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
Moved(oldloc, direct)
/mob/dead/observer/is_active()
return 0
/mob/dead/observer/verb/reenter_corpse()
set category = "Ghost"
set name = "Re-enter Corpse"
+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
+1 -1
View File
@@ -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)
@@ -857,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)
@@ -718,6 +718,21 @@
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>")
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_traits.len)
to_chat(src, "<span class='notice'>You have these traits: [get_trait_string()].</span>")
else
@@ -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))
+2 -2
View File
@@ -128,7 +128,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
@@ -243,7 +243,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
+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)
@@ -1019,7 +1019,7 @@ 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)
@@ -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)
@@ -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
@@ -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
@@ -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)
+6 -6
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
@@ -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)
+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))
@@ -612,7 +612,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)
@@ -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)
@@ -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)
@@ -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>")
@@ -181,7 +181,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 +261,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"
@@ -370,7 +370,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()
@@ -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
@@ -530,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
@@ -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()
. = ..()
@@ -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."
@@ -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)
@@ -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
. = ..()
+2 -15
View File
@@ -506,22 +506,9 @@
return
show_inv(usr)
/mob/proc/is_active()
return (0 >= usr.stat)
/mob/proc/is_muzzled()
return 0
/mob/proc/see(message)
if(!is_active())
return 0
to_chat(src, message)
return 1
/mob/proc/show_viewers(message)
for(var/mob/M in viewers())
M.see(message)
/mob/Stat()
..()
@@ -838,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()