From ad6a6e42aa8b6e691e018554aad5b59e69e4724f Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Thu, 14 Apr 2011 03:52:09 +0000 Subject: [PATCH] Penlight fits in medical belt. Fixed several runtime errors. Monkeys and aliens won't stack dozens of blood stains. Fixed crash in FEA code related to melting floors. When screwdrived destructive analyzer unlink from RD console protolate instead of itself. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1443 316c924e-a436-60f5-8080-3fe189b3f50e --- .../components/unary/cold_sink.dm | 2 +- code/FEA/FEA_fire.dm | 7 +- code/WorkInProgress/Chemistry-Reagents.dm | 138 ++++++------ code/WorkInProgress/Chemistry-Tools.dm | 2 +- .../recycling/sortingmachinery.dm | 12 +- code/datums/recipe.dm | 11 +- code/defines/obj/storage.dm | 4 +- code/game/gamemodes/changeling/changeling.dm | 2 +- .../gamemodes/changeling/changeling_powers.dm | 8 +- code/game/gamemodes/events.dm | 10 +- code/game/gamemodes/objective.dm | 2 +- code/game/machinery/camera.dm | 2 + code/game/machinery/microwave.dm | 4 +- code/game/machinery/vending.dm | 3 +- code/game/magic/cultist/runes.dm | 5 +- code/game/mecha/mech_fabricator.dm | 3 +- code/game/mecha/mecha.dm | 3 +- code/game/objects/closets/secure/personal.dm | 2 +- code/game/objects/devices/scanners.dm | 2 + code/game/objects/items/weapons/cards_ids.dm | 5 +- code/game/objects/tank.dm | 169 ++++++--------- code/game/objects/weapons.dm | 201 ++++++++---------- code/game/research/destructive_analyzer.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 18 +- code/modules/mob/dead/observer/observer.dm | 11 +- .../carbon/alien/humanoid/alien_powers.dm | 19 +- .../carbon/alien/humanoid/caste/drone.dm | 14 +- .../carbon/alien/humanoid/caste/hunter.dm | 14 +- .../carbon/alien/humanoid/caste/sentinel.dm | 14 +- .../living/carbon/alien/humanoid/humanoid.dm | 15 +- .../mob/living/carbon/alien/humanoid/queen.dm | 17 +- .../mob/living/carbon/alien/larva/larva.dm | 15 +- code/modules/mob/living/carbon/brain/brain.dm | 8 +- code/modules/mob/living/carbon/human/human.dm | 95 ++++----- .../mob/living/carbon/monkey/monkey.dm | 46 ++-- code/modules/mob/mob.dm | 21 +- code/modules/mob/transform_procs.dm | 40 +--- data/mode.txt | 2 +- 38 files changed, 427 insertions(+), 521 deletions(-) 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