Merge remote-tracking branch 'upstream/dev' into BorgModules

Conflicts:
	code/game/objects/items/robot/robot_upgrades.dm
	code/modules/mob/living/silicon/ai/subsystems.dm
	code/modules/mob/living/silicon/robot/robot.dm
	code/modules/mob/living/silicon/robot/robot_upgrades.dm
This commit is contained in:
PsiOmega
2015-04-26 15:46:24 +02:00
654 changed files with 10014 additions and 8915 deletions

View File

@@ -2,4 +2,4 @@
..()
spawn(0)
if(src && !key) //we've transferred to another mob. This ghost should be deleted.
del(src)
qdel(src)

View File

@@ -81,10 +81,10 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images
real_name = name
..()
/mob/dead/observer/Del()
/mob/dead/observer/Destroy()
if (ghostimage)
ghost_darkness_images -= ghostimage
del(ghostimage)
qdel(ghostimage)
ghostimage = null
updateallghostimages()
..()
@@ -598,7 +598,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
for(var/image/I in client.images)
if(I.icon_state == icon)
iconRemoved = 1
del(I)
qdel(I)
if(!iconRemoved)
var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon)

View File

@@ -19,8 +19,8 @@
if(do_gibs) gibs(loc, viruses, dna)
spawn(15)
if(animation) del(animation)
if(src) del(src)
if(animation) qdel(animation)
if(src) qdel(src)
//This is the proc for turning a mob into ash. Mostly a copy of gib code (above).
//Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here.
@@ -43,8 +43,8 @@
dead_mob_list -= src
spawn(15)
if(animation) del(animation)
if(src) del(src)
if(animation) qdel(animation)
if(src) qdel(src)
/mob/proc/death(gibbed,deathmessage="seizes up and falls limp...")

View File

@@ -3,7 +3,7 @@
// The datum containing all the chunks.
/datum/visualnet/camera
// The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Del().
// The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Destroy().
var/list/cameras = list()
var/cameras_unsorted = 1
chunk_type = /datum/chunk/camera

View File

@@ -39,10 +39,11 @@
if(eyeobj)
eyeobj.loc = src.loc
/mob/living/silicon/ai/Del()
/mob/living/silicon/ai/Destroy()
if(eyeobj)
eyeobj.owner = null
del(eyeobj) // No AI, no Eye
qdel(eyeobj) // No AI, no Eye
eyeobj = null
..()
/atom/proc/move_camera_by_click()

View File

@@ -41,7 +41,7 @@
dd_insertObjectList(cameranet.cameras, src)
update_coverage(1)
/obj/machinery/camera/Del()
/obj/machinery/camera/Destroy()
cameranet.cameras -= src
clear_all_networks()
..()

View File

@@ -31,11 +31,11 @@
updateallghostimages()
..()
mob/eye/Del()
mob/eye/Destroy()
if (ghostimage)
ghost_darkness_images -= ghostimage
ghost_sightless_images -= ghostimage
del(ghostimage)
qdel(ghostimage)
ghostimage = null
updateallghostimages()
..()

View File

@@ -23,7 +23,7 @@
..()
cultnet.updateVisibility(src, 0)
/mob/living/Del()
/mob/living/Destroy()
cultnet.updateVisibility(src, 0)
..()

View File

@@ -20,7 +20,7 @@
HOW IT WORKS
It works by first creating a camera network datum. Inside of this camera network are "chunks" (which will be
explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Del().
explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Destroy().
Next the camera network has chunks. These chunks are a 16x16 tile block of turfs and cameras contained inside the chunk.
These turfs are then sorted out based on what the cameras can and cannot see. If none of the cameras can see the turf, inside

View File

@@ -13,7 +13,7 @@
/turf/drain_power()
return -1
/turf/simulated/Del()
/turf/simulated/Destroy()
updateVisibility(src)
..()
@@ -24,7 +24,7 @@
// STRUCTURES
/obj/structure/Del()
/obj/structure/Destroy()
updateVisibility(src)
..()
@@ -34,9 +34,9 @@
// EFFECTS
/obj/effect/Del()
/obj/effect/Destroy()
updateVisibility(src)
..()
return ..()
/obj/effect/New()
..()

View File

@@ -12,7 +12,7 @@
..()
visual_nets += src
/datum/visualnet/Del()
/datum/visualnet/Destroy()
visual_nets -= src
..()

View File

@@ -11,7 +11,7 @@
..()
processing_objects.Add(src)
/obj/item/weapon/holder/Del()
/obj/item/weapon/holder/Destroy()
processing_objects.Remove(src)
..()
@@ -26,7 +26,7 @@
mob_container.forceMove(get_turf(src))
M.reset_view()
del(src)
qdel(src)
/obj/item/weapon/holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
for(var/mob/M in src.contents)

View File

@@ -20,7 +20,7 @@
if(!W.mob_can_equip(src, slot))
if(del_on_fail)
del(W)
qdel(W)
else
if(!disable_warning)
src << "\red You are unable to equip that." //Only print if del_on_fail is false

View File

@@ -246,7 +246,7 @@
B << "To create this node you will have to be on a normal blob tile and far enough away from any other node."
B << "Check your Blob verbs and hit Create Node to build a node."
spawn(10)
del(G_found)
qdel(G_found)

View File

@@ -13,7 +13,7 @@
if(istype(loc,/obj/item/weapon/holder/diona))
var/obj/item/weapon/holder/diona/L = loc
src.loc = L.loc
del(L)
qdel(L)
src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","\red You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.")
return "Diona"

View File

@@ -38,7 +38,7 @@
for(var/datum/language/L in languages)
adult.add_language(L.name)
del(src)
qdel(src)
/mob/living/carbon/alien/proc/update_progression()
if(amount_grown < max_grown)

View File

@@ -60,7 +60,7 @@
living_mob_list += brainmob
user.drop_item()
del(O)
qdel(O)
name = "Man-Machine Interface: [brainmob.real_name]"
icon_state = "mmi_full"
@@ -114,6 +114,15 @@
locked = 1
return
/obj/item/device/mmi/Destroy()
if(isrobot(loc))
var/mob/living/silicon/robot/borg = loc
borg.mmi = null
if(brainmob)
qdel(brainmob)
brainmob = null
..()
/obj/item/device/mmi/radio_enabled
name = "radio-enabled man-machine interface"
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio."

View File

@@ -15,7 +15,7 @@
R.my_atom = src
..()
Del()
Destroy()
if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting.
if(stat!=DEAD) //If not dead.
death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA

View File

@@ -27,6 +27,12 @@
if(brainmob && brainmob.client)
brainmob.client.screen.len = null //clear the hud
/obj/item/organ/brain/Destroy()
if(brainmob)
qdel(brainmob)
brainmob = null
..()
/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H)
name = "\the [H]'s [initial(src.name)]"
brainmob = new(src)

View File

@@ -7,8 +7,8 @@
/mob/living/carbon/brain/gib()
if(istype(container, /obj/item/device/mmi))
del(container)//Gets rid of the MMI if there is one
qdel(container)//Gets rid of the MMI if there is one
if(loc)
if(istype(loc,/obj/item/organ/brain))
del(loc)//Gets rid of the brain item
qdel(loc)//Gets rid of the brain item
..(null,1)

