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