From d29e3be8d4067d9947c720d18e631a5137e8e9fb Mon Sep 17 00:00:00 2001 From: "vageyenaman@gmail.com" Date: Thu, 29 Mar 2012 03:53:38 +0000 Subject: [PATCH] Removes poo. XSI and co. weren't very fond of it, and the last thing I would do is make them uncomfortable and challenge their leadership by keeping poo in. An experimental lagfix, which removes a couple THOUSAND unnecessary machines from the machine processing list. Please report any unresponsive machinery (as result of this commit) as HIGH PRIORITY issues. I'm not quite sure how much lag this will kill, but I'm confident that it will be at least slightly noticeable. More work on step_triggers. The escape shuttle should no longer blast things forever and give them infinite momentum. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3370 316c924e-a436-60f5-8080-3fe189b3f50e --- code/ATMOSPHERICS/atmospherics.dm | 1 - code/defines/obj/decal.dm | 58 ----- code/game/atom_procs.dm | 9 - code/game/machinery/Beacon.dm | 1 - code/game/machinery/atmo_control.dm | 1 - code/game/machinery/atmoalter/zvent.dm | 1 - .../embedded_controller_base.dm | 1 - code/game/machinery/machinery.dm | 11 +- code/game/machinery/magnet.dm | 2 - code/game/machinery/rechargestation.dm | 1 - code/game/step_triggers.dm | 6 +- code/modules/chemical/Chemistry-Reagents.dm | 1 - code/modules/chemical/Chemistry-Tools.dm | 2 - code/modules/mob/living/carbon/human/emote.dm | 214 ------------------ code/modules/mob/mob_defines.dm | 3 - sound/misc/poo2.ogg | Bin 9472 -> 0 bytes 16 files changed, 15 insertions(+), 297 deletions(-) delete mode 100644 sound/misc/poo2.ogg diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 439ca6562c3..fca51ad7ce2 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -25,7 +25,6 @@ obj/machinery/atmospherics process() build_network() - ..() proc network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 0d7ce8a0232..fb1b34d3c23 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -297,61 +297,3 @@ layer = 2 icon = 'tomatodecal.dmi' random_icon_states = list("smashed_pie") - - -/* April fools shit */ - -/obj/effect/decal/cleanable/urine - name = "urine" - desc = "It's yellow, and it smells." - density = 0 - anchored = 1 - layer = 2 - icon = 'AF.dmi' - icon_state = "urine1" - random_icon_states = list("urine1", "urine2", "urine3") - -/obj/effect/decal/cleanable/poo - name = "poo" - desc = "Aw man, what the FUCK." - density = 0 - anchored = 1 - layer = 2 - icon = 'AF.dmi' - icon_state = "splat1" - random_icon_states = list("splat1", "splat2", "splat3", "splat4", "splat5", "splat6", "splat7", "splat8") - var/dried = 0 - -/obj/effect/decal/cleanable/urine/New() - src.icon_state = pick(src.random_icon_states) - spawn(500) - del(src) - -/obj/effect/decal/cleanable/urine/HasEntered(AM as mob|obj) - if (istype(AM, /mob/living/carbon)) - var/mob/M = AM - if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes - if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) - - M.pulling = null - M << "\blue You slipped on the wet urine puddle!" - playsound(src.loc, 'slip.ogg', 50, 1, -3) - M.Stun(rand(1,8)) - M.Weaken(rand(1,5)) - -/obj/effect/decal/cleanable/poo/New() - src.icon_state = pick(src.random_icon_states) - spawn(300) - src.dried = 1 - -/obj/effect/decal/cleanable/poo/HasEntered(AM as mob|obj) - if (istype(AM, /mob/living/carbon) && src.dried == 0) - var/mob/M = AM - if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes - if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) - - M.pulling = null - M << "\blue You slipped on the wet poo stain!" - playsound(src.loc, 'slip.ogg', 50, 1, -3) - M.Stun(rand(1,8)) - M.Weaken(rand(1,5)) diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 36cc7a3c399..09629535ca3 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -252,15 +252,6 @@ this.viruses += newDisease newDisease.holder = this -/atom/proc/add_poo_floor() - if( istype(src, /turf)) - new /obj/effect/decal/cleanable/poo(src) - -/atom/proc/add_piss_floor() - if( istype(src, /turf)) - new /obj/effect/decal/cleanable/urine(src) - - // Only adds blood on the floor -- Skie /atom/proc/add_blood_floor(mob/living/carbon/M as mob) if( istype(M, /mob/living/carbon/monkey) ) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index f4f0476f51f..f4bf6cd673d 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -41,7 +41,6 @@ icon_state = "[state]" process() - ..() if(!Beacon) var/turf/T = loc Beacon = new /obj/item/device/radio/beacon diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index cbddc9c4fba..a0ad8686cbc 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -93,7 +93,6 @@ obj/machinery/computer/general_air_control process() ..() - src.updateDialog() attackby(I as obj, user as mob) diff --git a/code/game/machinery/atmoalter/zvent.dm b/code/game/machinery/atmoalter/zvent.dm index 5831e9d6a85..0cf390d8795 100644 --- a/code/game/machinery/atmoalter/zvent.dm +++ b/code/game/machinery/atmoalter/zvent.dm @@ -10,7 +10,6 @@ var/volume_rate = 800 /obj/machinery/zvent/process() - ..() //all this object does, is make its turf share air with the ones above and below it, if they have a vent too. if (istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index dae31678c80..5af17e377e9 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -62,7 +62,6 @@ obj/machinery/embedded_controller update_icon() src.updateDialog() - ..() radio var/frequency diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 49892a3331e..583c0f91e10 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -100,7 +100,16 @@ Class Procs: ..() /obj/machinery/process()//If you dont use process or power why are you here -// machines.Remove(src)Not going to do this till I test it a bit more + + /* + Big note: if do not call ..() in any machinery subtype process() call or it will + be removed from the list of machines to iterate. It is, however, okay to call ..() + if the machine has a parent process() call. For instance, machinery/atmosphereics has a + root process() call, so things like cryocells can call ..() and not worry about + it getting removed from machines. + */ + + machines.Remove(src) // uncommented by Doohl return /obj/machinery/emp_act(severity) diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index c874cb22734..46385e4686a 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -129,7 +129,6 @@ process() - ..() if(stat & NOPOWER) on = 0 @@ -238,7 +237,6 @@ process() - ..() if(magnets.len == 0 && autolink) for(var/obj/machinery/magnetic_module/M in world) if(M.freq == frequency && M.code == code) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 6c3924d25ec..8f3a9728063 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -16,7 +16,6 @@ build_icon() process() - ..() if(!(NOPOWER|BROKEN)) return diff --git a/code/game/step_triggers.dm b/code/game/step_triggers.dm index c7665e11f86..a42f8f2fd02 100644 --- a/code/game/step_triggers.dm +++ b/code/game/step_triggers.dm @@ -45,9 +45,13 @@ if(tiles) if(curtiles >= tiles) break + if(A.z != src.z) + break curtiles++ + sleep(speed) + // Calculate if we should stop the process if(!nostop) for(var/obj/step_trigger/T in get_step(A, direction)) @@ -63,7 +67,7 @@ if(!facedir) A.dir = predir - sleep(speed) + affecting.Remove(A) diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index 5dd96b84ac9..842362c5152 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -1649,7 +1649,6 @@ datum if(!M) M = holder.my_atom if(prob(50)) M:heal_organ_damage(1,0) M:nutrition += nutriment_factor // For hunger and fatness - M.poo += nutriment_factor / 10 // LOLE /* // If overeaten - vomit and fall down // Makes you feel bad but removes reagents and some effect diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 331bfdf6442..e6ce0f29b06 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -1481,7 +1481,6 @@ reagents.trans_to(M, gulp_size) playsound(M.loc,'drink.ogg', rand(10,50), 1) - M.urine += 0.25 return 1 else if( istype(M, /mob/living/carbon/human) ) @@ -1510,7 +1509,6 @@ R.add_reagent(refill, fillevel) playsound(M.loc,'drink.ogg', rand(10,50), 1) - M.urine += 0.25 return 1 return 0 diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 06c1a39b86f..3a7b6e0a675 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -457,218 +457,6 @@ if ("help") src << "blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough,\ncry, custom, deathgasp, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,\ngrin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,\nsigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,\nwink, yawn" - if ("fart") - if(isAprilFools()) - var/gtext = "his" - if(gender == FEMALE) - gtext = "her" - switch(rand(1, 48)) - if(1) - message = "[src] lets out a girly little 'toot' from [gtext] butt." - - if(2) - message = "[src] farts loudly!" - - if(3) - message = "[src] lets one rip!" - - if(4) - message = "[src] farts! It sounds wet and smells like rotten eggs." - - if(5) - message = "[src] farts robustly!" - - if(6) - message = "[src] farted! It reminds you of your grandmother's queefs." - - if(7) - message = "[src] queefed out [gtext] ass!" - - if(8) - message = "[src] farted! It reminds you of your grandmother's queefs." - - if(9) - message = "[src] farts a ten second long fart." - - if(10) - message = "[src] groans and moans, farting like the world depended on it." - - if(11) - message = "[src] breaks wind!" - - if(12) - message = "[src] expels intestinal gas through the anus." - - if(13) - message = "[src] release an audible discharge of intestinal gas." - - if(14) - message = "\red [src] is a farting motherfucker!!!" - - if(15) - message = "\red [src] suffers from flatulence!" - - if(16) - message = "[src] releases flatus." - - if(17) - message = "[src] releases gas generated in his digestive tract, [gtext] stomach and [gtext] intestines. \redIt stinks way bad!" - - if(18) - message = "[src] farts like your mom used to!" - - if(19) - message = "[src] farts. It smells like Soylent Surprise!" - - if(20) - message = "[src] farts. It smells like pizza!" - - if(21) - message = "[src] farts. It smells like George Melons' perfume!" - - if(22) - message = "[src] farts. It smells like atmos in here now!" - - if(23) - message = "[src] farts. It smells like medbay in here now!" - - if(24) - message = "[src] farts. It smells like the bridge in here now!" - - if(25) - message = "[src] farts like a pubby!" - - if(26) - message = "[src] farts like a goone!" - - if(27) - message = "[src] farts so hard poop came out with it, but dares not look." - - if(28) - message = "[src] farts delicately." - - if(29) - message = "[src] farts timidly." - - if(30) - message = "[src] farts very, very quietly. The stench is OVERPOWERING." - - if(31) - message = "[src] farts and says, \"Mmm! Delightful aroma!\"" - - if(32) - message = "[src] farts and says, \"Mmm! Sexy!\"" - - if(33) - message = "[src] farts and fondles [gtext] own buttocks." - - if(34) - message = "[src] farts and fondles YOUR buttocks." - - if(35) - message = "[src] fart in [gtext] own mouth. A shameful [src]." - - if(36) - message = "[src] farts out pure plasma! \redFUCK!" - - if(37) - message = "[src] farts out pure oxygen. What the fuck did he eat?" - - if(38) - message = "[src] breaks wind noisily!" - - if(39) - message = "[src] releases gas with the power of the gods! The very station trembles!!" - - if(40) - message = "[src] \red f \blue a \black r \red t \blue s \black !" - - if(41) - message = "[src] shat [gtext] pants!" - - if(42) - message = "[src] shat [gtext] pants! Oh, no, that was just a really nasty fart." - - if(43) - message = "[src] is a flatulent whore." - - if(44) - message = "[src] likes the smell of his own farts." - - if(45) - message = "[src] doesnt wipe after he poops." - - if(46) - message = "[src] farts! Now [gtext] ass smells like Uhangay." - - if(47) - message = "[src] farts so loud [gtext] buttocks causes a gravity well in the spacetime continuum!" - - if(48) - message = "[src] laughs and [gtext] breath smells like a fart." - playsound(src.loc, 'poo2.ogg', 50, 1) - - if("piss", "pee", "tinkle") - if(isAprilFools()) - if(src.urine < 3) - if(src.gender == MALE) - message = "[src] unzips his pants and waves his dick around." - else - message = "[src] lowers her pants and squats near the floor." - - else - if((locate(/obj/machinery/disposal/toilet) in src.loc) && (src.buckled != null) && (src.poo >= 3)) - for(var/obj/machinery/disposal/toilet/T in src.loc) - if(src.gender == MALE) - message = "\blue [src] unzips his pants and urinates in the toilet." - else - message = "\blue [src] lowers her pants, sits on the toilet and urinates." - src.urine -= 3 - else - var/shat_on_other = 0 - for(var/mob/living/M in src.loc) - if(M == src) - continue - message = "\red [src] pisses all over [M]!" - shat_on_other = 1 - break - if(!shat_on_other) - message = pick("[src] pisses on the floor.", "[src] pisses all over the floor!", "[src] unzips their pants and pisses all over the floor.") - src.urine -= 3 - src.loc.add_piss_floor(src) - - if("poo", "poop", "shit", "crap") - if(isAprilFools()) - if(src.poo < 3) - message = "[src] grunts for a moment. Nothing happens." - else - if((locate(/obj/machinery/disposal/toilet) in src.loc) && (src.buckled != null) && (src.poo >= 3)) - for(var/obj/machinery/disposal/toilet/T in src.loc) - message = pick("[src] unzips their pants and poops in the toilet.", "[src] farts out a steamer.", "\blue THHBBBBBBBBBBBBBT!") - playsound(src.loc, 'poo2.ogg', 50, 1) - src.poo -= 3 - else if(istype(src.wear_suit, /obj/item/clothing/suit)) - message = pick("[src] shits in their pants!", "[src] poos in their suit!", "\blue THHHHHHBBBBBBBBT!") - playsound(src.loc, 'poo2.ogg', 50, 1) - src.poo -= 3 - else if(istype(src.w_uniform, /obj/item/clothing/under)) - message = pick("[src] shits in their pants!", "[src] poos in their suit!", "\blue THHHHHHBBBBBBBBT!") - playsound(src.loc, 'poo2.ogg', 50, 1) - src.poo -= 3 - else - var/shat_on_other = 0 - for(var/mob/living/M in src.loc) - if(M == src) - continue - message = "\red [src] shits all over [M]!" - shat_on_other = 1 - break - if(!shat_on_other) - message = pick("[src] shits on the floor.", "[src] poops all over the floor!", "[src] squeezes out a turd.") - src.poo -= 3 - src.loc.add_poo_floor(src) - playsound(src.loc, 'poo2.ogg', 50, 1) - else src << "\blue Unusable emote '[act]'. Say *help for a list." @@ -680,5 +468,3 @@ else if (m_type & 2) for (var/mob/O in hearers(src.loc, null)) O.show_message(message, m_type) - else - src << "\blue Unusable emote '[act]'. Say *help for a list." diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 994e4b4633b..f6fa02d7abc 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -119,9 +119,6 @@ var/charges = 0.0 var/nutrition = 400.0//Carbon - var/poo = 0.0 // APRIL FOOLS - var/urine = 0.0 - var/overeatduration = 0 // How long this guy is overeating //Carbon var/paralysis = 0.0 var/stunned = 0.0 diff --git a/sound/misc/poo2.ogg b/sound/misc/poo2.ogg deleted file mode 100644 index b87daeaa058a8247635b90945ee867ff603e4f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9472 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 F_