View File

@@ -7,6 +7,13 @@
if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
germ_level++
/mob/living/carbon/Destroy()
for(var/guts in internal_organs)
qdel(guts)
for(var/food in stomach_contents)
qdel(food)
return ..()
/mob/living/carbon/Move(NewLoc, direct)
. = ..()
if(.)

View File

@@ -119,14 +119,14 @@
m_type = 1
if ("flap")
if (!src.restrained())
message = "<B>[src]</B> flaps his wings."
message = "<B>[src]</B> flaps \his wings."
m_type = 2
if(miming)
m_type = 1
if ("aflap")
if (!src.restrained())
message = "<B>[src]</B> flaps his wings ANGRILY!"
message = "<B>[src]</B> flaps \his wings ANGRILY!"
m_type = 2
if(miming)
m_type = 1
@@ -618,4 +618,4 @@
HTML += "<hr />"
HTML +="<a href='?src=\ref[src];flavor_change=done'>\[Done\]</a>"
HTML += "<tt>"
src << browse(HTML, "window=flavor_changes;size=430x300")
src << browse(HTML, "window=flavor_changes;size=430x300")

View File

@@ -47,6 +47,11 @@
dna.real_name = real_name
make_blood()
/mob/living/carbon/human/Destroy()
for(var/organ in organs)
qdel(organ)
return ..()
/mob/living/carbon/human/Stat()
..()
statpanel("Status")
@@ -65,7 +70,7 @@
if (internal)
if (!internal.air_contents)
del(internal)
qdel(internal)
else
stat("Internal Atmosphere Info", internal.name)
stat("Tank Pressure", internal.air_contents.return_pressure())
@@ -818,7 +823,7 @@
for(var/x in all_hairs)
var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x
hairs.Add(H.name) // add hair name to hairs
del(H) // delete the hair after it's all done
qdel(H) // delete the hair after it's all done
var/new_style = input("Please select hair style", "Character Generation",h_style) as null|anything in hairs
@@ -833,7 +838,7 @@
for(var/x in all_fhairs)
var/datum/sprite_accessory/facial_hair/H = new x
fhairs.Add(H.name)
del(H)
qdel(H)
new_style = input("Please select facial style", "Character Generation",f_style) as null|anything in fhairs
@@ -944,7 +949,7 @@
if(H.brainmob.real_name == src.real_name)
if(H.brainmob.mind)
H.brainmob.mind.transfer_to(src)
del(H)
qdel(H)
for (var/datum/disease/virus in viruses)
virus.cure()
@@ -1017,7 +1022,7 @@
.=..()
if(clean_feet && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
feet_blood_color = null
del(feet_blood_DNA)
qdel(feet_blood_DNA)
update_inv_shoes(1)
return 1
@@ -1143,7 +1148,7 @@
if(client && client.screen)
client.screen.len = null
if(hud_used)
del(hud_used)
qdel(hud_used)
hud_used = new /datum/hud(src)
if(species)
@@ -1358,4 +1363,4 @@
/mob/living/carbon/human/drop_from_inventory(var/obj/item/W, var/atom/Target = null)
if(W in organs)
return
..()
..()

View File

@@ -337,12 +337,12 @@
visible_message("<span class='danger'>[user] has broken [src]'s grip on [lgrab.affecting]!</span>")
success = 1
spawn(1)
del(lgrab)
qdel(lgrab)
if(istype(r_hand, /obj/item/weapon/grab))
var/obj/item/weapon/grab/rgrab = r_hand
if(rgrab.affecting)
visible_message("<span class='danger'>[user] has broken [src]'s grip on [rgrab.affecting]!</span>")
success = 1
spawn(1)
del(rgrab)
qdel(rgrab)
return success

View File

@@ -319,7 +319,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
This function restores the subjects blood to max.
*/
/mob/living/carbon/human/proc/restore_blood()
if(!species.flags & NO_BLOOD)
if(!(species.flags & NO_BLOOD))
var/blood_volume = vessel.get_reagent_amount("blood")
vessel.add_reagent("blood",560.0-blood_volume)

View File

@@ -129,7 +129,7 @@
spark_system.attach(src)
spark_system.start()
spawn(10)
del(spark_system)
qdel(spark_system)
//Handles chem traces
/mob/living/carbon/human/proc/handle_trace_chems()

View File

@@ -218,4 +218,41 @@
log_say("PsychicWhisper: [key_name(src)]->[M.key] : [msg]")
M << "\green You hear a strange, alien voice in your head... \italic [msg]"
src << "\green You said: \"[msg]\" to [M]"
return
return
/mob/living/carbon/human/proc/diona_split_nymph()
set name = "Split"
set desc = "Split your humanoid form into its constituent nymphs."
set category = "Abilities"
var/turf/T = get_turf(src)
var/mob/living/carbon/alien/diona/S = new(T)
S.set_dir(dir)
if(mind)
mind.transfer_to(S)
message_admins("\The [src] has split into nymphs; player now controls [key_name_admin(S)]")
log_admin("\The [src] has split into nymphs; player now controls [key_name(S)]")
var/nymphs = 1
for(var/mob/living/carbon/alien/diona/D in src)
nymphs++
D.loc = T
D.set_dir(pick(NORTH, SOUTH, EAST, WEST))
if(nymphs < 5)
for(var/i in nymphs to 4)
var/mob/M = new /mob/living/carbon/alien/diona(T)
M.set_dir(pick(NORTH, SOUTH, EAST, WEST))
for(var/obj/item/W in src)
drop_from_inventory(W)
visible_message("<span class='warning'>\The [src] quivers slightly, then splits apart with a wet slithering noise.</span>")
del(src)

View File

@@ -34,7 +34,7 @@ This saves us from having to call add_fingerprint() any time something is put in
if (equip_to_slot_if_possible(W, slots[slot], del_on_fail = 0))
return slot
if (del_on_fail)
del(W)
qdel(W)
return null
@@ -341,9 +341,9 @@ This saves us from having to call add_fingerprint() any time something is put in
/obj/effect/equip_e/New()
if (!ticker)
del(src)
qdel(src)
spawn(100)
del(src)
qdel(src)
..()
return
@@ -354,22 +354,22 @@ This saves us from having to call add_fingerprint() any time something is put in
switch(place)
if("mask")
if (!( target.wear_mask ))
del(src)
qdel(src)
if("l_hand")
if (!( target.l_hand ))
del(src)
qdel(src)
if("r_hand")
if (!( target.r_hand ))
del(src)
qdel(src)
if("suit")
if (!( target.wear_suit ))
del(src)
qdel(src)
if("uniform")
if (!( target.w_uniform ))
del(src)
qdel(src)
if("back")
if (!( target.back ))
del(src)
qdel(src)
if("syringe")
return
if("pill")
@@ -382,10 +382,10 @@ This saves us from having to call add_fingerprint() any time something is put in
return
if("handcuff")
if (!( target.handcuffed ))
del(src)
qdel(src)
if("id")
if ((!( target.wear_id ) || !( target.w_uniform )))
del(src)
qdel(src)
if("splints")
var/count = 0
for(var/organ in list("l_leg","r_leg","l_arm","r_arm"))
@@ -394,19 +394,19 @@ This saves us from having to call add_fingerprint() any time something is put in
count = 1
break
if(count == 0)
del(src)
qdel(src)
return
if("sensor")
if (! target.w_uniform )
del(src)
qdel(src)
if("internal")
if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && (istype(target.back, /obj/item/weapon/tank) || istype(target.belt, /obj/item/weapon/tank) || istype(target.s_store, /obj/item/weapon/tank)) && !( target.internal )) ) && !( target.internal )))
del(src)
qdel(src)
var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel", "sensor", "internal", "tie")
if ((item && !( L.Find(place) )))
if(isrobot(source) && place != "handcuff")
del(src)
qdel(src)
for(var/mob/O in viewers(target, null))
O.show_message("\red <B>[source] is trying to put \a [item] on [target]</B>", 1)
else
@@ -508,7 +508,7 @@ This saves us from having to call add_fingerprint() any time something is put in
message = "\red <B>[source] is trying to empty [target]'s pockets.</B>"
if("CPR")
if (!target.cpr_time)
del(src)
qdel(src)
target.cpr_time = 0
message = "\red <B>[source] is trying perform CPR on [target]!</B>"
if("internal")
@@ -607,13 +607,13 @@ It can still be worn/put on as normal.
strip_item = target.shoes
if("l_hand")
if (istype(target, /obj/item/clothing/suit/straight_jacket))
del(src)
qdel(src)
slot_to_process = slot_l_hand
if (target.l_hand)
strip_item = target.l_hand
if("r_hand")
if (istype(target, /obj/item/clothing/suit/straight_jacket))
del(src)
qdel(src)
slot_to_process = slot_r_hand
if (target.r_hand)
strip_item = target.r_hand
@@ -700,11 +700,11 @@ It can still be worn/put on as normal.
S.add_fingerprint(source)
if (!( istype(S, /obj/item/weapon/dnainjector) ))
S.inuse = 0
del(src)
qdel(src)
S.inject(target, source)
if (S.s_time >= world.time + 30)
S.inuse = 0
del(src)
qdel(src)
S.s_time = world.time
for(var/mob/O in viewers(source, null))
O.show_message("\red [source] injects [target] with the DNA Injector!", 1)
@@ -763,4 +763,4 @@ It can still be worn/put on as normal.
if(source && target)
if(source.machine == target)
target.show_inv(source)
del(src)
qdel(src)

