diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm
index 121fc4bbbb..83b1c09ff1 100644
--- a/code/ATMOSPHERICS/components/unary/cold_sink.dm
+++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm
@@ -23,7 +23,7 @@
process()
..()
- if(!on)
+ if(!on || !network)
return 0
var/air_heat_capacity = air_contents.heat_capacity()
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
diff --git a/code/FEA/FEA_fire.dm b/code/FEA/FEA_fire.dm
index d94a59bdeb..54ff4496e4 100644
--- a/code/FEA/FEA_fire.dm
+++ b/code/FEA/FEA_fire.dm
@@ -152,9 +152,14 @@ obj
loc:active_hotspot = null
src.sd_SetLuminosity(0)
- var/chance_of_deletion = min(100, T.max_fire_temperature_sustained / T.heat_capacity * 8)
+
if(T.to_be_destroyed)
+ var/chance_of_deletion
+ if (T.heat_capacity) //beware of division by zero
+ chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0
+ else
+ chance_of_deletion = 100
if(prob(chance_of_deletion))
T.ReplaceWithSpace()
else
diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm
index 2b470288d5..b8ddd5427d 100644
--- a/code/WorkInProgress/Chemistry-Reagents.dm
+++ b/code/WorkInProgress/Chemistry-Reagents.dm
@@ -87,51 +87,50 @@ datum
return
- reaction_turf(var/turf/T, var/volume)//splash the blood all over the place
+ reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
+ if(!istype(T)) return
var/datum/reagent/blood/self = src
src = null
- if(!istype(T, /turf/simulated/)) return
var/datum/disease/D = self.data["virus"]
- if(istype(self.data["donor"], /mob/living/carbon/human) || !self.data["donor"])
- var/turf/simulated/source2 = T
- var/list/objsonturf = range(0,T)
- var/i
- for(i=1, i<=objsonturf.len, i++)
- if(istype(objsonturf[i],/obj/decal/cleanable/blood))
- return
- var/obj/decal/cleanable/blood/blood_prop = new /obj/decal/cleanable/blood(source2)
- blood_prop.blood_DNA = self.data["blood_DNA"]
- blood_prop.blood_type = self.data["blood_type"]
- if(D)
+ if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
+ var/obj/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
+ if(!blood_prop) //first blood!
+ blood_prop = new(T)
+ blood_prop.blood_DNA = self.data["blood_DNA"]
+ blood_prop.blood_type = self.data["blood_type"]
+ if(D && !blood_prop.virus) //TODO: multiple viruses
blood_prop.virus = new D.type
blood_prop.virus.holder = blood_prop
- if(istype(T, /turf/simulated/floor) && D)
- blood_prop.virus.spread_type = CONTACT_FEET
- else if (D)
- blood_prop.virus.spread_type = CONTACT_HANDS
+ if(T.density==0)
+ blood_prop.virus.spread_type = CONTACT_FEET
+ else
+ blood_prop.virus.spread_type = CONTACT_HANDS
else if(istype(self.data["donor"], /mob/living/carbon/monkey))
- var/turf/simulated/source1 = T
- var/obj/decal/cleanable/blood/blood_prop = new /obj/decal/cleanable/blood(source1)
- blood_prop.blood_DNA = self.data["blood_DNA"]
- if(D)
+ var/obj/decal/cleanable/blood/blood_prop = locate() in T
+ if(!blood_prop)
+ blood_prop = new(T)
+ blood_prop.blood_DNA = self.data["blood_DNA"]
+ if(D && !blood_prop.virus)
blood_prop.virus = new D.type
blood_prop.virus.holder = blood_prop
- if(istype(T, /turf/simulated/floor))
- blood_prop.virus.spread_type = CONTACT_FEET
- else
- blood_prop.virus.spread_type = CONTACT_HANDS
+ if(T.density==0)
+ blood_prop.virus.spread_type = CONTACT_FEET
+ else
+ blood_prop.virus.spread_type = CONTACT_HANDS
else if(istype(self.data["donor"], /mob/living/carbon/alien))
- var/turf/simulated/source2 = T
- var/obj/decal/cleanable/xenoblood/blood_prop = new /obj/decal/cleanable/xenoblood(source2)
- if(D)
+ var/obj/decal/cleanable/xenoblood/blood_prop = locate() in T
+ if(!blood_prop)
+ blood_prop = new(T)
+ blood_prop.blood_DNA = self.data["blood_DNA"]
+ if(D && !blood_prop.virus)
blood_prop.virus = new D.type
blood_prop.virus.holder = blood_prop
- if(istype(T, /turf/simulated/floor))
- blood_prop.virus.spread_type = CONTACT_FEET
- else
- blood_prop.virus.spread_type = CONTACT_HANDS
+ if(T.density==0)
+ blood_prop.virus.spread_type = CONTACT_FEET
+ else
+ blood_prop.virus.spread_type = CONTACT_HANDS
return
/* Must check the transfering of reagents and their data first. They all can point to one disease datum.
@@ -165,24 +164,25 @@ datum
description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
reagent_state = LIQUID
- reaction_turf(var/turf/T, var/volume)
- if (istype(T, /turf/space)) return
+ reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
src = null
if(volume >= 3)
- if(T:wet >= 1) return
- T:wet = 1
- if(T:wet_overlay)
- T:overlays -= T:wet_overlay
- T:wet_overlay = null
- T:wet_overlay = image('water.dmi',T,"wet_floor")
- T:overlays += T:wet_overlay
+ if(T.wet >= 1) return
+ T.wet = 1
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ T.wet_overlay = image('water.dmi',T,"wet_floor")
+ T.overlays += T.wet_overlay
spawn(800)
- if(T:wet >= 2) return
- T:wet = 0
- if(T:wet_overlay)
- T:overlays -= T:wet_overlay
- T:wet_overlay = null
+ if (!istype(T)) return
+ if(T.wet >= 2) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
var/hotspot = (locate(/obj/hotspot) in T)
if(hotspot && !istype(T, /turf/space))
@@ -210,16 +210,17 @@ datum
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
reagent_state = LIQUID
- reaction_turf(var/turf/T, var/volume)
- if (istype(T, /turf/space)) return
+ reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
src = null
- if(T:wet >= 2) return
- T:wet = 2
+ if(T.wet >= 2) return
+ T.wet = 2
spawn(800)
- T:wet = 0
- if(T:wet_overlay)
- T:overlays -= T:wet_overlay
- T:wet_overlay = null
+ if (!istype(T)) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
return
bilk
@@ -1430,23 +1431,25 @@ datum
M:nutrition += nutriment_factor
..()
return
- reaction_turf(var/turf/T, var/volume)
+ reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
src = null
if(volume >= 3)
- if(T:wet >= 1) return
- T:wet = 1
- if(T:wet_overlay)
- T:overlays -= T:wet_overlay
- T:wet_overlay = null
- T:wet_overlay = image('water.dmi',T,"wet_floor")
- T:overlays += T:wet_overlay
+ if(T.wet >= 1) return
+ T.wet = 1
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ T.wet_overlay = image('water.dmi',T,"wet_floor")
+ T.overlays += T.wet_overlay
spawn(800)
- if(T:wet >= 2) return
- T:wet = 0
- if(T:wet_overlay)
- T:overlays -= T:wet_overlay
- T:wet_overlay = null
+ if (!istype(T)) return
+ if(T.wet >= 2) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
var/hotspot = (locate(/obj/hotspot) in T)
if(hotspot)
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
@@ -2223,7 +2226,6 @@ datum
description = "Deny drinking this and prepare for THE LAW."
reagent_state = LIQUID
on_mob_life(var/mob/M)
- spawn(5)
M.stunned = 2
if(!data) data = 1
data++
diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm
index 72594cd694..b0e8573842 100644
--- a/code/WorkInProgress/Chemistry-Tools.dm
+++ b/code/WorkInProgress/Chemistry-Tools.dm
@@ -815,7 +815,7 @@
user << "\red You cannot directly remove reagents from this object."
return
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
+ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
user << "\blue You fill the syringe with [trans] units of the solution."
if (reagents.total_volume >= reagents.maximum_volume)
diff --git a/code/WorkInProgress/recycling/sortingmachinery.dm b/code/WorkInProgress/recycling/sortingmachinery.dm
index 3c38577ab9..9ba99dbd96 100644
--- a/code/WorkInProgress/recycling/sortingmachinery.dm
+++ b/code/WorkInProgress/recycling/sortingmachinery.dm
@@ -11,10 +11,11 @@
attack_hand(mob/user as mob)
- src.wrapped.loc = (get_turf(src.loc))
- if (istype(src.wrapped,/obj/closet))
- var/obj/closet/O = src.wrapped
- O.welded = 0
+ if (src.wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
+ src.wrapped.loc = (get_turf(src.loc))
+ if (istype(src.wrapped,/obj/closet))
+ var/obj/closet/O = src.wrapped
+ O.welded = 0
del(src)
return
@@ -36,7 +37,8 @@
attack_hand(mob/user as mob)
- src.wrapped.loc = (get_turf(src.loc))
+ if (src.wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
+ src.wrapped.loc = (get_turf(src.loc))
del(src)
return
diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm
index 92bb19fae2..46712f0599 100644
--- a/code/datums/recipe.dm
+++ b/code/datums/recipe.dm
@@ -87,9 +87,10 @@
/datum/recipe/proc/make_food(var/obj/container as obj)
var/obj/result_obj = new result(container)
for (var/obj/O in (container.contents-result_obj))
- O.reagents.del_reagent("nutriment")
- O.reagents.update_total()
- O.reagents.trans_to(result_obj, O.reagents.total_volume)
+ if (O.reagents)
+ O.reagents.del_reagent("nutriment")
+ O.reagents.update_total()
+ O.reagents.trans_to(result_obj, O.reagents.total_volume)
del(O)
container.reagents.clear_reagents()
return result_obj
@@ -110,7 +111,9 @@
var/i_count = 0
. = possible_recipes[1]
for (var/datum/recipe/recipe in possible_recipes)
- if (recipe.items.len > i_count || (recipe.items.len == i_count && recipe.reagents.len > r_count ))
+ var/N_i = (recipe.items)?(recipe.items.len):0
+ var/N_r = (recipe.reagents)?(recipe.reagents.len):0
+ if (N_i > i_count || (N_i== i_count && N_r > r_count ))
r_count = recipe.reagents.len
i_count = recipe.items.len
. = recipe
diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm
index 959a2b0e34..e947035f52 100644
--- a/code/defines/obj/storage.dm
+++ b/code/defines/obj/storage.dm
@@ -34,7 +34,9 @@
"/obj/item/weapon/zippo",
"/obj/item/weapon/cigpacket",
"/obj/item/weapon/storage/pill_bottle",
- "/obj/item/weapon/medical")
+ "/obj/item/weapon/medical",
+ "/obj/item/device/flashlight/pen"
+ )
flags = FPRINT | TABLEPASS | ONBELT
/obj/item/weapon/storage
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 1415c2b2a8..10ed95f40c 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -183,7 +183,7 @@
world << sound('intercept.ogg')
check_finished()
- if(!changeling.current)
+ if(!changeling)
return 1
if(istype(changeling.current,/mob/living/silicon))
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index ea93fc4922..ccf645ec77 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -169,13 +169,7 @@
implants += W
for(var/obj/item/W in usr)
- usr.u_equip(W)
- if (usr.client)
- usr.client.screen -= W
- if (W)
- W.loc = usr.loc
- W.dropped(usr)
- W.layer = initial(W.layer)
+ usr.drop_from_slot(W)
usr.update_clothing()
usr.monkeyizing = 1
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index f266c20fd6..2ecd31f027 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -36,13 +36,13 @@
event = 1
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
world << sound('spanomalies.ogg')
- var/list/turfs = list( )
+ var/list/turfs = new
var/turf/picked
- for(var/turf/T in world)
- if(T.z == 1 && istype(T,/turf/simulated/floor) && !istype(T,/turf/space))
+ for(var/turf/simulated/floor/T in world)
+ if(T.z == 1)
turfs += T
- for(var/turf/T in world)
- if(prob(20) && T.z == 1 && istype(T,/turf/simulated/floor))
+ for(var/turf/simulated/floor/T in turfs)
+ if(prob(20))
spawn(50+rand(0,3000))
picked = pick(turfs)
var/obj/portal/P = new /obj/portal( T )
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index cc620deff1..05bd4dc7f3 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -205,7 +205,7 @@ datum
return num_to_eat
check_completion()
- if((owner.current.absorbed_dna.len - 1) >= num_to_eat)
+ if(owner && owner.current && owner.current.absorbed_dna && ((owner.current.absorbed_dna.len - 1) >= num_to_eat))
return 1
else
return 0
diff --git a/code/game/machinery/camera.dm b/code/game/machinery/camera.dm
index 282ddd1dfa..3da1c6af04 100644
--- a/code/game/machinery/camera.dm
+++ b/code/game/machinery/camera.dm
@@ -275,6 +275,8 @@
return
/obj/machinery/camera/attack_ai(var/mob/living/silicon/ai/user as mob)
+ if (!istype(user))
+ return
if (src.network != user.network || !(src.status))
return
user.current = src
diff --git a/code/game/machinery/microwave.dm b/code/game/machinery/microwave.dm
index 46e7b5b6a5..5c035c4fd3 100644
--- a/code/game/machinery/microwave.dm
+++ b/code/game/machinery/microwave.dm
@@ -91,13 +91,13 @@
new O.type (src)
O:use(1)
user.visible_message( \
- "[user] has added one of [O] to \the [src].", \
+ "\blue [user] has added one of [O] to \the [src].", \
"\blue You add one of [O] to \the [src].")
else
user.before_take_item(O)
O.loc = src
user.visible_message( \
- "[user] has added \the [O] to \the [src].", \
+ "\blue [user] has added \the [O] to \the [src].", \
"\blue You add \the [O] to \the [src].")
else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 085fed171d..1ee589a865 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -331,7 +331,8 @@
R.amount--
throw_item = new dump_path(src.loc)
break
-
+ if (!throw_item)
+ return 0
spawn(0)
throw_item.throw_at(target, 16, 3)
src.visible_message("\red [src] launches [throw_item.name] at [target.name]!")
diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm
index 82300e1591..83c9789831 100644
--- a/code/game/magic/cultist/runes.dm
+++ b/code/game/magic/cultist/runes.dm
@@ -513,7 +513,10 @@ var/list/sacrificed = list()
communicate()
var/input = input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") as text|null
if(!input)
- return fizzle()
+ if (istype(src))
+ return fizzle()
+ else
+ return
if(istype(src,/obj/rune))
usr.say("O bidai nabora se'sma!")
else
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index eb922f21a6..01aaadd470 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -223,8 +223,9 @@
src.use_power = 2
src.updateUsrDialog()
sleep(get_construction_time_w_coeff(part,0.1))
- if(!src) return
+ //if(!src) return // you do not need to check it, all sleeping procedires will be terminated when src dies. -- rastaf0
src.use_power = 1
+ if(!being_built) return //was runtime error with null.Move()
src.being_built.Move(get_step(src,EAST))
src.icon_state = initial(src.icon_state)
src.visible_message("[src] beeps, \"The [src.being_built] is complete\".")
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 5a6df0ca5f..cf8b86f6ca 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -108,7 +108,8 @@
return
var/obj/mecha/Mech = M.loc
spawn() //this helps prevent clickspam fest.
- Mech.click_action(object,M)
+ if (Mech)
+ Mech.click_action(object,M)
else
return ..()
diff --git a/code/game/objects/closets/secure/personal.dm b/code/game/objects/closets/secure/personal.dm
index 4863143bd5..8662387220 100644
--- a/code/game/objects/closets/secure/personal.dm
+++ b/code/game/objects/closets/secure/personal.dm
@@ -24,7 +24,7 @@
user << "\red It appears to be broken."
return
var/obj/item/weapon/card/id/I = W
- if (src.allowed(user) || !src.registered || (istype(W, /obj/item/weapon/card/id) && src.registered == I.registered))
+ if (src.allowed(user) || !src.registered || (istype(I) && (src.registered == I.registered)))
//they can open all lockers, or nobody owns this, or they own this locker
src.locked = !( src.locked )
for(var/mob/O in viewers(user, 3))
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index c127d9db1e..dad59a8523 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -82,6 +82,8 @@ MASS SPECTROMETER
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
+ if (!istype(M))
+ user << "\red [M] is not humas and cannot have the fingerprints."
if (( !( istype(M.dna, /datum/dna) ) || M.gloves) )
user << "\blue No fingerprints found on [M]"
else
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index d609f5580b..8352ccf718 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -58,12 +58,9 @@ FINGERPRINT CARD
if(istype(W,/obj/item/weapon/photo))
if(!(PHOTO))
src.PHOTO = W
- usr.u_equip(W)
+ usr.before_take_item(W)
W.loc = src
- if ((usr.client && usr.s_active != src))
- usr.client.screen -= W
//src.orient2hud(usr)
- W.dropped(usr)
add_fingerprint(usr)
usr << "\blue You add the photo to the ID"
else
diff --git a/code/game/objects/tank.dm b/code/game/objects/tank.dm
index 16030516bf..a8bd6dc5ad 100644
--- a/code/game/objects/tank.dm
+++ b/code/game/objects/tank.dm
@@ -10,9 +10,9 @@
del(src)
/obj/item/weapon/tank/attack_self(mob/user as mob)
- user.machine = src
if (!(src.air_contents))
return
+ user.machine = src
var/using_internal
if(istype(loc,/mob/living/carbon))
@@ -45,22 +45,26 @@
if(istype(loc,/mob/living/carbon))
var/mob/living/carbon/location = loc
if(location.internal == src)
- usr << "\blue You close the tank release valve."
+ usr << "\blue You close \the [src] release valve."
if (location.internals)
location.internals.icon_state = "internal0"
else
if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS))
location.internal = src
- usr << "\blue You open the tank valve."
+ usr << "\blue You open \the [src] valve."
if (location.internals)
location.internals.icon_state = "internal1"
else
- usr << "\blue The valve immediately closes."
+ usr << "\blue You need something to connect to \the [src]."
src.add_fingerprint(usr)
+/*
+ * the following is needed for a tank lying on the floor. But currently we restrict players to use not weared tanks as intrals. --rastaf
for(var/mob/M in viewers(1, src.loc))
if ((M.client && M.machine == src))
src.attack_self(M)
+*/
+ src.attack_self(usr)
else
usr << browse(null, "window=tank")
return
@@ -144,10 +148,10 @@
else if(integrity < 3)
integrity++
-
+/* redundant. --rastaf0
/obj/item/weapon/tank/attack(mob/M as mob, mob/user as mob)
..()
-
+*/
/*
if ((prob(30) && M.stat < 2))
var/mob/living/carbon/human/H = M
@@ -173,7 +177,7 @@
/obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- var/obj/item/weapon/icon = src
+ var/obj/icon = src
if (istype(src.loc, /obj/item/assembly))
icon = src.loc
if ((istype(W, /obj/item/device/analyzer) || (istype(W, /obj/item/device/pda))) && get_dist(user, src) <= 1)
@@ -228,7 +232,7 @@
..()
/obj/item/weapon/tank/examine()
- var/obj/item/weapon/icon = src
+ var/obj/icon = src
if (istype(src.loc, /obj/item/assembly))
icon = src.loc
if (!in_range(src, usr))
@@ -371,7 +375,8 @@
ground_zero.assume_air(air_contents)
ground_zero.hotspot_expose(1000, 125)
- if(src.master) del(src.master)
+ if(src.master)
+ del(src.master)
del(src)
/obj/item/weapon/tank/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -381,178 +386,128 @@
var/obj/item/assembly/rad_ignite/S = W
if (!( S.status ))
return
- var/obj/item/assembly/r_i_ptank/R = new /obj/item/assembly/r_i_ptank( user )
+ var/obj/item/assembly/r_i_ptank/R = new
+
R.part1 = S.part1
S.part1.loc = R
S.part1.master = R
+
R.part2 = S.part2
S.part2.loc = R
S.part2.master = R
- S.layer = initial(S.layer)
- if (user.client)
- user.client.screen -= S
- if (user.r_hand == S)
- user.u_equip(S)
- user.r_hand = R
- else
- user.u_equip(S)
- user.l_hand = R
+
src.master = R
- src.layer = initial(src.layer)
- user.u_equip(src)
- if (user.client)
- user.client.screen -= src
- src.loc = R
R.part3 = src
- R.layer = 20
- R.loc = user
+
+ user.put_in_hand(R)
+ user.before_take_item(src)
+ src.loc = R
+
S.part1 = null
S.part2 = null
- //S = null
del(S)
if (istype(W, /obj/item/assembly/prox_ignite))
var/obj/item/assembly/prox_ignite/S = W
if (!( S.status ))
return
- var/obj/item/assembly/m_i_ptank/R = new /obj/item/assembly/m_i_ptank( user )
+ var/obj/item/assembly/m_i_ptank/R = new
R.part1 = S.part1
S.part1.loc = R
S.part1.master = R
+
R.part2 = S.part2
S.part2.loc = R
S.part2.master = R
- S.layer = initial(S.layer)
- if (user.client)
- user.client.screen -= S
- if (user.r_hand == S)
- user.u_equip(S)
- user.r_hand = R
- else
- user.u_equip(S)
- user.l_hand = R
+
src.master = R
- src.layer = initial(src.layer)
- user.u_equip(src)
- if (user.client)
- user.client.screen -= src
- src.loc = R
R.part3 = src
- R.layer = 20
- R.loc = user
+
+ user.put_in_hand(R)
+ user.before_take_item(src)
+ src.loc = R
+
S.part1 = null
S.part2 = null
- //S = null
del(S)
if (istype(W, /obj/item/assembly/time_ignite))
var/obj/item/assembly/time_ignite/S = W
if (!( S.status ))
return
- var/obj/item/assembly/t_i_ptank/R = new /obj/item/assembly/t_i_ptank( user )
+ var/obj/item/assembly/t_i_ptank/R = new
R.part1 = S.part1
- if (S.part1)
- S.part1.loc = R
- S.part1.master = R
+ S.part1.loc = R
+ S.part1.master = R
+
R.part2 = S.part2
- if (S.part2)
- S.part2.loc = R
- S.part2.master = R
- S.layer = initial(S.layer)
- if (user.client)
- user.client.screen -= S
- if (user.r_hand == S)
- user.u_equip(S)
- user.r_hand = R
- else
- user.u_equip(S)
- user.l_hand = R
+ S.part2.loc = R
+ S.part2.master = R
+
src.master = R
- src.layer = initial(src.layer)
- user.u_equip(src)
- if (user.client)
- user.client.screen -= src
- src.loc = R
R.part3 = src
- R.layer = 20
- R.loc = user
+
+ user.put_in_hand(R)
+ user.before_take_item(src)
+ src.loc = R
+
S.part1 = null
S.part2 = null
- //S = null
del(S)
if (istype(W, /obj/item/assembly/a_i_a))
var/obj/item/assembly/a_i_a/S = W
if (!( S.status ))
return
- var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new /obj/item/clothing/suit/armor/a_i_a_ptank( user )
+ var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new
R.part1 = S.part1
S.part1.loc = R
S.part1.master = R
+
R.part2 = S.part2
S.part2.loc = R
S.part2.master = R
+
R.part3 = S.part3
S.part3.loc = R
S.part3.master = R
- S.layer = initial(S.layer)
- if (user.client)
- user.client.screen -= S
- if (user.r_hand == S)
- user.u_equip(S)
- user.r_hand = R
- else
- user.u_equip(S)
- user.l_hand = R
+
src.master = R
- src.layer = initial(src.layer)
- user.u_equip(src)
- if (user.client)
- user.client.screen -= src
- src.loc = R
R.part4 = src
- R.layer = 20
- R.loc = user
+
+ user.put_in_hand(R)
+ user.before_take_item(src)
+ src.loc = R
+
S.part1 = null
S.part2 = null
S.part3 = null
- //S = null
del(S)
// PantsNote: More flamethrower assembly code. WOO!
if (istype(W, /obj/item/assembly/w_r_ignite))
var/obj/item/assembly/w_r_ignite/S = W
if (!( S.status ))
return
- var/obj/item/weapon/flamethrower/R = new /obj/item/weapon/flamethrower( user )
+ var/obj/item/weapon/flamethrower/R = new
R.part1 = S.part1
S.part1.loc = R
S.part1.master = R
+
R.part2 = S.part2
S.part2.loc = R
S.part2.master = R
+
R.part3 = S.part3
S.part3.loc = R
S.part3.master = R
- S.layer = initial(S.layer)
- if (user.client)
- user.client.screen -= S
- if (user.r_hand == S)
- user.u_equip(S)
- user.r_hand = R
- else
- user.u_equip(S)
- user.l_hand = R
+
src.master = R
- src.layer = initial(src.layer)
- user.u_equip(src)
- if (user.client)
- user.client.screen -= src
- src.loc = R
R.part4 = src
- R.layer = 20
- R.loc = user
+
+ user.put_in_hand(R)
+ user.before_take_item(src)
+ src.loc = R
+
S.part1 = null
S.part2 = null
S.part3 = null
- //S = null
del(S)
-
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index acf9c2e151..999c8e6a36 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -114,6 +114,8 @@
return
/obj/item/assembly/time_ignite/receive_signal()
+ if (!status)
+ return
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
src.part2.ignite()
@@ -130,14 +132,12 @@
var/turf/T = src.loc
if (ismob(T))
T = T.loc
- if (src.part1)
- src.part1.loc = T
- src.part1.master = null
- src.part1 = null
- if (src.part2)
- src.part2.loc = T
- src.part2.master = null
- src.part2 = null
+ src.part1.loc = T
+ src.part1.master = null
+ src.part1 = null
+ src.part2.loc = T
+ src.part2.master = null
+ src.part2 = null
del(src)
return
@@ -148,8 +148,7 @@
user.show_message("\blue The timer is now secured!", 1)
else
user.show_message("\blue The timer is now unsecured!", 1)
- if (src.part2)
- src.part2.status = src.status
+ src.part2.status = src.status
src.add_fingerprint(user)
return
@@ -166,10 +165,10 @@
if (ismob(T))
T = T.loc
src.part1.loc = T
- src.part2.loc = T
src.part1.master = null
- src.part2.master = null
src.part1 = null
+ src.part2.loc = T
+ src.part2.master = null
src.part2 = null
del(src)
@@ -183,7 +182,22 @@
src.part2.status = src.status
src.add_fingerprint(user)
if(( istype(W, /obj/item/clothing/suit/armor/vest) ) && src.status)
- var/obj/item/assembly/a_i_a/R = new /obj/item/assembly/a_i_a( user )
+ var/obj/item/assembly/a_i_a/R = new
+ R.part1 = part1
+ R.part1.master = R
+ part1 = null
+
+ R.part2 = part2
+ R.part2.master = R
+ part2 = null
+
+ user.put_in_hand(R)
+ user.before_take_item(W)
+ R.part3 = W
+ R.part3.master = R
+ del(src)
+
+/* WTF THIS SHIT? It is working? Shouldn't. --rastaf0
W.loc = R
R.part1 = W
R.part2 = W
@@ -207,6 +221,7 @@
R.layer = 20
R.loc = user
src.add_fingerprint(user)
+*/
return
/* else if ((istype(W, /obj/item/device/timer) && !( src.status )))
@@ -241,18 +256,21 @@
if (ismob(T))
T = T.loc
src.part1.loc = T
- src.part2.loc = T
- src.part3.loc = T
src.part1.master = null
- src.part2.master = null
- src.part3.master = null
src.part1 = null
+ src.part2.loc = T
+ src.part2.master = null
src.part2 = null
+ src.part3.loc = T
+ src.part3.master = null
src.part3 = null
del(src)
return
if (( istype(W, /obj/item/weapon/screwdriver) ))
+ if (!src.status && (!part1||!part2||!part3))
+ user << "\red You cannot finish the assembly, not all components are in place!"
+ return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The armor is now secured!", 1)
@@ -306,7 +324,6 @@
return
/obj/item/assembly/rad_time/attack_self(mob/user as mob)
-
src.part1.attack_self(user, src.status)
src.part2.attack_self(user, src.status)
src.add_fingerprint(user)
@@ -369,7 +386,6 @@
return
/obj/item/assembly/rad_prox/receive_signal(datum/signal/signal)
- if (!src.part2 || !src.part1) return
if (signal.source == src.part2)
src.part1.send_signal("ACTIVATE")
return
@@ -425,7 +441,6 @@
return
/obj/item/assembly/rad_infra/attack_self(mob/user as mob)
-
src.part1.attack_self(user, src.status)
src.part2.attack_self(user, src.status)
src.add_fingerprint(user)
@@ -516,7 +531,8 @@
/obj/item/assembly/prox_ignite/attack_self(mob/user as mob)
- src.part1.attack_self(user, src.status)
+ if (src.part1)
+ src.part1.attack_self(user, src.status)
src.add_fingerprint(user)
return
@@ -578,7 +594,8 @@
/obj/item/assembly/rad_ignite/attack_self(mob/user as mob)
- src.part1.attack_self(user, src.status)
+ if (src.part1)
+ src.part1.attack_self(user, src.status)
src.add_fingerprint(user)
return
@@ -631,13 +648,13 @@
/obj/item/assembly/m_i_ptank/dropped()
spawn( 0 )
- src.part1.sense()
+ part1.sense()
return
return
/obj/item/assembly/m_i_ptank/examine()
..()
- src.part3.examine()
+ part3.examine()
/obj/item/assembly/m_i_ptank/Del()
@@ -654,36 +671,25 @@
..()
if (istype(W, /obj/item/device/analyzer))
src.part3.attackby(W, user)
-
+ return
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
- var/obj/item/assembly/prox_ignite/R = new /obj/item/assembly/prox_ignite( )
+ var/obj/item/assembly/prox_ignite/R = new(get_turf(src.loc))
R.part1 = src.part1
+ R.part1.master = R
+ R.part1.loc = R
R.part2 = src.part2
- R.loc = src.loc
- if (user.r_hand == src)
- user.r_hand = R
- R.layer = 20
+ R.part2.master = R
+ R.part2.loc = R
+ if (user.get_inactive_hand()==src)
+ user.put_in_inactive_hand(part3)
else
- if (user.l_hand == src)
- user.l_hand = R
- R.layer = 20
- src.part1.loc = R
- src.part2.loc = R
- src.part1.master = R
- src.part2.master = R
- var/turf/T = src.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- src.part3.loc = T
+ part3.loc = src.loc
src.part1 = null
src.part2 = null
src.part3 = null
- //SN src = null
del(src)
return
- if (!( istype(W, /obj/item/weapon/weldingtool) ))
+ if (!( istype(W, /obj/item/weapon/weldingtool)&&W:welding ))
return
if (!( src.status ))
src.status = 1
@@ -754,35 +760,22 @@
if (istype(W, /obj/item/device/analyzer))
src.part3.attackby(W, user)
-
+ return
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
- var/obj/item/assembly/time_ignite/R = new /obj/item/assembly/time_ignite( )
+ var/obj/item/assembly/time_ignite/R = new(get_turf(src.loc))
R.part1 = src.part1
+ R.part1.master = R
+ R.part1.loc = R
R.part2 = src.part2
- R.loc = src.loc
- if (user.r_hand == src)
- user.r_hand = R
- R.layer = 20
+ R.part2.master = R
+ R.part2.loc = R
+ if (user.get_inactive_hand()==src)
+ user.put_in_inactive_hand(part3)
else
- if (user.l_hand == src)
- user.l_hand = R
- R.layer = 20
- if(src.part1)
- src.part1.loc = R
- src.part1.master = R
- if(src.part2)
- src.part2.loc = R
- src.part2.master = R
- var/turf/T = src.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- src.part3.loc = T
+ part3.loc = src.loc
src.part1 = null
src.part2 = null
src.part3 = null
- //SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding))
@@ -798,15 +791,13 @@
bombers += "[key_name(user)] unwelded a time bomb. Temp: [src.part3.air_contents.temperature-T0C]"
user << "\blue The hole has been closed."
src.part2.status = src.status
-
src.add_fingerprint(user)
return
/obj/item/assembly/t_i_ptank/attack_self(mob/user as mob)
- if (src.part1)
- src.part1.attack_self(user, 1)
- playsound(src.loc, 'armbomb.ogg', 100, 1)
+ src.part1.attack_self(user, 1)
+ playsound(src.loc, 'armbomb.ogg', 100, 1)
src.add_fingerprint(user)
return
@@ -848,33 +839,22 @@
if (istype(W, /obj/item/device/analyzer))
src.part3.attackby(W, user)
-
+ return
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
- var/obj/item/assembly/rad_ignite/R = new /obj/item/assembly/rad_ignite( )
+ var/obj/item/assembly/rad_ignite/R = new(get_turf(src.loc))
R.part1 = src.part1
+ R.part1.master = R
+ R.part1.loc = R
R.part2 = src.part2
- R.loc = src.loc
- if (user.r_hand == src)
- user.r_hand = R
- R.layer = 20
+ R.part2.master = R
+ R.part2.loc = R
+ if (user.get_inactive_hand()==src)
+ user.put_in_inactive_hand(part3)
else
- if (user.l_hand == src)
- user.l_hand = R
- R.layer = 20
- src.part1.loc = R
- src.part2.loc = R
- src.part1.master = R
- src.part2.master = R
- var/turf/T = src.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- src.part3.loc = T
+ part3.loc = src.loc
src.part1 = null
src.part2 = null
src.part3 = null
- //SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding ))
@@ -904,37 +884,26 @@
..()
if (istype(W, /obj/item/device/analyzer))
src.part4.attackby(W, user)
-
+ return
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
- var/obj/item/assembly/a_i_a/R = new /obj/item/assembly/a_i_a( )
+ var/obj/item/assembly/a_i_a/R = new(get_turf(src.loc))
R.part1 = src.part1
+ R.part1.master = R
+ R.part1.loc = R
R.part2 = src.part2
+ R.part2.master = R
+ R.part2.loc = R
R.part3 = src.part3
- R.loc = src.loc
- if (user.r_hand == src)
- user.r_hand = R
- R.layer = 20
+ R.part3.master = R
+ R.part3.loc = R
+ if (user.get_inactive_hand()==src)
+ user.put_in_inactive_hand(part4)
else
- if (user.l_hand == src)
- user.l_hand = R
- R.layer = 20
- src.part1.loc = R
- src.part2.loc = R
- src.part3.loc = R
- src.part1.master = R
- src.part2.master = R
- src.part3.master = R
- var/turf/T = src.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- if (!( istype(T, /turf) ))
- T = T.loc
- src.part4.loc = T
+ part4.loc = src.loc
src.part1 = null
src.part2 = null
src.part3 = null
src.part4 = null
- //SN src = null
del(src)
return
if (( istype(W, /obj/item/weapon/weldingtool) && W:welding))
@@ -953,10 +922,8 @@
return
/obj/item/assembly/r_i_ptank/attack_self(mob/user as mob)
-
- if (src.part1)
- playsound(src.loc, 'armbomb.ogg', 100, 1)
- src.part1.attack_self(user, 1)
+ playsound(src.loc, 'armbomb.ogg', 100, 1)
+ src.part1.attack_self(user, 1)
src.add_fingerprint(user)
return
diff --git a/code/game/research/destructive_analyzer.dm b/code/game/research/destructive_analyzer.dm
index 1749da53b2..ebf0903b7e 100644
--- a/code/game/research/destructive_analyzer.dm
+++ b/code/game/research/destructive_analyzer.dm
@@ -46,7 +46,7 @@ Note: Must be placed within 3 tiles of the R&D Console
if (!opened)
opened = 1
if(linked_console)
- linked_console.linked_lathe = null
+ linked_console.linked_destroy = null
linked_console = null
icon_state = "d_analyzer_t"
user << "You open the maintenance hatch of [src]."
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index b81b0171b5..1eecbc3016 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -5,14 +5,7 @@
src << "Only administrators may use this command."
return
for(var/obj/item/W in M)
- if (istype(W,/obj/item))
- M.u_equip(W)
- if (M.client)
- M.client.screen -= W
- if (W)
- W.loc = M.loc
- W.dropped(M)
- W.layer = initial(W.layer)
+ M.drop_from_slot(W)
log_admin("[key_name(usr)] made [key_name(M)] drop everything!")
message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!", 1)
@@ -29,14 +22,7 @@
return
//strip their stuff before they teleport into a cell :downs:
for(var/obj/item/W in M)
- if (!istype(W,/datum/organ))
- M.u_equip(W)
- if (M.client)
- M.client.screen -= W
- if (W)
- W.loc = M.loc
- W.dropped(M)
- W.layer = initial(W.layer)
+ M.drop_from_slot(W)
//teleport person to cell
M.paralysis += 5
sleep(5) //so they black out before warping
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 567e59c312..f34347dac6 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -173,4 +173,13 @@ var/list/karma_spenders = list()
src << "You are now excluded from alien candidate lists until end of round."
else if(!src.client.be_alien)
src.client.be_alien = 1
- src << "You are now included in alien candidate lists until end of round."
\ No newline at end of file
+ src << "You are now included in alien candidate lists until end of round."
+
+/mob/dead/observer/memory()
+ set hidden = 1
+ src << "\red You are dead! You have no mind to store memory!"
+
+/mob/dead/observer/add_memory()
+ set hidden = 1
+ src << "\red You are dead! You have no mind to store memory!"
+
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index 7ffba2b3af..5846580eb9 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -13,15 +13,18 @@ Doesn't work on other aliens/AI.*/
if(src.stat)
src << "\green You must be conscious to do this."
return
- if(src.toxloss >= 100)
- src.toxloss -= 100
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\green [src] has planted some alien weeds!"), 1)
- var/obj/alien/weeds/W = new /obj/alien/weeds(src.loc)
- W.Life()
-
- else
+ if(!isturf(src.loc) || istype(src.loc, /turf/space))
+ src << "\green Bad place for garden!"
+ return
+ if(src.toxloss < 100)
src << "\green Not enough plasma stored."
+ return
+
+ src.toxloss -= 100
+ for(var/mob/O in viewers(src, null))
+ O.show_message(text("\green [src] has planted some alien weeds!"), 1)
+ var/obj/alien/weeds/W = new (src.loc)
+ W.Life()
return
/mob/living/carbon/alien/humanoid/verb/call_to()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
index 7931187577..95ed268db8 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
@@ -1,18 +1,18 @@
/mob/living/carbon/alien/humanoid/drone/New()
+ var/datum/reagents/R = new/datum/reagents(100)
+ reagents = R
+ R.my_atom = src
+ if(src.name == "alien drone")
+ src.name = text("alien drone ([rand(1, 1000)])")
+ src.real_name = src.name
spawn (1)
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
src.verbs -= /mob/living/carbon/alien/humanoid/verb/call_to
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
src.stand_icon = new /icon('alien.dmi', "aliend_s")
src.lying_icon = new /icon('alien.dmi', "aliend_l")
src.icon = src.stand_icon
- if(src.name == "alien drone") src.name = text("alien drone ([rand(1, 1000)])")
- src.real_name = src.name
- src << "\blue Your icons have been generated!"
-
update_clothing()
+ src << "\blue Your icons have been generated!"
//Drones use the same base as generic humanoids.
//Drone verbs
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index 575297d176..c530a7bd8c 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -1,17 +1,17 @@
/mob/living/carbon/alien/humanoid/hunter/New()
+ var/datum/reagents/R = new/datum/reagents(100)
+ reagents = R
+ R.my_atom = src
+ if(src.name == "alien hunter")
+ src.name = text("alien hunter ([rand(1, 1000)])")
+ src.real_name = src.name
spawn (1)
src.verbs -= /mob/living/carbon/alien/humanoid/verb/corrode
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
src.stand_icon = new /icon('alien.dmi', "alienh_s")
src.lying_icon = new /icon('alien.dmi', "alienh_l")
src.icon = src.stand_icon
- if(src.name == "alien hunter") src.name = text("alien hunter ([rand(1, 1000)])")
- src.real_name = src.name
- src << "\blue Your icons have been generated!"
-
update_clothing()
+ src << "\blue Your icons have been generated!"
/mob/living/carbon/alien/humanoid/hunter
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index ec6d402afa..794b8cefc7 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -1,17 +1,17 @@
/mob/living/carbon/alien/humanoid/sentinel/New()
+ var/datum/reagents/R = new/datum/reagents(100)
+ reagents = R
+ R.my_atom = src
+ if(src.name == "alien sentinel")
+ src.name = text("alien sentinel ([rand(1, 1000)])")
+ src.real_name = src.name
spawn (1)
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
src.stand_icon = new /icon('alien.dmi', "aliens_s")
src.lying_icon = new /icon('alien.dmi', "aliens_l")
src.icon = src.stand_icon
- if(src.name == "alien sentinel") src.name = text("alien sentinel ([rand(1, 1000)])")
- src.real_name = src.name
- src << "\blue Your icons have been generated!"
-
update_clothing()
+ src << "\blue Your icons have been generated!"
/mob/living/carbon/alien/humanoid/sentinel
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index e2906ffc70..32ac231382 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -1,20 +1,19 @@
//This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/humanoid/New()
+ var/datum/reagents/R = new/datum/reagents(100)
+ reagents = R
+ R.my_atom = src
+ if(src.name == "alien")
+ src.name = text("alien ([rand(1, 1000)])")
+ src.real_name = src.name
spawn (1)
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
if(!istype(src, /mob/living/carbon/alien/humanoid/queen))
src.stand_icon = new /icon('alien.dmi', "alien_s")
src.lying_icon = new /icon('alien.dmi', "alien_l")
src.icon = src.stand_icon
-
- if(src.name == "alien") src.name = text("alien ([rand(1, 1000)])")
- src.real_name = src.name
- src << "\blue Your icons have been generated!"
-
update_clothing()
+ src << "\blue Your icons have been generated!"
..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 6a0129447e..57d71903a7 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -1,21 +1,20 @@
/mob/living/carbon/alien/humanoid/queen/New()
+ var/datum/reagents/R = new/datum/reagents(100)
+ reagents = R
+ R.my_atom = src
+//there should only be one queen
+// if(src.name == "alien")
+// src.name = text("alien ([rand(1, 1000)])")
+ src.real_name = src.name
spawn (1)
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
src.verbs += /mob/living/carbon/alien/humanoid/sentinel/verb/spit
src.verbs -= /mob/living/carbon/alien/humanoid/verb/ventcrawl
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
src.stand_icon = new /icon('alien.dmi', "queen_s")
src.lying_icon = new /icon('alien.dmi', "queen_l")
src.icon = src.stand_icon
-
-//there should only be one queen
-// if(src.name == "alien") src.name = text("alien ([rand(1, 1000)])")
- src.real_name = src.name
- src << "\blue Your icons have been generated!"
-
update_clothing()
+ src << "\blue Your icons have been generated!"
/mob/living/carbon/alien/humanoid/queen
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 81245367d8..8fad33ebd1 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -1,15 +1,14 @@
//This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/larva/New()
+ var/datum/reagents/R = new/datum/reagents(100)
+ reagents = R
+ R.my_atom = src
+ if(src.name == "alien larva")
+ src.name = text("alien larva ([rand(1, 1000)])")
+ src.real_name = src.name
spawn (1)
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
-
- if(src.name == "alien larva") src.name = text("alien larva ([rand(1, 1000)])")
- src.real_name = src.name
- src << "\blue Your icons have been generated!"
-
update_clothing()
+ src << "\blue Your icons have been generated!"
// spawn(1200) grow() Grow after 120 seconds -- TLE Commented out because life.dm has better version -- Urist
..()
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index aee453863b..b863db4706 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -2,10 +2,10 @@
var/obj/item/device/mmi/container = null
New()
- spawn(1)
- var/datum/reagents/R = new/datum/reagents(1000)
- reagents = R
- R.my_atom = src
+ var/datum/reagents/R = new/datum/reagents(1000)
+ reagents = R
+ R.my_atom = src
+ ..()
say_understands(var/other)
if (istype(other, /mob/living/silicon/ai))
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 9f4362c6c9..45e44923ba 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -7,62 +7,59 @@
if (!dna)
dna = new /datum/dna( null )
+ var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src )
+ chest.owner = src
+ var/datum/organ/external/groin/groin = new /datum/organ/external/groin( src )
+ groin.owner = src
+ var/datum/organ/external/head/head = new /datum/organ/external/head( src )
+ head.owner = src
+ var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm( src )
+ l_arm.owner = src
+ var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm( src )
+ r_arm.owner = src
+ var/datum/organ/external/l_hand/l_hand = new /datum/organ/external/l_hand( src )
+ l_hand.owner = src
+ var/datum/organ/external/r_hand/r_hand = new /datum/organ/external/r_hand( src )
+ r_hand.owner = src
+ var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg( src )
+ l_leg.owner = src
+ var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg( src )
+ r_leg.owner = src
+ var/datum/organ/external/l_foot/l_foot = new /datum/organ/external/l_foot( src )
+ l_foot.owner = src
+ var/datum/organ/external/r_foot/r_foot = new /datum/organ/external/r_foot( src )
+ r_foot.owner = src
+
+ src.organs["chest"] = chest
+ src.organs["groin"] = groin
+ src.organs["head"] = head
+ src.organs["l_arm"] = l_arm
+ src.organs["r_arm"] = r_arm
+ src.organs["l_hand"] = l_hand
+ src.organs["r_hand"] = r_hand
+ src.organs["l_leg"] = l_leg
+ src.organs["r_leg"] = r_leg
+ src.organs["l_foot"] = l_foot
+ src.organs["r_foot"] = r_foot
+
+ var/g = "m"
+ if (src.gender == MALE)
+ g = "m"
+ else if (src.gender == FEMALE)
+ g = "f"
+ else
+ src.gender = MALE
+ g = "m"
+
spawn (1)
- var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src )
- chest.owner = src
- var/datum/organ/external/groin/groin = new /datum/organ/external/groin( src )
- groin.owner = src
- var/datum/organ/external/head/head = new /datum/organ/external/head( src )
- head.owner = src
- var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm( src )
- l_arm.owner = src
- var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm( src )
- r_arm.owner = src
- var/datum/organ/external/l_hand/l_hand = new /datum/organ/external/l_hand( src )
- l_hand.owner = src
- var/datum/organ/external/r_hand/r_hand = new /datum/organ/external/r_hand( src )
- r_hand.owner = src
- var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg( src )
- l_leg.owner = src
- var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg( src )
- r_leg.owner = src
- var/datum/organ/external/l_foot/l_foot = new /datum/organ/external/l_foot( src )
- l_foot.owner = src
- var/datum/organ/external/r_foot/r_foot = new /datum/organ/external/r_foot( src )
- r_foot.owner = src
-
- src.organs["chest"] = chest
- src.organs["groin"] = groin
- src.organs["head"] = head
- src.organs["l_arm"] = l_arm
- src.organs["r_arm"] = r_arm
- src.organs["l_hand"] = l_hand
- src.organs["r_hand"] = r_hand
- src.organs["l_leg"] = l_leg
- src.organs["r_leg"] = r_leg
- src.organs["l_foot"] = l_foot
- src.organs["r_foot"] = r_foot
-
- var/g = "m"
- if (src.gender == MALE)
- g = "m"
- else if (src.gender == FEMALE)
- g = "f"
- else
- src.gender = MALE
- g = "m"
-
if(!src.stand_icon)
src.stand_icon = new /icon('human.dmi', "body_[g]_s")
if(!src.lying_icon)
src.lying_icon = new /icon('human.dmi', "body_[g]_l")
src.icon = src.stand_icon
-
- src << "\blue Your icons have been generated!"
-
-
-
update_clothing()
+ src << "\blue Your icons have been generated!"
+ ..()
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
if ((!( yes ) || src.now_pushing))
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 2764fbd29b..d48ad29b70 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -1,29 +1,27 @@
/mob/living/carbon/monkey/New()
- spawn(1)
- var/datum/reagents/R = new/datum/reagents(1000)
- reagents = R
- R.my_atom = src
- if (!(src.dna))
- if(src.gender == NEUTER)
- src.gender = pick(MALE, FEMALE)
- src.dna = new /datum/dna( null )
- src.dna.uni_identity = "00600200A00E0110148FC01300B009"
- src.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
- src.dna.unique_enzymes = md5(src.name)
- //////////blah
- var/gendervar
- if (src.gender == "male")
- gendervar = add_zero2(num2hex((rand(1,2049)),1), 3)
- else
- gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3)
- src.dna.uni_identity += gendervar
- src.dna.uni_identity += "12C"
- src.dna.uni_identity += "4E2"
+ var/datum/reagents/R = new/datum/reagents(1000)
+ reagents = R
+ R.my_atom = src
+ if (!(src.dna))
+ if(src.gender == NEUTER)
+ src.gender = pick(MALE, FEMALE)
+ src.dna = new /datum/dna( null )
+ src.dna.uni_identity = "00600200A00E0110148FC01300B009"
+ src.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
+ src.dna.unique_enzymes = md5(src.name)
+ //////////blah
+ var/gendervar
+ if (src.gender == "male")
+ gendervar = add_zero2(num2hex((rand(1,2049)),1), 3)
+ else
+ gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3)
+ src.dna.uni_identity += gendervar
+ src.dna.uni_identity += "12C"
+ src.dna.uni_identity += "4E2"
- if(src.name == "monkey") src.name = text("monkey ([rand(1, 1000)])")
-
- src.real_name = src.name
- return
+ if(src.name == "monkey")
+ src.name = text("monkey ([rand(1, 1000)])")
+ src.real_name = src.name
..()
return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index f94e7778ac..9703188018 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1122,8 +1122,9 @@
item.dropped(src)
if (item)
item.layer = initial(item.layer)
- var/turf/T = get_turf(src.loc)
- T.Entered(item)
+ var/turf/T = get_turf(src.loc)
+ if (istype(T))
+ T.Entered(item)
return
/mob/proc/drop_item()
@@ -1138,16 +1139,17 @@
if (W)
W.layer = initial(W.layer)
var/turf/T = get_turf(src.loc)
- if (T)
+ if (istype(T))
T.Entered(W)
return
/mob/proc/before_take_item(var/obj/item/item)
- u_equip(item)
- if (src.client)
- src.client.screen -= item
item.loc = null
- src.update_clothing()
+ item.layer = initial(item.layer)
+ u_equip(item)
+ //if (src.client)
+ // src.client.screen -= item
+ //src.update_clothing()
return
/mob/proc/get_active_hand()
@@ -1299,7 +1301,10 @@
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
msg = sanitize(msg)
- mind.store_memory(msg)
+ if(mind)
+ mind.store_memory(msg)
+ else
+ src << "The game appears to have misplaced your mind datum, so we can't show you your notes."
/mob/proc/store_memory(msg as message, popup, sane = 1)
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 1f47c34168..eecd777685 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -4,13 +4,7 @@
for(var/obj/item/W in src)
if (W==src.w_uniform) // will be teared
continue
- src.u_equip(W)
- if (src.client)
- src.client.screen -= W
- if (W)
- W.loc = src.loc
- W.dropped(src)
- W.layer = initial(W.layer)
+ drop_from_slot(W)
src.update_clothing()
src.monkeyizing = 1
src.canmove = 0
@@ -58,15 +52,8 @@
/mob/living/carbon/AIize()
if (src.monkeyizing)
return
- for(var/obj/item/weapon/W in src)
- src.u_equip(W)
- if (src.client)
- src.client.screen -= W
- if (W)
- W.loc = src.loc
- W.dropped(src)
- W.layer = initial(W.layer)
- del(W)
+ for(var/obj/item/W in src)
+ drop_from_slot(W)
src.update_clothing()
src.monkeyizing = 1
src.canmove = 0
@@ -170,15 +157,8 @@
/mob/living/carbon/human/proc/Robotize()
if (src.monkeyizing)
return
- for(var/obj/item/weapon/W in src)
- src.u_equip(W)
- if (src.client)
- src.client.screen -= W
- if (W)
- W.loc = src.loc
- W.dropped(src)
- W.layer = initial(W.layer)
- del(W)
+ for(var/obj/item/W in src)
+ drop_from_slot(W)
src.update_clothing()
src.monkeyizing = 1
src.canmove = 0
@@ -235,14 +215,8 @@
/mob/living/carbon/human/proc/Alienize()
if (src.monkeyizing)
return
- for(var/obj/item/weapon/W in src)
- src.u_equip(W)
- if (src.client)
- src.client.screen -= W
- if (W)
- W.loc = src.loc
- W.dropped(src)
- W.layer = initial(W.layer)
+ for(var/obj/item/W in src)
+ drop_from_slot(W)
src.update_clothing()
src.monkeyizing = 1
src.canmove = 0
diff --git a/data/mode.txt b/data/mode.txt
index cf1ffd5c99..076bf8fa12 100644
--- a/data/mode.txt
+++ b/data/mode.txt
@@ -1 +1 @@
-extended
\ No newline at end of file
+traitor