View File

@@ -2,7 +2,7 @@
//NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick!
#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it.
#define HUMAN_CRIT_MAX_OXYLOSS ( (tickerProcess.getLastTickerTimeDuration()) / 6) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 50HP to get through, so (1/6)*last_tick_duration per second. Breaths however only happen every 4 ticks.
#define HUMAN_CRIT_MAX_OXYLOSS ( 2.0 / 6) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 50HP to get through, so (1/6)*last_tick_duration per second. Breaths however only happen every 4 ticks. last_tick_duration = ~2.0 on average
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point
@@ -974,7 +974,7 @@
else
for(var/atom/a in hallucinations)
del a
qdel(a)
if(halloss > 100)
src << "<span class='notice'>You're in too much pain to keep going...</span>"
@@ -1404,7 +1404,7 @@
if(M.stat == 2)
M.death(1)
stomach_contents.Remove(M)
del(M)
qdel(M)
continue
if(air_master.current_cycle%3==1)
if(!(M.status_flags & GODMODE))

View File

@@ -23,4 +23,4 @@
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
spawn(1)
new /obj/effect/decal/cleanable/ash(H.loc)
del(H)
qdel(H)

View File

@@ -178,7 +178,7 @@
for(var/obj/item/organ/organ in H.contents)
if((organ in H.organs) || (organ in H.internal_organs))
del(organ)
qdel(organ)
if(H.organs) H.organs.Cut()
if(H.internal_organs) H.internal_organs.Cut()

View File

@@ -168,6 +168,10 @@
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
)
inherent_verbs = list(
/mob/living/carbon/human/proc/diona_split_nymph
)
warning_low_pressure = 50
hazard_low_pressure = -1
@@ -209,7 +213,7 @@
if(D.client)
D.loc = H.loc
else
del(D)
qdel(D)
H.visible_message("\red[H] splits apart with a wet slithering noise!")

View File

@@ -16,9 +16,9 @@
spawn(0)
AddInfectionImages(affected_mob)
else
del(src)
qdel(src)
/obj/item/alien_embryo/Del()
/obj/item/alien_embryo/Destroy()
if(affected_mob)
affected_mob.status_flags &= ~(XENO_HOST)
spawn(0)
@@ -98,7 +98,7 @@
new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention
if(gib_on_success)
affected_mob.gib()
del(src)
qdel(src)
/*----------------------------------------
Proc: RefreshInfectionImage()
@@ -114,7 +114,7 @@ Des: Removes all infection images from aliens and places an infection image on a
if(alien.client)
for(var/image/I in alien.client.images)
if(dd_hasprefix_case(I.icon_state, "infected"))
del(I)
qdel(I)
for(var/mob/living/L in mob_list)
if(iscorgi(L) || iscarbon(L))
if(L.status_flags & XENO_HOST)
@@ -156,4 +156,4 @@ Des: Removes the alien infection image from all aliens in the world located in p
for(var/image/I in alien.client.images)
if(I.loc == C)
if(dd_hasprefix_case(I.icon_state, "infected"))
del(I)
qdel(I)

View File

@@ -41,7 +41,7 @@ var/const/MAX_ACTIVE_TIME = 400
if(config.aliens_allowed)
..()
else
del(src)
qdel(src)
/obj/item/clothing/mask/facehugger/examine(mob/user)
..(user)

View File

@@ -45,7 +45,7 @@ Des: Removes all infected images from the alien.
if (client)
for(var/image/I in client.images)
if(dd_hasprefix_case(I.icon_state, "infected"))
del(I)
qdel(I)
return
/* TODO: Convert this over.

View File

@@ -239,7 +239,7 @@ var/global/list/damage_icon_parts = list()
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
//Create a new, blank icon for our mob to use.
if(stand_icon)
del(stand_icon)
qdel(stand_icon)
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin]"
var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"]
@@ -412,7 +412,7 @@ var/global/list/damage_icon_parts = list()
if (targeted_by && target_locked)
overlays_standing[TARGETED_LAYER] = target_locked
else if (!targeted_by && target_locked)
del(target_locked)
qdel(target_locked)
if (!targeted_by)
overlays_standing[TARGETED_LAYER] = null
if(update_icons) update_icons()

View File

@@ -143,7 +143,7 @@
//now mobs
var/speech_bubble_test = say_test(message)
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
spawn(30) del(speech_bubble)
spawn(30) qdel(speech_bubble)
for(var/mob/M in listening)
M << speech_bubble

View File

@@ -23,7 +23,7 @@
user <<"You apply the enhancer. It now has triple the amount of uses."
Uses = 3
enhanced = 1
del(O)
qdel(O)
/obj/item/slime_extract/New()
..()
@@ -145,14 +145,14 @@
pet.icon_dead = "[M.colour] baby slime dead"
pet.colour = "[M.colour]"
user <<"You feed the slime the potion, removing it's powers and calming it."
del(M)
qdel(M)
var/newname = sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text, MAX_NAME_LEN)
if (!newname)
newname = "pet slime"
pet.name = newname
pet.real_name = newname
del(src)
qdel(src)
/obj/item/weapon/slimepotion2
name = "advanced docility potion"
@@ -176,14 +176,14 @@
pet.icon_dead = "[M.colour] baby slime dead"
pet.colour = "[M.colour]"
user <<"You feed the slime the potion, removing it's powers and calming it."
del(M)
qdel(M)
var/newname = sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text, MAX_NAME_LEN)
if (!newname)
newname = "pet slime"
pet.name = newname
pet.real_name = newname
del(src)
qdel(src)
/obj/item/weapon/slimesteroid
@@ -208,7 +208,7 @@
user <<"You feed the slime the steroid. It now has triple the amount of extract."
M.cores = 3
del(src)
qdel(src)
/obj/item/weapon/slimesteroid2
name = "extract enhancer"
@@ -227,7 +227,7 @@
user <<"You apply the enhancer. It now has triple the amount of uses."
target.Uses = 3
target.enahnced = 1
del(src)*/
qdel(src)*/
/obj/effect/golemrune
anchored = 1
@@ -268,7 +268,7 @@
G.set_species("Golem")
G.key = ghost.key
G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost."
del (src)
qdel(src)
proc/announce_to_ghosts()
@@ -350,7 +350,7 @@
spawn(rand(50,100))
src.visible_message("<span class='warning'> The [name] bursts open!</span>")
new/mob/living/carbon/slime(T)
del(src)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/process()

View File

@@ -178,7 +178,7 @@
var/f_loss = null
switch (severity)
if (1.0)
del(src)
qdel(src)
return
if (2.0)

View File

@@ -161,7 +161,7 @@
src.mind.transfer_to(new_slime)
else
new_slime.key = src.key
del(src)
qdel(src)
else
src << "<span class='notice'>I am not ready to reproduce yet...</span>"
else

View File

@@ -512,7 +512,7 @@ default behaviour is:
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] has been pulled from []'s grip by []", G.affecting, G.assailant, src), 1)
//G = null
del(G)
qdel(G)
else
ok = 0
if (locate(/obj/item/weapon/grab, M.grabbed_by.len))
@@ -629,22 +629,22 @@ default behaviour is:
var/resisting = 0
for(var/obj/O in L.requests)
L.requests.Remove(O)
del(O)
qdel(O)
resisting++
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
resisting++
switch(G.state)
if(GRAB_PASSIVE)
del(G)
qdel(G)
if(GRAB_AGGRESSIVE)
if(prob(60)) //same chance of breaking the grab as disarm
L.visible_message("<span class='warning'>[L] has broken free of [G.assailant]'s grip!</span>")
del(G)
qdel(G)
if(GRAB_NECK)
//If the you move when grabbing someone then it's easier for them to break free. Same if the affected mob is immune to stun.
if (((world.time - G.assailant.l_move_time < 30 || !L.stunned) && prob(15)) || prob(3))
L.visible_message("<span class='warning'>[L] has broken free of [G.assailant]'s headlock!</span>")
del(G)
qdel(G)
if(resisting)
L.visible_message("<span class='danger'>[L] resists!</span>")
@@ -778,7 +778,7 @@ default behaviour is:
O.show_message(text("\red <B>[] manages to break the handcuffs!</B>", CM), 1)
CM << "\red You successfully break your handcuffs."
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
del(CM.handcuffed)
qdel(CM.handcuffed)
CM.handcuffed = null
if(buckled && buckled.buckle_require_restraints)
buckled.unbuckle_mob()
@@ -826,7 +826,7 @@ default behaviour is:
O.show_message(text("\red <B>[] manages to break the legcuffs!</B>", CM), 1)
CM << "\red You successfully break your legcuffs."
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
del(CM.legcuffed)
qdel(CM.legcuffed)
CM.legcuffed = null
CM.update_inv_legcuffed()
else

View File

@@ -52,6 +52,7 @@
if(istype(get_active_hand(),/obj/item/device/assembly/signaler))
var/obj/item/device/assembly/signaler/signaler = get_active_hand()
if(signaler.deadman && prob(80))
log_and_message_admins("has triggered a signaler deadman's switch")
src.visible_message("\red [src] triggers their deadman's switch!")
signaler.signal()
@@ -59,7 +60,7 @@
if(P.taser_effect)
stun_effect_act(0, P.agony, def_zone, P)
src <<"\red You have been hit by [P]!"
del P
qdel(P)
return
//Armor

View File

@@ -263,7 +263,7 @@ proc/get_radio_key_from_channel(var/channel)
var/speech_bubble_test = say_test(message)
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
spawn(30) del(speech_bubble)
spawn(30) qdel(speech_bubble)
for(var/mob/M in listening)
M << speech_bubble

View File

@@ -143,7 +143,7 @@ var/list/ai_verbs_default = list(
if(!safety)//Only used by AIize() to successfully spawn an AI.
if (!B)//If there is no player/brain inside.
empty_playable_ai_cores += new/obj/structure/AIcore/deactivated(loc)//New empty terminal.
del(src)//Delete AI.
qdel(src)//Delete AI.
return
else
if (B.brainmob.mind)
@@ -193,9 +193,9 @@ var/list/ai_verbs_default = list(
job = "AI"
/mob/living/silicon/ai/Del()
/mob/living/silicon/ai/Destroy()
ai_list -= src
del(eyeobj)
qdel(eyeobj)
..()
/mob/living/silicon/ai/pointed(atom/A as mob|obj|turf in view())
@@ -241,7 +241,7 @@ var/list/ai_verbs_default = list(
/obj/machinery/ai_powersupply/New(var/mob/living/silicon/ai/ai=null)
powered_ai = ai
if(isnull(powered_ai))
Del()
qdel(src)
loc = powered_ai.loc
use_power(1) // Just incase we need to wake up the power system.
@@ -250,7 +250,7 @@ var/list/ai_verbs_default = list(
/obj/machinery/ai_powersupply/process()
if(!powered_ai || powered_ai.stat & DEAD)
Del()
qdel(src)
if(!powered_ai.anchored)
loc = powered_ai.loc
use_power = 0
@@ -576,7 +576,7 @@ var/list/ai_verbs_default = list(
input = input("Select a crew member:") as null|anything in personnel_list
var/icon/character_icon = personnel_list[input]
if(character_icon)
del(holo_icon)//Clear old icon so we're not storing it in memory.
qdel(holo_icon)//Clear old icon so we're not storing it in memory.
holo_icon = getHologramIcon(icon(character_icon))
else
alert("No suitable records found. Aborting.")
@@ -589,7 +589,7 @@ var/list/ai_verbs_default = list(
)
input = input("Please select a hologram:") as null|anything in icon_list
if(input)
del(holo_icon)
qdel(holo_icon)
switch(input)
if("default")
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1"))

View File

@@ -34,10 +34,10 @@ var/global/list/empty_playable_ai_cores = list()
job_master.FreeRole(job)
if(mind.objectives.len)
del(mind.objectives)
qdel(mind.objectives)
mind.special_role = null
clear_antag_roles(mind)
ghostize(0)
del(src)
qdel(src)

View File

@@ -3,11 +3,11 @@
card.removePersonality()
if(gibbed)
src.loc = get_turf(card)
del(card)
qdel(card)
else
close_up()
if(mind)
del(mind)
qdel(mind)
..(gibbed)
ghostize()
del(src)
qdel(src)

View File

@@ -8,7 +8,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
M.show_message("\red The data cable rapidly retracts back into its spool.", 3, "\red You hear a click and the sound of wire spooling rapidly.", 2)
del(src.cable)
qdel(src.cable)
regular_hud_updates()

View File

@@ -29,7 +29,7 @@
var/obj/item/robot_parts/robot_component/comp = wrapped
brokenstate = comp.icon_state_broken
if(wrapped)
del wrapped
qdel(wrapped)
wrapped = new/obj/item/broken_device

View File

@@ -1,7 +1,7 @@
/mob/living/silicon/robot/dust()
//Delete the MMI first so that it won't go popping out.
if(mmi)
del(mmi)
qdel(mmi)
..()
/mob/living/silicon/robot/death(gibbed)

View File

@@ -256,7 +256,7 @@
if(istype(M,/mob/living/simple_animal/lizard) || istype(M,/mob/living/simple_animal/mouse))
src.loc.visible_message("<span class='danger'>[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise.</span>","<span class='danger'>It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.</span>")
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
del(M)
qdel(M)
if(wood)
wood.add_charge(2000)
if(plastic)
@@ -279,7 +279,7 @@
if(!M || !D) return
D << "<span class='danger'>You carefully and thoroughly decompile [M], storing as much of its resources as you can within yourself.</span>"
del(M)
qdel(M)
new/obj/effect/decal/cleanable/blood/oil(get_turf(src))
if(metal)
@@ -347,7 +347,7 @@
else
continue
del(W)
qdel(W)
grabbed_something = 1
if(grabbed_something)

View File

@@ -226,12 +226,19 @@
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
//Improved /N
/mob/living/silicon/robot/Del()
if(mmi)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside.
/mob/living/silicon/robot/Destroy()
if(mmi && mind)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside.
var/turf/T = get_turf(loc)//To hopefully prevent run time errors.
if(T) mmi.loc = T
if(mind) mind.transfer_to(mmi.brainmob)
if(mmi.brainmob)
mind.transfer_to(mmi.brainmob)
else
src << "<span class='danger'>Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.</span>"
ghostize()
//ERROR("A borg has been destroyed, but its MMI lacked a brainmob, so the mind could not be transferred. Player: [ckey].")
mmi = null
if(connected_ai)
connected_ai.connected_robots -= src
..()
/mob/living/silicon/robot/proc/set_module_sprites(var/list/new_sprites)
@@ -547,7 +554,7 @@
C.r_arm = new/obj/item/robot_parts/r_arm(C)
C.updateicon()
new/obj/item/robot_parts/chest(loc)
src.Del()
qdel(src)
else
// Okay we're not removing the cell or an MMI, but maybe something else?
var/list/removable_components = list()
@@ -811,7 +818,7 @@
//Call when target overlay should be added/removed
/mob/living/silicon/robot/update_targeted()
if(!targeted_by && target_locked)
del(target_locked)
qdel(target_locked)
updateicon()
if (targeted_by && target_locked)
overlays += target_locked
@@ -945,7 +952,7 @@
for(var/A in tile)
if(istype(A, /obj/effect))
if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay))
del(A)
qdel(A)
else if(istype(A, /obj/item))
var/obj/item/cleaned_item = A
cleaned_item.clean_blood()

View File

@@ -43,11 +43,11 @@
S.use(1)
loaded_item = S
else
del(S)
qdel(S)
desc = initial(desc)
icon_state = initial(icon_state)
else
del(I)
qdel(I)
desc = initial(desc)
icon_state = initial(icon_state)
else

View File

@@ -56,6 +56,17 @@ var/global/list/robot_modules = list(
remove_subsystems(R)
remove_status_flags(R)
/obj/item/weapon/robot_module/Destroy()
qdel(modules)
qdel(synths)
qdel(emag)
qdel(jetpack)
modules = null
synths = null
emag = null
jetpack = null
..()
/obj/item/weapon/robot_module/emp_act(severity)
if(modules)
for(var/obj/O in modules)

View File

@@ -31,7 +31,7 @@
add_language("Galactic Common")
init_subsystems()
/mob/living/silicon/Del()
/mob/living/silicon/Destroy()
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
AH.unregister(src)
..()

View File

@@ -18,7 +18,7 @@
/mob/living/silicon/ai
alarm_monitor_type = /obj/nano_module/alarm_monitor/ai
list/silicon_subsystems = list(
silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_atmos_control,
/mob/living/silicon/proc/subsystem_crew_monitor,

View File

@@ -20,7 +20,7 @@
..()
parent = new_parent
/mob/living/simple_animal/bee/Del()
/mob/living/simple_animal/bee/Destroy()
if(parent)
parent.owned_bee_swarms.Remove(src)
..()
@@ -107,7 +107,7 @@
if(feral > 0)
src.strength += B.strength
del(B)
qdel(B)
src.icon_state = "bees[src.strength]"
if(strength > 5)
icon_state = "bees_swarm"
@@ -120,7 +120,7 @@
B.icon_state = "bees[B.strength]"
if(src.strength <= 0)
del(src)
qdel(src)
return
src.icon_state = "bees[B.strength]"
var/turf/simulated/floor/T = get_turf(get_step(src, pick(1,2,4,8)))
@@ -169,7 +169,7 @@
if(!parent && prob(10))
strength -= 1
if(strength <= 0)
del(src)
qdel(src)
else if(strength <= 5)
icon_state = "bees[strength]"

View File

@@ -143,7 +143,7 @@
if(!host.lastKnownIP)
host.lastKnownIP = b2h_ip
del(host_brain)
qdel(host_brain)
/mob/living/simple_animal/borer/proc/leave_host()

View File

@@ -304,7 +304,7 @@
host.computer_id = null
host.lastKnownIP = null
del(host_brain)
qdel(host_brain)
host_brain = new(src)
host_brain.ckey = host.ckey

View File

@@ -52,7 +52,7 @@
new /obj/item/weapon/ectoplasm (src.loc)
..(null,"collapses in a shattered heap.")
ghostize()
del src
qdel(src)
/mob/living/simple_animal/construct/attack_generic(var/mob/user)
if(istype(user, /mob/living/simple_animal/construct/builder))

View File

@@ -131,7 +131,7 @@
animation.icon = 'icons/mob/mob.dmi'
animation.master = T
flick("dust-h", animation)
del(animation)
qdel(animation)
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc )
S.loc = C //put shade in stone
S.status_flags |= GODMODE //So they won't die inside the stone somehow
@@ -152,7 +152,7 @@
U << "\blue <b>Capture successful!</b>: \black [T.real_name]'s soul has been ripped from their body and stored within the soul stone."
U << "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls."
C.imprinted = "[S.name]"
del T
qdel(T)
if("SHADE")
var/mob/living/simple_animal/shade/T = target
var/obj/item/device/soulstone/C = src
@@ -184,33 +184,33 @@
Z.key = A.key
if(iscultist(U))
cult.add_antagonist(Z.mind)
del(T)
qdel(T)
Z << "<B>You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
Z.cancel_camera()
del(C)
qdel(C)
if("Wraith")
var/mob/living/simple_animal/construct/wraith/Z = new /mob/living/simple_animal/construct/wraith (get_turf(T.loc))
Z.key = A.key
if(iscultist(U))
cult.add_antagonist(Z.mind)
del(T)
qdel(T)
Z << "<B>You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
Z.cancel_camera()
del(C)
qdel(C)
if("Artificer")
var/mob/living/simple_animal/construct/builder/Z = new /mob/living/simple_animal/construct/builder (get_turf(T.loc))
Z.key = A.key
if(iscultist(U))
cult.add_antagonist(Z.mind)
del(T)
qdel(T)
Z << "<B>You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
Z.cancel_camera()
del(C)
qdel(C)
else
U << "\red <b>Creation failed!</b>: \black The soul stone is empty! Go kill someone!"
return

View File

@@ -78,7 +78,7 @@
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
del(src)
qdel(src)

View File

@@ -59,7 +59,7 @@
health = min(maxHealth, health + MED.heal_brute)
MED.amount -= 1
if(MED.amount <= 0)
del(MED)
qdel(MED)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\blue [user] applies the [MED] on [src]")

View File

@@ -177,7 +177,7 @@
amount_grown += rand(1,2)
if(amount_grown >= 100)
new /mob/living/simple_animal/chicken(src.loc)
del(src)
qdel(src)
var/const/MAX_CHICKENS = 50
var/global/chicken_count = 0
@@ -228,7 +228,7 @@ var/global/chicken_count = 0
if(!stat && eggsleft < 8)
user.visible_message("\blue [user] feeds [O] to [name]! It clucks happily.","\blue You feed [O] to [name]! It clucks happily.")
user.drop_item()
del(O)
qdel(O)
eggsleft += rand(1, 4)
else
user << "\blue [name] doesn't seem hungry!"
@@ -258,6 +258,6 @@ var/global/chicken_count = 0
visible_message("[src] hatches with a quiet cracking sound.")
new /mob/living/simple_animal/chick(get_turf(src))
processing_objects.Remove(src)
del(src)
qdel(src)
else
processing_objects.Remove(src)

View File

@@ -45,4 +45,4 @@
S2.icon_living = "[src.colour] baby slime"
S2.icon_dead = "[src.colour] baby slime dead"
S2.colour = "[src.colour]"
del(src)
qdel(src)

View File

@@ -185,7 +185,7 @@
src.name = "Spider-bot"
update_icon()
/mob/living/simple_animal/spiderbot/Del()
/mob/living/simple_animal/spiderbot/Destroy()
eject_brain()
..()
@@ -210,7 +210,7 @@
held_item = null
gibs(loc, viruses, null, null, /obj/effect/gibspawner/robot) //TODO: use gib() or refactor spiderbots into synthetics.
src.Del()
qdel(src)
return
//Cannibalized from the parrot mob. ~Zuhayr

View File

@@ -51,7 +51,7 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
del src
qdel(src)
return
/mob/living/simple_animal/hostile/hivebot/tele//this still needs work
@@ -95,7 +95,7 @@
if("rapid")
new /mob/living/simple_animal/hostile/hivebot/rapid(get_turf(src))
spawn(100)
del(src)
qdel(src)
return

View File

@@ -188,7 +188,7 @@
if(!A) return
if (!istype(target, /turf))
del(A)
qdel(A)
return
A.current = target
A.starting = get_turf(src)

View File

@@ -43,7 +43,7 @@
/mob/living/simple_animal/hostile/mimic/death()
..()
del(src)
qdel(src)
//
// Crate Mimic

View File

@@ -53,5 +53,5 @@
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
del src
qdel(src)
return

View File

@@ -159,9 +159,9 @@
/mob/living/simple_animal/hostile/retaliate/malf_drone/death()
..(null,"suddenly breaks apart.")
del(src)
qdel(src)
/mob/living/simple_animal/hostile/retaliate/malf_drone/Del()
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy()
//some random debris left behind
if(has_loot)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread

View File

@@ -51,5 +51,5 @@
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
del src
qdel(src)
return

View File

@@ -43,7 +43,7 @@
new weapon1 (src.loc)
if(weapon2)
new weapon2 (src.loc)
del src
qdel(src)
return
///////////////Sword and shield////////////
@@ -159,4 +159,4 @@
/mob/living/simple_animal/hostile/viscerator/death()
..(null,"is smashed into pieces!")
del src
qdel(src)

View File

@@ -53,4 +53,4 @@
/mob/living/simple_animal/hostile/tree/death()
..(null,"is hacked into pieces!")
new /obj/item/stack/sheet/wood(loc)
del(src)
qdel(src)

View File

@@ -47,5 +47,5 @@
if((M.client && !( M.blinded )))
M.show_message("\red [src] lets out a contented sigh as their form unwinds. ")
ghostize()
del src
qdel(src)
return

View File

@@ -274,7 +274,7 @@
adjustBruteLoss(-MED.heal_brute)
MED.amount -= 1
if(MED.amount <= 0)
del(MED)
qdel(MED)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("<span class='notice>[user] applies the [MED] on [src].</span>")
@@ -361,7 +361,7 @@
//Call when target overlay should be added/removed
/mob/living/simple_animal/update_targeted()
if(!targeted_by && target_locked)
del(target_locked)
qdel(target_locked)
overlays = null
if (targeted_by && target_locked)
overlays += target_locked
@@ -392,7 +392,7 @@
if(small)
user.visible_message("<span class='danger'>[user] chops up \the [src]!</span>")
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
del(src)
qdel(src)
else
user.visible_message("<span class='danger'>[user] butchers \the [src] messily!</span>")
gib()

View File

@@ -98,7 +98,7 @@
return
Del() //if a chunk a destroyed, make a new worm out of the split halves
Destroy() //if a chunk a destroyed, make a new worm out of the split halves
if(previous)
previous.Detach()
..()
@@ -170,7 +170,7 @@
if(die)
newHead.death()
del(src)
qdel(src)
proc/ProcessStomach()
for(var/atom/movable/stomachContent in contents)
@@ -179,16 +179,16 @@
if(!istype(stomachContent,/obj/item/stack/sheet/mineral/phoron))
var/obj/item/stack/oldStack = stomachContent
new /obj/item/stack/sheet/mineral/phoron(src, oldStack.get_amount())
del(oldStack)
qdel(oldStack)
continue
else if(istype(stomachContent,/obj/item)) //converts to plasma, keeping the w_class
var/obj/item/oldItem = stomachContent
new /obj/item/stack/sheet/mineral/phoron(src, oldItem.w_class)
del(oldItem)
qdel(oldItem)
continue
else
new /obj/item/stack/sheet/mineral/phoron(src, flatPlasmaValue) //just flat amount
del(stomachContent)
qdel(stomachContent)
continue
if(previous)

View File

@@ -31,7 +31,7 @@
client.images = null //remove the images such as AIs being unable to see runes
client.screen = null //remove hud items just in case
if(hud_used) del(hud_used) //remove the hud objects
if(hud_used) qdel(hud_used) //remove the hud objects
hud_used = new /datum/hud(src)
next_move = 1

View File

@@ -1,7 +1,12 @@
/mob/Del()//This makes sure that mobs with clients/keys are not just deleted from the game.
/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game.
mob_list -= src
dead_mob_list -= src
living_mob_list -= src
qdel(hud_used)
if(mind && mind.current == src)
spellremove(src)
for(var/infection in viruses)
qdel(infection)
ghostize()
..()
@@ -179,7 +184,7 @@
P.invisibility = invisibility
spawn (20)
if(P)
del(P) // qdel
qdel(P) // qdel
face_atom(A)
return 1
@@ -213,7 +218,7 @@
var/list/temp = list( )
temp += L.container
//L = null
del(L)
qdel(L)
return temp
else
return L.container
@@ -304,7 +309,7 @@
if(lentext(msg) <= 40)
return "\blue [msg]"
else
return "\blue [copytext(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
return "\blue [copytext_preserve_html(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
/*
/mob/verb/help()
@@ -367,7 +372,7 @@
var/mob/new_player/M = new /mob/new_player()
if(!client)
log_game("[usr.key] AM failed due to disconnect.")
del(M)
qdel(M)
return
M.key = key
@@ -433,7 +438,7 @@
namecounts[name] = 1
creatures[name] = O
if(istype(O, /obj/machinery/singularity))
if(istype(O, /obj/singularity))
var/name = "Singularity"
if (names.Find(name))
namecounts[name]++
@@ -715,63 +720,19 @@ note dizziness decrements automatically in the mob's Life() proc.
//reset the pixel offsets to zero
is_floating = 0
/proc/getStatName(var/datum/controller/process/process)
return uppertext(copytext(process.name, 1, 4))
/mob/Stat()
..()
if(client && client.holder)
if(statpanel("Status"))
stat(null,"Location:\t([x], [y], [z])")
stat(null,"CPU:\t[world.cpu]")
stat(null,"Instances:\t[world.contents.len]")
statpanel("Status","Location:","([x], [y], [z])")
statpanel("Status","CPU:","[world.cpu]")
statpanel("Status","Instances:","[world.contents.len]")
if(statpanel("Status") && processScheduler && processScheduler.getIsRunning())
var/datum/controller/process/process
process = processScheduler.getProcess("air")
stat(null, "[getStatName(process)]\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("alarm")
var/list/alarms = alarm_manager.active_alarms()
stat(null, "[getStatName(process)]([alarms.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("disease")
stat(null, "[getStatName(process)]([active_diseases.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("garbage")
stat(null, "[getStatName(process)]([garbage_collector.destroyed.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("machinery")
stat(null, "[getStatName(process)]([machines.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("mob")
stat(null, "[getStatName(process)]([mob_list.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("nanoui")
stat(null, "[getStatName(process)]([nanomanager.processing_uis.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("lighting")
stat(null, "[getStatName(process)]\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("obj")
stat(null, "[getStatName(process)]([processing_objects.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("pipenet")
stat(null, "[getStatName(process)]([pipe_networks.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("powernet")
stat(null, "[getStatName(process)]([powernets.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("sun")
stat(null, "[getStatName(process)]\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
process = processScheduler.getProcess("ticker")
stat(null, "[getStatName(process)]\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
for(var/datum/controller/process/P in processScheduler.processes)
statpanel("Status",P.getStatName(), P.getTickTime())
else
stat(null, "processScheduler is not running.")
statpanel("Status","processScheduler is not running.")
if(listed_turf && client)
if(!TurfAdjacent(listed_turf))
@@ -779,6 +740,8 @@ note dizziness decrements automatically in the mob's Life() proc.
else
statpanel(listed_turf.name, null, listed_turf)
for(var/atom/A in listed_turf)
if(!A.mouse_opacity)
continue
if(A.invisibility > see_invisible)
continue
if(is_type_in_list(A, shouldnt_see))

View File

@@ -25,7 +25,7 @@
affecting = victim
if(affecting.anchored)
del(src)
qdel(src)
return
affecting.grabbed_by += src
@@ -35,9 +35,16 @@
hud.name = "reinforce grab"
hud.master = src
/obj/item/weapon/grab/Del()
/obj/item/weapon/grab/Destroy()
//make sure the grabbed_by list doesn't fill up with nulls
if(affecting) affecting.grabbed_by -= src
if(affecting)
affecting.grabbed_by -= src
affecting = null
if(assailant)
if(assailant.client)
assailant.client.screen -= hud
assailant = null
qdel(hud)
..()
//Used by throw code to hand over the mob, instead of throwing the grab. The grab is then deleted by the throw code.
@@ -118,7 +125,7 @@
if(world.time < (last_upgrade + UPGRADE_COOLDOWN))
return
if(!assailant.canmove || assailant.lying)
del(src)
qdel(src)
return
last_upgrade = world.time
@@ -152,10 +159,10 @@
if(state == GRAB_KILL)
return
if(!affecting)
del(src)
qdel(src)
return
if(!assailant.canmove || assailant.lying)
del(src)
qdel(src)
return
state = GRAB_KILL
assailant.visible_message("<span class='danger'>[assailant] has tightened \his grip on [affecting]'s neck!</span>")
@@ -174,12 +181,12 @@
//This is used to make sure the victim hasn't managed to yackety sax away before using the grab.
/obj/item/weapon/grab/proc/confirm()
if(!assailant || !affecting)
del(src)
qdel(src)
return 0
if(affecting)
if(!isturf(assailant.loc) || ( !isturf(affecting.loc) || assailant.loc != affecting.loc && get_dist(assailant, affecting) > 1) )
del(src)
qdel(src)
return 0
return 1
@@ -216,12 +223,12 @@
user.visible_message("<span class='danger'>[user] devours [affecting]!</span>")
affecting.loc = user
attacker.stomach_contents.Add(affecting)
del(src)
qdel(src)
/obj/item/weapon/grab/dropped()
del(src)
qdel(src)
/obj/item/weapon/grab/Del()
del(hud)
/obj/item/weapon/grab/Destroy()
qdel(hud)
..()

View File

@@ -615,3 +615,7 @@ proc/is_blind(A)
eyeobj.setLoc(C)
return 1
// Returns true if the mob has a client which has been active in the last given X minutes.
/mob/proc/is_client_active(var/active = 1)
return client && client.inactivity < active MINUTES

View File

@@ -188,7 +188,7 @@
if(S.victim == mob)
return
if(mob.stat==2)
if(mob.stat==DEAD && isliving(mob))
mob.ghostize()
return

View File

@@ -1,58 +1,58 @@
//This proc is the most basic of the procs. All it does is make a new mob on the same tile and transfer over a few variables.
//Returns the new mob
//Note that this proc does NOT do MMI related stuff!
/mob/proc/change_mob_type(var/new_type = null, var/turf/location = null, var/new_name = null as text, var/delete_old_mob = 0 as num, var/subspecies)
if(istype(src,/mob/new_player))
usr << "\red cannot convert players who have not entered yet."
return
if(!new_type)
new_type = input("Mob type path:", "Mob type") as text|null
if(istext(new_type))
new_type = text2path(new_type)
if( !ispath(new_type) )
usr << "Invalid type path (new_type = [new_type]) in change_mob_type(). Contact a coder."
return
if( new_type == /mob/new_player )
usr << "\red cannot convert into a new_player mob type."
return
var/mob/M
if(isturf(location))
M = new new_type( location )
else
M = new new_type( src.loc )
if(!M || !ismob(M))
usr << "Type path is not a mob (new_type = [new_type]) in change_mob_type(). Contact a coder."
del(M)
return
if( istext(new_name) )
M.name = new_name
M.real_name = new_name
else
M.name = src.name
M.real_name = src.real_name
if(src.dna)
M.dna = src.dna.Clone()
if(mind)
mind.transfer_to(M)
else
M.key = key
if(subspecies && istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.set_species(subspecies)
if(delete_old_mob)
spawn(1)
del(src)
return M
//This proc is the most basic of the procs. All it does is make a new mob on the same tile and transfer over a few variables.
//Returns the new mob
//Note that this proc does NOT do MMI related stuff!
/mob/proc/change_mob_type(var/new_type = null, var/turf/location = null, var/new_name = null as text, var/delete_old_mob = 0 as num, var/subspecies)
if(istype(src,/mob/new_player))
usr << "\red cannot convert players who have not entered yet."
return
if(!new_type)
new_type = input("Mob type path:", "Mob type") as text|null
if(istext(new_type))
new_type = text2path(new_type)
if( !ispath(new_type) )
usr << "Invalid type path (new_type = [new_type]) in change_mob_type(). Contact a coder."
return
if( new_type == /mob/new_player )
usr << "\red cannot convert into a new_player mob type."
return
var/mob/M
if(isturf(location))
M = new new_type( location )
else
M = new new_type( src.loc )
if(!M || !ismob(M))
usr << "Type path is not a mob (new_type = [new_type]) in change_mob_type(). Contact a coder."
qdel(M)
return
if( istext(new_name) )
M.name = new_name
M.real_name = new_name
else
M.name = src.name
M.real_name = src.real_name
if(src.dna)
M.dna = src.dna.Clone()
if(mind)
mind.transfer_to(M)
else
M.key = key
if(subspecies && istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.set_species(subspecies)
if(delete_old_mob)
spawn(1)
qdel(src)
return M

View File

@@ -3,5 +3,5 @@
..()
if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to.
key = null//We null their key before deleting the mob, so they are properly kicked out.
del(src)
qdel(src)
return

View File

@@ -135,7 +135,7 @@
if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
observer.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
observer.key = key
del(src)
qdel(src)
return 1
@@ -327,8 +327,8 @@
AnnounceCyborg(character, rank, "has been downloaded to the empty core in \the [character.loc.loc]")
ticker.mode.latespawn(character)
del(C)
del(src)
qdel(C)
qdel(src)
return
//Find our spawning point.
@@ -368,7 +368,7 @@
else
AnnounceCyborg(character, rank, join_message)
del(src)
qdel(src)
proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message)
if (ticker.current_state == GAME_STATE_PLAYING)

View File

@@ -179,9 +179,9 @@ datum/preferences
proc/update_preview_icon() //seriously. This is horrendous.
del(preview_icon_front)
del(preview_icon_side)
del(preview_icon)
qdel(preview_icon_front)
qdel(preview_icon_side)
qdel(preview_icon)
var/g = "m"
if(gender == FEMALE) g = "f"
@@ -690,7 +690,7 @@ datum/preferences
preview_icon_front = new(preview_icon, dir = SOUTH)
preview_icon_side = new(preview_icon, dir = WEST)
del(eyes_s)
del(underwear_s)
del(undershirt_s)
del(clothes_s)
qdel(eyes_s)
qdel(underwear_s)
qdel(undershirt_s)
qdel(clothes_s)

View File

@@ -12,7 +12,7 @@
icon = null
invisibility = 101
for(var/t in organs)
del(t)
qdel(t)
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
@@ -37,7 +37,7 @@
dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF)
src << "<B>You are now [species.name]. </B>"
del(animation)
qdel(animation)
return src
@@ -49,7 +49,7 @@
if (monkeyizing)
return
for(var/t in organs)
del(t)
qdel(t)
return ..(move)
@@ -106,8 +106,7 @@
O.add_ai_verbs()
O.rename_self("ai",1)
spawn(0)
del(src)
qdel(src)
return O
//human -> robot
@@ -122,7 +121,7 @@
icon = null
invisibility = 101
for(var/t in organs)
del(t)
qdel(t)
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( loc )
@@ -159,8 +158,7 @@
callHook("borgify", list(O))
O.Namepick()
spawn(0)//To prevent the proc from returning null.
del(src)
qdel(src)
return O
//human -> alien
@@ -175,7 +173,7 @@
icon = null
invisibility = 101
for(var/t in organs)
del(t)
qdel(t)
var/alien_caste = pick("Hunter","Sentinel","Drone")
var/mob/living/carbon/human/new_xeno = create_new_xenomorph(alien_caste,loc)
@@ -184,8 +182,7 @@
new_xeno.key = key
new_xeno << "<B>You are now an alien.</B>"
spawn(0)//To prevent the proc from returning null.
del(src)
qdel(src)
return
/mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num)
@@ -199,7 +196,7 @@
icon = null
invisibility = 101
for(var/t in organs)
del(t)
qdel(t)
var/mob/living/carbon/slime/new_slime
if(reproduce)
@@ -219,8 +216,7 @@
new_slime.key = key
new_slime << "<B>You are now a slime. Skreee!</B>"
spawn(0)//To prevent the proc from returning null.
del(src)
qdel(src)
return
/mob/living/carbon/human/proc/corgize()
@@ -234,15 +230,14 @@
icon = null
invisibility = 101
for(var/t in organs) //this really should not be necessary
del(t)
qdel(t)
var/mob/living/simple_animal/corgi/new_corgi = new /mob/living/simple_animal/corgi (loc)
new_corgi.a_intent = I_HURT
new_corgi.key = key
new_corgi << "<B>You are now a Corgi. Yap Yap!</B>"
spawn(0)//To prevent the proc from returning null.
del(src)
qdel(src)
return
/mob/living/carbon/human/Animalize()
@@ -266,7 +261,7 @@
invisibility = 101
for(var/t in organs)
del(t)
qdel(t)
var/mob/new_mob = new mobpath(src.loc)
@@ -276,7 +271,7 @@
new_mob << "You suddenly feel more... animalistic."
spawn()
del(src)
qdel(src)
return
/mob/proc/Animalize()
@@ -294,7 +289,7 @@
new_mob.a_intent = I_HURT
new_mob << "You feel more... animalistic"
del(src)
qdel(src)
/* Certain mob types have problems and should not be allowed to be controlled by players.
*